Upload Tizen:Base source
[external/gdb.git] / sim / testsuite / sim / sh64 / compact / fmov.cgs
1 # sh testcase for all fmov instructions
2 # mach: all
3 # as: -isa=shcompact
4 # ld: -m shelf32
5
6         .include "compact/testutils.inc"
7
8         .macro init
9         fldi0 fr0
10         fldi1 fr2
11         .endm
12
13         # Set the SZ (SiZe) bit in the fpscr.
14         .macro _setsz
15         sts fpscr, r7
16         mov #16, r8
17         shll16 r8
18         or r8, r7
19         lds r7, fpscr
20         .endm
21
22         # Clear the SZ bit.
23         .macro _clrsz
24         sts fpscr, r7
25         mov #16, r8
26         shll16 r8
27         not r8, r8
28         and r8, r7
29         lds r7, fpscr
30         .endm
31         start
32
33 fmov1:  # Test fr -> fr.
34         init
35         _clrpr
36         _clrsz
37         fmov fr0, fr10
38         # Ensure fr0 and fr10 are now equal.
39         fcmp/eq fr0, fr10
40         bt fmov2
41         fail
42
43 fmov2:  # Test dr -> dr.
44         init
45         _setpr
46         _setsz
47         fmov dr0, dr2
48         # Ensure dr0 and dr2 are now equal.
49         fcmp/eq dr0, dr2
50         bt fmov3
51         fail
52
53 fmov3:  # Test dr -> xd and xd -> dr.
54         init
55         _setsz
56         fmov dr0, xd0
57         # Ensure dr0 and xd0 are now equal.
58         fmov xd0, dr2
59         fcmp/eq dr0, dr2
60         bt fmov4
61         fail
62
63 fmov4:  # Test xd -> xd.
64         init
65         _setsz
66         _setpr
67         fmov dr0, xd0
68         fmov xd0, xd2
69         fmov xd2, dr2
70         # Ensure dr0 and dr2 are now equal.
71         fcmp/eq dr0, dr2
72         bt fmov5
73         fail
74
75 fmov5:  # Test fr -> @rn and @rn -> fr.
76         init
77         _clrsz
78         _clrpr
79         mov #40, r0
80         shll8 r0
81         fmov fr0, @r0
82         fmov @r0, fr1
83         fcmp/eq fr0, fr1
84         bt fmov6
85         fail
86
87 fmov6:  # Test dr -> @rn and @rn -> dr.
88         init
89         _setsz
90         _setpr
91         mov #40, r0
92         shll8 r0
93         fmov dr0, @r0
94         fmov @r0, dr2
95         fcmp/eq dr0, dr2
96         bt fmov7
97         fail
98
99 fmov7:  # Test xd -> @rn and @rn -> xd.
100         init
101         _setsz
102         _setpr
103         mov #40, r0
104         shll8 r0
105         fmov dr0, xd0
106         fmov xd0, @r0
107         fmov @r0, xd2
108         fmov xd2, dr2
109         fcmp/eq dr0, dr2
110         bt fmov8
111         fail
112
113 fmov8:  # Test fr -> @-rn.
114         init
115         _clrsz
116         _clrpr
117         mov #40, r0
118         shll8 r0
119         # Preserve.
120         mov r0, r1
121         fmov fr0, @-r0
122         fmov @r0, fr2
123         fcmp/eq fr0, fr2
124         bt f8b
125         fail
126 f8b:    # check pre-dec.
127         add #4, r0
128         cmp/eq r0, r1
129         bt fmov9
130         fail
131
132 fmov9:  # Test dr -> @-rn.
133         init
134         _setsz
135         _setpr
136         mov #40, r0
137         shll8 r0
138         # Preserve r0.
139         mov r0, r1
140         fmov dr0, @-r0
141         fmov @r0, dr2
142         fcmp/eq dr0, dr2
143         bt f9b
144         fail
145 f9b:    # check pre-dec.
146         add #8, r0
147         cmp/eq r0, r1
148         bt fmov10
149         fail
150
151 fmov10: # Test xd -> @-rn.
152         init
153         _setsz
154         _setpr
155         mov #40, r0
156         shll8 r0
157         # Preserve r0.
158         mov r0, r1
159         fmov dr0, xd0
160         fmov xd0, @-r0
161         fmov @r0, xd2
162         fmov xd2, dr2
163         fcmp/eq dr0, dr2
164         bt f10b
165         fail
166 f10b:   # check pre-dec.
167         add #8, r0
168         cmp/eq r0, r1
169         bt fmov11
170         fail
171
172 fmov11: # Test @rn+ -> fr.
173         init
174         _clrsz
175         _clrpr
176         mov #40, r0
177         shll8 r0
178         # Preserve r0.
179         mov r0, r1
180         fmov fr0, @r0
181         fmov @r0+, fr2
182         fcmp/eq fr0, fr2
183         bt f11b
184         fail
185 f11b:   # check post-inc.
186         add #4, r1
187         cmp/eq r0, r1
188         bt fmov12
189         fail
190
191 fmov12: # Test @rn+ -> dr.
192         init
193         _setsz
194         _setpr
195         mov #40, r0
196         shll8 r0
197         # preserve r0.
198         mov r0, r1
199         fmov dr0, @r0
200         fmov @r0+, dr2
201         fcmp/eq dr0, dr2
202         bt f12b
203         fail
204 f12b:   # check post-inc.
205         add #8, r1
206         cmp/eq r0, r1
207         bt fmov13
208         fail
209
210 fmov13: # Test @rn -> xd.
211         init
212         _setsz
213         _setpr
214         mov #40, r0
215         shll8 r0
216         # Preserve r0.
217         mov r0, r1
218         fmov dr0, xd0
219         fmov xd0, @r0
220         fmov @r0+, xd2
221         fmov xd2, dr2
222         fcmp/eq dr0, dr2
223         bt f13b
224         fail
225 f13b:
226         add #8, r1
227         cmp/eq r0, r1
228         bt fmov14
229         fail
230
231 fmov14: # Test fr -> @(r0,rn), @(r0, rn) -> fr.
232         init
233         _clrsz
234         _clrpr
235         mov #40, r0
236         shll8 r0
237         mov #0, r1
238         fmov fr0, @(r0, r1)
239         fmov @(r0, r1), fr1
240         fcmp/eq fr0, fr1
241         bt fmov15
242         fail
243
244 fmov15: # Test dr -> @(r0, rn), @(r0, rn) -> dr.
245         init
246         _setsz
247         _setpr
248         mov #40, r0
249         shll8 r0
250         mov #0, r1
251         fmov dr0, @(r0, r1)
252         fmov @(r0, r1), dr2
253         fcmp/eq dr0, dr2
254         bt fmov16
255         fail
256
257 fmov16: # Test xd -> @(r0, rn), @(r0, rn) -> xd.
258         init
259         _setsz
260         _setpr
261         mov #40, r0
262         shll8 r0
263         mov #0, r1
264         fmov dr0, xd0
265         fmov xd0, @(r0, r1)
266         fmov @(r0, r1), xd2
267         fmov xd2, dr2
268         fcmp/eq dr0, dr2
269         bt okay
270         fail
271
272 okay:
273         pass