1#include "macros.inc"
2#include "fpu.h"
3
4test_suite fp1
5
6
7
8.macro movfp fr, v
9 movi a2, \v
10 wfr \fr, a2
11.endm
12
13.macro test_ord_ex op, br, fr0, fr1, v0, v1, r, sr
14 movi a2, 0
15 wur a2, fsr
16 movfp \fr0, \v0
17 movfp \fr1, \v1
18 \op \br, \fr0, \fr1
19 movi a2, 0
20 movi a3, 1
21 movt a2, a3, \br
22 assert eqi, a2, \r
23 rur a2, fsr
24
25 movi a3, \sr
26 assert eq, a2, a3
27#else
28 assert eqi, a2, 0
29#endif
30.endm
31
32.macro test_ord op, br, fr0, fr1, v0, v1, r, sr
33 movi a2, 0
34 wur a2, fcr
35 test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r, \sr
36 movi a2, 0x7c
37 wur a2, fcr
38 test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r, \sr
39.endm
40
41.macro test_ord_all op, aa, ab, ba, aPI, PIa, aN, Na, II, IN, NI, qnan_sr
42 test_ord \op b0, f0, f1, 0x3f800000, 0x3f800000, \aa, FSR__
43 test_ord \op b1, f2, f3, 0x3f800000, 0x3fc00000, \ab, FSR__
44 test_ord \op b2, f4, f5, 0x3fc00000, 0x3f800000, \ba, FSR__
45 test_ord \op b3, f6, f7, 0x3f800000, 0x7f800000, \aPI, FSR__
46 test_ord \op b4, f8, f9, 0x7f800000, 0x3f800000, \PIa, FSR__
47 test_ord \op b5, f10, f11, 0x3f800000, 0xffc00001, \aN, \qnan_sr
48 test_ord \op b6, f12, f13, 0x3f800000, 0xff800001, \aN, FSR_V
49 test_ord \op b7, f14, f15, 0x3f800000, 0x7f800001, \aN, FSR_V
50 test_ord \op b8, f0, f1, 0x3f800000, 0x7fc00000, \aN, \qnan_sr
51 test_ord \op b9, f2, f3, 0xffc00001, 0x3f800000, \Na, \qnan_sr
52 test_ord \op b10, f4, f5, 0xff800001, 0x3f800000, \Na, FSR_V
53 test_ord \op b11, f6, f7, 0x7f800001, 0x3f800000, \Na, FSR_V
54 test_ord \op b12, f8, f9, 0x7fc00000, 0x3f800000, \Na, \qnan_sr
55 test_ord \op b13, f10, f11, 0x7f800000, 0x7f800000, \II, FSR__
56 test_ord \op b14, f12, f13, 0x7f800000, 0x7fc00000, \IN, \qnan_sr
57 test_ord \op b15, f14, f15, 0x7fc00000, 0x7f800000, \NI, \qnan_sr
58.endm
59
60test un_s
61 movi a2, 1
62 wsr a2, cpenable
63 test_ord_all un.s, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, FSR__
64test_end
65
66test oeq_s
67 test_ord_all oeq.s, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, FSR__
68test_end
69
70test ueq_s
71 test_ord_all ueq.s, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, FSR__
72test_end
73
74test olt_s
75 test_ord_all olt.s, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, FSR_V
76test_end
77
78test ult_s
79 test_ord_all ult.s, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, FSR__
80test_end
81
82test ole_s
83 test_ord_all ole.s, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, FSR_V
84test_end
85
86test ule_s
87 test_ord_all ule.s, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, FSR__
88test_end
89
90.macro test_cond op, fr0, fr1, cr, v0, v1, r
91 movfp \fr0, \v0
92 movfp \fr1, \v1
93 \op \fr0, \fr1, \cr
94 rfr a2, \fr0
95 movi a3, \r
96 assert eq, a2, a3
97.endm
98
99test moveqz_s
100 movi a3, 0
101 test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
102 movi a3, 1
103 test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0
104test_end
105
106test movnez_s
107 movi a3, 0
108 test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0
109 movi a3, 1
110 test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
111test_end
112
113test movltz_s
114 movi a3, -1
115 test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
116 movi a3, 0
117 test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0
118 movi a3, 1
119 test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0
120test_end
121
122test movgez_s
123 movi a3, -1
124 test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0
125 movi a3, 0
126 test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
127 movi a3, 1
128 test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000
129test_end
130
131test movf_s
132 olt.s b0, f0, f0
133 test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000
134 ueq.s b0, f0, f0
135 test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0
136test_end
137
138test movt_s
139 ueq.s b0, f0, f0
140 test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000
141 olt.s b0, f0, f0
142 test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0
143test_end
144
145#endif
146
147test_suite_end
148