PUNPCKHBW, PUNPCKHWD, PUNPCKHDQ, PUNPCKHQDQ
Desempaquetar datos altos
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
NP 0F 68 /r1 | PUNPCKHBW mm, mm/m64 | A | Valido | Valido | Desempaquetar y entrelazar bytes de alto orden de mm y mm/m64 en mm. |
66 0F 68 /r | PUNPCKHBW xmm1, xmm2/m128 | A | Valido | Valido | Desempaca y entrelaza los bytes de alto orden de xmm1 y xmm2/m128 en xmm1. |
NP 0F 69 /r1 | PUNPCKHWD mm, mm/m64 | A | Valido | Valido | Desempaca y entrelaza palabras de alto orden de mm y mm/m64 en mm. |
66 0F 69 /r | PUNPCKHWD xmm1, xmm2/m128 | A | Valido | Valido | Desempaca y entrelaza palabras de alto orden de xmm1 y xmm2/m128 en xmm1. |
NP 0F 6A /r1 | PUNPCKHDQ mm, mm/m64 | A | Valido | Valido | Desempaca y entrelaza palabras dobles de alto orden de mm y mm/m64 en mm. |
66 0F 6A /r | PUNPCKHDQ xmm1, xmm2/m128 | A | Valido | Valido | Desempaca y entrelaza palabras dobles de alto orden de xmm1 y xmm2/m128 a xmm1. |
66 0F 6D /r | PUNPCKHQDQ xmm1, xmm2/m128 | A | Valido | Valido | Desempaca y entrelaza cuádruples de alto orden desde xmm1 y xmm2/m128 hasta xmm1. |
VEX.128.66.0F.WIG 68/r | VPUNPCKHBW xmm1,xmm2, xmm3/m128 | B | Valido | Valido | Interleave bytes de alto orden de xmm2 y xmm3/m128 en xmm1. |
VEX.128.66.0F.WIG 69/r | VPUNPCKHWD xmm1,xmm2, xmm3/m128 | B | Valido | Valido | Interleave palabras de alto orden de xmm2 y xmm3/m128 en xmm1. |
VEX.128.66.0F.WIG 6A/r | VPUNPCKHDQ xmm1, xmm2, xmm3/m128 | B | Valido | Valido | Interleave palabras dobles de alto orden de xmm2 y xmm3/m128 en xmm1. |
VEX.128.66.0F.WIG 6D/r | VPUNPCKHQDQ xmm1, xmm2, xmm3/m128 | B | Valido | Valido | Interleave alta-orden quadword de xmm2 y xmm3/m128 en el registro xmm1. |
VEX.256.66.0F.WIG 68 /r | VPUNPCKHBW ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave bytes de alto orden de ymm2 y ymm3/m256 en el registro ymm1. |
VEX.256.66.0F.WIG 69 /r | VPUNPCKHWD ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave palabras de alto orden de ymm2 y ymm3/m256 en el registro ymm1. |
VEX.256.66.0F.WIG 6A /r | VPUNPCKHDQ ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave doublewords de alto orden de ymm2 y ymm3/m256 en el registro ymm1. |
VEX.256.66.0F.WIG 6D /r | VPUNPCKHQDQ ymm1, ymm2, ymm3/m256 | B | Valido | Valido | Interleave alta-orden quadword de ymm2 y ymm3/m256 en el registro ymm1. |
EVEX.128.66.0F.WIG 68 /r | VPUNPCKHBW xmm1 {k1}{z}, xmm2, xmm3/m128 | C | Valido | Valido | Interleave high-order bytes de xmm2 y AVX512BW) OR xmm3/m128 en xmm1 registro utilizando k1 AVX10.1 máscara de escritura. |
EVEX.128.66.0F.WIG 69 /r | VPUNPCKHWD xmm1 {k1}{z}, xmm2, xmm3/m128 | C | Valido | Valido | Interleave palabras de alto orden de xmm2 y AVX512BW) OR xmm3/m128 en xmm1 registro utilizando k1 AVX10.1 máscara de escritura. |
EVEX.128.66.0F.W0 6A /r | VPUNPCKHDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst | D | Valido | Valido | Interleave doublewords de alto orden de AVX512F) OR xmm2 y xmm3/m128/m32bcst en xmm1 AVX10.1 se registran usando la máscara de escritura k1. |
EVEX.128.66.0F.W1 6D /r | VPUNPCKHQDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst Opcode/ Instruction | D | Valido | Valido | Interleave alta-orden quadword de xmm2 AVX512F) OR y xmm3/m128/m64bcst en xmm1 AVX10.1 se registran usando la máscara de escritura k1. Op/ 64/32 bit CPUID Feature Descripción En Mode Support Flag |
EVEX.256.66.0F.WIG 68 /r | VPUNPCKHBW ymm1 {k1}{z}, ymm2, ymm3/m256 | c v | Valido | Interleave high-order bytes de ymm2 y AVX512BW) OR ymm3/m256 en ymm1 registro utilizando k1 AVX10.1 máscara de escritura. | |
EVEX.256.66.0F.WIG 69 /r | VPUNPCKHWD ymm1 {k1}{z}, ymm2, ymm3/m256 | c v | Valido | Interleave palabras de alto orden de ymm2 y AVX512BW) OR ymm3/m256 en ymm1 registro utilizando k1 AVX10.1 máscara de escritura. | |
EVEX.256.66.0F.W0 6A /r | VPUNPCKHDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst | d v | Valido | Interleave doublewords de alto orden de AVX512F) OR ymm2 y ymm3/m256/m32bcst en ymm1 AVX10.1 se registran usando la máscara de escritura k1. | |
EVEX.256.66.0F.W1 6D /r | VPUNPCKHQDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | d v | Valido | Interleave de alta orden de cuadrícula deymm2 AVX512F) OR andymm3/m256/m64bcst enymm1 AVX10.1registrok1Escribir máscara. | |
EVEX.512.66.0F.WIG 68/r | VPUNPCKHBW zmm1 {k1}{z}, zmm2, zmm3/m512 | c v | Valido | Interleave bytes de alto orden de zmm2 y OR AVX10.1 zmm3/m512 en el registro zmm1. | |
EVEX.512.66.0F.WIG 69/r | VPUNPCKHWD zmm1 {k1}{z}, zmm2, zmm3/m512 | c v | Valido | Interleave palabras de alto orden de zmm2 y OR AVX10.1 zmm3/m512 en el registro zmm1. | |
EVEX.512.66.0F.W0 6A /r | VPUNPCKHDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst | d v | Valido | Interleave doublewords de alto orden de OR AVX10.1 zmm2 y zmm3/m512/m32bcst en zmm1 registro utilizando k1 escritura máscara. | |
EVEX.512.66.0F.W1 6D /r | VPUNPCKHQDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst | d v | Valido | Interleave de alta orden de cuadrícula dezmm2OAVX10.1yzmm3/m512/m64bcst enzmm1registrok1Escribir máscara. |
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 alto orden (bytes, palabras, palabras dobles o cuádwords) del operando de destino (primer operando) y operando de origen (segundo operando) en el operando de destino. La Figura 4-20 muestra la operación de desempaqueta para bytes en operandos de 64 bits. Se ignoran los elementos de datos de baja orden.
SRC Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0 DEST
DEST Y7 X7 Y6 X6 Y5 X5 Y4 X4
Figura 4-20. PUNPCKHBW 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 Y7 X7 Y6 X6 Y3 X3 Y2 X2
Figure 4-21. 256-bit VPUNPCKHDQ Instruction Operation
Cuando los datos fuente provienen de un operando de memoria de 64 bits, el operando completo de 64 bits se accede desde la memoria, pero la instrucción utiliza sólo los 32 bits de alto orden. 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)PUNPCKHBWla instrucción entrelaza los bytes de alto orden de la fuente yoperandos de destino, el (V)PUNPCKHWDla instrucción entrelazan las palabras de alto orden de la fuente yoperandos de destino, el (V)PUNP- CKHDQla instrucción entrelaza la palabra doble de alta orden (o palabras dobles) de la fuente yoperandos de destino, y el (V)PUNPCKHQDQla instrucción entrelaza las cuádwords de alto 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)PUNPCKHBW los bytes de alto orden son cero extendidos (es decir, desempaquetados en enteros de palabras sin firma), y con la instrucción (V)PUNPCKHWD, 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 64 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.
EVEX codificado VPUNPCKHDQ/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. 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.
EVEX codificado VPUNPCKHWD/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
PUNPCKHBW Instruction With 64-bit Operands:
DEST[7:0] := DEST[39:32];
DEST[15:8] := SRC[39:32];
DEST[23:16] := DEST[47:40];
DEST[31:24] := SRC[47:40];
DEST[39:32] := DEST[55:48];
DEST[47:40] := SRC[55:48];
DEST[55:48] := DEST[63:56];
DEST[63:56] := SRC[63:56];
PUNPCKHW Instruction With 64-bit Operands:
DEST[15:0] := DEST[47:32];
DEST[31:16] := SRC[47:32];
DEST[47:32] := DEST[63:48];
DEST[63:48] := SRC[63:48];
PUNPCKHDQ Instruction With 64-bit Operands:
DEST[31:0] := DEST[63:32];
DEST[63:32] := SRC[63:32];
INTERLEAVE_HIGH_BYTES_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_HIGH_BYTES_256b(SRC1[255:0], SRC[255:0])
TMP_DEST[511:256] := INTERLEAVE_HIGH_BYTES_256b(SRC1[511:256], SRC[511:256])
INTERLEAVE_HIGH_BYTES_256b (SRC1, SRC2)
DEST[7:0] := SRC1[71:64]
DEST[15:8] := SRC2[71:64]
DEST[23:16] := SRC1[79:72]
DEST[31:24] := SRC2[79:72]
DEST[39:32] := SRC1[87:80]
DEST[47:40] := SRC2[87:80]
DEST[55:48] := SRC1[95:88]
DEST[63:56] := SRC2[95:88]
DEST[71:64] := SRC1[103:96]
DEST[79:72] := SRC2[103:96]
DEST[87:80] := SRC1[111:104]
DEST[95:88] := SRC2[111:104]
DEST[103:96] := SRC1[119:112]
DEST[111:104] := SRC2[119:112]
DEST[119:112] := SRC1[127:120]
DEST[127:120] := SRC2[127:120]
DEST[135:128] := SRC1[199:192]
DEST[143:136] := SRC2[199:192]
DEST[151:144] := SRC1[207:200]
DEST[159:152] := SRC2[207:200]
DEST[167:160] := SRC1[215:208]
DEST[175:168] := SRC2[215:208]
DEST[183:176] := SRC1[223:216]
DEST[191:184] := SRC2[223:216]
DEST[199:192] := SRC1[231:224]
DEST[207:200] := SRC2[231:224]
DEST[215:208] := SRC1[239:232]
DEST[223:216] := SRC2[239:232]
DEST[231:224] := SRC1[247:240]
DEST[239:232] := SRC2[247:240]
DEST[247:240] := SRC1[255:248]
DEST[255:248] := SRC2[255:248]
INTERLEAVE_HIGH_BYTES (SRC1, SRC2)
DEST[7:0] := SRC1[71:64]
DEST[15:8] := SRC2[71:64]
DEST[23:16] := SRC1[79:72]
DEST[31:24] := SRC2[79:72]
DEST[39:32] := SRC1[87:80]
DEST[47:40] := SRC2[87:80]
DEST[55:48] := SRC1[95:88]
DEST[63:56] := SRC2[95:88]
DEST[71:64] := SRC1[103:96]
DEST[79:72] := SRC2[103:96]
DEST[87:80] := SRC1[111:104]
DEST[95:88] := SRC2[111:104]
DEST[103:96] := SRC1[119:112]
DEST[111:104] := SRC2[119:112]
DEST[119:112] := SRC1[127:120]
DEST[127:120] := SRC2[127:120]
INTERLEAVE_HIGH_WORDS_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_HIGH_WORDS_256b(SRC1[255:0], SRC[255:0])
TMP_DEST[511:256] := INTERLEAVE_HIGH_WORDS_256b(SRC1[511:256], SRC[511:256])
INTERLEAVE_HIGH_WORDS_256b(SRC1, SRC2)
DEST[15:0] := SRC1[79:64]
DEST[31:16] := SRC2[79:64]
DEST[47:32] := SRC1[95:80]
DEST[63:48] := SRC2[95:80]
DEST[79:64] := SRC1[111:96]
DEST[95:80] := SRC2[111:96]
DEST[111:96] := SRC1[127:112]
DEST[127:112] := SRC2[127:112]
DEST[143:128] := SRC1[207:192]
DEST[159:144] := SRC2[207:192]
DEST[175:160] := SRC1[223:208]
DEST[191:176] := SRC2[223:208]
DEST[207:192] := SRC1[239:224]
DEST[223:208] := SRC2[239:224]
DEST[239:224] := SRC1[255:240]
DEST[255:240] := SRC2[255:240]
INTERLEAVE_HIGH_WORDS (SRC1, SRC2)
DEST[15:0] := SRC1[79:64]
DEST[31:16] := SRC2[79:64]
DEST[47:32] := SRC1[95:80]
DEST[63:48] := SRC2[95:80]
DEST[79:64] := SRC1[111:96]
DEST[95:80] := SRC2[111:96]
DEST[111:96] := SRC1[127:112]
DEST[127:112] := SRC2[127:112]
INTERLEAVE_HIGH_DWORDS_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_HIGH_DWORDS_256b(SRC1[255:0], SRC2[255:0])
TMP_DEST[511:256] := INTERLEAVE_HIGH_DWORDS_256b(SRC1[511:256], SRC2[511:256])
INTERLEAVE_HIGH_DWORDS_256b(SRC1, SRC2)
DEST[31:0] := SRC1[95:64]
DEST[63:32] := SRC2[95:64]
DEST[95:64] := SRC1[127:96]
DEST[127:96] := SRC2[127:96]
DEST[159:128] := SRC1[223:192]
DEST[191:160] := SRC2[223:192]
DEST[223:192] := SRC1[255:224]
DEST[255:224] := SRC2[255:224]
INTERLEAVE_HIGH_DWORDS(SRC1, SRC2)
DEST[31:0] := SRC1[95:64]
DEST[63:32] := SRC2[95:64]
DEST[95:64] := SRC1[127:96]
DEST[127:96] := SRC2[127:96]
INTERLEAVE_HIGH_QWORDS_512b (SRC1, SRC2)
TMP_DEST[255:0] := INTERLEAVE_HIGH_QWORDS_256b(SRC1[255:0], SRC2[255:0])
TMP_DEST[511:256] := INTERLEAVE_HIGH_QWORDS_256b(SRC1[511:256], SRC2[511:256])
INTERLEAVE_HIGH_QWORDS_256b(SRC1, SRC2)
DEST[63:0] := SRC1[127:64]
DEST[127:64] := SRC2[127:64]
DEST[191:128] := SRC1[255:192]
DEST[255:192] := SRC2[255:192]
INTERLEAVE_HIGH_QWORDS(SRC1, SRC2)
DEST[63:0] := SRC1[127:64]
DEST[127:64] := SRC2[127:64]
PUNPCKHBW (128-bit Legacy SSE Version)
DEST[127:0] := INTERLEAVE_HIGH_BYTES(DEST, SRC)
DEST[255:127] (Unmodified)
VPUNPCKHBW (VEX.128 Encoded Version)
DEST[127:0] := INTERLEAVE_HIGH_BYTES(SRC1, SRC2)
DEST[MAXVL-1:127] := 0
VPUNPCKHBW (VEX.256 Encoded Version)
DEST[255:0] := INTERLEAVE_HIGH_BYTES_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0
VPUNPCKHBW (EVEX Encoded Versions)
(KL, VL) = (16, 128), (32, 256), (64, 512)
IF VL = 128
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_BYTES(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 256
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_BYTES_256b(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 512
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_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
PUNPCKHWD (128-bit Legacy SSE Version)
DEST[127:0] := INTERLEAVE_HIGH_WORDS(DEST, SRC)
DEST[255:127] (Unmodified)
VPUNPCKHWD (VEX.128 Encoded Version)
DEST[127:0] := INTERLEAVE_HIGH_WORDS(SRC1, SRC2)
DEST[MAXVL-1:127] := 0
VPUNPCKHWD (VEX.256 Encoded Version)
DEST[255:0] := INTERLEAVE_HIGH_WORDS_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0
VPUNPCKHWD (EVEX Encoded Versions)
(KL, VL) = (8, 128), (16, 256), (32, 512)
IF VL = 128
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_WORDS(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 256
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_WORDS_256b(SRC1[VL-1:0], SRC2[VL-1:0])
FI;
IF VL = 512
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_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
PUNPCKHDQ (128-bit Legacy SSE Version)
DEST[127:0] := INTERLEAVE_HIGH_DWORDS(DEST, SRC)
DEST[255:127] (Unmodified)
VPUNPCKHDQ (VEX.128 Encoded Version)
DEST[127:0] := INTERLEAVE_HIGH_DWORDS(SRC1, SRC2)
DEST[MAXVL-1:127] := 0
VPUNPCKHDQ (VEX.256 Encoded Version)
DEST[255:0] := INTERLEAVE_HIGH_DWORDS_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0
VPUNPCKHDQ (EVEX.512 Encoded Version)
(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_HIGH_DWORDS(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 256
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_DWORDS_256b(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 512
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_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
DEST[MAXVL-1:VL] := 0
PUNPCKHQDQ (128-bit Legacy SSE Version)
DEST[127:0] := INTERLEAVE_HIGH_QWORDS(DEST, SRC)
DEST[MAXVL-1:128] (Unmodified)
VPUNPCKHQDQ (VEX.128 Encoded Version)
DEST[127:0] := INTERLEAVE_HIGH_QWORDS(SRC1, SRC2)
DEST[MAXVL-1:128] := 0
VPUNPCKHQDQ (VEX.256 Encoded Version)
DEST[255:0] := INTERLEAVE_HIGH_QWORDS_256b(SRC1, SRC2)
DEST[MAXVL-1:256] := 0
VPUNPCKHQDQ (EVEX Encoded Versions)
(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_HIGH_QWORDS(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 256
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_QWORDS_256b(SRC1[VL-1:0], TMP_SRC2[VL-1:0])
FI;
IF VL = 512
TMP_DEST[VL-1:0] := INTERLEAVE_HIGH_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
VPUNPCKHBW __m512i _mm512_unpackhi_epi8(__m512i a, __m512i b);
VPUNPCKHBW __m512i _mm512_mask_unpackhi_epi8(__m512i s, __mmask64 k, __m512i a, __m512i b);
VPUNPCKHBW __m512i _mm512_maskz_unpackhi_epi8( __mmask64 k, __m512i a, __m512i b);
VPUNPCKHBW __m256i _mm256_mask_unpackhi_epi8(__m256i s, __mmask32 k, __m256i a, __m256i b);
VPUNPCKHBW __m256i _mm256_maskz_unpackhi_epi8( __mmask32 k, __m256i a, __m256i b);
VPUNPCKHBW __m128i _mm_mask_unpackhi_epi8(v s, __mmask16 k, __m128i a, __m128i b);
VPUNPCKHBW __m128i _mm_maskz_unpackhi_epi8( __mmask16 k, __m128i a, __m128i b);
VPUNPCKHWD __m512i _mm512_unpackhi_epi16(__m512i a, __m512i b);
VPUNPCKHWD __m512i _mm512_mask_unpackhi_epi16(__m512i s, __mmask32 k, __m512i a, __m512i b);
VPUNPCKHWD __m512i _mm512_maskz_unpackhi_epi16( __mmask32 k, __m512i a, __m512i b);
VPUNPCKHWD __m256i _mm256_mask_unpackhi_epi16(__m256i s, __mmask16 k, __m256i a, __m256i b);
VPUNPCKHWD __m256i _mm256_maskz_unpackhi_epi16( __mmask16 k, __m256i a, __m256i b);
VPUNPCKHWD __m128i _mm_mask_unpackhi_epi16(v s, __mmask8 k, __m128i a, __m128i b);
VPUNPCKHWD __m128i _mm_maskz_unpackhi_epi16( __mmask8 k, __m128i a, __m128i b);
VPUNPCKHDQ __m512i _mm512_unpackhi_epi32(__m512i a, __m512i b);
VPUNPCKHDQ __m512i _mm512_mask_unpackhi_epi32(__m512i s, __mmask16 k, __m512i a, __m512i b);
VPUNPCKHDQ __m512i _mm512_maskz_unpackhi_epi32( __mmask16 k, __m512i a, __m512i b);
VPUNPCKHDQ __m256i _mm256_mask_unpackhi_epi32(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPUNPCKHDQ __m256i _mm256_maskz_unpackhi_epi32( __mmask8 k, __m512i a, __m512i b);
VPUNPCKHDQ __m128i _mm_mask_unpackhi_epi32(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPUNPCKHDQ __m128i _mm_maskz_unpackhi_epi32( __mmask8 k, __m512i a, __m512i b);
VPUNPCKHQDQ __m512i _mm512_unpackhi_epi64(__m512i a, __m512i b);
VPUNPCKHQDQ __m512i _mm512_mask_unpackhi_epi64(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPUNPCKHQDQ __m512i _mm512_maskz_unpackhi_epi64( __mmask8 k, __m512i a, __m512i b);
VPUNPCKHQDQ __m256i _mm256_mask_unpackhi_epi64(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPUNPCKHQDQ __m256i _mm256_maskz_unpackhi_epi64( __mmask8 k, __m512i a, __m512i b);
VPUNPCKHQDQ __m128i _mm_mask_unpackhi_epi64(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPUNPCKHQDQ __m128i _mm_maskz_unpackhi_epi64( __mmask8 k, __m512i a, __m512i b);
PUNPCKHBW __m64 _mm_unpackhi_pi8(__m64 m1, __m64 m2) (V)PUNPCKHBW __m128i _mm_unpackhi_epi8(__m128i m1, __m128i m2) VPUNPCKHBW __m256i _mm256_unpackhi_epi8(__m256i m1, __m256i m2) PUNPCKHWD __m64 _mm_unpackhi_pi16(__m64 m1,__m64 m2) (V)PUNPCKHWD __m128i _mm_unpackhi_epi16(__m128i m1,__m128i m2) VPUNPCKHWD __m256i _mm256_unpackhi_epi16(__m256i m1,__m256i m2) PUNPCKHDQ __m64 _mm_unpackhi_pi32(__m64 m1, __m64 m2) (V)PUNPCKHDQ __m128i _mm_unpackhi_epi32(__m128i m1, __m128i m2) VPUNPCKHDQ __m256i _mm256_unpackhi_epi32(__m256i m1, __m256i m2) (V)PUNPCKHQDQ __m128i _mm_unpackhi_epi64 ( __m128i a, __m128i b) VPUNPCKHQDQ __m256i _mm256_unpackhi_epi64 ( __m256i a, __m256i b);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 VPUNPCKHQDQ/QDQ, ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".
EVEX-encoded VPUNPCKHBW/WD, ver Excepciones Tipo E4NF.nb en la tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".