TDPBSSD, TDPBSUD, TDPBUSD, TDPBUUD
带有 Dword 的签名/ 未签名字节的点产品
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
VEX.128.F2.0F38.W0 5E 11:rrr:bbb | TDPBSSD tmm1, tmm2, tmm3 | A | 有效 | 不可编码 | 矩阵乘以 tmm2 的签名字节元素从 tmm3 的签名字节元素,并积累 tmm1 中的词元元素. |
VEX.128.F3.0F38.W0 5E 11:rrr:bbb | TDPBSUD tmm1, tmm2, tmm3 | A | 有效 | 不可编码 | 矩阵从 tmm2 的签名字节元素乘以从 tmm3 的未签名字节元素,并在 tmm1 中积累 dword 元素. |
VEX.128.66.0F38.W0 5E 11:rrr:bbb | TDPBUSD tmm1, tmm2, tmm3 | A | 有效 | 不可编码 | 矩阵从 tmm2 中将未签名的字节元素乘以 tmm3 中签名的字节元素,并在 tmm1 中积累 dword 元素. |
VEX.128.NP.0F38.W0 5E 11:rrr:bbb | TDPBUUD tmm1, tmm2, tmm3 | A | 有效 | 不可编码 | 矩阵将未符号字节元素从tmm2乘以未符号字节元素从tmm3乘以未符号字节元素,并在tmm1中积累dword元素. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
A
modrm.reglectura y escrituraModRM 字节的 reg 字段(第 5-3 位)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移vex.vvvvlecturaVEX 前缀的 vvvv 字段(按位取反)
实测开销
正在从 arch-data 加载实测数据...
说明
对于每个可能的组合(tmm2的行,tmm3的列),指令在所有对应的4个字节元素上执行一组SIMD的点产品,一个来自tmm2,一个来自tmm3,添加这些点产品的结果,然后将结果累积到tmm1的相应行和列中. 输入片 tmm2 和 tmm3 中的每个 dword 被解释为四个字节元素. 这些文件可以签署或未签署。 双字母图案SU,US,SS,UU中的每个字母分别以tmm2和tmm3表示数值的签名/未签名性质.
在Intel TSX交易中执行TDPBSSD/TDPBSUD/TDPBUSD/TDPBUUD指令的任何尝试都会导致交易中止.
行动
define DPBD(c,x,y):// arguments are dwords
if *x operand is signed*:
extend_src1 := SIGN_EXTEND
else:
extend_src1 := ZERO_EXTEND
if *y operand is signed*:
extend_src2 := SIGN_EXTEND
else:
extend_src2 := ZERO_EXTEND
p0dword := extend_src1(x.byte[0]) * extend_src2(y.byte[0])
p1dword := extend_src1(x.byte[1]) * extend_src2(y.byte[1])
p2dword := extend_src1(x.byte[2]) * extend_src2(y.byte[2])
p3dword := extend_src1(x.byte[3]) * extend_src2(y.byte[3])
c := c + p0dword + p1dword + p2dword + p3dword
TDPBSSD, TDPBSUD, TDPBUSD, TDPBUUD tsrcdest, tsrc1, tsrc2 (Register Only Version)
// C = m x n (tsrcdest), A = m x k (tsrc1), B = k x n (tsrc2)
tsrc1_elements_per_row := tsrc1.colsb / 4
tsrc2_elements_per_row := tsrc2.colsb / 4
tsrcdest_elements_per_row := tsrcdest.colsb / 4
for m in 0 ... tsrcdest.rows-1:
tmp := tsrcdest.row[m]
for k in 0 ... tsrc1_elements_per_row-1:
for n in 0 ... tsrcdest_elements_per_row-1:
DPBD( tmp.dword[n], tsrc1.row[m].dword[k], tsrc2.row[k].dword[n] )
write_row_and_zero(tsrcdest, m, tmp, tsrcdest.colsb)
zero_upper_rows(tsrcdest, tsrcdest.rows)
zero_tilecfg_start()Intel C/C++ 内在编译器
TDPBSSD void _tile_dpbssd(__tile dst, __tile src1, __tile src2);
TDPBSUD void _tile_dpbsud(__tile dst, __tile src1, __tile src2);
TDPBUSD void _tile_dpbusd(__tile dst, __tile src1, __tile src2);
TDPBUUD void _tile_dpbuud(__tile dst, __tile src1, __tile src2);受影响的旗帜
None.
例外 AMX-E4;详见第2.10节,"Intel(R) AMX 指令例外类".