PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ, PUNPCKLQDQ

Unpack Low Data

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NP 0F 60 /r1PUNPCKLBW mm, mm/m32AValidoValidoInterleave bytes de baja orden de mm y mm/m32 en mm.
66 0F 60 /rPUNPCKLBW xmm1, xmm2/m128AValidoValidoInterleave bytes de baja orden de xmm1 y xmm2/m128 en xmm1.
NP 0F 61 /r1PUNPCKLWD mm, mm/m32AValidoValidoInterlear palabras de orden bajo de mm y mm/m32 en mm.
66 0F 61 /rPUNPCKLWD xmm1, xmm2/m128AValidoValidoInterleave palabras de orden bajo de xmm1 y xmm2/m128 en xmm1.
NP 0F 62 /r1PUNPCKLDQ mm, mm/m32AValidoValidoInterleave palabras dobles de baja orden de mm y mm/m32 en mm.
66 0F 62 /rPUNPCKLDQ xmm1, xmm2/m128AValidoValidoInterleave palabras dobles de orden bajo de xmm1 y xmm2/m128 en xmm1.
66 0F 6C /rPUNPCKLQDQ xmm1, xmm2/m128AValidoValidoInterleave baja-orden quadword de xmm1 y xmm2/m128 en el registro xmm1.
VEX.128.66.0F.WIG 60/rVPUNPCKLBW xmm1,xmm2, xmm3/m128BValidoValidoInterleave bytes de baja orden de xmm2 y xmm3/m128 en xmm1.
VEX.128.66.0F.WIG 61/rVPUNPCKLWD xmm1,xmm2, xmm3/m128BValidoValidoInterleave palabras de orden bajo de xmm2 y xmm3/m128 en xmm1.
VEX.128.66.0F.WIG 62/rVPUNPCKLDQ xmm1, xmm2, xmm3/m128BValidoValidoInterleave palabras dobles de orden bajo de xmm2 y xmm3/m128 en xmm1.
VEX.128.66.0F.WIG 6C/rVPUNPCKLQDQ xmm1, xmm2, xmm3/m128BValidoValidoInterleave baja-orden quadword de xmm2 y xmm3/m128 en el registro xmm1.
VEX.256.66.0F.WIG 60 /rVPUNPCKLBW ymm1, ymm2, ymm3/m256BValidoValidoInterleave bytes de baja orden de ymm2 y ymm3/m256 en el registro ymm1.
VEX.256.66.0F.WIG 61 /rVPUNPCKLWD ymm1, ymm2, ymm3/m256BValidoValidoInterleave palabras de orden bajo de ymm2 y ymm3/m256 en el registro ymm1.
VEX.256.66.0F.WIG 62 /rVPUNPCKLDQ ymm1, ymm2, ymm3/m256BValidoValidoInterleave doublewords de orden bajo de ymm2 y ymm3/m256 en el registro ymm1.
VEX.256.66.0F.WIG 6C /rVPUNPCKLQDQ ymm1, ymm2, ymm3/m256BValidoValidoInterleave baja-orden quadword de ymm2 y ymm3/m256 en el registro ymm1.
EVEX.128.66.0F.WIG 60 /rVPUNPCKLBW xmm1 {k1}{z}, xmm2, xmm3/m128CValidoValidoInterleave bytes de bajo ordenxmm2yAVX512BWOxmm3/m128enxmm1registro sujeto aAVX10.1escribir máscarak1.
EVEX.128.66.0F.WIG 61 /rVPUNPCKLWD xmm1 {k1}{z}, xmm2, xmm3/m128CValidoValidoInterleave palabras de orden bajo de xmm2 y AVX512BW) OR xmm3/m128 en xmm1 registro sujeto a AVX10.1 escritura máscara k1.
EVEX.128.66.0F.W0 62 /rVPUNPCKLDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcstDValidoValidoInterleave palabras dobles de orden bajo dexmm2 AVX512F) OR andxmm3/m128/m32bcst enxmm1 AVX10.1registro sujeto a escribir máscarak1.
EVEX.128.66.0F.W1 6C /rVPUNPCKLQDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst Opcode/ Op Instruction EnDValidoValidoInterleave baja orden de cuadrícula dezmm2 AVX512F) OR andzmm3/m512/m64bcst enzmm1 AVX10.1registro sujeto a escribir máscarak1. / 64/32 bitCPUIDCaracterística Descripción Modo Soporte Bandera
EVEX.256.66.0F.WIG 60 /rVPUNPCKLBW ymm1 {k1}{z}, ymm2, ymm3/m256CValidoValidoInterleave bytes de bajo ordenymm2yAVX512BWOymm3/m256enymm1registro sujeto aAVX10.1escribir máscarak1.
EVEX.256.66.0F.WIG 61 /rVPUNPCKLWD ymm1 {k1}{z}, ymm2, ymm3/m256CValidoValidoInterleave palabras de orden bajo de ymm2 y AVX512BW) OR ymm3/m256 en ymm1 registro sujeto a AVX10.1 escritura máscara k1.
EVEX.256.66.0F.W0 62 /rVPUNPCKLDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcstDValidoValidoInterleave palabras dobles de orden bajo deymm2 AVX512F) OR andymm3/m256/m32bcst enymm1 AVX10.1registro sujeto a escribir máscarak1.
EVEX.256.66.0F.W1 6C /rVPUNPCKLQDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcstDValidoValidoInterleave baja orden de cuadrícula deymm2 AVX512F) OR andymm3/m256/m64bcst enymm1 AVX10.1registro sujeto a escribir máscarak1.
EVEX.512.66.0F.WIG 60/rVPUNPCKLBW zmm1 {k1}{z}, zmm2, zmm3/m512CValidoValidoInterleave bytes de baja orden de zmm2 y OR AVX10.1 zmm3/m512 en zmm1 registro sujeto a escribir máscara k1.
EVEX.512.66.0F.WIG 61/rVPUNPCKLWD zmm1 {k1}{z}, zmm2, zmm3/m512CValidoValidoInterleave palabras de orden bajo de zmm2 y OR AVX10.1 zmm3/m512 en zmm1 registro sujeto a escribir máscara k1.
EVEX.512.66.0F.W0 62 /rVPUNPCKLDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcstDValidoValidoInterleave palabras dobles de orden bajo de zmm2 OR AVX10.1 y zmm3/m512/m32bcst en zmm1 registro sujeto a escribir máscara k1.
EVEX.512.66.0F.W1 6C /rVPUNPCKLQDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcstDValidoValidoInterleave palabra de baja orden de zmm2 OR AVX10.1 y zmm3/m512/m64bcst en zmm1 registro sujeto a escribir máscara k1.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

