filename | test/sh4/float.s |
changeset | 357:3592a10b3242 |
next | 358:65043a8f5785 |
author | nkeynes |
date | Tue Feb 13 08:34:27 2007 +0000 (17 years ago) |
permissions | -rw-r--r-- |
last change | Add tests for FLOAT and FTRC Comment out user-mode exception test (broken) |
view | annotate | diff | log | raw |
1 .section .text
2 .include "sh4/inc.s"
3 !
4 ! Test float
6 .global _test_float
7 _test_float:
8 start_test
10 xor r0,r0
11 lds r0, fpscr
13 test_float_1: ! Load 1.0 single precision
14 add #1, r12
15 add #1, r0
16 fldi0 fr0
17 fldi0 fr1
18 lds r0, fpul
19 float fpul, fr0
20 sts fpul, r1
21 cmp/eq r0, r1
22 bf test_float_1_fail
23 flds fr0, fpul
24 sts fpul, r0
25 mov.l test_float_1_result, r1
26 cmp/eq r0,r1
27 bf test_float_1_fail
28 flds fr1, fpul
29 sts fpul, r0
30 tst r0, r0
31 bt test_float_2
32 test_float_1_fail:
33 fail test_float_str_k
34 bra test_float_2
35 nop
37 .align 4
38 test_float_1_result:
39 .long 0x3F800000
41 test_float_2: ! Load -1.0 double precision
42 add #1, r12
43 fldi0 fr0
44 fldi1 fr1
45 setpr
46 xor r0,r0
47 add #-1, r0
48 lds r0, fpul
49 float fpul, fr0
50 sts fpul, r1
51 cmp/eq r0, r1
52 bf test_float_2_fail
53 flds fr0, fpul
54 sts fpul, r0
55 flds fr1, fpul
56 sts fpul, r2
57 mov.l test_float_2_result_a, r1
58 mov.l test_float_2_result_b, r3
59 cmp/eq r0,r1
60 bf test_float_2_fail
61 cmp/eq r2,r3
62 bt test_float_3
63 test_float_2_fail:
64 fail test_float_str_k
65 bra test_float_3
66 nop
68 test_float_2_result_a:
69 .long 0xBFF00000
70 test_float_2_result_b:
71 .long 0x00000000
73 test_float_3: ! pr=0, sz=1
74 add #1, r12
75 clrpr
76 fldi0 fr0
77 fldi0 fr1
78 fschg
79 mov.l test_float_3_input, r0
80 lds r0, fpul
81 float fpul, fr0
82 sts fpul, r1
83 cmp/eq r0, r1
84 bf test_float_3_fail
85 flds fr0, fpul
86 sts fpul, r0
87 mov.l test_float_3_result, r1
88 cmp/eq r0, r1
89 bf test_float_3_fail
90 flds fr1, fpul
91 sts fpul, r0
92 tst r0, r0
93 bt test_float_4
94 test_float_3_fail:
95 fail test_float_str_k
96 bra test_float_4
97 nop
99 test_float_3_input:
100 .long 0xCCCCCCCC
101 test_float_3_result:
102 .long 0xCE4CCCCD
104 test_float_4: ! pr=1, sz=1
105 add #1, r12
106 fldi0 fr0
107 fldi1 fr1
108 setpr
109 mov.l test_float_4_input, r0
110 lds r0, fpul
111 float fpul, fr0
112 sts fpul, r1
113 cmp/eq r0, r1
114 bf test_float_4_fail
115 flds fr0, fpul
116 sts fpul, r0
117 flds fr1, fpul
118 sts fpul, r2
119 mov.l test_float_4_result_a, r1
120 mov.l test_float_4_result_b, r3
121 cmp/eq r0,r1
122 bf test_float_4_fail
123 cmp/eq r2,r3
124 bt test_float_5
125 test_float_4_fail:
126 fail test_float_str_k
127 bra test_float_5
128 nop
130 test_float_4_input:
131 .long 0x7FFFFFFF
132 test_float_4_result_a:
133 .long 0x41DFFFFF
134 test_float_4_result_b:
135 .long 0xFFC00000
138 test_float_5: ! test w/ max +int, sz=0, pr=0, fr=1
139 add #1, r12
140 xor r0,r0
141 lds r0, fpscr
142 fldi0 fr0
143 fldi0 fr1
144 frchg
145 fldi0 fr0
146 fldi0 fr1
147 mov.l test_float_5_input, r0
148 lds r0, fpul
149 float fpul, fr0
150 sts fpul, r1
151 cmp/eq r0, r1
152 bf test_float_5_fail
153 flds fr0, fpul
154 sts fpul, r0
155 mov.l test_float_5_result, r1
156 cmp/eq r0, r1
157 bf test_float_5_fail
158 flds fr1, fpul
159 sts fpul, r0
160 tst r0, r0
161 bf test_float_5_fail
162 lds r0, fpscr
163 flds fr0, fpul
164 sts fpul, r0
165 tst r0, r0
166 bt test_float_6
167 test_float_5_fail:
168 fail test_float_str_k
169 bra test_float_6
170 nop
172 test_float_5_input:
173 .long 0x7FFFFFFF
174 test_float_5_result:
175 .long 0x4F000000
177 test_float_6: ! Test max -int
178 add #1, r12
179 mov.l test_float_6_input, r0
180 lds r0, fpul
181 float fpul, fr5
182 sts fpul, r1
183 cmp/eq r0, r1
184 bf test_float_6_fail
185 flds fr5, fpul
186 sts fpul, r2
187 mov.l test_float_6_result, r1
188 cmp/eq r1, r2
189 bt test_float_end
191 test_float_6_fail:
192 fail test_float_str_k
193 bra test_float_end
194 nop
196 test_float_6_input:
197 .long 0x80000000
198 test_float_6_result:
199 .long 0xCF000000
201 test_float_end:
202 end_test test_float_str_k
204 test_float_str:
205 .string "FLOAT"
207 .align 4
208 test_float_str_k:
209 .long test_float_str
.