PCMPISTRI

Envasado Comparar Pendientes de longitud implícita, Índice de retorno

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 3A 63 /r imm8PCMPISTRI xmm1, xmm2/m128, imm8RMValidoValidoRealice una comparación envasada de datos de cadena con longitudes implícitas, generando un índice y almacenando el resultado en ECX.
VEX.128.66.0F3A.WIG 63 /r ibVPCMPISTRI xmm1, xmm2/m128, imm8RMValidoValidoRealice una comparación envasada de datos de cadena con longitudes implícitas, generando un índice y almacenando el resultado en ECX.

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
  3. imm8byte inmediato que sigue a la instruccion

Coste medido

Cargando las mediciones de arch-data...

Descripción

La instrucción compara datos de dos cadenas basadas en el valor codificado en el byte de control imm8 (ver Sección 4.1, "Imm8 Control Byte Operation for PCMPESTRI / PCMPESTRM / PCMPISTRI / PCMPISTRM"), y genera un índice almacenado a ECX.

Cada cadena está representada por un solo valor. El valor es un xmm (o posiblemente m128 para el segundo operando) que contiene los elementos de datos de la cadena (datos de byte o palabra). Cada byte/palabra de entrada se aumenta con una etiqueta válida/inválida. Un byte/palabra se considera válido sólo si tiene un índice más bajo que el byte/palabra null menos significativo. (El byte/palabra null menos significativo también se considera inválido.)

Las operaciones de comparación y agregación se realizan según el valor codificado de los campos de bits imm8 (véase la sección 4.1). El índice del primer (o último, según imm8[6]) conjunto bit de IntRes2 es devuelto en ECX. Si no hay bits en IntRes2, ECX se establece a 16 (8).

Tenga en cuenta que las Banderas Aritméticas están escritas de manera no estándar para suministrar la información más relevante:

    CFlag  Reset if IntRes2 is equal to zero, set otherwise
    ZFlag  Set if any byte/word of xmm2/mem128 is null, reset otherwise
    SFlag  Set if any byte/word of xmm1 is null, reset otherwise

OFlag IntRes2[0]

    AFlag  Reset
    PFlag  Reset

Nota: En VEX.128 versión codificada, VEX.vvvv está reservado y debe ser 1111b, VEX.L debe ser 0, de lo contrario la instrucción será #UD.

Efectivo tamaño de operando operando 1 operando 2 Resultado Modo operativo/tamaño xmm/m128 ECX 16 bit xmm/m128 ECX 32 bit xmm xmm/m128 ECX 64 bit

Intel C/C++ Compiler Equivalente Intrínseco para el índice de retorno int mm cmpistri ( m128i a, m128i b, modo int const);

Intel C/C++ Compiler Intrínseco para leer los resultados de EFlag

int mm cmpistra ( m128i a, m128i b, const int mode); int mm cmpistrc ( m128i a, m128i b, const int mode); int mm cm pistro ( m128i a, m128i b, const int moders)

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Tabla 2-21, "Tipo 4 Condiciones de Excepción", además, esta instrucción no causa #GP si el operando de memoria no está alineado a 16 Límites Byte, y:

#UD               If VEX.L = 1.
                  If VEX.vvvv  1111B.

Fuentes