PCLMULQDQ

Carry-Less Multiplication Quadword

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
66 0F 3A 44 /r ibPCLMULQDQ xmm1, xmm2/m128, imm8AValidoValidoRealiza la multiplicación sin carga de un cuádpago de xmm1 por un cuádpago de xmm2/m128, almacena el resultado de 128 bits en xmm1. El inmediato se utiliza para determinar qué cuádwords de xmm1 y xmm2/m128 deben ser utilizados.
VEX.128.66.0F3A.WIG 44 /r ibVPCLMULQDQ xmm1, xmm2, xmm3/m128, imm8BValidoValidoRealiza la multiplicación sin carga de un cuádpago AVX de xmm2 por un cuádpapo de xmm3/m128, almacena el resultado de 128 bits en xmm1. El inmediato se utiliza para determinar qué cuádpagos de xmm2 y xmm3/m128 deben ser utilizados.
VEX.256.66.0F3A.WIG 44 /r /ibVPCLMULQDQ ymm1, ymm2, ymm3/m256, imm8BValidoValidoPara cada carril de 128 bits, realiza dos multiplicaciones AVX sin carga de un cuadripa de ymm2 por un cuadpacio de ymm3/m256, almacena los dos resultados de 128 bits en ymm1. El inmediato se utiliza para determinar qué cuadripa en cada carril de 128 bits de ymm2 y ymm3/m256 debe ser utilizado.
EVEX.128.66.0F3A.WIG 44 /r /ibVPCLMULQDQ xmm1, xmm2, xmm3/m128, imm8CValidoValidoRealiza una multiplicación sin carga de uno (AVX512VL OR AVX10.1) quadword de xmm2 por un cuadword de xmm3/m128, almacena el resultado de 128 bits en xmm1. El inmediato se utiliza para determinar qué cuadwords de xmm2 y xmm3/m128 debe ser utilizado.
EVEX.256.66.0F3A.WIG 44 /r /ibVPCLMULQDQ ymm1, ymm2, ymm3/m256, imm8CValidoValidoPara cada carril de 128 bits, realiza dos sin carga (AVX512VLOAVX10.1) multiplicaciones de un quadword deymm2por una palabra cuádrupleymm3/m256, almacena los dos resultados de 128 bits enymm1. El inmediato se utiliza para determinar qué cuadword en cada carril de 128 bitsymm2yymm3/m256debería usarse.
EVEX.512.66.0F3A.WIG 44 /r /ibVPCLMULQDQ zmm1, zmm2, zmm3/m512, imm8CValidoValidoPara cada carril de 128 bits, realiza dos sin carga (AVX512FOAVX10.1) multiplicaciones de un quadword dezmm2por una palabra cuádruplezmm3/m512, almacena los cuatro resultados de 128 bits enzmm1. El inmediato se utiliza para determinar qué cuadword en cada carril de 128 bitszmm2yzmm3/m512debería usarse.

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

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

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
  4. imm8 lecturabyte inmediato que sigue a la instruccion

Tupla: Full Mem

Coste medido

Cargando las mediciones de arch-data...

Descripción

Realiza una multiplicación sin carga de pares de cuadriláteros. Las versiones XMM realizan una sola multiplicación de un par de

quadwords. Las versiones de YMM realizan dos multiplicaciones empaquetadas de pares de quadwords. Las versiones de ZMM realizan cuatro multiplicaciones de pares de cuádpagos. Los bits 4 y 0 se utilizan para seleccionar qué 64 bits de cada operando para utilizar de acuerdo a la Tabla 4-14, se ignoran otros bits del byte inmediato.

La forma codificada EVEX de esta instrucción no soporta la supresión de falla de memoria.

PCLMULQDQ Quadword Selección de Byte Inmediato

Imm[4]Imm[0]Operación PCLMULQDQ
0CL_MUL( SRC21[63:0], SRC1[63:0] )

Pseudo-Op and PCLMULQDQ Implementation Imm8 Encoding

Pseudo-OpImm8 Encoding
PCLMULLQLQDQ xmm1, xmm20000_0000B
PCLMULHQLQDQ xmm1, xmm20000_0001B
PCLMULLQHQDQ xmm1, xmm20001_0000B
PCLMULHQHQDQ xmm1, xmm20001_0001B

Operación

define PCLMUL128(X,Y):             // helper function

   FOR i := 0 to 63:

   TMP [ i ] := X[ 0 ] and Y[ i ]

   FOR j := 1 to i:

           TMP [ i ] := TMP [ i ] xor (X[ j ] and Y[ i - j ])

   DEST[ i ] := TMP[ i ]

   FOR i := 64 to 126:

   TMP [ i ] := 0

   FOR j := i - 63 to 63:

           TMP [ i ] := TMP [ i ] xor (X[ j ] and Y[ i - j ])

   DEST[ i ] := TMP[ i ]

   DEST[127] := 0;

   RETURN DEST                     // 128b vector


PCLMULQDQ (SSE Version)
IF imm8[0] = 0:

    TEMP1 := SRC1.qword[0]
ELSE:

    TEMP1 := SRC1.qword[1]
IF imm8[4] = 0:

    TEMP2 := SRC2.qword[0]
ELSE:

    TEMP2 := SRC2.qword[1]
DEST[127:0] := PCLMUL128(TEMP1, TEMP2)
DEST[MAXVL-1:128] (Unmodified)

VPCLMULQDQ (128b and 256b VEX Encoded Versions)
(KL,VL) = (1,128), (2,256)
FOR i= 0 to KL-1:

    IF imm8[0] = 0:
          TEMP1 := SRC1.xmm[i].qword[0]

    ELSE:
          TEMP1 := SRC1.xmm[i].qword[1]

    IF imm8[4] = 0:
          TEMP2 := SRC2.xmm[i].qword[0]

    ELSE:
          TEMP2 := SRC2.xmm[i].qword[1]

    DEST.xmm[i] := PCLMUL128(TEMP1, TEMP2)
DEST[MAXVL-1:VL] := 0

VPCLMULQDQ (EVEX Encoded Version)
(KL,VL) = (1,128), (2,256), (4,512)
FOR i = 0 to KL-1:

    IF imm8[0] = 0:
          TEMP1 := SRC1.xmm[i].qword[0]

    ELSE:
          TEMP1 := SRC1.xmm[i].qword[1]

    IF imm8[4] = 0:
          TEMP2 := SRC2.xmm[i].qword[0]

    ELSE:
          TEMP2 := SRC2.xmm[i].qword[1]

    DEST.xmm[i] := PCLMUL128(TEMP1, TEMP2)
DEST[MAXVL-1:VL] := 0

Intel C/C++ compilador intrínseco

(V)PCLMULQDQ __m128i _mm_clmulepi64_si128 (__m128i, __m128i, const int) VPCLMULQDQ __m256i _mm256_clmulepi64_epi128(__m256i, __m256i, const int);
VPCLMULQDQ __m512i _mm512_clmulepi64_epi128(__m512i, __m512i, const int);

SIMD coma flotante Excepciones

None.

Otras excepciones

Ver Tabla 2-21, "Tipo 4 Condiciones de Excepción", además:

#UD               If VEX.L = 1.

EVEX-encoded: Ver Tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción".

Fuentes