Synchronize sourceware version of the libiberty sources with the master gcc versions.
[binutils-gdb.git] / sim / testsuite / sh / fmov.s
blob29c51b5d1e595b182ae248f54285924553dc8908
1 # sh testcase for all fmov instructions
2 # mach: sh
3 # as(sh): -defsym sim_cpu=0
5 .include "testutils.inc"
7 .macro init
8 fldi0 fr0
9 fldi1 fr1
10 fldi1 fr2
11 fldi1 fr3
12 .endm
14 start
16 fmov1: # Test fr -> fr.
17 set_grs_a5a5
18 set_fprs_a5a5
19 init
20 single_prec
21 sz_32
22 fmov fr0, fr1
23 # Ensure fr0 and fr1 are now equal.
24 fcmp/eq fr0, fr1
25 bt fmov2
26 fail
28 fmov2: # Test dr -> dr.
29 init
30 double_prec
31 sz_64
32 fmov dr0, dr2
33 # Ensure dr0 and dr2 are now equal.
34 fcmp/eq dr0, dr2
35 bt fmov3
36 fail
38 fmov3: # Test dr -> xd and xd -> dr.
39 init
40 sz_64
41 fmov dr0, xd0
42 # Ensure dr0 and xd0 are now equal.
43 fmov xd0, dr2
44 fcmp/eq dr0, dr2
45 bt fmov4
46 fail
48 fmov4: # Test xd -> xd.
49 init
50 sz_64
51 double_prec
52 fmov dr0, xd0
53 fmov xd0, xd2
54 fmov xd2, dr2
55 # Ensure dr0 and dr2 are now equal.
56 fcmp/eq dr0, dr2
57 bt .L0
58 fail
60 # FIXME: test fmov.s fr -> @gr, fmov dr -> @gr
61 # FIXME: test fmov.s @gr -> fr, fmov @gr -> dr
62 # FIXME: test fmov.s @gr+ -> fr, fmov @gr+ -> dr
63 # FIXME: test fmov.s fr -> @-gr, fmov dr -> @-gr
64 # FIXME: test fmov.s @(r0,gr) -> fr, fmov @(r0,gr) -> dr
65 # FIXME: test fmov.s fr -> @(r0,gr), fmov dr -> @(r0,gr)
67 .L0:
68 test_grs_a5a5
69 sz_32
70 single_prec
71 assert_fpreg_i 0, fr0
72 assert_fpreg_i 1, fr1
73 assert_fpreg_i 0, fr2
74 assert_fpreg_i 1, fr3
75 test_fpr_a5a5 fr4
76 test_fpr_a5a5 fr5
77 test_fpr_a5a5 fr6
78 test_fpr_a5a5 fr7
79 test_fpr_a5a5 fr8
80 test_fpr_a5a5 fr9
81 test_fpr_a5a5 fr10
82 test_fpr_a5a5 fr11
83 test_fpr_a5a5 fr12
84 test_fpr_a5a5 fr13
85 test_fpr_a5a5 fr14
86 test_fpr_a5a5 fr15
88 fmov5: # Test fr -> @rn and @rn -> fr.
89 init
90 sz_32
91 single_prec
92 # FIXME! Use a reserved memory location!
93 mov #40, r0
94 shll8 r0
95 fmov fr0, @r0
96 fmov @r0, fr1
97 fcmp/eq fr0, fr1
98 bt fmov6
99 fail
101 fmov6: # Test dr -> @rn and @rn -> dr.
102 init
103 sz_64
104 double_prec
105 mov #40, r0
106 shll8 r0
107 fmov dr0, @r0
108 fmov @r0, dr2
109 fcmp/eq dr0, dr2
110 bt fmov7
111 fail
113 fmov7: # Test xd -> @rn and @rn -> xd.
114 init
115 sz_64
116 double_prec
117 mov #40, r0
118 shll8 r0
119 fmov dr0, xd0
120 fmov xd0, @r0
121 fmov @r0, xd2
122 fmov xd2, dr2
123 fcmp/eq dr0, dr2
124 bt fmov8
125 fail
127 fmov8: # Test fr -> @-rn.
128 init
129 sz_32
130 single_prec
131 mov #40, r0
132 shll8 r0
133 # Preserve.
134 mov r0, r1
135 fmov fr0, @-r0
136 fmov @r0, fr2
137 fcmp/eq fr0, fr2
138 bt f8b
139 fail
140 f8b: # check pre-dec.
141 add #4, r0
142 cmp/eq r0, r1
143 bt fmov9
144 fail
146 fmov9: # Test dr -> @-rn.
147 init
148 sz_64
149 double_prec
150 mov #40, r0
151 shll8 r0
152 # Preserve r0.
153 mov r0, r1
154 fmov dr0, @-r0
155 fmov @r0, dr2
156 fcmp/eq dr0, dr2
157 bt f9b
158 fail
159 f9b: # check pre-dec.
160 add #8, r0
161 cmp/eq r0, r1
162 bt fmov10
163 fail
165 fmov10: # Test xd -> @-rn.
166 init
167 sz_64
168 double_prec
169 mov #40, r0
170 shll8 r0
171 # Preserve r0.
172 mov r0, r1
173 fmov dr0, xd0
174 fmov xd0, @-r0
175 fmov @r0, xd2
176 fmov xd2, dr2
177 fcmp/eq dr0, dr2
178 bt f10b
179 fail
180 f10b: # check pre-dec.
181 add #8, r0
182 cmp/eq r0, r1
183 bt fmov11
184 fail
186 fmov11: # Test @rn+ -> fr.
187 init
188 sz_32
189 single_prec
190 mov #40, r0
191 shll8 r0
192 # Preserve r0.
193 mov r0, r1
194 fmov fr0, @r0
195 fmov @r0+, fr2
196 fcmp/eq fr0, fr2
197 bt f11b
198 fail
199 f11b: # check post-inc.
200 add #4, r1
201 cmp/eq r0, r1
202 bt fmov12
203 fail
205 fmov12: # Test @rn+ -> dr.
206 init
207 sz_64
208 double_prec
209 mov #40, r0
210 shll8 r0
211 # preserve r0.
212 mov r0, r1
213 fmov dr0, @r0
214 fmov @r0+, dr2
215 fcmp/eq dr0, dr2
216 bt f12b
217 fail
218 f12b: # check post-inc.
219 add #8, r1
220 cmp/eq r0, r1
221 bt fmov13
222 fail
224 fmov13: # Test @rn -> xd.
225 init
226 sz_64
227 double_prec
228 mov #40, r0
229 shll8 r0
230 # Preserve r0.
231 mov r0, r1
232 fmov dr0, xd0
233 fmov xd0, @r0
234 fmov @r0+, xd2
235 fmov xd2, dr2
236 fcmp/eq dr0, dr2
237 bt f13b
238 fail
239 f13b:
240 add #8, r1
241 cmp/eq r0, r1
242 bt fmov14
243 fail
245 fmov14: # Test fr -> @(r0,rn), @(r0, rn) -> fr.
246 init
247 sz_32
248 single_prec
249 mov #40, r0
250 shll8 r0
251 mov #0, r1
252 fmov fr0, @(r0, r1)
253 fmov @(r0, r1), fr1
254 fcmp/eq fr0, fr1
255 bt fmov15
256 fail
258 fmov15: # Test dr -> @(r0, rn), @(r0, rn) -> dr.
259 init
260 sz_64
261 double_prec
262 mov #40, r0
263 shll8 r0
264 mov #0, r1
265 fmov dr0, @(r0, r1)
266 fmov @(r0, r1), dr2
267 fcmp/eq dr0, dr2
268 bt fmov16
269 fail
271 fmov16: # Test xd -> @(r0, rn), @(r0, rn) -> xd.
272 init
273 sz_64
274 double_prec
275 mov #40, r0
276 shll8 r0
277 mov #0, r1
278 fmov dr0, xd0
279 fmov xd0, @(r0, r1)
280 fmov @(r0, r1), xd2
281 fmov xd2, dr2
282 fcmp/eq dr0, dr2
283 bt .L1
284 fail
285 .L1:
286 assertreg0 0x2800
287 assertreg 0, r1
288 test_gr_a5a5 r2
289 test_gr_a5a5 r3
290 test_gr_a5a5 r4
291 test_gr_a5a5 r5
292 test_gr_a5a5 r6
293 test_gr_a5a5 r7
294 test_gr_a5a5 r8
295 test_gr_a5a5 r9
296 test_gr_a5a5 r10
297 test_gr_a5a5 r11
298 test_gr_a5a5 r12
299 test_gr_a5a5 r13
300 test_gr_a5a5 r14
302 sz_32
303 single_prec
304 assert_fpreg_i 0, fr0
305 assert_fpreg_i 1, fr1
306 assert_fpreg_i 0, fr2
307 assert_fpreg_i 1, fr3
308 test_fpr_a5a5 fr4
309 test_fpr_a5a5 fr5
310 test_fpr_a5a5 fr6
311 test_fpr_a5a5 fr7
312 test_fpr_a5a5 fr8
313 test_fpr_a5a5 fr9
314 test_fpr_a5a5 fr10
315 test_fpr_a5a5 fr11
316 test_fpr_a5a5 fr12
317 test_fpr_a5a5 fr13
318 test_fpr_a5a5 fr14
319 test_fpr_a5a5 fr15
321 pass
322 exit 0