2005-09-02 Paul Brook <paul@codesourcery.com>
[binutils.git] / gas / testsuite / gas / arm / vfp1xD_t2.s
blobf3087a37ee969b878450d81256b80fb554b426ee
1 @ VFP Instructions for v1xD variants (Single precision only)
2 @ Same as vfp1xD.s, but for Thumb-2
3 .syntax unified
4 .thumb
5 .text
6 .global F
7 F:
8 @ First we test the basic syntax and bit patterns of the opcodes.
9 @ Most of these tests deliberatly use s0/r0 to avoid setting
10 @ any more bits than necessary.
12 @ Comparison operations
14 fmstat
16 fcmpes s0, s0
17 fcmpezs s0
18 fcmps s0, s0
19 fcmpzs s0
21 @ Monadic data operations
23 fabss s0, s0
24 fcpys s0, s0
25 fnegs s0, s0
26 fsqrts s0, s0
28 @ Dyadic data operations
30 fadds s0, s0, s0
31 fdivs s0, s0, s0
32 fmacs s0, s0, s0
33 fmscs s0, s0, s0
34 fmuls s0, s0, s0
35 fnmacs s0, s0, s0
36 fnmscs s0, s0, s0
37 fnmuls s0, s0, s0
38 fsubs s0, s0, s0
40 @ Load/store operations
42 flds s0, [r0]
43 fsts s0, [r0]
45 @ Load/store multiple operations
47 fldmias r0, {s0}
48 fldmfds r0, {s0}
49 fldmias r0!, {s0}
50 fldmfds r0!, {s0}
51 fldmdbs r0!, {s0}
52 fldmeas r0!, {s0}
54 fldmiax r0, {d0}
55 fldmfdx r0, {d0}
56 fldmiax r0!, {d0}
57 fldmfdx r0!, {d0}
58 fldmdbx r0!, {d0}
59 fldmeax r0!, {d0}
61 fstmias r0, {s0}
62 fstmeas r0, {s0}
63 fstmias r0!, {s0}
64 fstmeas r0!, {s0}
65 fstmdbs r0!, {s0}
66 fstmfds r0!, {s0}
68 fstmiax r0, {d0}
69 fstmeax r0, {d0}
70 fstmiax r0!, {d0}
71 fstmeax r0!, {d0}
72 fstmdbx r0!, {d0}
73 fstmfdx r0!, {d0}
75 @ Conversion operations
77 fsitos s0, s0
78 fuitos s0, s0
80 ftosis s0, s0
81 ftosizs s0, s0
82 ftouis s0, s0
83 ftouizs s0, s0
85 @ ARM from VFP operations
87 fmrs r0, s0
88 fmrx r0, fpsid
89 fmrx r0, fpscr
90 fmrx r0, fpexc
92 @ VFP From ARM operations
94 fmsr s0, r0
95 fmxr fpsid, r0
96 fmxr fpscr, r0
97 fmxr fpexc, r0
99 @ Now we test that the register fields are updated correctly for
100 @ each class of instruction.
102 @ Single register operations (compare-zero):
104 fcmpzs s1
105 fcmpzs s2
106 fcmpzs s31
108 @ Two register comparison operations:
110 fcmps s0, s1
111 fcmps s0, s2
112 fcmps s0, s31
113 fcmps s1, s0
114 fcmps s2, s0
115 fcmps s31, s0
116 fcmps s21, s12
118 @ Two register data operations (monadic)
120 fnegs s0, s1
121 fnegs s0, s2
122 fnegs s0, s31
123 fnegs s1, s0
124 fnegs s2, s0
125 fnegs s31, s0
126 fnegs s12, s21
128 @ Three register data operations (dyadic)
130 fadds s0, s0, s1
131 fadds s0, s0, s2
132 fadds s0, s0, s31
133 fadds s0, s1, s0
134 fadds s0, s2, s0
135 fadds s0, s31, s0
136 fadds s1, s0, s0
137 fadds s2, s0, s0
138 fadds s31, s0, s0
139 fadds s12, s21, s5
141 @ Conversion operations
143 fsitos s0, s1
144 fsitos s0, s2
145 fsitos s0, s31
146 fsitos s1, s0
147 fsitos s2, s0
148 fsitos s31, s0
150 ftosis s0, s1
151 ftosis s0, s2
152 ftosis s0, s31
153 ftosis s1, s0
154 ftosis s2, s0
155 ftosis s31, s0
157 @ Move to VFP from ARM
159 fmsr s0, r1
160 fmsr s0, r7
161 fmsr s0, r14
162 fmsr s1, r0
163 fmsr s2, r0
164 fmsr s31, r0
165 fmsr s21, r7
167 fmxr fpsid, r1
168 fmxr fpsid, r14
170 @ Move to ARM from VFP
172 fmrs r0, s1
173 fmrs r0, s2
174 fmrs r0, s31
175 fmrs r1, s0
176 fmrs r7, s0
177 fmrs r14, s0
178 fmrs r9, s11
180 fmrx r1, fpsid
181 fmrx r14, fpsid
183 @ Load/store operations
185 flds s0, [r1]
186 flds s0, [r14]
187 flds s0, [r0, #0]
188 flds s0, [r0, #1020]
189 flds s0, [r0, #-1020]
190 flds s1, [r0]
191 flds s2, [r0]
192 flds s31, [r0]
193 fsts s21, [r12, #804]
195 @ Load/store multiple operations
197 fldmias r0, {s1}
198 fldmias r0, {s2}
199 fldmias r0, {s31}
200 fldmias r0, {s0-s1}
201 fldmias r0, {s0-s2}
202 fldmias r0, {s0-s31}
203 fldmias r0, {s1-s31}
204 fldmias r0, {s2-s31}
205 fldmias r0, {s30-s31}
206 fldmias r1, {s0}
207 fldmias r14, {s0}
209 fstmiax r0, {d1}
210 fstmiax r0, {d2}
211 fstmiax r0, {d15}
212 fstmiax r0, {d0-d1}
213 fstmiax r0, {d0-d2}
214 fstmiax r0, {d0-d15}
215 fstmiax r0, {d1-d15}
216 fstmiax r0, {d2-d15}
217 fstmiax r0, {d14-d15}
218 fstmiax r1, {d0}
219 fstmiax r14, {d0}
221 @ Check that we assemble all the register names correctly
223 fcmpzs s0
224 fcmpzs s1
225 fcmpzs s2
226 fcmpzs s3
227 fcmpzs s4
228 fcmpzs s5
229 fcmpzs s6
230 fcmpzs s7
231 fcmpzs s8
232 fcmpzs s9
233 fcmpzs s10
234 fcmpzs s11
235 fcmpzs s12
236 fcmpzs s13
237 fcmpzs s14
238 fcmpzs s15
239 fcmpzs s16
240 fcmpzs s17
241 fcmpzs s18
242 fcmpzs s19
243 fcmpzs s20
244 fcmpzs s21
245 fcmpzs s22
246 fcmpzs s23
247 fcmpzs s24
248 fcmpzs s25
249 fcmpzs s26
250 fcmpzs s27
251 fcmpzs s28
252 fcmpzs s29
253 fcmpzs s30
254 fcmpzs s31
256 @ Now we check the placement of the conditional execution substring.
257 @ On VFP this is always at the end of the instruction.
258 @ We use different register numbers here to check for correct
259 @ disassembly
261 @ Comparison operations
263 itttt eq
264 fmstateq
266 fcmpeseq s3, s7
267 fcmpezseq s5
268 fcmpseq s1, s2
269 itttt eq
270 fcmpzseq s1
272 @ Monadic data operations
274 fabsseq s1, s3
275 fcpyseq s31, s19
276 fnegseq s20, s8
277 itttt eq
278 fsqrtseq s5, s7
280 @ Dyadic data operations
282 faddseq s6, s5, s4
283 fdivseq s3, s2, s1
284 fmacseq s31, s30, s29
285 itttt eq
286 fmscseq s28, s27, s26
287 fmulseq s25, s24, s23
288 fnmacseq s22, s21, s20
289 fnmscseq s19, s18, s17
290 itttt eq
291 fnmulseq s16, s15, s14
292 fsubseq s13, s12, s11
294 @ Load/store operations
296 fldseq s10, [r8]
297 fstseq s9, [r7]
299 @ Load/store multiple operations
301 itttt eq
302 fldmiaseq r1, {s8}
303 fldmfdseq r2, {s7}
304 fldmiaseq r3!, {s6}
305 fldmfdseq r4!, {s5}
306 itttt eq
307 fldmdbseq r5!, {s4}
308 fldmeaseq r6!, {s3}
310 fldmiaxeq r7, {d1}
311 fldmfdxeq r8, {d2}
312 itttt eq
313 fldmiaxeq r9!, {d3}
314 fldmfdxeq r10!, {d4}
315 fldmdbxeq r11!, {d5}
316 fldmeaxeq r12!, {d6}
318 itttt eq
319 fstmiaseq r13, {s2}
320 fstmeaseq r14, {s1}
321 fstmiaseq r1!, {s31}
322 fstmeaseq r2!, {s30}
323 itttt eq
324 fstmdbseq r3!, {s29}
325 fstmfdseq r4!, {s28}
327 fstmiaxeq r5, {d7}
328 fstmeaxeq r6, {d8}
329 itttt eq
330 fstmiaxeq r7!, {d9}
331 fstmeaxeq r8!, {d10}
332 fstmdbxeq r9!, {d11}
333 fstmfdxeq r10!, {d12}
335 @ Conversion operations
337 itttt eq
338 fsitoseq s27, s6
339 ftosiseq s25, s5
340 ftosizseq s23, s4
341 ftouiseq s21, s3
342 itttt eq
343 ftouizseq s19, s2
344 fuitoseq s17, s1
346 @ ARM from VFP operations
348 fmrseq r11, s3
349 fmrxeq r9, fpsid
351 @ VFP From ARM operations
353 itt eq
354 fmsreq s3, r9
355 fmxreq fpsid, r8
357 @ 2 nops to pad to 16-byte boundary