PUNPCKLBW, PUNPCKLWD, PUNPCKLDQ, PUNPCKLQDQ
Unpack Low Data
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
NP 0F 60 /r1 | PUNPCKLBW mm, mm/m32 | A | Valido | Valido | Interleave bytes de baja orden de mm y mm/m32 en mm. |
66 0F 60 /r | PUNPCKLBW xmm1, xmm2/m128 | A | Valido | Valido | Interleave bytes de baja orden de xmm1 y xmm2/m128 en xmm1. |
NP 0F 61 /r1 | PUNPCKLWD mm, mm/m32 | A | Valido | Valido | Interlear palabras de orden bajo de mm y mm/m32 en mm. |
66 0F 61 /r | PUNPCKLWD xmm1, xmm2/m128 | A | Valido | Valido | Interleave palabras de orden bajo de xmm1 y xmm2/m128 en xmm1. |
NP 0F 62 /r1 | PUNPCKLDQ mm, mm/m32 | A | Valido | Valido | Interleave palabras dobles de baja orden de mm y mm/m32 en mm. |
66 0F 62 /r | PUNPCKLDQ xmm1, xmm2/m128 | A | Valido | Valido | Interleave palabras dobles de orden bajo de xmm1 y xmm2/m128 en xmm1. |
66 0F 6C /r | PUNPCKLQDQ xmm1, xmm2/m128 | A | Valido | Valido | Interleave baja-orden quadword de xmm1 y xmm2/m128 en el registro xmm1. |
VEX.128.66.0F.WIG 60/r | VPUNPCKLBW xmm1,xmm2, xmm3/m128 | B | Valido | Valido | Interleave bytes de baja orden de xmm2 y xmm3/m128 en xmm1. |
VEX.128.66.0F.WIG 61/r | VPUNPCKLWD xmm1,xmm2, xmm3/m128 | B | Valido | Valido | Interleave palabras de orden bajo de xmm2 y xmm3/m128 en xmm1. |
VEX.128.66.0F.WIG 62/r | VPUNPCKLDQ xmm1, xmm2, xmm3/m128 | B | Valido | Valido | Interleave palabras dobles de orden bajo de xmm2 y xmm3/m128 en xmm1. |
VEX.128.66.0F.WIG 6C/r | VPUNPCKLQDQ xmm1, xmm2, xmm3/m128 | B | Valido | Valido | Interleave baja-orden quadword de xmm2 y xmm3/m128 en el registro xmm1. |
VEX.256.66.0F.WIG 60 /r | VPUNPCKLBW ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave bytes de baja orden de ymm2 y ymm3/m256 en el registro ymm1. |
VEX.256.66.0F.WIG 61 /r | VPUNPCKLWD ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave palabras de orden bajo de ymm2 y ymm3/m256 en el registro ymm1. |
VEX.256.66.0F.WIG 62 /r | VPUNPCKLDQ ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave doublewords de orden bajo de ymm2 y ymm3/m256 en el registro ymm1. |
VEX.256.66.0F.WIG 6C /r | VPUNPCKLQDQ ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave baja-orden quadword de ymm2 y ymm3/m256 en el registro ymm1. |
EVEX.128.66.0F.WIG 60 /r | VPUNPCKLBW xmm1 {k1}{z}, xmm2, xmm3/m128 | C | Valido | Valido | Interleave bytes de bajo ordenxmm2yAVX512BWOxmm3/m128enxmm1registro sujeto aAVX10.1escribir máscarak1. |
EVEX.128.66.0F.WIG 61 /r | VPUNPCKLWD xmm1 {k1}{z}, xmm2, xmm3/m128 | C | Valido | Valido | Interleave 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 /r | VPUNPCKLDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst | D | Valido | Valido | Interleave 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 /r | VPUNPCKLQDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst Opcode/ Op Instruction En | D | Valido | Valido | Interleave 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 /r | VPUNPCKLBW ymm1 {k1}{z}, ymm2, ymm3/m256 | C | Valido | Valido | Interleave bytes de bajo ordenymm2yAVX512BWOymm3/m256enymm1registro sujeto aAVX10.1escribir máscarak1. |
EVEX.256.66.0F.WIG 61 /r | VPUNPCKLWD ymm1 {k1}{z}, ymm2, ymm3/m256 | C | Valido | Valido | Interleave 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 /r | VPUNPCKLDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst | D | Valido | Valido | Interleave 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 /r | VPUNPCKLQDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | D | Valido | Valido | Interleave 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/r | VPUNPCKLBW zmm1 {k1}{z}, zmm2, zmm3/m512 | C | Valido | Valido | Interleave 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/r | VPUNPCKLWD zmm1 {k1}{z}, zmm2, zmm3/m512 | C | Valido | Valido | Interleave 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 /r | VPUNPCKLDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst | D | Valido | Valido | Interleave 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 /r | VPUNPCKLQDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst | D | Valido | Valido | Interleave 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
modrm.reglectura y escriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
B
modrm.regescriturabyte ModRM, campo reg (bits 5-3)vex.vvvvlecturaprefijo VEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
C
modrm.regescriturabyte ModRM, campo reg (bits 5-3)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Tupla: Full Mem
D
modrm.regescriturabyte ModRM, campo reg (bits 5-3)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte 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 0DEST 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] := 0Intel 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".