PADDSB, PADDSW

Añadir Packed enteros con signo con la saturación firmada

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NP 0F EC /r1PADDSB mm, mm/m64AValidoValidoAñadir los enteros de byte firmados de mm/m64 y mm y saturar los resultados.
66 0F EC /rPADDSB xmm1, xmm2/m128AValidoValidoAñadir los enteros de byte firmados de xmm2/m128 y xmm1 saturar los resultados.
NP 0F ED /r1PADDSW mm, mm/m64AValidoValidoAgregue los enteros de palabras firmados empaquetados de mm/m64 y mm y saturar los resultados.
66 0F ED /rPADDSW xmm1, xmm2/m128AValidoValidoAñadir los enteros de palabras firmados empaquetados de xmm2/m128 y xmm1 y saturar los resultados.
VEX.128.66.0F.WIG EC /rVPADDSB xmm1, xmm2, xmm3/m128BValidoValidoAñadir los enteros de byte firmados de xmm3/m128 y xmm2 saturar los resultados.
VEX.128.66.0F.WIG ED /rVPADDSW xmm1, xmm2, xmm3/m128BValidoValidoAñadir los enteros de palabras firmados empaquetados de xmm3/m128 y xmm2 y saturar los resultados.
VEX.256.66.0F.WIG EC /rVPADDSB ymm1, ymm2, ymm3/m256BValidoValidoAñadir los enteros de byte firmados de ymm2, y ymm3/m256 y almacenar los resultados saturados en ymm1.
VEX.256.66.0F.WIG ED /rVPADDSW ymm1, ymm2, ymm3/m256BValidoValidoAñadir los enteros de palabras firmados empaquetados de ymm2, y ymm3/m256 y almacenar los resultados saturados en ymm1.
EVEX.128.66.0F.WIG EC /rVPADDSB xmm1 {k1}{z}, xmm2, xmm3/m128CValidoValidoAgregue los enteros de byte firmados de xmm2, AVX512BW) OR AVX10.1 y xmm3/m128 y almacene los resultados saturados en xmm1 bajo máscara de escritura k1.
EVEX.256.66.0F.WIG EC /rVPADDSB ymm1 {k1}{z}, ymm2, ymm3/m256CValidoValidoAgregue los enteros de byte firmados de ymm2, AVX512BW) OR AVX10.1 y ymm3/m256 y almacene los resultados saturados en ymm1 bajo máscara de escritura k1.
EVEX.512.66.0F.WIG EC /rVPADDSB zmm1 {k1}{z}, zmm2, zmm3/m512CValidoValidoAgregue los enteros de byte firmados de zmm2, OR AVX10.1 y zmm3/m512 y almacene los resultados saturados en zmm1 bajo máscara de escritura k1.
EVEX.128.66.0F.WIG ED /rVPADDSW xmm1 {k1}{z}, xmm2, xmm3/m128CValidoValidoAñadir los enteros de palabras firmados empaquetados de xmm2, AVX512BW) OR AVX10.1 y xmm3/m128 y almacenar los resultados saturados en xmm1 bajo máscara de escritura k1.
EVEX.256.66.0F.WIG ED /rVPADDSW ymm1 {k1}{z}, ymm2, ymm3/m256CValidoValidoAñadir los enteros de palabras firmados empaquetados de ymm2, AVX512BW) OR AVX10.1 y ymm3/m256 y almacenar los resultados saturados en ymm1 bajo máscara de escritura k1.
EVEX.512.66.0F.WIG ED /rVPADDSW zmm1 {k1}{z}, zmm2, zmm3/m512CValidoValidoAñadir los enteros de palabras firmados empaquetados de zmm2, OR AVX10.1 y zmm3/m512 y almacenar los resultados saturados en zmm1 bajo máscara de escritura 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

Coste medido

Cargando las mediciones de arch-data...

Descripción

