2 def andor(imm
, a
, b
, ainv
, binv
):
3 inbits
= [a
, b
, ainv
, binv
]
6 if ((imm
>> i
) & 0b1) & inbits
[i
]:
10 def dorow(imm8
, step_i
, chunk_size
):
13 if (j
&chunk_size
) == 0:
18 b
= (step_i
>>(j ^ chunk_size
))&1
19 res
= andor(imm
, a
, b
, ~a
, ~b
)
20 #print(j, bin(imm), a, b, res)
22 #print (" ", chunk_size, bin(step_o))
25 def grevlut64(RA
, RB
, imm
, iv
):
28 x
= 0x5555555555555555
33 #print (bin(shamt), bin(63))
37 x
= dorow(imm
, x
, step
)
38 return x
& ((1<<64)-1)
41 if __name__
== '__main__':
45 print (andor(imm
, a
, b
, ~a
, ~b
))
50 x
= grevlut64(None, RB
, imm
, 1)
51 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
56 x
= grevlut64(None, RB
, imm
, 1)
57 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
64 x
= grevlut64(None, RB
, imm
, 1)
65 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
70 x
= grevlut64(None, RB
, imm
, 1)
71 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
77 x
= grevlut64(None, RB
, imm
, 0)
78 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
83 x
= grevlut64(None, RB
, imm
, 0)
84 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
89 x
= grevlut64(None, RB
, imm
, 1)
90 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
95 x
= grevlut64(None, RB
, imm
, 0)
96 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
101 x
= grevlut64(None, RB
, imm
, 1)
102 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))
107 x
= grevlut64(None, RB
, imm
, 1)
108 print ("grevlut", bin(RB
), bin(imm
), hex(x
), "\n", bin(x
))