1 from openpower
.sv
.trans
.svp64
import SVP64Asm
2 from openpower
.test
.common
import TestAccumulatorBase
, skip_case
3 from openpower
.endian
import bigendian
4 from openpower
.simulator
.program
import Program
5 from openpower
.test
.state
import ExpectedState
6 from nmutil
.sim_util
import hash_256
9 class BitManipTestCase(TestAccumulatorBase
):
10 def do_case_ternlogi(self
, rt
, ra
, rb
, imm
):
11 lst
= [f
"ternlogi 3, 4, 5, {imm}"]
12 initial_regs
= [0] * 32
19 lst
= list(SVP64Asm(lst
, bigendian
))
20 e
= ExpectedState(pc
=4)
30 if imm
& 2 ** lut_index
:
32 e
.intregs
[3] = expected
35 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
37 def case_ternlogi_0(self
):
38 self
.do_case_ternlogi(0x8000_0000_FFFF_0000,
39 0x8000_0000_FF00_FF00,
40 0x8000_0000_F0F0_F0F0, 0x80)
42 def case_ternlogi_FF(self
):
43 self
.do_case_ternlogi(0, 0, 0, 0xFF)
45 def case_ternlogi_random(self
):
47 imm
= hash_256(f
"ternlogi imm {i}") & 0xFF
48 rt
= hash_256(f
"ternlogi rt {i}") % 2 ** 64
49 ra
= hash_256(f
"ternlogi ra {i}") % 2 ** 64
50 rb
= hash_256(f
"ternlogi rb {i}") % 2 ** 64
51 self
.do_case_ternlogi(rt
, ra
, rb
, imm
)