5 def dorow(imm8
, step_i
, chunk_size
):
8 if (j
&chunk_size
) == 0:
13 b
= (step_i
>>(j ^ chunk_size
))&1
15 #print(j, bin(imm), a, b, res)
17 #print (" ", chunk_size, bin(step_o))
20 def grevlut64(RA
, RB
, imm
, iv
):
24 #print (bin(shamt), bin(63))
28 x
= dorow(imm
, x
, step
)
29 return x
& ((1<<64)-1)
32 if __name__
== '__main__':
34 RA
= 0x5555555555555555
37 x
= grevlut64(RA
, RB
, imm
, 1)
38 print ("grevlut", hex(RA
), bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
43 x
= grevlut64(RA
, RB
, imm
, 1)
44 print ("grevlut", hex(RA
), bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
49 x
= grevlut64(RA
, RB
, imm
, 1)
50 print ("grevlut", hex(RA
), bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
56 x
= grevlut64(RA
, RB
, imm
, 0)
57 print ("grevlut", hex(RA
), bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
62 x
= grevlut64(RA
, RB
, imm
, 0)
63 print ("grevlut", hex(RA
), bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
67 RA
= 0x5555555555555555
69 x
= grevlut64(RA
, RB
, imm
, 1)
70 print ("grevlut", hex(RA
), bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))