_mm512_extloadunpackhi_pd
Classification
KNC, Load, CPUID Test: KNCNI
Header File
immintrin.h
Instruction
VLOADUNPACKHPD zmm, m512
Synopsis
 _mm512_extloadunpackhi_pd(__m512d src, void const * mt, _MM_UPCONV_PD_ENUM conv, int hint);
Description
Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed double-precision (64-bit) floating-point values in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) 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_PD_NONE:
		RETURN MEM[addr + 8*offset]
	ESAC
}
DEFINE UPCONVERTSIZE(convertTo) {
	CASE conv OF
	_MM_UPCONV_PD_NONE:
		RETURN 8
	ESAC
}
dst[511:0] := src[511:0]
loadOffset := 0
foundNext64BytesBoundary := false
upSize := UPCONVERTSIZE(conv)
addr := mt-64
FOR j := 0 to 7
	IF foundNext64BytesBoundary == false
		IF (addr + (loadOffset + 1)*upSize) % 64 == 0
			foundNext64BytesBoundary := true
		FI
	ELSE
		i := j*64
		dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
	FI
	loadOffset := loadOffset + 1
ENDFOR
dst[MAX:512] := 0