vpbroadcastq
Broadcast Quadword
VPBROADCASTQ ymm1, xmm2/m64
Broadcasts a quadword to all elements of YMM.
Details
Broadcasts a 64-bit quadword value from either an XMM register or memory to all 64-bit elements of a YMM register (four copies total). The source can be a 64-bit memory location or the low quadword of an XMM register. No flags are affected.
Pseudocode Operation
val ← (src[63:0])
for i ← 0 to 3 do
ymm1[i*64+63:i*64] ← val
end for
Example
VPBROADCASTQ ymm1, xmm2/m64
Encoding
Binary Layout
VEX
+0
opcode
+3
ModRM
+4
Operands
-
dest
YMM -
src
XMM/Mem
Reference (Intel® SDM)
Instruction Forms
| Opcode | Instruction | Op/En | 64/32-bit Mode | CPUID | Description |
|---|---|---|---|---|---|
| EVEX.128.66.0F38.W0 7A /r | VPBROADCASTB xmm1 {k1}{z}, reg | A | V/V | (AVX512VL AND AVX512BW) OR AVX10.1 | Broadcast an 8-bit value from a GPR to all bytes in the 128-bit destination subject to writemask k1. |
| EVEX.256.66.0F38.W0 7A /r | VPBROADCASTB ymm1 {k1}{z}, reg | A | V/V | (AVX512VL AND AVX512BW) OR AVX10.1 | Broadcast an 8-bit value from a GPR to all bytes in the 256-bit destination subject to writemask k1. |
| EVEX.512.66.0F38.W0 7A /r | VPBROADCASTB zmm1 {k1}{z}, reg | A | V/V | AVX512BW OR AVX10.1 | Broadcast an 8-bit value from a GPR to all bytes in the 512-bit destination subject to writemask k1. |
| EVEX.128.66.0F38.W0 7B /r | VPBROADCASTW xmm1 {k1}{z}, reg | A | V/V | (AVX512VL AND AVX512BW) OR AVX10.1 | Broadcast a 16-bit value from a GPR to all words in the 128-bit destination subject to writemask k1. |
| EVEX.256.66.0F38.W0 7B /r | VPBROADCASTW ymm1 {k1}{z}, reg | A | V/V | (AVX512VL AND AVX512BW) OR AVX10.1 | Broadcast a 16-bit value from a GPR to all words in the 256-bit destination subject to writemask k1. |
| EVEX.512.66.0F38.W0 7B /r | VPBROADCASTW zmm1 {k1}{z}, reg | A | V/V | AVX512BW OR AVX10.1 | Broadcast a 16-bit value from a GPR to all words in the 512-bit destination subject to writemask k1. |
| EVEX.128.66.0F38.W0 7C /r | VPBROADCASTD xmm1 {k1}{z}, r32 | A | V/V | (AVX512VL AND AVX512F) OR AVX10.1 | Broadcast a 32-bit value from a GPR to all doublewords in the 128-bit destination subject to writemask k1. |
| EVEX.256.66.0F38.W0 7C /r | VPBROADCASTD ymm1 {k1}{z}, r32 | A | V/V | (AVX512VL AND AVX512F) OR AVX10.1 | Broadcast a 32-bit value from a GPR to all doublewords in the 256-bit destination subject to writemask k1. |
| EVEX.512.66.0F38.W0 7C /r | VPBROADCASTD zmm1 {k1}{z}, r32 | A | V/V | AVX512F OR AVX10.1 | Broadcast a 32-bit value from a GPR to all doublewords in the 512-bit destination subject to writemask k1. |
| EVEX.128.66.0F38.W1 7C /r | VPBROADCASTQ xmm1 {k1}{z}, r64 | A | V/N.E.1 | (AVX512VL AND AVX512F) OR AVX10.1 | Broadcast a 64-bit value from a GPR to all quadwords in the 128-bit destination subject to writemask k1. |
| EVEX.256.66.0F38.W1 7C /r | VPBROADCASTQ ymm1 {k1}{z}, r64 | A | V/N.E.1 | (AVX512VL AND AVX512F) OR AVX10.1 | Broadcast a 64-bit value from a GPR to all quadwords in the 256-bit destination subject to writemask k1. |
| EVEX.512.66.0F38.W1 7C /r | VPBROADCASTQ zmm1 {k1}{z}, r64 | A | V/N.E.1 | AVX512F OR AVX10.1 | Broadcast a 64-bit value from a GPR to all quadwords in the 512-bit destination subject to writemask k1. |
Instruction Operand Encoding
| Op/En | Tuple Type | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
|---|---|---|---|---|---|
| A | Tuple1 Scalar | ModRM:reg (w) | ModRM:r/m (r) | N/A | N/A |
Description
Broadcasts a 8-bit, 16-bit, 32-bit or 64-bit value from a general-purpose register (the second operand) to all the locations in the destination vector register (the first operand) using the writemask k1.
EVEX.vvvv is reserved and must be 1111b otherwise instructions will #UD.
Operation
VPBROADCASTB (EVEX encoded versions) (KL, VL) = (16, 128), (32, 256), (64, 512) FOR j := 0 TO KL-1 i := j * 8 IF k1[j] OR *no writemask* THEN DEST[i+7:i] := SRC[7:0] ELSE IF *merging-masking* ; merging-masking THEN *DEST[i+7:i] remains unchanged* ELSE ; zeroing-masking DEST[i+7:i] := 0 FI FI; ENDFOR DEST[MAXVL-1:VL] := 0 VPBROADCASTW (EVEX encoded versions) (KL, VL) = (8, 128), (16, 256), (32, 512) FOR j := 0 TO KL-1 i := j * 16 IF k1[j] OR *no writemask* THEN DEST[i+15:i] := SRC[15:0] 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] := 0 VPBROADCASTD (EVEX encoded versions) (KL, VL) = (4, 128), (8, 256), (16, 512) FOR j := 0 TO KL-1 i := j * 32 IF k1[j] OR *no writemask* THEN DEST[i+31:i] := SRC[31:0] ELSE IF *merging-masking* ; merging-masking THEN *DEST[i+31:i] remains unchanged* ELSE ; zeroing-masking DEST[i+31:i] := 0 FI FI; ENDFOR DEST[MAXVL-1:VL] := 0 VPBROADCASTB/W/D/Q—Load With Broadcast Integer Data From General Purpose Register Vol. 2C 5-452 VPBROADCASTQ (EVEX encoded versions) (KL, VL) = (2, 128), (4, 256), (8, 512) FOR j := 0 TO KL-1 i := j * 64 IF k1[j] OR *no writemask* THEN DEST[i+63:i] := SRC[63:0] ELSE IF *merging-masking* ; merging-masking THEN *DEST[i+63:i] remains unchanged* ELSE ; zeroing-masking DEST[i+63:i] := 0 FI FI; ENDFOR DEST[MAXVL-1:VL] := 0
Intel C/C++ Compiler Intrinsic Equivalent
VPBROADCASTB __m512i _mm512_mask_set1_epi8(__m512i s, __mmask64 k, int a); VPBROADCASTB __m512i _mm512_maskz_set1_epi8( __mmask64 k, int a); VPBROADCASTB __m256i _mm256_mask_set1_epi8(__m256i s, __mmask32 k, int a); VPBROADCASTB __m256i _mm256_maskz_set1_epi8( __mmask32 k, int a); VPBROADCASTB __m128i _mm_mask_set1_epi8(__m128i s, __mmask16 k, int a); VPBROADCASTB __m128i _mm_maskz_set1_epi8( __mmask16 k, int a); VPBROADCASTD __m512i _mm512_mask_set1_epi32(__m512i s, __mmask16 k, int a); VPBROADCASTD __m512i _mm512_maskz_set1_epi32( __mmask16 k, int a); VPBROADCASTD __m256i _mm256_mask_set1_epi32(__m256i s, __mmask8 k, int a); VPBROADCASTD __m256i _mm256_maskz_set1_epi32( __mmask8 k, int a); VPBROADCASTD __m128i _mm_mask_set1_epi32(__m128i s, __mmask8 k, int a); VPBROADCASTD __m128i _mm_maskz_set1_epi32( __mmask8 k, int a); VPBROADCASTQ __m512i _mm512_mask_set1_epi64(__m512i s, __mmask8 k, __int64 a); VPBROADCASTQ __m512i _mm512_maskz_set1_epi64( __mmask8 k, __int64 a); VPBROADCASTQ __m256i _mm256_mask_set1_epi64(__m256i s, __mmask8 k, __int64 a); VPBROADCASTQ __m256i _mm256_maskz_set1_epi64( __mmask8 k, __int64 a); VPBROADCASTQ __m128i _mm_mask_set1_epi64(__m128i s, __mmask8 k, __int64 a); VPBROADCASTQ __m128i _mm_maskz_set1_epi64( __mmask8 k, __int64 a); VPBROADCASTW __m512i _mm512_mask_set1_epi16(__m512i s, __mmask32 k, int a); VPBROADCASTW __m512i _mm512_maskz_set1_epi16( __mmask32 k, int a); VPBROADCASTW __m256i _mm256_mask_set1_epi16(__m256i s, __mmask16 k, int a); VPBROADCASTW __m256i _mm256_maskz_set1_epi16( __mmask16 k, int a); VPBROADCASTW __m128i _mm_mask_set1_epi16(__m128i s, __mmask8 k, int a); VPBROADCASTW __m128i _mm_maskz_set1_epi16( __mmask8 k, int a); Exceptions EVEX-encoded instructions, see Table 2-57, “Type E7NM Class Exception Conditions.” Additionally: #UD If EVEX.vvvv != 1111B. VPBROADCASTB/W/D/Q—Load With Broadcast Integer Data From General Purpose Register Vol. 2C 5-453