_mm512_mask_extpackstorelo_pd
Classification
KNC, Store, CPUID Test: KNCNI
Header File
Instruction
VPACKSTORELPD m512 {k}, zmm
Synopsis
_mm512_mask_extpackstorelo_pd(void * mt, __mmask8 k, __m512d v1, _MM_DOWNCONV_PD_ENUM conv, int hint);
Description
Down-converts and stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address follwing "mt"). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
Operation
DEFINE DOWNCONVERT(element, convertTo) {
CASE convertTo OF
_MM_UPCONV_PD_NONE:
RETURN element[63:0]
ESAC
}
DEFINE DOWNCONVERTSIZE(convertTo) {
CASE convertTo OF
_MM_UPCONV_PD_NONE:
RETURN 8
ESAC
}
storeOffset := 0
downSize := DOWNCONVERTSIZE(conv)
addr := mt
FOR j := 0 to 7
IF k[j]
i := j*63
tmp := DOWNCONVERT(v1[i+63:i], conv)
storeAddr := addr + storeOffset * downSize
CASE downSize OF
8: MEM[storeAddr] := tmp[63:0]
ESAC
storeOffset := storeOffset + 1
IF ((addr + storeOffset * downSize) % 64) == 0
BREAK
FI
FI
ENDFOR
dst[MAX:512] := 0