libqtest: Inline g_assert_no_errno()
[qemu/armbru.git] / tests / tcg / xtensa / test_interrupt.S
blob876683518ee55b9f1aabd6a5f9edcf69cdf45181
1 #include "macros.inc"
3 #define LSBIT(v) ((v) ^ ((v) & ((v) - 1)))
5 test_suite interrupt
7 .macro clear_interrupts
8     movi    a2, 0
9     wsr     a2, intenable
10     wsr     a2, ccompare0
11     wsr     a2, ccompare1
12     wsr     a2, ccompare2
13     esync
14     rsr     a2, interrupt
15     wsr     a2, intclear
17     esync
18     rsr     a2, interrupt
19     assert  eqi, a2, 0
20 .endm
22 .macro check_l1
23     rsr     a2, ps
24     movi    a3, 0x1f        /* EXCM | INTMASK */
25     and     a2, a2, a3
26     assert  eqi, a2, 0x10   /* only EXCM is set for level-1 interrupt */
27     rsr     a2, exccause
28     assert  eqi, a2, 4
29 .endm
31 test rsil
32     clear_interrupts
34     rsr     a2, ps
35     rsil    a3, 7
36     rsr     a4, ps
37     assert  eq, a2, a3
38     movi    a2, 0xf
39     and     a2, a4, a2
40     assert  eqi, a2, 7
41     xor     a3, a3, a4
42     movi    a2, 0xfffffff0
43     and     a2, a3, a2
44     assert  eqi, a2, 0
45 test_end
47 test soft_disabled
48     set_vector kernel, 1f
49     clear_interrupts
51     movi    a2, LSBIT(XCHAL_INTTYPE_MASK_SOFTWARE)
52     wsr     a2, intset
53     esync
54     rsr     a3, interrupt
55     movi    a4, ~XCHAL_INTTYPE_MASK_TIMER
56     and     a3, a3, a4
57     assert  eq, a2, a3
58     wsr     a2, intclear
59     esync
60     rsr     a3, interrupt
61     and     a3, a3, a4
62     assert  eqi, a3, 0
63     j       2f
65     test_fail
67 test_end
69 test soft_intenable
70     set_vector kernel, 1f
71     clear_interrupts
73     movi    a2, LSBIT(XCHAL_INTTYPE_MASK_SOFTWARE)
74     wsr     a2, intset
75     esync
76     rsr     a3, interrupt
77     movi    a4, ~XCHAL_INTTYPE_MASK_TIMER
78     and     a3, a3, a4
79     assert  eq, a2, a3
80     rsil    a3, 0
81     wsr     a2, intenable
82     esync
83     test_fail
85     check_l1
86 test_end
88 test soft_rsil
89     set_vector kernel, 1f
90     clear_interrupts
92     movi    a2, LSBIT(XCHAL_INTTYPE_MASK_SOFTWARE)
93     wsr     a2, intset
94     esync
95     rsr     a3, interrupt
96     movi    a4, ~XCHAL_INTTYPE_MASK_TIMER
97     and     a3, a3, a4
98     assert  eq, a2, a3
99     wsr     a2, intenable
100     rsil    a3, 0
101     esync
102     test_fail
104     check_l1
105 test_end
107 test soft_waiti
108     set_vector kernel, 1f
109     clear_interrupts
111     movi    a2, LSBIT(XCHAL_INTTYPE_MASK_SOFTWARE)
112     wsr     a2, intset
113     esync
114     rsr     a3, interrupt
115     movi    a4, ~XCHAL_INTTYPE_MASK_TIMER
116     and     a3, a3, a4
117     assert  eq, a2, a3
118     wsr     a2, intenable
119     waiti   0
120     test_fail
122     check_l1
123 test_end
125 test soft_user
126     set_vector kernel, 1f
127     set_vector user, 2f
128     clear_interrupts
130     movi    a2, LSBIT(XCHAL_INTTYPE_MASK_SOFTWARE)
131     wsr     a2, intset
132     esync
133     rsr     a3, interrupt
134     movi    a4, ~XCHAL_INTTYPE_MASK_TIMER
135     and     a3, a3, a4
136     assert  eq, a2, a3
137     wsr     a2, intenable
139     rsr     a2, ps
140     movi    a3, 0x20
141     or      a2, a2, a3
142     wsr     a2, ps
143     waiti   0
145     test_fail
147     check_l1
148 test_end
150 test soft_priority
151     set_vector kernel, 1f
152     set_vector level3, 2f
153     clear_interrupts
155     movi    a2, XCHAL_INTTYPE_MASK_SOFTWARE
156     wsr     a2, intenable
157     rsil    a3, 0
158     esync
159     wsr     a2, intset
160     esync
162     test_fail
164     rsr     a2, ps
165     movi    a3, 0x1f        /* EXCM | INTMASK */
166     and     a2, a2, a3
167     movi    a3, 0x13
168     assert  eq, a2, a3      /* EXCM and INTMASK are set
169                                for high-priority interrupt */
170 test_end
172 test eps_epc_rfi
173     set_vector level3, 3f
174     clear_interrupts
175     reset_ps
177     movi    a2, XCHAL_INTTYPE_MASK_SOFTWARE
178     wsr     a2, intenable
179     rsil    a3, 0
180     rsr     a3, ps
181     esync
182     wsr     a2, intset
184     esync
186     test_fail
188     rsr     a2, eps3
189     assert  eq, a2, a3
190     rsr     a2, epc3
191     movi    a3, 1b
192     assert  ge, a2, a3
193     movi    a3, 2b
194     assert  ge, a3, a2
195     movi    a2, 4f
196     wsr     a2, epc3
197     movi    a2, 0x40003
198     wsr     a2, eps3
199     rfi     3
200     test_fail
202     rsr     a2, ps
203     movi    a3, 0x40003
204     assert  eq, a2, a3
205 test_end
207 test_suite_end