blob: 1142095ce1465e8d9fc898230d4a772a8ca38be8 [file] [log] [blame]
-- BFI seems available on Gfx9, need to fix the emission code for that.
check_verx10(110, 120, 125, 200)
function BFI_simulation(a, b, c, d)
local width = a & 0x1F
local offset = b & 0x1F
local mask = ((1 << width) - 1) << offset
return ((c << offset) & mask) | (d & ~mask)
end
function BFI(a, b, c, d)
local r = execute {
data = { [0] = a, b, c, d },
src = [[
@id g9
@mov g11 0
@mov g12 1
@mov g13 2
@mov g14 3
@read g1 g11
@read g2 g12
@read g3 g13
@read g4 g14
bfi1(8) g5<1>UD g1<8,8,1>UD g2<8,8,1>UD { align1 @1 1Q };
bfi2(8) g6<1>UD g5<8,8,1>UD g3<8,8,1>UD g4<8,8,1>UD { align1 @1 1Q };
@write g9 g6
@eot
]],
}
return r[0]
end
function Hex(v) return string.format("0x%08x", v) end
local a, b, c, d = 12, 12, 0xAAAAAAAA, 0xBBBBBBBB
print("calculated", Hex(BFI(a, b, c, d)))
print("expected", Hex(BFI_simulation(a, b, c, d)))