A

  1. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

B

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. vex.vvvv lecturaprefijo VEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

C

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. evex.vvvv lecturaprefijo EVEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Tupla: Full Mem

D

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. evex.vvvv lecturaprefijo EVEX, campo vvvv (invertido)
  3. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Tupla: Full

Coste medido

Cargando las mediciones de arch-data...

Descripción

Desempaqueta y entrelaza los elementos de datos de bajo orden (bytes, palabras, palabras dobles y cuádwords) del operando de destino (primer operando) y operando de origen (segundo operando) en el operando de destino. (Figura 4-22 muestra la operación de unpack para bytes en operandos de 64 bits). Se ignoran los elementos de datos de alto orden.

SRC Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0 DEST

DEST Y3 X3 Y2 X2 Y1 X1 Y0 X0

Figura 4-22. PUNPCKLBW Instruction Operation Using 64-bit operandos

255 31 0 255 31 0

SRC Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0

     255                                                        0

DEST Y5 X5 Y4 X4 Y1 X1 Y0 X0

Figure 4-23. 256-bit VPUNPCKLDQ Instruction Operation

Cuando los datos de origen provienen de un operando de memoria de 128 bits, una implementación puede buscar sólo los 64 bits apropiados; sin embargo, la alineación a un límite de 16 bytes y la comprobación normal del segmento seguirá siendo aplicada.

El (V)PUNPCKLBWla instrucción entrelaza los bytes de bajo orden de la fuente yoperandos de destino, el (V)PUNPCKLWDla instrucción entrelazan las palabras de orden bajo de la fuente yoperandos de destino, el (V)PUNP- CKLDQla instrucción entrelaza la palabra doble (o las palabras dobles) de la fuente yoperandos de destino, y el (V)PUNPCKLQDQla instrucción entrelaza las cuádwords de bajo orden de la fuente yoperandos de destino.

