KUNPCKBW, KUNPCKWD, KUNPCKDQ
Unpack for Mask Registers
stableVMJITAOTinstruction
Encodings
| Opcode | Instruction | Op/En | 64-bit | Compat/Legacy | Description |
|---|---|---|---|---|---|
VEX.L1.66.0F.W0 4B /r | KUNPCKBW k1, k2, k3 | RVR | Valid | Valid | Unpack 8-bit masks in k2 and k3 and write word result in k1. OR AVX10.1 |
VEX.L1.0F.W0 4B /r | KUNPCKWD k1, k2, k3 | RVR | Valid | Valid | Unpack 16-bit masks in k2 and k3 and write doubleword result OR AVX10.1 in k1. |
VEX.L1.0F.W1 4B /r | KUNPCKDQ k1, k2, k3 | RVR | Valid | Valid | Unpack 32-bit masks in k2 and k3 and write quadword result in OR AVX10.1 k1. |
Operand encoding
Each mode is a value of the Op/En column above. It says which field of the encoded instruction carries each operand, in the order they are written, and whether the instruction reads it, writes it or both.
RVR
modrm.regescrituraModRM byte, reg field (bits 5-3)vex.vvvvlecturaVEX prefix, vvvv field (inverted)modrm.rmlecturaModRM byte, r/m field (bits 2-0); with the SIB byte and the displacement when the mod field asks for them
Measured cost
Loading measurements from arch-data...
Description
Unpacks the lower 8/16/32 bits of the second and third operands (source operands) into the low part of the first operand (destination operand), starting from the low bytes. The result is zero-extended in the destination.
Operation
KUNPCKBW
DEST[7:0] := SRC2[7:0]
DEST[15:8] := SRC1[7:0]
DEST[MAX_KL-1:16] := 0
KUNPCKWD
DEST[15:0] := SRC2[15:0]
DEST[31:16] := SRC1[15:0]
DEST[MAX_KL-1:32] := 0
KUNPCKDQ
DEST[31:0] := SRC2[31:0]
DEST[63:32] := SRC1[31:0]
DEST[MAX_KL-1:64] := 0Intel C/C++ compiler intrinsics
KUNPCKBW __mmask16 _mm512_kunpackb(__mmask16 a, __mmask16 b);
KUNPCKDQ __mmask64 _mm512_kunpackd(__mmask64 a, __mmask64 b);
KUNPCKWD __mmask32 _mm512_kunpackw(__mmask32 a, __mmask32 b);Flags affected
None.
SIMD Floating-Point Exceptions
None.
Other Exceptions
See Table 2-65, "TYPE K20 Exception Definition (VEX-Encoded OpMask Instructions w/o Memory Arg)."