_mm512_mask_i32extscatter_epi32
Classification
KNC, Store, CPUID Test: KNCNI
Header File
Instruction
VPSCATTERDD m512 {k}, zmm
Synopsis
_mm512_mask_i32extscatter_epi32(void * base_addr, __mmask16 k, __m512i vindex, __m512i a, _MM_DOWNCONV_EPI32_ENUM conv, int scale, int hint);
Description
Down-converts 16 packed 32-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". Elements are written using writemask "k" (elements are only written when the corresponding mask bit is set; otherwise, elements are left unchanged in memory). "hint" indicates to the processor whether the data is non-temporal. AVX512 only supports _MM_DOWNCONV_EPI32_NONE.
Operation
FOR j := 0 to 15
i := j*32
m := j*32
addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
IF k[j]
CASE conv OF
_MM_DOWNCONV_EPI32_NONE: MEM[addr+31:addr] := a[i+31:i]
_MM_DOWNCONV_EPI32_UINT8: MEM[addr+ 7:addr] := Truncate8(a[i+31:i])
_MM_DOWNCONV_EPI32_SINT8: MEM[addr+ 7:addr] := Saturate8(a[i+31:i])
_MM_DOWNCONV_EPI32_UINT16: MEM[addr+15:addr] := Truncate16(a[i+31:i])
_MM_DOWNCONV_EPI32_SINT16: MEM[addr+15:addr] := Saturate16(a[i+15:i])
ESAC
FI
ENDFOR