Estas instrucciones se pueden utilizar para convertir bytes a palabras, palabras a palabras dobles, palabras dobles a cuádwords, y cuádwords a cuádwords dobles, respectivamente, colocando todos los 0s en el operando de origen. Aquí, si el operando de origen contiene todos los 0s, el resultado (establecido en el operando de destino) contiene extensiones cero de los elementos de datos de alto orden del valor original en el operando de destino. Por ejemplo, con la instrucción (V)PUNPCKLBW los bytes de alto orden son cero extendidos (es decir, desempaquetados en enteros de palabras sin firma), y con la instrucción (V)PUNPCKLWD, las palabras de alto orden son cero extendidas (sin empaquetar en enteros de doble palabra sin firma).

En modo de 64 bits y no codificado con VEX/EVEX, utilizando un prefijo REX en forma de REX.R permite esta instrucción para acceder a registros adicionales (XMM8-XMM15).

Legacy SSE versiones 64-bit operando: El operando de origen puede ser un registro de tecnología MMX o una ubicación de memoria de 32 bits. El operando de destino es un registro de tecnología MMX.

128-bit Legacy SSE versiones: El segundo operando de origen es un registro XMM o una ubicación de memoria de 128 bits. El primer operando de origen y operandos de destino son registros XMM. Bits (MAXVL-1:128) del correspondiente registro de destino YMM no se modifican.

VEX.128 versiones codificadas: El segundo operando de origen es un registro XMM o una ubicación de memoria de 128 bits. El primer operando de origen y operandos de destino son registros XMM. Bits (MAXVL-1:128) del destino YMM registro se ponen a cero.

VEX.256 versión codificada: El segundo operando de origen es un registro YMM o una ubicación de memoria de 256 bits. El primer operando de origen y operandos de destino son registros YMM. Bits (MAXVL-1:256) del registro ZMM correspondiente se ponen a cero.

EVEX codificado VPUNPCKLDQ/QDQ: El segundo operando de origen es un registro ZMM/YMM/XMM, un 512/256/128-bit ubicación de memoria o un vector 512/256/128-bit transmitido desde una ubicación de memoria de 32/64-bit. La primera fuente

operando y operandos de destino son los registros ZMM/YMM/XMM. El destino está actualizado condicionalmente con máscara de escritura k1.

EVEX codificado VPUNPCKLWD/BW: El segundo operando de origen es un registro ZMM/YMM/XMM, un 512/256/128-bit ubicación de memoria. El primer operando de origen y operandos de destino son los registros ZMM/YMM/XMM. El destino está actualizado condicionalmente con máscara de escritura k1.

Operación

PUNPCKLBW Instruction With 64-bit Operands:
    DEST[63:56] := SRC[31:24];
    DEST[55:48] := DEST[31:24];
    DEST[47:40] := SRC[23:16];
    DEST[39:32] := DEST[23:16];
    DEST[31:24] := SRC[15:8];
    DEST[23:16] := DEST[15:8];
    DEST[15:8] := SRC[7:0];
    DEST[7:0] := DEST[7:0];

PUNPCKLWD Instruction With 64-bit Operands:
    DEST[63:48] := SRC[31:16];
    DEST[47:32] := DEST[31:16];
    DEST[31:16] := SRC[15:0];
    DEST[15:0] := DEST[15:0];

PUNPCKLDQ Instruction With 64-bit Operands:
    DEST[63:32] := SRC[31:0];
    DEST[31:0] := DEST[31:0];

INTERLEAVE_BYTES_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_BYTES_256b(SRC1[255:0], SRC[255:0])
TMP_DEST[511:256] := INTERLEAVE_BYTES_256b(SRC1[511:256], SRC[511:256])

