VPLZCNTD, VPLZCNTQ
Contar el número de ceros de plomo para Dword empaquetado, valores de Qword empaquetado
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.66.0F38.W0 44 /r | VPLZCNTD xmm1 {k1}{z}, xmm2/m128/m32bcst | A | Valido | Valido | Contar el número de bits cero líderes en cada dword AVX512CD) O elemento de xmm2/m128/m32bcst utilizando máscara de escritura k1. AVX10.1 |
EVEX.256.66.0F38.W0 44 /r | VPLZCNTD ymm1 {k1}{z}, ymm2/m256/m32bcst | A | Valido | Valido | Contar el número de bits cero líderes en cada dword AVX512CD) O elemento de ymm2/m256/m32bcst utilizando máscara de escritura k1. AVX10.1 |
EVEX.512.66.0F38.W0 44 /r | VPLZCNTD zmm1 {k1}{z}, zmm2/m512/m32bcst | A | Valido | Valido | Contar el número de bits cero líderes en cada elemento dword OR AVX10.1 de zmm2/m512/m32bcst utilizando máscara de escritura k1. |
EVEX.128.66.0F38.W1 44 /r | VPLZCNTQ xmm1 {k1}{z}, xmm2/m128/m64bcst | A | Valido | Valido | Contar el número de bits cero líderes en cada elemento qword AVX512CD) OR de xmm2/m128/m64bcst utilizando máscara de escritura k1. AVX10.1 |
EVEX.256.66.0F38.W1 44 /r | VPLZCNTQ ymm1 {k1}{z}, ymm2/m256/m64bcst | A | Valido | Valido | Contar el número de bits cero líderes en cada elemento qword AVX512CD) OR de ymm2/m256/m64bcst utilizando máscara de escritura k1. AVX10.1 |
EVEX.512.66.0F38.W1 44 /r | VPLZCNTQ zmm1 {k1}{z}, zmm2/m512/m64bcst | A | Valido | Valido | Contar el número de bits cero líderes en cada elemento qword OR AVX10.1 de zmm2/m512/m64bcst utilizando 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
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte 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
Cuenta el número de bits mas significativo líderes en cada elemento dword o qword del operando de origen (el segundo operando) y almacena los resultados en el registro de destino (el primer operando) de acuerdo a la máscara de escritura. Si un elemento es cero, el resultado de ese elemento es el tamaño de operando del elemento.
EVEX.512 versión codificada: El operando de origen es un registro ZMM, una ubicación de memoria de 512 bits, o un vector de 512 bits emitido desde una ubicación de memoria de 32/64 bits. El operando de destino es un registro ZMM, actualizado condicionalmente utilizando máscara de escritura k1.
EVEX.256 versión codificada: El operando de origen es un registro YMM, una ubicación de memoria de 256 bits, o un vector de 256 bits emitido desde una ubicación de memoria de 32/64 bits. El operando de destino es un registro YMM, actualizado condicionalmente utilizando máscara de escritura k1.
EVEX.128 versión codificada: El operando de origen es un registro XMM, una ubicación de memoria de 128 bits, o un vector de 128 bits emitido desde una ubicación de memoria de 32/64 bits. El operando de destino es un registro XMM, actualizado condicionalmente utilizando máscara de escritura k1.
EVEX.vvvv está reservado y debe ser 1111b instrucciones de lo contrario #UD.
Operación
VPLZCNTD
(KL, VL) = (4, 128), (8, 256), (16, 512)
FOR j := 0 TO KL-1
i := j*32
IF MaskBit(j) OR *no writemask*
THEN
temp := 32
DEST[i+31:i] := 0
WHILE (temp > 0) AND (SRC[i+temp-1] = 0)
DO
temp := temp 1
DEST[i+31:i] := DEST[i+31:i] + 1
OD
ELSE
IF *merging-masking*
THEN *DEST[i+31:i] remains unchanged*
ELSE DEST[i+31:i] := 0
FI
FI
ENDFOR
DEST[MAXVL-1:VL] := 0
VPLZCNTQ
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j*64
IF MaskBit(j) OR *no writemask*
THEN
temp := 64
DEST[i+63:i] := 0
WHILE (temp > 0) AND (SRC[i+temp-1] = 0)
DO
temp := temp 1
DEST[i+63:i] := DEST[i+63:i] + 1
OD
ELSE
IF *merging-masking*
THEN *DEST[i+63:i] remains unchanged*
ELSE DEST[i+63:i] := 0
FI
FI
ENDFOR
DEST[MAXVL-1:VL] := 0Intel C/C++ compilador intrínseco
VPLZCNTD __m512i _mm512_lzcnt_epi32(__m512i a);
VPLZCNTD __m512i _mm512_mask_lzcnt_epi32(__m512i s, __mmask16 m, __m512i a);
VPLZCNTD __m512i _mm512_maskz_lzcnt_epi32( __mmask16 m, __m512i a);
VPLZCNTQ __m512i _mm512_lzcnt_epi64(__m512i a);
VPLZCNTQ __m512i _mm512_mask_lzcnt_epi64(__m512i s, __mmask8 m, __m512i a);
VPLZCNTQ __m512i _mm512_maskz_lzcnt_epi64(__mmask8 m, __m512i a);
VPLZCNTD __m256i _mm256_lzcnt_epi32(__m256i a);
VPLZCNTD __m256i _mm256_mask_lzcnt_epi32(__m256i s, __mmask8 m, __m256i a);
VPLZCNTD __m256i _mm256_maskz_lzcnt_epi32( __mmask8 m, __m256i a);
VPLZCNTQ __m256i _mm256_lzcnt_epi64(__m256i a);
VPLZCNTQ __m256i _mm256_mask_lzcnt_epi64(__m256i s, __mmask8 m, __m256i a);
VPLZCNTQ __m256i _mm256_maskz_lzcnt_epi64(__mmask8 m, __m256i a);
VPLZCNTD __m128i _mm_lzcnt_epi32(__m128i a);
VPLZCNTD __m128i _mm_mask_lzcnt_epi32(__m128i s, __mmask8 m, __m128i a);
VPLZCNTD __m128i _mm_maskz_lzcnt_epi32( __mmask8 m, __m128i a);
VPLZCNTQ __m128i _mm_lzcnt_epi64(__m128i a);
VPLZCNTQ __m128i _mm_mask_lzcnt_epi64(__m128i s, __mmask8 m, __m128i a);
VPLZCNTQ __m128i _mm_maskz_lzcnt_epi64(__mmask8 m, __m128i a);SIMD coma flotante Excepciones
None.
Otras excepciones
Instrucciones codificadas por EVEX, ver Tabla 2-51, "Tipo E4 Clase Condiciones de Excepción."