xref: /aosp_15_r20/external/mesa3d/src/intel/executor/examples/bfi.lua (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1-- BFI seems available on Gfx9, need to fix the emission code for that.
2check_verx10(110, 120, 125, 200)
3
4function BFI_simulation(a, b, c, d)
5  local width  = a & 0x1F
6  local offset = b & 0x1F
7  local mask   = ((1 << width) - 1) << offset
8  return ((c << offset) & mask) | (d & ~mask)
9end
10
11function BFI(a, b, c, d)
12  local r = execute {
13    data = { [0] = a, b, c, d },
14    src = [[
15      @id   g9
16      @mov  g11  0
17      @mov  g12  1
18      @mov  g13  2
19      @mov  g14  3
20
21      @read g1 g11
22      @read g2 g12
23      @read g3 g13
24      @read g4 g14
25
26      bfi1(8)  g5<1>UD  g1<8,8,1>UD  g2<8,8,1>UD               { align1 @1 1Q };
27      bfi2(8)  g6<1>UD  g5<8,8,1>UD  g3<8,8,1>UD  g4<8,8,1>UD  { align1 @1 1Q };
28
29      @write g9 g6
30      @eot
31    ]],
32  }
33  return r[0]
34end
35
36function Hex(v) return string.format("0x%08x", v) end
37
38local a, b, c, d = 12, 12, 0xAAAAAAAA, 0xBBBBBBBB
39
40print("calculated", Hex(BFI(a, b, c, d)))
41print("expected",   Hex(BFI_simulation(a, b, c, d)))
42