INTERLEAVE_BYTES_256b (SRC1, SRC2)
DEST[7:0] := SRC1[7:0]
DEST[15:8] := SRC2[7:0]
DEST[23:16] := SRC1[15:8]
DEST[31:24] := SRC2[15:8]
DEST[39:32] := SRC1[23:16]
DEST[47:40] := SRC2[23:16]
DEST[55:48] := SRC1[31:24]
DEST[63:56] := SRC2[31:24]
DEST[71:64] := SRC1[39:32]
DEST[79:72] := SRC2[39:32]
DEST[87:80] := SRC1[47:40]
DEST[95:88] := SRC2[47:40]
DEST[103:96] := SRC1[55:48]
DEST[111:104] := SRC2[55:48]
DEST[119:112] := SRC1[63:56]
DEST[127:120] := SRC2[63:56]
DEST[135:128] := SRC1[135:128]
DEST[143:136] := SRC2[135:128]
DEST[151:144] := SRC1[143:136]
DEST[159:152] := SRC2[143:136]
DEST[167:160] := SRC1[151:144]
DEST[175:168] := SRC2[151:144]


DEST[183:176] := SRC1[159:152]
DEST[191:184] := SRC2[159:152]
DEST[199:192] := SRC1[167:160]
DEST[207:200] := SRC2[167:160]
DEST[215:208] := SRC1[175:168]
DEST[223:216] := SRC2[175:168]
DEST[231:224] := SRC1[183:176]
DEST[239:232] := SRC2[183:176]
DEST[247:240] := SRC1[191:184]
DEST[255:248] := SRC2[191:184]

INTERLEAVE_BYTES (SRC1, SRC2)
DEST[7:0] := SRC1[7:0]
DEST[15:8] := SRC2[7:0]
DEST[23:16] := SRC1[15:8]
DEST[31:24] := SRC2[15:8]
DEST[39:32] := SRC1[23:16]
DEST[47:40] := SRC2[23:16]
DEST[55:48] := SRC1[31:24]
DEST[63:56] := SRC2[31:24]
DEST[71:64] := SRC1[39:32]
DEST[79:72] := SRC2[39:32]
DEST[87:80] := SRC1[47:40]
DEST[95:88] := SRC2[47:40]
DEST[103:96] := SRC1[55:48]
DEST[111:104] := SRC2[55:48]
DEST[119:112] := SRC1[63:56]
DEST[127:120] := SRC2[63:56]

INTERLEAVE_WORDS_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_WORDS_256b(SRC1[255:0], SRC[255:0])
TMP_DEST[511:256] := INTERLEAVE_WORDS_256b(SRC1[511:256], SRC[511:256])

INTERLEAVE_WORDS_256b(SRC1, SRC2)
DEST[15:0] := SRC1[15:0]
DEST[31:16] := SRC2[15:0]
DEST[47:32] := SRC1[31:16]
DEST[63:48] := SRC2[31:16]
DEST[79:64] := SRC1[47:32]
DEST[95:80] := SRC2[47:32]
DEST[111:96] := SRC1[63:48]
DEST[127:112] := SRC2[63:48]
DEST[143:128] := SRC1[143:128]
DEST[159:144] := SRC2[143:128]
DEST[175:160] := SRC1[159:144]
DEST[191:176] := SRC2[159:144]
DEST[207:192] := SRC1[175:160]
DEST[223:208] := SRC2[175:160]
DEST[239:224] := SRC1[191:176]
DEST[255:240] := SRC2[191:176]

INTERLEAVE_WORDS (SRC1, SRC2)
DEST[15:0] := SRC1[15:0]
DEST[31:16] := SRC2[15:0]


DEST[47:32] := SRC1[31:16]
DEST[63:48] := SRC2[31:16]
DEST[79:64] := SRC1[47:32]
DEST[95:80] := SRC2[47:32]
DEST[111:96] := SRC1[63:48]
DEST[127:112] := SRC2[63:48]

INTERLEAVE_DWORDS_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_DWORDS_256b(SRC1[255:0], SRC2[255:0])
TMP_DEST[511:256] := INTERLEAVE_DWORDS_256b(SRC1[511:256], SRC2[511:256])

INTERLEAVE_DWORDS_256b(SRC1, SRC2)
DEST[31:0] := SRC1[31:0]
DEST[63:32] := SRC2[31:0]
DEST[95:64] := SRC1[63:32]
DEST[127:96] := SRC2[63:32]
DEST[159:128] := SRC1[159:128]
DEST[191:160] := SRC2[159:128]
DEST[223:192] := SRC1[191:160]
DEST[255:224] := SRC2[191:160]

