1 from openpower
.simulator
.program
import Program
2 from openpower
.endian
import bigendian
3 from openpower
.consts
import MSR
5 from openpower
.test
.common
import TestAccumulatorBase
9 class TrapTestCase(TestAccumulatorBase
):
11 def case_0_hrfid(self
):
13 initial_regs
= [0] * 32
15 initial_sprs
= {'HSRR0': 0x12345678, 'HSRR1': 0x5678}
16 self
.add_case(Program(lst
, bigendian
),
17 initial_regs
, initial_sprs
)
19 def case_1_rfid(self
):
21 initial_regs
= [0] * 32
23 initial_sprs
= {'SRR0': 0x12345678, 'SRR1': 0x5678}
24 self
.add_case(Program(lst
, bigendian
),
25 initial_regs
, initial_sprs
)
27 def case_2_rfid(self
):
29 initial_regs
= [0] * 32
31 initial_sprs
= {'SRR0': 0x12345678, 'SRR1': 0xb000000000001033}
32 self
.add_case(Program(lst
, bigendian
),
33 initial_regs
, initial_sprs
,
34 initial_msr
=0xa000000000000003)
36 def case_0_trap_eq_imm(self
):
37 insns
= ["twi", "tdi"]
39 choice
= random
.choice(insns
)
40 lst
= [f
"{choice} 4, 1, %d" % i
] # TO=4: trap equal
41 initial_regs
= [0] * 32
43 self
.add_case(Program(lst
, bigendian
), initial_regs
)
45 def case_0_trap_eq(self
):
49 lst
= [f
"{choice} 4, 1, 2"] # TO=4: trap equal
50 initial_regs
= [0] * 32
53 self
.add_case(Program(lst
, bigendian
), initial_regs
)
55 def case_3_mtmsr_0(self
):
57 initial_regs
= [0] * 32
58 initial_regs
[1] = 0xffffffffffffffff
59 self
.add_case(Program(lst
, bigendian
), initial_regs
)
61 def case_3_mtmsr_1(self
):
63 initial_regs
= [0] * 32
64 initial_regs
[1] = 0xffffffffffffffff
65 self
.add_case(Program(lst
, bigendian
), initial_regs
)
67 def case_4_mtmsrd_0_linux(self
):
69 initial_regs
= [0] * 32
70 initial_regs
[1] = 0xb000000000001033
71 self
.add_case(Program(lst
, bigendian
), initial_regs
,
72 initial_msr
=0xa000000000000003)
74 def case_4_mtmsrd_0(self
):
76 initial_regs
= [0] * 32
77 initial_regs
[1] = 0xffffffffffffffff
78 self
.add_case(Program(lst
, bigendian
), initial_regs
)
80 def case_5_mtmsrd_1(self
):
82 initial_regs
= [0] * 32
83 initial_regs
[1] = 0xffffffffffffffff
84 self
.add_case(Program(lst
, bigendian
), initial_regs
)
86 def case_6_mtmsr_priv_0(self
):
88 initial_regs
= [0] * 32
89 initial_regs
[1] = 0xffffffffffffffff
90 msr
= 1 << MSR
.PR
# set in "problem state"
91 self
.add_case(Program(lst
, bigendian
), initial_regs
,
94 def case_7_rfid_priv_0(self
):
96 initial_regs
= [0] * 32
98 initial_sprs
= {'SRR0': 0x12345678, 'SRR1': 0x5678}
99 msr
= 1 << MSR
.PR
# set in "problem state"
100 self
.add_case(Program(lst
, bigendian
),
101 initial_regs
, initial_sprs
,
104 def case_8_mfmsr(self
):
106 initial_regs
= [0] * 32
107 msr
= (~
(1 << MSR
.PR
)) & 0xffffffffffffffff
108 self
.add_case(Program(lst
, bigendian
), initial_regs
,
111 def case_9_mfmsr_priv(self
):
113 initial_regs
= [0] * 32
114 msr
= 1 << MSR
.PR
# set in "problem state"
115 self
.add_case(Program(lst
, bigendian
), initial_regs
,
118 def case_999_illegal(self
):
119 # ok, um this is a bit of a cheat: use an instruction we know
120 # is not implemented by either ISACaller or the core
122 "mtmsr 1,1"] # should not get executed
123 initial_regs
= [0] * 32
124 self
.add_case(Program(lst
, bigendian
), initial_regs
)