1#include "macros.inc"
2
3test_suite quo
4
5#if XCHAL_HAVE_DIV32
6
7test quou_pp
8    movi    a2, 0x5a5a137f
9    mov     a3, a2
10    movi    a4, 0x137f5a5a
11    movi    a6, 0x4
12    quou    a5, a2, a4
13    assert  eq, a5, a6
14    quou    a2, a2, a4
15    assert  eq, a2, a6
16    quou    a4, a3, a4
17    assert  eq, a4, a6
18test_end
19
20test quou_np
21    movi    a2, 0xa5a5137f
22    mov     a3, a2
23    movi    a4, 0x137f5a5a
24    movi    a6, 0x8
25    quou    a5, a2, a4
26    assert  eq, a5, a6
27    quou    a2, a2, a4
28    assert  eq, a2, a6
29    quou    a4, a3, a4
30    assert  eq, a4, a6
31test_end
32
33test quou_pn
34    movi    a2, 0x5a5a137f
35    mov     a3, a2
36    movi    a4, 0xf7315a5a
37    movi    a6, 0
38    quou    a5, a2, a4
39    assert  eq, a5, a6
40    quou    a2, a2, a4
41    assert  eq, a2, a6
42    quou    a4, a3, a4
43    assert  eq, a4, a6
44test_end
45
46test quou_nn
47    movi    a2, 0xf7315a5a
48    mov     a3, a2
49    movi    a4, 0xa5a5137f
50    movi    a6, 0x1
51    quou    a5, a2, a4
52    assert  eq, a5, a6
53    quou    a2, a2, a4
54    assert  eq, a2, a6
55    quou    a4, a3, a4
56    assert  eq, a4, a6
57test_end
58
59test quou_exc
60    set_vector kernel, 2f
61    movi    a2, 0xf7315a5a
62    movi    a4, 0x00000000
631:
64    quou    a5, a2, a4
65    test_fail
662:
67    rsr     a2, exccause
68    assert  eqi, a2, 6 /* INTEGER_DIVIDE_BY_ZERO_CAUSE */
69    rsr     a2, epc1
70    movi    a3, 1b
71    assert  eq, a2, a3
72test_end
73
74test quos_pp
75    movi    a2, 0x5a5a137f
76    mov     a3, a2
77    movi    a4, 0x137f5a5a
78    movi    a6, 0x4
79    quos    a5, a2, a4
80    assert  eq, a5, a6
81    quos    a2, a2, a4
82    assert  eq, a2, a6
83    quos    a4, a3, a4
84    assert  eq, a4, a6
85test_end
86
87test quos_np
88    movi    a2, 0xa5a5137f
89    mov     a3, a2
90    movi    a4, 0x137f5a5a
91    movi    a6, 0xfffffffc
92    quos    a5, a2, a4
93    assert  eq, a5, a6
94    quos    a2, a2, a4
95    assert  eq, a2, a6
96    quos    a4, a3, a4
97    assert  eq, a4, a6
98test_end
99
100test quos_pn
101    movi    a2, 0x5a5a137f
102    mov     a3, a2
103    movi    a4, 0xf7315a5a
104    movi    a6, 0xfffffff6
105    quos    a5, a2, a4
106    assert  eq, a5, a6
107    quos    a2, a2, a4
108    assert  eq, a2, a6
109    quos    a4, a3, a4
110    assert  eq, a4, a6
111test_end
112
113test quos_nn
114    movi    a2, 0xf7315a5a
115    mov     a3, a2
116    movi    a4, 0xa5a5137f
117    movi    a6, 0
118    quos    a5, a2, a4
119    assert  eq, a5, a6
120    quos    a2, a2, a4
121    assert  eq, a2, a6
122    quos    a4, a3, a4
123    assert  eq, a4, a6
124test_end
125
126test quos_over
127    movi    a2, 0x80000000
128    movi    a4, 0xffffffff
129    movi    a6, 0x80000000
130    quos    a5, a2, a4
131    assert  eq, a5, a6
132test_end
133
134test quos_exc
135    set_vector kernel, 2f
136    movi    a2, 0xf7315a5a
137    movi    a4, 0x00000000
1381:
139    quos    a5, a2, a4
140    test_fail
1412:
142    rsr     a2, exccause
143    assert  eqi, a2, 6 /* INTEGER_DIVIDE_BY_ZERO_CAUSE */
144    rsr     a2, epc1
145    movi    a3, 1b
146    assert  eq, a2, a3
147test_end
148
149#endif
150
151test_suite_end
152