VDBPSADBW
Double Block Packed Sum-Absolute-Differences (SAD) on Unsigned Bytes
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.66.0F3A.W0 42 /r ib | VDBPSADBW xmm1 {k1}{z}, xmm2, xmm3/m128, imm8 | A | Valido | Valido | Compute packedSADresultados de bytes no firmados enAVX512BW) O bloque de palabras desdexmm2con bytes sin firma de dwordAVX10.1bloques transformadosxmm3/m128usando los controles del shuffleimm8. Los resultados están escritosxmm1por debajola máscara de escritura k1. |
EVEX.256.66.0F3A.W0 42 /r ib | VDBPSADBW ymm1 {k1}{z}, ymm2, ymm3/m256, imm8 | A | Valido | Valido | Compute packedSADresultados de bytes no firmados enAVX512BW) O bloque de palabras desdeymm2con bytes sin firma de dwordAVX10.1bloques transformadosymm3/m256usando los controles del shuffleimm8. Los resultados están escritosymm1por debajola máscara de escritura k1. |
EVEX.512.66.0F3A.W0 42 /r ib | VDBPSADBW zmm1 {k1}{z}, zmm2, zmm3/m512, imm8 | A | Valido | Valido | Compute packedSADpalabra resultados de bytes no firmados en ORAVX10.1bloque de palabraszmm2con bytes sin firma de bloques dword transformadoszmm3/m512usando los controles del shuffleimm8. Los resultados están escritoszmm1por debajola 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)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pideimm8byte inmediato que sigue a la instruccion
Tupla: Full Mem
Coste medido
Cargando las mediciones de arch-data...
Descripción
Compute packed SAD (sumo de diferencias absolutas) resultados de palabras de bytes no firmados de dos elementos dword de 32 bits. Los resultados de la palabra SAD empaquetados se calculan en múltiples superblocks de qword, produciendo 4 resultados de la palabra SAD en cada superbloque de 64 bits del registro de destino.
Dentro de cada super bloque de resultados de palabras empaquetadas, los resultados de SAD de dos elementos dword de 32 bits se calculan de la siguiente manera:
- Los resultados de dos palabras inferiores se calculan cada uno de la operación SAD entre un elemento dword deslizante dentro
a qword superblock de un vector intermedio con un elemento de dword estacionario en la superbloque de qword correspondiente del primer operando de origen. El vector intermedio, véase "Tmp1" en la Figura 5-8, se construye a partir del segundo operando de origen el byte imm8 como control de shuffle para seleccionar elementos dword dentro de un carril de 128 bits del segundo operando de origen. Los dos elementos de dword deslizante en una superbloque de qword de Tmp1 se encuentran en byte offset 0 y 1 dentro del superbloque, respectivamente. El elemento dword estacionario en el superbloque qword del primer operando de origen se encuentra en offset 0.
- Los siguientes resultados de dos palabras se calculan cada una de la operación SAD entre un elemento dword deslizante dentro
un superbloque de qword del vector intermedio Tmp1 con un segundo elemento de dword estacionario en el superbloque de qword correspondiente del primer operando de origen. Los dos elementos de dword deslizante en una superbloque de qword de Tmp1 se encuentran en byte offset 2and 3 dentro del superblock, respectivamente. El elemento dword estacionario en el superbloque qword del primer operando de origen se encuentra en offset 4.
- El vector intermedio se construye en carriles de 128 bits. Dentro de cada carril de 128 bits, cada elemento dword del
vector intermedio es seleccionado por un campo de dos bits dentro del byte imm8 en los 128-bits correspondientes del segundo operando de origen. El byte imm8 sirve como control dword shuffle dentro de cada vía de 128 bits del vector intermedio y el segundo operando de origen, de forma similar a PSHUFD.
El primer operando de origen es un registro ZMM/YMM/XMM. El segundo operando de origen es un registro ZMM/YMM/XMM, o un 512/256/128-bit ubicación de memoria. El operando de destino es actualizado condicionalmente basado en máscara de escritura k1 a 16-bit palabra granularidad.
127+128*n 95+128*n 63+128*n 31+128*n 128*n
DW3 DW2 DW1 DW0128-bit Lane of Src2
imm8 shuffle control 00B: DW001B: DW1
7 5 3 10 10B: DW211B: DW3
127+128*n 95+128*n 63+128*n 31+128*n 128*n128-bit Lane of Tmp1
Tmp1 qword superblock
55 47 39 31 24 39 31 23 15 8
Tmp1 sliding dword Tmp1 sliding dword63 55 47 39 32 31 23 15 7 0
Src1 stationary dword 1 ____ Src1 stationary dword 0_ _ _ _ abs abs abs abs
abs abs abs abs
+ 47 39 31 23 16 + Tmp1 sliding dword 31 23 15 7 0Tmp1 dword deslizante
63 55 47 39 32 31 23 15 7 0 Src1 stationary dword 0Dword estacionaria Src1 abdominales abdominales abdominales abdominales abdominales
+ + 63 47 31 15 0Destino qword superblock
Figure 5-8. 64-bit Super Block of SAD Operation in VDBPSADBW
Operación
VDBPSADBW (EVEX Encoded Versions)
(KL, VL) = (8, 128), (16, 256), (32, 512)
Selection of quadruplets:
FOR I = 0 to VL step 128
TMP1[I+31:I] := select (SRC2[I+127: I], imm8[1:0])
TMP1[I+63: I+32] := select (SRC2[I+127: I], imm8[3:2])
TMP1[I+95: I+64] := select (SRC2[I+127: I], imm8[5:4])
TMP1[I+127: I+96] := select (SRC2[I+127: I], imm8[7:6])
END FOR
SAD of quadruplets:
FOR I =0 to VL step 64
TMP_DEST[I+15:I] := ABS(SRC1[I+7: I] - TMP1[I+7: I]) +
ABS(SRC1[I+15: I+8]- TMP1[I+15: I+8]) +
ABS(SRC1[I+23: I+16]- TMP1[I+23: I+16]) +
ABS(SRC1[I+31: I+24]- TMP1[I+31: I+24])
TMP_DEST[I+31: I+16] := ABS(SRC1[I+7: I] - TMP1[I+15: I+8]) +
ABS(SRC1[I+15: I+8]- TMP1[I+23: I+16]) +
ABS(SRC1[I+23: I+16]- TMP1[I+31: I+24]) +
ABS(SRC1[I+31: I+24]- TMP1[I+39: I+32])
TMP_DEST[I+47: I+32] := ABS(SRC1[I+39: I+32] - TMP1[I+23: I+16]) +
ABS(SRC1[I+47: I+40]- TMP1[I+31: I+24]) +
ABS(SRC1[I+55: I+48]- TMP1[I+39: I+32]) +
ABS(SRC1[I+63: I+56]- TMP1[I+47: I+40])
TMP_DEST[I+63: I+48] := ABS(SRC1[I+39: I+32] - TMP1[I+31: I+24]) +
ABS(SRC1[I+47: I+40] - TMP1[I+39: I+32]) +
ABS(SRC1[I+55: I+48] - TMP1[I+47: I+40]) +
ABS(SRC1[I+63: I+56] - TMP1[I+55: I+48])
ENDFOR
FOR j := 0 TO KL-1
i := j * 16
IF k1[j] OR *no writemask*
THEN DEST[i+15:i] := TMP_DEST[i+15:i]
ELSE
IF *merging-masking* ; merging-masking
THEN *DEST[i+15:i] remains unchanged*
ELSE ; zeroing-masking
DEST[i+15:i] := 0
FI
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0Intel C/C++ compilador intrínseco
VDBPSADBW __m512i _mm512_dbsad_epu8(__m512i a, __m512i b int imm8);
VDBPSADBW __m512i _mm512_mask_dbsad_epu8(__m512i s, __mmask32 m, __m512i a, __m512i b int imm8);
VDBPSADBW __m512i _mm512_maskz_dbsad_epu8(__mmask32 m, __m512i a, __m512i b int imm8);
VDBPSADBW __m256i _mm256_dbsad_epu8(__m256i a, __m256i b int imm8);
VDBPSADBW __m256i _mm256_mask_dbsad_epu8(__m256i s, __mmask16 m, __m256i a, __m256i b int imm8);
VDBPSADBW __m256i _mm256_maskz_dbsad_epu8(__mmask16 m, __m256i a, __m256i b int imm8);
VDBPSADBW __m128i _mm_dbsad_epu8(__m128i a, __m128i b int imm8);
VDBPSADBW __m128i _mm_mask_dbsad_epu8(__m128i s, __mmask8 m, __m128i a, __m128i b int imm8);
VDBPSADBW __m128i _mm_maskz_dbsad_epu8(__mmask8 m, __m128i a, __m128i b int imm8);SIMD coma flotante Excepciones
None.
Otras excepciones
Ver Excepciones Tipo E4NF.nb en la tabla 2-52, "Tipo E4NF Clase Condiciones de Excepción."