VPMOVM2B, VPMOVM2W, VPMOVM2D, VPMOVM2Q
将遮罩登记器转换为矢量
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
EVEX.128.F3.0F38.W0 28 /r | VPMOVM2B xmm1, k1 | RM | 有效 | 有效 | 设置每个字节XMM1所有1's或所有0's基于AVX512BW(或)AVX10.1相应的位值k1. |
EVEX.256.F3.0F38.W0 28 /r | VPMOVM2B ymm1, k1 | RM | 有效 | 有效 | 设置每个字节YMM1所有1's或所有0's基于AVX512BW(或)AVX10.1相应的位值k1. |
EVEX.512.F3.0F38.W0 28 /r | VPMOVM2B zmm1, k1 | RM | 有效 | 有效 | 根据k1中对应位值的OR AVX10.1,将ZMM1中的每个字节设定为所有1'或所有0'. |
EVEX.128.F3.0F38.W1 28 /r | VPMOVM2W xmm1, k1 | RM | 有效 | 有效 | 将 XMM1 中的每个单词设定为所有 1 的或所有 0 的基于 AVX512BW) OR AVX10.1 的对应位值为 k1. |
EVEX.256.F3.0F38.W1 28 /r | VPMOVM2W ymm1, k1 | RM | 有效 | 有效 | 将 YMM1 中的每个单词设定为所有 1 的或所有 0 的基于 AVX512BW) OR AVX10.1 的对应位值为 k1. |
EVEX.512.F3.0F38.W1 28 /r | VPMOVM2W zmm1, k1 | RM | 有效 | 有效 | 根据 OR AVX10.1 将 ZMM1 中的每个单词设定为全部 1'或全部 0',以 k1 中的对应位值为准. |
EVEX.128.F3.0F38.W0 38 /r | VPMOVM2D xmm1, k1 | RM | 有效 | 有效 | 根据k1中对应位的值,将XMM1中的每个双字设定为全部1'或全部0'的AVX512DQ)OR AVX10.1. |
EVEX.256.F3.0F38.W0 38 /r | VPMOVM2D ymm1, k1 | RM | 有效 | 有效 | 将 YMM1 中的每个双词设定为所有 1 的或所有 0 的基于 AVX512DQ) OR AVX10.1 在 k1 中对应位的值. |
EVEX.512.F3.0F38.W0 38 /r | VPMOVM2D zmm1, k1 | RM | 有效 | 有效 | 根据k1中对应位的值,将ZMM1中的每个双词设定为所有1'或所有0'的OR AVX10.1. |
EVEX.128.F3.0F38.W1 38 /r | VPMOVM2Q xmm1, k1 | RM | 有效 | 有效 | 将 XMM1 中的每个四字设定为所有 1 的或所有 0 的基于 AVX512DQ) OR AVX10.1 在 k1 中对应位的值. |
EVEX.256.F3.0F38.W1 38 /r | VPMOVM2Q ymm1, k1 | RM | 有效 | 有效 | 将 YMM1 中的每个四字设定为所有 1 的或所有 0 的基于 AVX512DQ) OR AVX10.1 在 k1 中对应位的值. |
EVEX.512.F3.0F38.W1 38 /r | VPMOVM2Q zmm1, k1 | RM | 有效 | 有效 | 将 ZMM1 中的每个四字设定为所有 1 的或所有 0 的基于 OR AVX10.1 的基于 k1 的对应位值. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
RM
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
将掩码寄存器转换为矢量寄存器。 目的地寄存器中的每个元素被设定为全部1'或全部0',这取决于源面罩寄存器中对应位的值. 源操作数是一个面具寄存器. 目标操作数是一个ZMM/YMM/XMM登记册. EVEX.vvvv是保留的,必须是1111b,否则指令会#UD.
行动
VPMOVM2B (EVEX encoded versions)
(KL, VL) = (16, 128), (32, 256), (64, 512)
FOR j := 0 TO KL-1
i := j * 8
IF SRC[j]
THEN DEST[i+7:i] := -1
ELSE DEST[i+7:i] := 0
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VPMOVM2W (EVEX encoded versions)
(KL, VL) = (8, 128), (16, 256), (32, 512)
FOR j := 0 TO KL-1
i := j * 16
IF SRC[j]
THEN DEST[i+15:i] := -1
ELSE DEST[i+15:i] := 0
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VPMOVM2D (EVEX encoded versions)
(KL, VL) = (4, 128), (8, 256), (16, 512)
FOR j := 0 TO KL-1
i := j * 32
IF SRC[j]
THEN DEST[i+31:i] := -1
ELSE DEST[i+31:i] := 0
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0
VPMOVM2Q (EVEX encoded versions)
(KL, VL) = (2, 128), (4, 256), (8, 512)
FOR j := 0 TO KL-1
i := j * 64
IF SRC[j]
THEN DEST[i+63:i] := -1
ELSE DEST[i+63:i] := 0
FI;
ENDFOR
DEST[MAXVL-1:VL] := 0Intel C/C++ 内在编译器
VPMOVM2B __m512i _mm512_movm_epi8(__mmask64 );
VPMOVM2D __m512i _mm512_movm_epi32(__mmask8 );
VPMOVM2Q __m512i _mm512_movm_epi64(__mmask16 );
VPMOVM2W __m512i _mm512_movm_epi16(__mmask32 );
VPMOVM2B __m256i _mm256_movm_epi8(__mmask32 );
VPMOVM2D __m256i _mm256_movm_epi32(__mmask8 );
VPMOVM2Q __m256i _mm256_movm_epi64(__mmask8 );
VPMOVM2W __m256i _mm256_movm_epi16(__mmask16 );
VPMOVM2B __m128i _mm_movm_epi8(__mmask16 );
VPMOVM2D __m128i _mm_movm_epi32(__mmask8 );
VPMOVM2Q __m128i _mm_movm_epi64(__mmask8 );
VPMOVM2W __m128i _mm_movm_epi16(__mmask8 );SIMD 浮点 例外
None.
其他例外
EVEX-encoded discription,参见表2-57"Type E7NM类例外条件".
Additionally: If EVEX.vvvv != 1111B.
#UD