VTESTPD, VTESTPS

Prueba de bit empaquetado

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
VEX.128.66.0F38.W0 0E /rVTESTPS xmm1, xmm2/m128RMValidoValidoEstablecer ZF y CF dependiendo del bit de signo AND y ANDN de fuentes de coma flotante de precisión simple empaquetadas.
VEX.256.66.0F38.W0 0E /rVTESTPS ymm1, ymm2/m256RMValidoValidoEstablecer ZF y CF dependiendo del bit de signo AND y ANDN de fuentes de coma flotante de precisión simple empaquetadas.
VEX.128.66.0F38.W0 0F /rVTESTPD xmm1, xmm2/m128RMValidoValidoEstablecer ZF y CF dependiendo del bit de signo AND y ANDN de fuentes de coma flotante de precisión doble empaquetadas.
VEX.256.66.0F38.W0 0F /rVTESTPD ymm1, ymm2/m256RMValidoValidoEstablecer ZF y CF dependiendo del bit de signo AND y ANDN de fuentes de coma flotante de precisión doble empaquetadas.

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.

RM

  1. modrm.reg lecturabyte 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

Coste medido

Cargando las mediciones de arch-data...

Banderas nombradas

Descripción

VTESTPS realiza una comparación bitwise de todos los bits de señal de los elementos de precisión individuales empaquetados en la operación de primera fuente y bits de señal correspondientes en el segundo operando de origen. Si el AND de la fuente bits de señal con los bits de signo de dest produce todos los ceros, el ZF se establece de lo contrario el ZF está claro. Si el AND de la fuente bits de señal con los bits de signo de dest invertido produce todos los ceros el CF se establece de lo contrario el CF está claro. Un intento de ejecutar VTESTPS con VEX.W=1 causará #UD.

VTESTPD realiza una comparación bitwise de todos los bits de signos de los elementos de doble precisión en la operación de primera fuente y los bits de señal correspondientes en el segundo operando de origen. Si el AND de la fuente bits de señal con los bits de signo de dest produce todos los ceros, el ZF se establece de lo contrario el ZF está claro. Si el AND el signo fuente bits con los bits de signo de dest invertido produce todos los ceros el CF se establece de lo contrario el CF está claro. Un intento de ejecutar VTESTPS con VEX.W=1 causará #UD.

El registro de primera fuente se especifica en el campo de regre ModR/M.

Versión 128-bit: El primer registro de origen es un registro XMM. El segundo registro de fuente puede ser un registro XMM o una ubicación de memoria de 128 bits. El registro de destino no está modificado.

VEX.256 versión codificada: El primer registro de origen es un registro YMM. El segundo registro de fuente puede ser un registro YMM o una ubicación de memoria de 256 bits. El registro de destino no está modificado.

Nota: En VEX-versiones codificadas, VEX.vvvv está reservado y debe ser 1111b, de lo contrario las instrucciones #UD.

Operación

VTESTPS (128-bit version)
TEMP[127:0] := SRC[127:0] AND DEST[127:0]
IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127] = 0)

    THEN ZF := 1;
    ELSE ZF := 0;

TEMP[127:0] := SRC[127:0] AND NOT DEST[127:0]
IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127] = 0)

    THEN CF := 1;
    ELSE CF := 0;
DEST (unmodified)
AF := OF := PF := SF := 0;

VTESTPS (VEX.256 encoded version)
TEMP[255:0] := SRC[255:0] AND DEST[255:0]
IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127]= TEMP[160] =TEMP[191] = TEMP[224] = TEMP[255] = 0)

    THEN ZF := 1;
    ELSE ZF := 0;

TEMP[255:0] := SRC[255:0] AND NOT DEST[255:0]
IF (TEMP[31] = TEMP[63] = TEMP[95] = TEMP[127]= TEMP[160] =TEMP[191] = TEMP[224] = TEMP[255] = 0)

    THEN CF := 1;
    ELSE CF := 0;
DEST (unmodified)
AF := OF := PF := SF := 0;

VTESTPD (128-bit version)
TEMP[127:0] := SRC[127:0] AND DEST[127:0]
IF ( TEMP[63] = TEMP[127] = 0)

    THEN ZF := 1;
    ELSE ZF := 0;

TEMP[127:0] := SRC[127:0] AND NOT DEST[127:0]
IF ( TEMP[63] = TEMP[127] = 0)

    THEN CF := 1;
    ELSE CF := 0;
DEST (unmodified)
AF := OF := PF := SF := 0;

VTESTPD (VEX.256 encoded version)
TEMP[255:0] := SRC[255:0] AND DEST[255:0]
IF (TEMP[63] = TEMP[127] = TEMP[191] = TEMP[255] = 0)

    THEN ZF := 1;
    ELSE ZF := 0;

TEMP[255:0] := SRC[255:0] AND NOT DEST[255:0]
IF (TEMP[63] = TEMP[127] = TEMP[191] = TEMP[255] = 0)

    THEN CF := 1;
    ELSE CF := 0;
DEST (unmodified)
AF := OF := PF := SF := 0;

Intel C/C++ compilador intrínseco

VTESTPS int _mm256_testz_ps (__m256 s1, __m256 s2);
int _mm256_testc_ps (__m256 s1, __m256 s2);
int _mm256_testnzc_ps (__m256 s1, __m128 s2);
int _mm_testz_ps (__m128 s1, __m128 s2);
int _mm_testc_ps (__m128 s1, __m128 s2);
int _mm_testnzc_ps (__m128 s1, __m128 s2);
VTESTPD int _mm256_testz_pd (__m256d s1, __m256d s2);
int _mm256_testc_pd (__m256d s1, __m256d s2);
int _mm256_testnzc_pd (__m256d s1, __m256d s2);
int _mm_testz_pd (__m128d s1, __m128d s2);
int _mm_testc_pd (__m128d s1, __m128d s2);
int _mm_testnzc_pd (__m128d s1, __m128d s2);

Banderas afectadas

Las banderas OF, AF, PF, SF se limpian y las banderas ZF, CF se establecen según la operación.

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Tabla 2-21, "Tipo 4 Condiciones de Excepción".

Additionally:

#UD               If VEX.vvvv  1111B.

If VEX.W = 1 for VTESTPS or VTESTPD.

Fuentes