_mm512_extloadunpacklo_epi64
Classification
KNC, Load, CPUID Test: KNCNI
Header File
Instruction
VLOADUNPACKLQ zmm, m512
Synopsis
_mm512_extloadunpacklo_epi64(__m512i src, void const * mt, _MM_UPCONV_EPI64_ENUM conv, int hint);
Description
Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
Operation
DEFINE UPCONVERT(addr, offset, convertTo) {
CASE conv OF
_MM_UPCONV_EPI64_NONE:
RETURN MEM[addr + 8*offset]
ESAC
}
DEFINE UPCONVERTSIZE(convertTo) {
CASE conv OF
_MM_UPCONV_EPI64_NONE:
RETURN 8
ESAC
}
dst[511:0] := src[511:0]
loadOffset := 0
upSize := UPCONVERTSIZE(conv)
addr := mt
FOR j := 0 to 7
i := j*64
dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
loadOffset := loadOffset + 1
IF (addr + loadOffset*upSize % 64) == 0
BREAK
FI
ENDFOR
dst[MAX:512] := 0