_mm512_extloadunpacklo_ps
Classification
KNC, Load, CPUID Test: KNCNI
Header File
immintrin.h
Instruction
VLOADUNPACKLPS zmm, m512
Synopsis
 _mm512_extloadunpacklo_ps(__m512 src, void const * mt, _MM_UPCONV_PS_ENUM conv, int hint);
Description
Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords 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_PS_NONE:
		RETURN MEM[addr + 4*offset]
	_MM_UPCONV_PS_FLOAT16:
		RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
	_MM_UPCONV_PS_UINT8:
		RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
	_MM_UPCONV_PS_SINT8:
		RETURN Convert_Int8_To_FP32(MEM[addr + offset])
	_MM_UPCONV_PS_UINT16:
		RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
	_MM_UPCONV_PS_SINT16:
		RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
	ESAC
}
DEFINE UPCONVERT(addr, offset, convertTo) {
	CASE conv OF
	_MM_UPCONV_PS_NONE:
		RETURN MEM[addr + 4*offset]
	_MM_UPCONV_PS_FLOAT16:
		RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
	_MM_UPCONV_PS_UINT8:
		RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
	_MM_UPCONV_PS_SINT8:
		RETURN Convert_Int8_To_FP32(MEM[addr + offset])
	_MM_UPCONV_PS_UINT16:
		RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
	_MM_UPCONV_PS_SINT16:
		RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
	ESAC
}
dst[511:0] := src[511:0]
loadOffset := 0
upSize := UPCONVERTSIZE(conv)
addr := MEM[mt]
FOR j := 0 to 15
	i := j*32
	dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
	loadOffset := loadOffset + 1
	IF (mt + loadOffset * upSize) % 64 == 0
		BREAK
	FI
ENDFOR
dst[MAX:512] := 0