blob: f1f86845b21f5dec9f5b2c719d7c3855161d96ce [file] [log] [blame]
--[[
Execute the example from the Dot Product 4 Accumulate
instruction as seen in the PRM.
mov (1) r1.0:d 0x0102037F:d
// (char4)(0x1,0x2,0x3,0x7F)
mov (1) r2.0:d 50:d
dp4a (1) r3.0:d r2:d r1:d r1:d
// r3.0 = 50 + (0x1*0x1 + 0x2*0x2 + 0x3*0x3 + 0x7F*0x7F)
// = 50 + (1 + 4 + 9 + 16129)
// = 16193
--]]
check_ver(12)
function DP4A(a, b, c)
local r = c
for i = 1, 4 do
r = r + a[i] * b[i]
end
return r
end
local r = execute {
src = [[
@id g9
@mov g1 0x0102037F
@mov g2 50
dp4a(8) g3<1>UD g2<8,8,1>UD g1<8,8,1>UD g1<8,8,1>UD { align1 @1 1Q };
@write g9 g3
@eot
]],
}
print("expected", DP4A({1,2,3,0x7F}, {1,2,3,0x7F}, 50))
print("calculated", r[0])