INTERLEAVE_DWORDS(SRC1, SRC2)
DEST[31:0] := SRC1[31:0]
DEST[63:32] := SRC2[31:0]
DEST[95:64] := SRC1[63:32]
DEST[127:96] := SRC2[63:32]
INTERLEAVE_QWORDS_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_QWORDS_256b(SRC1[255:0], SRC2[255:0])
TMP_DEST[511:256] := INTERLEAVE_QWORDS_256b(SRC1[511:256], SRC2[511:256])

INTERLEAVE_QWORDS_256b(SRC1, SRC2)
DEST[63:0] := SRC1[63:0]
DEST[127:64] := SRC2[63:0]
DEST[191:128] := SRC1[191:128]
DEST[255:192] := SRC2[191:128]

INTERLEAVE_QWORDS(SRC1, SRC2)
DEST[63:0] := SRC1[63:0]
DEST[127:64] := SRC2[63:0]

PUNPCKLBW
DEST[127:0] := INTERLEAVE_BYTES(DEST, SRC)
DEST[255:127] (Unmodified)

VPUNPCKLBW (VEX.128 Encoded Instruction)
DEST[127:0] := INTERLEAVE_BYTES(SRC1, SRC2)
DEST[MAXVL-1:127] := 0

VPUNPCKLBW (VEX.256 Encoded Instruction)
DEST[255:0] := INTERLEAVE_BYTES_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0


