binutils/
[external/binutils.git] / sim / testsuite / sim / sh / fmov.s
1 # sh testcase for all fmov instructions
2 # mach: sh
3 # as(sh):       -defsym sim_cpu=0
4
5         .include "testutils.inc"
6
7         .macro init
8         fldi0   fr0
9         fldi1   fr1
10         fldi1   fr2
11         fldi1   fr3
12         .endm
13
14         start
15
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
27
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
37
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
47
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
59
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)
66         
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
87
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
100
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
112
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
126
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
145
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
164
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
185
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
204
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
223
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
244
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
257
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
270
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
301
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
320
321         pass
322         exit 0