PSUBQ

Subtract Packed Quadword Integers

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
NP 0F FB /r1PSUBQ mm1, mm2/m64AValidoValidoSubtract quadword integer in mm1 de mm2 /m64.
66 0F FB /rPSUBQ xmm1, xmm2/m128AValidoValidoSubtract packed quadword integers in xmm1 de xmm2 /m128.
VEX.128.66.0F.WIG FB/rVPSUBQ xmm1, xmm2, xmm3/m128BValidoValidoSubtract packed quadword integers in xmm3/m128 de xmm2.
VEX.256.66.0F.WIG FB /rVPSUBQ ymm1, ymm2, ymm3/m256BValidoValidoSubtract packed quadword integers in ymm3/m256 de ymm2.
EVEX.128.66.0F.W1 FB /rVPSUBQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcstCValidoValidoSubtract packed quadword integers in AVX512F) OR xmm3/m128/m64bcst de xmm2 y almacenar AVX10.1 en xmm1 utilizando máscara de escritura k1.
EVEX.256.66.0F.W1 FB /rVPSUBQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcstCValidoValidoSubtract packed quadword integers in AVX512F) OR ymm3/m256/m64bcst de ymm2 y almacenar AVX10.1 en ymm1 utilizando máscara de escritura k1.
EVEX.512.66.0F.W1 FB/rVPSUBQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcstCValidoValidoSubtract packed quadword integers in OR AVX10.1 zmm3/m512/m64bcst de zmm2 y almacene en zmm1 utilizando escrituramask 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

Coste medido

Cargando las mediciones de arch-data...

Descripción

Sube el segundo operando (operando de origen) del primer operando (operando de destino) y almacena el resultado en el operando de destino. Cuando se utilizan cuádwords envasadas operandos, se realiza un subtracto SIMD. Cuando un resultado de quadword es demasiado grande para ser representado en 64 bits (sobreflujo), el resultado se envuelve alrededor y los 64 bits bajos se escriben al elemento de destino (es decir, el porte es ignorado).

Tenga en cuenta que la instrucción (V)PSUBQ puede funcionar en enteros no firmados o firmados (notación de dos complementos); sin embargo, no establece bits en el registro EFLAGS para indicar el desbordamiento y/o una carga. Para evitar condiciones de desbordamiento no detectadas, el software debe controlar los rangos de los valores sobre los que opera.

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 versión 64-bit operando: El operando de origen puede ser un entero de cuádpago almacenado en un registro de tecnología MMX o una ubicación de memoria de 64 bits.

128-bit Legacy SSE versión: 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 versión codificada: 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 versiones codificadas: 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 VPSUBQ: 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.

Operación

PSUBQ (With 64-Bit Operands)
    DEST[63:0] := DEST[63:0] - SRC[63:0];

PSUBQ (With 128-Bit Operands)

    DEST[63:0] := DEST[63:0] - SRC[63:0];
    DEST[127:64] := DEST[127:64] - SRC[127:64];

VPSUBQ (VEX.128 Encoded Version)
DEST[63:0] := SRC1[63:0]-SRC2[63:0]
DEST[127:64] := SRC1[127:64]-SRC2[127:64]
DEST[MAXVL-1:128] := 0

VPSUBQ (VEX.256 Encoded Version)
DEST[63:0] := SRC1[63:0]-SRC2[63:0]
DEST[127:64] := SRC1[127:64]-SRC2[127:64]
DEST[191:128] := SRC1[191:128]-SRC2[191:128]
DEST[255:192] := SRC1[255:192]-SRC2[255:192]
DEST[MAXVL-1:256] := 0

VPSUBQ (EVEX Encoded Versions)

(KL, VL) = (2, 128), (4, 256), (8, 512)

FOR j := 0 TO KL-1

i := j * 64

IF k1[j] OR *no writemask* THEN

             IF (EVEX.b = 1) AND (SRC2 *is memory*)

                  THEN DEST[i+63:i] := SRC1[i+63:i] - SRC2[63:0]

                  ELSE DEST[i+63:i] := SRC1[i+63:i] - SRC2[i+63:i]

             FI;

     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

VPSUBQ __m512i _mm512_sub_epi64(__m512i a, __m512i b);
VPSUBQ __m512i _mm512_mask_sub_epi64(__m512i s, __mmask8 k, __m512i a, __m512i b);
VPSUBQ __m512i _mm512_maskz_sub_epi64( __mmask8 k, __m512i a, __m512i b);
VPSUBQ __m256i _mm256_mask_sub_epi64(__m256i s, __mmask8 k, __m256i a, __m256i b);
VPSUBQ __m256i _mm256_maskz_sub_epi64( __mmask8 k, __m256i a, __m256i b);
VPSUBQ __m128i _mm_mask_sub_epi64(__m128i s, __mmask8 k, __m128i a, __m128i b);
VPSUBQ __m128i _mm_maskz_sub_epi64( __mmask8 k, __m128i a, __m128i b);
PSUBQ __m64 _mm_sub_si64(__m64 m1, __m64 m2) (V)PSUBQ __m128i _mm_sub_epi64(__m128i m1, __m128i m2) VPSUBQ __m256i _mm256_sub_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 codificado VPSUBQ, ver Tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".

Fuentes