1 from openpower
.test
.common
import TestAccumulatorBase
, skip_case
2 from openpower
.endian
import bigendian
3 from openpower
.simulator
.program
import Program
4 from hashlib
import sha256
9 sha256(bytes(v
, encoding
='utf-8')).digest(),
14 class BitManipTestCase(TestAccumulatorBase
):
15 def do_case_ternlogi(self
, rt_v
, ra_v
, rb_v
, imm
):
22 instr
= (instr
<< 5) | rt
23 instr
= (instr
<< 5) | ra
24 instr
= (instr
<< 5) | rb
25 instr
= (instr
<< 8) | imm
26 instr
= (instr
<< 3) | xo
27 asm
= f
"ternlogi {rt}, {ra}, {rb}, {imm}"
28 lst
= [f
".4byte {hex(instr)} # {asm}"]
29 initial_regs
= [0] * 32
30 initial_regs
[3] = rt_v
% 2 ** 64
31 initial_regs
[4] = ra_v
% 2 ** 64
32 initial_regs
[5] = rb_v
% 2 ** 64
33 self
.add_case(Program(lst
, bigendian
), initial_regs
)
35 def case_ternlogi_0(self
):
36 self
.do_case_ternlogi(0x8000_0000_FFFF_0000,
37 0x8000_0000_FF00_FF00,
38 0x8000_0000_F0F0_F0F0, 0x80)
40 def case_ternlogi_FF(self
):
41 self
.do_case_ternlogi(0, 0, 0, 0xFF)
43 def case_ternlogi_random(self
):
45 imm
= hash_256(f
"ternlogi imm {i}") & 0xFF
46 rt_v
= hash_256(f
"ternlogi rt {i}") % 2 ** 64
47 ra_v
= hash_256(f
"ternlogi ra {i}") % 2 ** 64
48 rb_v
= hash_256(f
"ternlogi rb {i}") % 2 ** 64
49 self
.do_case_ternlogi(rt_v
, ra_v
, rb_v
, imm
)