_mm512_extload_ps
Classification
KNC, Load, CPUID Test: KNCNI
Header File
Instruction
VMOVAPS zmm, m512
Synopsis
_mm512_extload_ps(void const * mt, _MM_UPCONV_PS_ENUM conv, _MM_BROADCAST32_ENUM bc, int hint);
Description
Depending on "bc", loads 1, 4, or 16 elements of type and size determined by "conv" from memory address "mt" and converts all elements to single-precision (32-bit) floating-point elements, storing the results in "dst". "hint" indicates to the processor whether the data is non-temporal.
Operation
addr := MEM[mt]
FOR j := 0 to 15
i := j*32
CASE bc OF
_MM_BROADCAST32_NONE:
CASE conv OF
_MM_UPCONV_PS_NONE:
n := j*32
dst[i+31:i] := addr[n+31:n]
_MM_UPCONV_PS_FLOAT16:
n := j*16
dst[i+31:i] := Convert_FP16_To_FP32(addr[n+15:n])
_MM_UPCONV_PS_UINT8:
n := j*8
dst[i+31:i] := Convert_UInt8_To_FP32(addr[n+7:n])
_MM_UPCONV_PS_SINT8:
n := j*8
dst[i+31:i] := Convert_Int8_To_FP32(addr[n+7:n])
_MM_UPCONV_PS_UINT16:
n := j*16
dst[i+31:i] := Convert_UInt16_To_FP32(addr[n+15:n])
_MM_UPCONV_PS_SINT16:
n := j*16
dst[i+31:i] := Convert_Int16_To_FP32(addr[n+15:n])
ESAC
_MM_BROADCAST_1X16:
CASE conv OF
_MM_UPCONV_PS_NONE:
n := j*32
dst[i+31:i] := addr[31:0]
_MM_UPCONV_PS_FLOAT16:
n := j*16
dst[i+31:i] := Convert_FP16_To_FP32(addr[15:0])
_MM_UPCONV_PS_UINT8:
n := j*8
dst[i+31:i] := Convert_UInt8_To_FP32(addr[7:0])
_MM_UPCONV_PS_SINT8:
n := j*8
dst[i+31:i] := Convert_Int8_To_FP32(addr[7:0])
_MM_UPCONV_PS_UINT16:
n := j*16
dst[i+31:i] := Convert_UInt16_To_FP32(addr[15:0])
_MM_UPCONV_PS_SINT16:
n := j*16
dst[i+31:i] := Convert_Int16_To_FP32(addr[15:0])
ESAC
_MM_BROADCAST_4X16:
mod := j%4
CASE conv OF
_MM_UPCONV_PS_NONE:
n := mod*32
dst[i+31:i] := addr[n+31:n]
_MM_UPCONV_PS_FLOAT16:
n := mod*16
dst[i+31:i] := Convert_FP16_To_FP32(addr[n+15:n])
_MM_UPCONV_PS_UINT8:
n := mod*8
dst[i+31:i] := Convert_UInt8_To_FP32(addr[n+7:n])
_MM_UPCONV_PS_SINT8:
n := mod*8
dst[i+31:i] := Convert_Int8_To_FP32(addr[n+7:n])
_MM_UPCONV_PS_UINT16:
n := mod*16
dst[i+31:i] := Convert_UInt16_To_FP32(addr[n+15:n])
_MM_UPCONV_PS_SINT16:
n := mod*16
dst[i+31:i] := Convert_Int16_To_FP32(addr[n+15:n])
ESAC
ESAC
ENDFOR
dst[MAX:512] := 0