Realiza una adición SIMD de los enteros con signo empaquetada del operando de origen (segundo operando) y el operando de destino (primer operando), y almacena los resultados del entero empaquetado en el operando de destino. Ver Figura 9-4 en Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 1, para una ilustración de una operación SIMD. El desbordamiento se maneja con la saturación firmada, como se describe en los párrafos siguientes.

(V)PADDSB realiza una adición de SIMD empaquetado enteros con signo con saturación del primer operando de origen y segundo operando de origen y almacena los resultados del entero empaquetado en el operando de destino. Cuando un resultado de byte individual está más allá de la gama de un entero de byte firmado (es decir, mayor que 7FH o menos que 80H), el valor saturado de 7FH o 80H, respectivamente, está escrito al operando de destino.

(V)PADDSW realiza una adición SIMD de los enteros de palabras firmadas empaquetados con saturación del primer operando de origen y segundo operando de origen y almacena los resultados de enteros empaquetados en el operando de destino. Cuando un resultado de palabra individual está más allá de la gama de una palabra firmada entero (es decir, mayor que 7FFFH o menos que 8000H), el valor saturado de 7FFFH o 8000H, respectivamente, está escrito al operando de destino.

EVEX versiones codificadas: El primer operando de origen es un registro ZMM/YMM/XMM. El segundo operando de origen es un registro ZMM/YMM/XMM o una ubicación de memoria. El operando de destino es un registro ZMM/YMM/XMM.

VEX.256 versión codificada: El primer operando de origen es un registro YMM. El segundo operando de origen es un registro YMM o una ubicación de memoria de 256 bits. El operando de destino es un registro YMM.

VEX.128 versión codificada: El primer operando de origen es un registro XMM. El segundo operando de origen es un registro XMM o 128 bits ubicación de memoria. El operando de destino es un registro XMM. Los bits superiores (MAXVL-1:128) del destino de registro correspondiente se ponen a cero.

128-bit Legacy SSE versión: El primer operando de origen es un registro XMM. El segundo operando puede ser un registro XMM o una ubicación de memoria de 128 bits. El destino no es distinto del registro XMM de primera fuente y los bits superiores (MAXVL-1:128) del destino de registro correspondiente son sin modificar.

Operación

PADDSB (With 64-bit Operands)
    DEST[7:0] := SaturateToSignedByte(DEST[7:0] + SRC (7:0]);
    (* Repeat add operation for 2nd through 7th bytes *)
    DEST[63:56] := SaturateToSignedByte(DEST[63:56] + SRC[63:56] );

PADDSB (With 128-bit Operands)
    DEST[7:0] := SaturateToSignedByte (DEST[7:0] + SRC[7:0]);
    (* Repeat add operation for 2nd through 14th bytes *)
    DEST[127:120] := SaturateToSignedByte (DEST[111:120] + SRC[127:120]);

VPADDSB (VEX.128 Encoded Version)
    DEST[7:0] := SaturateToSignedByte (SRC1[7:0] + SRC2[7:0]);
    (* Repeat subtract operation for 2nd through 14th bytes *)
    DEST[127:120] := SaturateToSignedByte (SRC1[111:120] + SRC2[127:120]);
    DEST[MAXVL-1:128] := 0

VPADDSB (VEX.256 Encoded Version)
    DEST[7:0] := SaturateToSignedByte (SRC1[7:0] + SRC2[7:0]);
    (* Repeat add operation for 2nd through 31st bytes *)
    DEST[255:248] := SaturateToSignedByte (SRC1[255:248] + SRC2[255:248]);


VPADDSB (EVEX Encoded Versions)
(KL, VL) = (16, 128), (32, 256), (64, 512)

FOR j := 0 TO KL-1

i := j * 8

