fsdev-proxy-helper: avoid TOC/TOU race
[qemu.git] / tests / tcg / xtensa / test_interrupt.S
blob334ddab28718f3afaf963aa34cc6c7d9da0a7ddf
1 #include "macros.inc"
3 test_suite interrupt
5 .macro clear_interrupts
6     movi    a2, 0
7     wsr     a2, intenable
8     wsr     a2, ccompare0
9     wsr     a2, ccompare1
10     wsr     a2, ccompare2
11     esync
12     rsr     a2, interrupt
13     wsr     a2, intclear
15     esync
16     rsr     a2, interrupt
17     assert  eqi, a2, 0
18 .endm
20 .macro check_l1
21     rsr     a2, ps
22     movi    a3, 0x1f        /* EXCM | INTMASK */
23     and     a2, a2, a3
24     assert  eqi, a2, 0x10   /* only EXCM is set for level-1 interrupt */
25     rsr     a2, exccause
26     assert  eqi, a2, 4
27 .endm
29 test rsil
30     clear_interrupts
32     rsr     a2, ps
33     rsil    a3, 7
34     rsr     a4, ps
35     assert  eq, a2, a3
36     movi    a2, 0xf
37     and     a2, a4, a2
38     assert  eqi, a2, 7
39     xor     a3, a3, a4
40     movi    a2, 0xfffffff0
41     and     a2, a3, a2
42     assert  eqi, a2, 0
43 test_end
45 test soft_disabled
46     set_vector kernel, 1f
47     clear_interrupts
49     movi    a2, 0x80
50     wsr     a2, intset
51     esync
52     rsr     a3, interrupt
53     assert  eq, a2, a3
54     wsr     a2, intclear
55     esync
56     rsr     a3, interrupt
57     assert  eqi, a3, 0
58     j       2f
60     test_fail
62 test_end
64 test soft_intenable
65     set_vector kernel, 1f
66     clear_interrupts
68     movi    a2, 0x80
69     wsr     a2, intset
70     esync
71     rsr     a3, interrupt
72     assert  eq, a2, a3
73     rsil    a3, 0
74     wsr     a2, intenable
75     esync
76     test_fail
78     check_l1
79 test_end
81 test soft_rsil
82     set_vector kernel, 1f
83     clear_interrupts
85     movi    a2, 0x80
86     wsr     a2, intset
87     esync
88     rsr     a3, interrupt
89     assert  eq, a2, a3
90     wsr     a2, intenable
91     rsil    a3, 0
92     esync
93     test_fail
95     check_l1
96 test_end
98 test soft_waiti
99     set_vector kernel, 1f
100     clear_interrupts
102     movi    a2, 0x80
103     wsr     a2, intset
104     esync
105     rsr     a3, interrupt
106     assert  eq, a2, a3
107     wsr     a2, intenable
108     waiti   0
109     test_fail
111     check_l1
112 test_end
114 test soft_user
115     set_vector kernel, 1f
116     set_vector user, 2f
117     clear_interrupts
119     movi    a2, 0x80
120     wsr     a2, intset
121     esync
122     rsr     a3, interrupt
123     assert  eq, a2, a3
124     wsr     a2, intenable
126     rsr     a2, ps
127     movi    a3, 0x20
128     or      a2, a2, a3
129     wsr     a2, ps
130     waiti   0
132     test_fail
134     check_l1
135 test_end
137 test soft_priority
138     set_vector kernel, 1f
139     set_vector level3, 2f
140     clear_interrupts
142     movi    a2, 0x880
143     wsr     a2, intenable
144     rsil    a3, 0
145     esync
146     wsr     a2, intset
147     esync
149     test_fail
151     rsr     a2, ps
152     movi    a3, 0x1f        /* EXCM | INTMASK */
153     and     a2, a2, a3
154     movi    a3, 0x13
155     assert  eq, a2, a3      /* EXCM and INTMASK are set
156                                for high-priority interrupt */
157 test_end
159 test eps_epc_rfi
160     set_vector level3, 3f
161     clear_interrupts
162     reset_ps
164     movi    a2, 0x880
165     wsr     a2, intenable
166     rsil    a3, 0
167     rsr     a3, ps
168     esync
169     wsr     a2, intset
171     esync
173     test_fail
175     rsr     a2, eps3
176     assert  eq, a2, a3
177     rsr     a2, epc3
178     movi    a3, 1b
179     assert  ge, a2, a3
180     movi    a3, 2b
181     assert  ge, a3, a2
182     movi    a2, 4f
183     wsr     a2, epc3
184     movi    a2, 0x40003
185     wsr     a2, eps3
186     rfi     3
187     test_fail
189     rsr     a2, ps
190     movi    a3, 0x40003
191     assert  eq, a2, a3
192 test_end
194 test_suite_end