VPUNPCKLBW (EVEX.512 Encoded Instruction)
(KL, VL) = (16, 128), (32, 256), (64, 512)
IF VL = 128

    TMP_DEST[VL-1:0] := INTERLEAVE_BYTES(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 256

    TMP_DEST[VL-1:0] := INTERLEAVE_BYTES_256b(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 512

    TMP_DEST[VL-1:0] := INTERLEAVE_BYTES_512b(SRC1[VL-1:0], SRC2[VL-1:0])
FI;

FOR j := 0 TO KL-1

i := j * 8

IF k1[j] OR *no writemask*

     THEN DEST[i+7:i] := TMP_DEST[i+7:i]

     ELSE

            IF *merging-masking*             ; merging-masking

                THEN *DEST[i+7:i] remains unchanged*

                ELSE *zeroing-masking*       ; zeroing-masking

                    DEST[i+7:i] := 0

            FI

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0

DEST[511:0] := INTERLEAVE_BYTES_512b(SRC1, SRC2)

PUNPCKLWD
DEST[127:0] := INTERLEAVE_WORDS(DEST, SRC)
DEST[255:127] (Unmodified)

VPUNPCKLWD (VEX.128 Encoded Instruction)
DEST[127:0] := INTERLEAVE_WORDS(SRC1, SRC2)
DEST[MAXVL-1:127] := 0

VPUNPCKLWD (VEX.256 Encoded Instruction)
DEST[255:0] := INTERLEAVE_WORDS_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0

VPUNPCKLWD (EVEX.512 Encoded Instruction)
(KL, VL) = (8, 128), (16, 256), (32, 512)
IF VL = 128

    TMP_DEST[VL-1:0] := INTERLEAVE_WORDS(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 256

    TMP_DEST[VL-1:0] := INTERLEAVE_WORDS_256b(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 512

    TMP_DEST[VL-1:0] := INTERLEAVE_WORDS_512b(SRC1[VL-1:0], SRC2[VL-1:0])
FI;

FOR j := 0 TO KL-1
    i := j * 16
    IF k1[j] OR *no writemask*


     THEN DEST[i+15:i] := TMP_DEST[i+15:i]

     ELSE

             IF *merging-masking*            ; merging-masking

                 THEN *DEST[i+15:i] remains unchanged*

                 ELSE *zeroing-masking*       ; zeroing-masking

                    DEST[i+15:i] := 0

             FI

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0

DEST[511:0] := INTERLEAVE_WORDS_512b(SRC1, SRC2)

PUNPCKLDQ
DEST[127:0] := INTERLEAVE_DWORDS(DEST, SRC)
DEST[MAXVL-1:128] (Unmodified)

VPUNPCKLDQ (VEX.128 Encoded Instruction)
DEST[127:0] := INTERLEAVE_DWORDS(SRC1, SRC2)
DEST[MAXVL-1:128] := 0

VPUNPCKLDQ (VEX.256 Encoded Instruction)
DEST[255:0] := INTERLEAVE_DWORDS_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0

VPUNPCKLDQ (EVEX Encoded Instructions)
(KL, VL) = (4, 128), (8, 256), (16, 512)
FOR j := 0 TO KL-1

    i := j * 32
    IF (EVEX.b = 1) AND (SRC2 *is memory*)

          THEN TMP_SRC2[i+31:i] := SRC2[31:0]
          ELSE TMP_SRC2[i+31:i] := SRC2[i+31:i]
    FI;
ENDFOR;
IF VL = 128
    TMP_DEST[VL-1:0] := INTERLEAVE_DWORDS(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 256
    TMP_DEST[VL-1:0] := INTERLEAVE_DWORDS_256b(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 512
    TMP_DEST[VL-1:0] := INTERLEAVE_DWORDS_512b(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;

FOR j := 0 TO KL-1

i := j * 32

IF k1[j] OR *no writemask*

     THEN DEST[i+31:i] := TMP_DEST[i+31:i]

     ELSE

             IF *merging-masking*            ; merging-masking

                 THEN *DEST[i+31:i] remains unchanged*

                 ELSE *zeroing-masking*       ; zeroing-masking

                    DEST[i+31:i] := 0

             FI

FI;


ENDFOR
DEST511:0] := INTERLEAVE_DWORDS_512b(SRC1, SRC2)
DEST[MAXVL-1:VL] := 0

PUNPCKLQDQ
DEST[127:0] := INTERLEAVE_QWORDS(DEST, SRC)
DEST[MAXVL-1:128] (Unmodified)

VPUNPCKLQDQ (VEX.128 Encoded Instruction)
DEST[127:0] := INTERLEAVE_QWORDS(SRC1, SRC2)
DEST[MAXVL-1:128] := 0

VPUNPCKLQDQ (VEX.256 Encoded Instruction)
DEST[255:0] := INTERLEAVE_QWORDS_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0

VPUNPCKLQDQ (EVEX Encoded Instructions)
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1

    i := j * 64
    IF (EVEX.b = 1) AND (SRC2 *is memory*)

          THEN TMP_SRC2[i+63:i] := SRC2[63:0]
          ELSE TMP_SRC2[i+63:i] := SRC2[i+63:i]
    FI;
ENDFOR;
IF VL = 128
    TMP_DEST[VL-1:0] := INTERLEAVE_QWORDS(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 256
    TMP_DEST[VL-1:0] := INTERLEAVE_QWORDS_256b(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 512
    TMP_DEST[VL-1:0] := INTERLEAVE_QWORDS_512b(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;

FOR j := 0 TO KL-1

i := j * 64

IF k1[j] OR *no writemask*

     THEN DEST[i+63:i] := TMP_DEST[i+63:i]

     ELSE

             IF *merging-masking*            ; merging-masking

                 THEN *DEST[i+63:i] remains unchanged*

                 ELSE *zeroing-masking*       ; zeroing-masking

                    DEST[i+63:i] := 0

             FI

FI;

ENDFOR

DEST[MAXVL-1:VL] := 0

Intel C/C++ compilador intrínseco

VPUNPCKLBW __m512i _mm512_unpacklo_epi8(__m512i a, __m512i b);
VPUNPCKLBW __m512i _mm512_mask_unpacklo_epi8(__m512i s, __mmask64 k, __m512i a, __m512i b);
VPUNPCKLBW __m512i _mm512_maskz_unpacklo_epi8( __mmask64 k, __m512i a, __m512i b);
VPUNPCKLBW __m256i _mm256_mask_unpacklo_epi8(__m256i s, __mmask32 k, __m256i a, __m256i b);
VPUNPCKLBW __m256i _mm256_maskz_unpacklo_epi8( __mmask32 k, __m256i a, __m256i b);
VPUNPCKLBW __m128i _mm_mask_unpacklo_epi8(v s, __mmask16 k, __m128i a, __m128i b);
VPUNPCKLBW __m128i _mm_maskz_unpacklo_epi8( __mmask16 k, __m128i a, __m128i b);
VPUNPCKLWD __m512i _mm512_unpacklo_epi16(__m512i a, __m512i b);
VPUNPCKLWD __m512i _mm512_mask_unpacklo_epi16(__m512i s, __mmask32 k, __m512i a, __m512i b);
VPUNPCKLWD __m512i _mm512_maskz_unpacklo_epi16( __mmask32 k, __m512i a, __m512i b);
VPUNPCKLWD __m256i _mm256_mask_unpacklo_epi16(__m256i s, __mmask16 k, __m256i a, __m256i b);
VPUNPCKLWD __m256i _mm256_maskz_unpacklo_epi16( __mmask16 k, __m256i a, __m256i b);
VPUNPCKLWD __m128i _mm_mask_unpacklo_epi16(v s, __mmask8 k, __m128i a, __m128i b);
VPUNPCKLWD __m128i _mm_maskz_unpacklo_epi16( __mmask8 k, __m128i a, __m128i b);
VPUNPCKLDQ __m512i _mm512_unpacklo_epi32(__m512i a, __m512i b);
VPUNPCKLDQ __m512i _mm512_mask_unpacklo_epi32(__m512i s, __mmask16 k, __m512i a, __m512i b);
VPUNPCKLDQ __m512i _mm512_maskz_unpacklo_epi32( __mmask16 k, __m512i a, __m512i b);
VPUNPCKLDQ __m256i _mm256_mask_unpacklo_epi32(__m256i s, __mmask8 k, __m256i a, __m256i b);
VPUNPCKLDQ __m256i _mm256_maskz_unpacklo_epi32( __mmask8 k, __m256i a, __m256i b);
VPUNPCKLDQ __m128i _mm_mask_unpacklo_epi32(v s, __mmask8 k, __m128i a, __m128i b);
VPUNPCKLDQ __m128i _mm_maskz_unpacklo_epi32( __mmask8 k, __m128i a, __m128i b);
VPUNPCKLQDQ __m512i _mm512_unpacklo_epi64(__m512i a, __m512i b);
VPUNPCKLQDQ __m512i _mm512_mask_unpacklo_epi64(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPUNPCKLQDQ __m512i _mm512_maskz_unpacklo_epi64( __mmask8 k, __m512i a, __m512i b);
VPUNPCKLQDQ __m256i _mm256_mask_unpacklo_epi64(__m256i s, __mmask8 k, __m256i a, __m256i b);
VPUNPCKLQDQ __m256i _mm256_maskz_unpacklo_epi64( __mmask8 k, __m256i a, __m256i b);
VPUNPCKLQDQ __m128i _mm_mask_unpacklo_epi64(__m128i s, __mmask8 k, __m128i a, __m128i b);
VPUNPCKLQDQ __m128i _mm_maskz_unpacklo_epi64( __mmask8 k, __m128i a, __m128i b);
PUNPCKLBW __m64 _mm_unpacklo_pi8 (__m64 m1, __m64 m2) (V)PUNPCKLBW __m128i _mm_unpacklo_epi8 (__m128i m1, __m128i m2) VPUNPCKLBW __m256i _mm256_unpacklo_epi8 (__m256i m1, __m256i m2) PUNPCKLWD __m64 _mm_unpacklo_pi16 (__m64 m1, __m64 m2) (V)PUNPCKLWD __m128i _mm_unpacklo_epi16 (__m128i m1, __m128i m2) VPUNPCKLWD __m256i _mm256_unpacklo_epi16 (__m256i m1, __m256i m2) PUNPCKLDQ __m64 _mm_unpacklo_pi32 (__m64 m1, __m64 m2) (V)PUNPCKLDQ __m128i _mm_unpacklo_epi32 (__m128i m1, __m128i m2) VPUNPCKLDQ __m256i _mm256_unpacklo_epi32 (__m256i m1, __m256i m2) (V)PUNPCKLQDQ __m128i _mm_unpacklo_epi64 (__m128i m1, __m128i m2) VPUNPCKLQDQ __m256i _mm256_unpacklo_epi64 (__m256i m1, __m256i m2);

Banderas afectadas

None.

Excepciones numéricas

None.

Otras excepciones

Instrucciones no codificadas por EVEX, ver Tabla 2-21, "Tipo 4 Condiciones de Excepción de Clase".

EVEX-encoded VPUNPCKLDQ/QDQ, ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".

EVEX-encoded VPUNPCKLBW/WD, ver Excepciones Tipo E4NF.nb en la tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".

Fuentes