IF k1[j] OR *no writemask*

     THEN DEST[i+7:i] := SaturateToSignedByte (SRC1[i+7:i] + SRC2[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

PADDSW (with 64-bit operands)
    DEST[15:0] := SaturateToSignedWord(DEST[15:0] + SRC[15:0] );
    (* Repeat add operation for 2nd and 7th words *)
    DEST[63:48] := SaturateToSignedWord(DEST[63:48] + SRC[63:48] );

PADDSW (with 128-bit operands)
    DEST[15:0] := SaturateToSignedWord (DEST[15:0] + SRC[15:0]);
    (* Repeat add operation for 2nd through 7th words *)
    DEST[127:112] := SaturateToSignedWord (DEST[127:112] + SRC[127:112]);

VPADDSW (VEX.128 Encoded Version)
    DEST[15:0] := SaturateToSignedWord (SRC1[15:0] + SRC2[15:0]);
    (* Repeat subtract operation for 2nd through 7th words *)
    DEST[127:112] := SaturateToSignedWord (SRC1[127:112] + SRC2[127:112]);
    DEST[MAXVL-1:128] := 0

VPADDSW (VEX.256 Encoded Version)
    DEST[15:0] := SaturateToSignedWord (SRC1[15:0] + SRC2[15:0]);
    (* Repeat add operation for 2nd through 15th words *)
    DEST[255:240] := SaturateToSignedWord (SRC1[255:240] + SRC2[255:240])

VPADDSW (EVEX Encoded Versions)
(KL, VL) = (8, 128), (16, 256), (32, 512)

FOR j := 0 TO KL-1

i := j * 16

IF k1[j] OR *no writemask*

     THEN DEST[i+15:i] := SaturateToSignedWord (SRC1[i+15:i] + SRC2[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

Intel C/C++ compilador intrínseco

PADDSB __m64 _mm_adds_pi8(__m64 m1, __m64 m2) (V)PADDSB __m128i _mm_adds_epi8 ( __m128i a, __m128i b) VPADDSB __m256i _mm256_adds_epi8 ( __m256i a, __m256i b) PADDSW __m64 _mm_adds_pi16(__m64 m1, __m64 m2) (V)PADDSW __m128i _mm_adds_epi16 ( __m128i a, __m128i b) VPADDSW __m256i _mm256_adds_epi16 ( __m256i a, __m256i b) VPADDSB __m512i _mm512_adds_epi8 ( __m512i a, __m512i b) VPADDSW __m512i _mm512_adds_epi16 ( __m512i a, __m512i b) VPADDSB __m512i _mm512_mask_adds_epi8 ( __m512i s, __mmask64 m, __m512i a, __m512i b) VPADDSW __m512i _mm512_mask_adds_epi16 ( __m512i s, __mmask32 m, __m512i a, __m512i b) VPADDSB __m512i _mm512_maskz_adds_epi8 (__mmask64 m, __m512i a, __m512i b) VPADDSW __m512i _mm512_maskz_adds_epi16 (__mmask32 m, __m512i a, __m512i b) VPADDSB __m256i _mm256_mask_adds_epi8 (__m256i s, __mmask32 m, __m256i a, __m256i b) VPADDSW __m256i _mm256_mask_adds_epi16 (__m256i s, __mmask16 m, __m256i a, __m256i b) VPADDSB __m256i _mm256_maskz_adds_epi8 (__mmask32 m, __m256i a, __m256i b) VPADDSW __m256i _mm256_maskz_adds_epi16 (__mmask16 m, __m256i a, __m256i b) VPADDSB __m128i _mm_mask_adds_epi8 (__m128i s, __mmask16 m, __m128i a, __m128i b) VPADDSW __m128i _mm_mask_adds_epi16 (__m128i s, __mmask8 m, __m128i a, __m128i b) VPADDSB __m128i _mm_maskz_adds_epi8 (__mmask16 m, __m128i a, __m128i b) VPADDSW __m128i _mm_maskz_adds_epi16 (__mmask8 m, __m128i a, __m128i b);

Banderas afectadas

None.

SIMD coma flotante Excepciones

None.

Otras excepciones

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

Instrucciones de código EVEX, ver Excepciones Tipo E4.nb en la tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".

Fuentes