VP4DPWSSD
带有字数累积的署名词的点产品( 4- 迭代)
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
EVEX.512.F2.0F38.W0 52 /r | VP4DPWSSD zmm1{k1}{z}, zmm2+3, m128 | A | 有效 | 有效 | 从源寄存器块中以 zmm2 表示的签名单词乘以 m128 表示的签名单词,并在 zmm1 中累积生成的签名单词. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
Tuple1_4Xmodrm.reglectura y escrituraModRM 字节的 reg 字段(第 5-3 位)evex.vvvvlecturaEVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移
实测开销
正在从 arch-data 加载实测数据...
说明
本指令计算了两个签名单词操作数的4个顺序寄存源块点产品,并带有双字累积;见下文图8-1. 内存操作数在四个步骤中每个步骤按顺序选择.
在上述框中,使用"+3"的标记来表示该指令基于操作数的4源注册;来源是连续的,从4个边界的多个开始,并包含编码的注册号操作数.
本指令支持内存断层抑制. 内存操作数如果将口罩中最低的16位中的任何位设为1,或者使用"无口罩"编码,则全部装入.
Tuple类型Tuple1 4X意味着四个32位元素(16字节)被本指令的内存操作部分引用.
16b 16b 16b 16b a3 a2 a1 a0 b1 b0 b1 b0 32b 32b
c1 c0 c1=c1+a2*b0+a3*b1 c0=c0+a0*b0+a1*b1 32b 32b图8-1. 注册两个署名Word 操作数 的 source-Block Dot 产品 双字累积 1
NOTES: 1. (中文(简体) ). 为说明起见,在四种产品中,显示一个源块点产品实例。
行动
src_reg_id is the 5 bit index of the vector register specified in the instruction as the src1 register.
VP4DPWSSD dest, src1, src2
(KL,VL) = (16,512)
N := 4
ORIGDEST := DEST
src_base := src_reg_id & ~ (N-1) // for src1 operand
FOR i := 0 to KL-1:
IF k1[i] or *no writemask*:
FOR m := 0 to N-1:
t := SRC2.dword[m]
p1dword := reg[src_base+m].word[2*i] * t.word[0]
p2dword := reg[src_base+m].word[2*i+1] * t.word[1]
DEST.dword[i] := DEST.dword[i] + p1dword + p2dword
ELSE IF *zeroing*:
DEST.dword[i] := 0
ELSE
DEST.dword[i] := ORIGDEST.dword[i]
DEST[MAX_VL-1:VL] := 0Intel C/C++ 内在编译器
VP4DPWSSD __m512i _mm512_4dpwssd_epi32(__m512i, __m512ix4, __m128i *);
VP4DPWSSD __m512i _mm512_mask_4dpwssd_epi32(__m512i, __mmask16, __m512ix4, __m128i *);
VP4DPWSSD __m512i _mm512_maskz_4dpwssd_epi32(__mmask16, __m512i, __m512ix4, __m128i *);SIMD 浮点 例外
None.
其他例外
See Type E4; additionally:
#UD If the EVEX broadcast bit is set to 1.#UD If the MODRM.mod = 0b11.