VPOPCNT
Devuelve el número de bits a 1 en BYTE/WORD/DWORD/QWORD
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.66.0F38.W0 54 /r | VPOPCNTB xmm1{k1}{z}, xmm2/m128 | A | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR xmm2/m128 y pone el resultado en xmm1 con AVX10.1 máscara de escritura k1. |
EVEX.256.66.0F38.W0 54 /r | VPOPCNTB ymm1{k1}{z}, ymm2/m256 | A | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR ymm2/m256 y pone el resultado en ymm1 con AVX10.1 máscara de escritura k1. |
EVEX.512.66.0F38.W0 54 /r | VPOPCNTB zmm1{k1}{z}, zmm2/m512 | A | Valido | Valido | Cuenta el número de bits fijados a uno en OR AVX10.1 zmm2/m512 y pone el resultado en zmm1 con máscara de escritura k1. |
EVEX.128.66.0F38.W1 54 /r | VPOPCNTW xmm1{k1}{z}, xmm2/m128 | A | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR xmm2/m128 y pone el resultado en xmm1 con AVX10.1 máscara de escritura k1. |
EVEX.256.66.0F38.W1 54 /r | VPOPCNTW ymm1{k1}{z}, ymm2/m256 | A | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR ymm2/m256 y pone el resultado en ymm1 con AVX10.1 máscara de escritura k1. |
EVEX.512.66.0F38.W1 54 /r | VPOPCNTW zmm1{k1}{z}, zmm2/m512 | A | Valido | Valido | Cuenta el número de bits fijados a uno en OR AVX10.1 zmm2/m512 y pone el resultado en zmm1 con máscara de escritura k1. |
EVEX.128.66.0F38.W0 55 /r | VPOPCNTD xmm1{k1}{z}, xmm2/m128/m32bcst | B | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR xmm2/m128/m32bcst y pone el resultado en AVX10.1 xmm1 con máscara de escritura k1. |
EVEX.256.66.0F38.W0 55 /r | VPOPCNTD ymm1{k1}{z}, ymm2/m256/m32bcst | B | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR ymm2/m256/m32bcst y pone el resultado en AVX10.1 ymm1 con máscara de escritura k1. |
EVEX.512.66.0F38.W0 55 /r | VPOPCNTD zmm1{k1}{z}, zmm2/m512/m32bcst | B | Valido | Valido | Cuenta el número de bits fijados a uno en OR AVX10.1 zmm2/m512/m32bcst y pone el resultado en zmm1 con máscara de escritura k1. |
EVEX.128.66.0F38.W1 55 /r | VPOPCNTQ xmm1{k1}{z}, xmm2/m128/m64bcst | B | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR xmm2/m128/m32bcst y pone el resultado en AVX10.1 xmm1 con máscara de escritura k1. |
EVEX.256.66.0F38.W1 55 /r | VPOPCNTQ ymm1{k1}{z}, ymm2/m256/m64bcst | B | Valido | Valido | Cuenta el número de bits fijados a uno en AND AVX512VL) OR ymm2/m256/m32bcst y pone el resultado en AVX10.1 ymm1 con máscara de escritura k1. |
EVEX.512.66.0F38.W1 55 /r | VPOPCNTQ zmm1{k1}{z}, zmm2/m512/m64bcst | B | Valido | Valido | Cuenta el número de bits fijados a uno en OR AVX10.1 zmm2/m512/m64bcst y pone el resultado en zmm1 con 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 Mem
B
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
Esta instrucción cuenta el número de bits fijados a uno en cada byte, palabra, dword o elemento qword de su fuente (por ejemplo, zmm2 o memoria) y coloca los resultados en el registro de destino (zmm1). Esta instrucción admite la supresión de la falla de memoria.
Operación
VPOPCNTB
(KL, VL) = (16, 128), (32, 256), (64, 512)
FOR j := 0 TO KL-1:
IF MaskBit(j) OR *no writemask*:
DEST.byte[j] := POPCNT(SRC.byte[j])
ELSE IF *merging-masking*:
*DEST.byte[j] remains unchanged*
ELSE:
DEST.byte[j] := 0
DEST[MAX_VL-1:VL] := 0
VPOPCNTW
(KL, VL) = (8, 128), (16, 256), (32, 512)
FOR j := 0 TO KL-1:
IF MaskBit(j) OR *no writemask*:
DEST.word[j] := POPCNT(SRC.word[j])
ELSE IF *merging-masking*:
*DEST.word[j] remains unchanged*
ELSE:
DEST.word[j] := 0
DEST[MAX_VL-1:VL] := 0
VPOPCNTD
(KL, VL) = (4, 128), (8, 256), (16, 512)
FOR j := 0 TO KL-1:
IF MaskBit(j) OR *no writemask*:
IF SRC is broadcast memop:
t := SRC.dword[0]
ELSE:
t := SRC.dword[j]
DEST.dword[j] := POPCNT(t)
ELSE IF *merging-masking*:
*DEST..dword[j] remains unchanged*
ELSE:
DEST..dword[j] := 0
DEST[MAX_VL-1:VL] := 0
VPOPCNTQ
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1:
IF MaskBit(j) OR *no writemask*:
IF SRC is broadcast memop:
t := SRC.qword[0]
ELSE:
t := SRC.qword[j]
DEST.qword[j] := POPCNT(t)
ELSE IF *merging-masking*:
*DEST..qword[j] remains unchanged*
ELSE:
DEST..qword[j] := 0
DEST[MAX_VL-1:VL] := 0Intel C/C++ compilador intrínseco
VPOPCNTW __m128i _mm_popcnt_epi16(__m128i);
VPOPCNTW __m128i _mm_mask_popcnt_epi16(__m128i, __mmask8, __m128i);
VPOPCNTW __m128i _mm_maskz_popcnt_epi16(__mmask8, __m128i);
VPOPCNTW __m256i _mm256_popcnt_epi16(__m256i);
VPOPCNTW __m256i _mm256_mask_popcnt_epi16(__m256i, __mmask16, __m256i);
VPOPCNTW __m256i _mm256_maskz_popcnt_epi16(__mmask16, __m256i);
VPOPCNTW __m512i _mm512_popcnt_epi16(__m512i);
VPOPCNTW __m512i _mm512_mask_popcnt_epi16(__m512i, __mmask32, __m512i);
VPOPCNTW __m512i _mm512_maskz_popcnt_epi16(__mmask32, __m512i);
VPOPCNTQ __m128i _mm_popcnt_epi64(__m128i);
VPOPCNTQ __m128i _mm_mask_popcnt_epi64(__m128i, __mmask8, __m128i);
VPOPCNTQ __m128i _mm_maskz_popcnt_epi64(__mmask8, __m128i);
VPOPCNTQ __m256i _mm256_popcnt_epi64(__m256i);
VPOPCNTQ __m256i _mm256_mask_popcnt_epi64(__m256i, __mmask8, __m256i);
VPOPCNTQ __m256i _mm256_maskz_popcnt_epi64(__mmask8, __m256i);
VPOPCNTQ __m512i _mm512_popcnt_epi64(__m512i);
VPOPCNTQ __m512i _mm512_mask_popcnt_epi64(__m512i, __mmask8, __m512i);
VPOPCNTQ __m512i _mm512_maskz_popcnt_epi64(__mmask8, __m512i);
VPOPCNTD __m128i _mm_popcnt_epi32(__m128i);
VPOPCNTD __m128i _mm_mask_popcnt_epi32(__m128i, __mmask8, __m128i);
VPOPCNTD __m128i _mm_maskz_popcnt_epi32(__mmask8, __m128i);
VPOPCNTD __m256i _mm256_popcnt_epi32(__m256i);
VPOPCNTD __m256i _mm256_mask_popcnt_epi32(__m256i, __mmask8, __m256i);
VPOPCNTD __m256i _mm256_maskz_popcnt_epi32(__mmask8, __m256i);
VPOPCNTD __m512i _mm512_popcnt_epi32(__m512i);
VPOPCNTD __m512i _mm512_mask_popcnt_epi32(__m512i, __mmask16, __m512i);
VPOPCNTD __m512i _mm512_maskz_popcnt_epi32(__mmask16, __m512i);
VPOPCNTB __m128i _mm_popcnt_epi8(__m128i);
VPOPCNTB __m128i _mm_mask_popcnt_epi8(__m128i, __mmask16, __m128i);
VPOPCNTB __m128i _mm_maskz_popcnt_epi8(__mmask16, __m128i);
VPOPCNTB __m256i _mm256_popcnt_epi8(__m256i);
VPOPCNTB __m256i _mm256_mask_popcnt_epi8(__m256i, __mmask32, __m256i);
VPOPCNTB __m256i _mm256_maskz_popcnt_epi8(__mmask32, __m256i);
VPOPCNTB __m512i _mm512_popcnt_epi8(__m512i);
VPOPCNTB __m512i _mm512_mask_popcnt_epi8(__m512i, __mmask64, __m512i);
VPOPCNTB __m512i _mm512_maskz_popcnt_epi8(__mmask64, __m512i);SIMD coma flotante Excepciones
None.
Otras excepciones
Ver Tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".