Upload Tizen:Base source
[external/binutils.git] / gas / testsuite / gas / arm / vfp1.s
1 @ VFP Instructions for D variants (Double precision)
2         .text
3         .global F
4 F:
5         @ First we test the basic syntax and bit patterns of the opcodes.
6         @ Most of these tests deliberatly use d0/r0 to avoid setting
7         @ any more bits than necessary.
8
9         @ Comparison operations
10
11         fcmped  d0, d0
12         fcmpezd d0
13         fcmpd   d0, d0
14         fcmpzd  d0
15
16         @ Monadic data operations
17
18         fabsd   d0, d0
19         fcpyd   d0, d0
20         fnegd   d0, d0
21         fsqrtd  d0, d0
22
23         @ Dyadic data operations
24
25         faddd   d0, d0, d0
26         fdivd   d0, d0, d0
27         fmacd   d0, d0, d0
28         fmscd   d0, d0, d0
29         fmuld   d0, d0, d0
30         fnmacd  d0, d0, d0
31         fnmscd  d0, d0, d0
32         fnmuld  d0, d0, d0
33         fsubd   d0, d0, d0
34
35         @ Load/store operations
36
37         fldd    d0, [r0]
38         fstd    d0, [r0]
39
40         @ Load/store multiple operations
41
42         fldmiad r0, {d0}
43         fldmfdd r0, {d0}
44         fldmiad r0!, {d0}
45         fldmfdd r0!, {d0}
46         fldmdbd r0!, {d0}
47         fldmead r0!, {d0}
48
49         fstmiad r0, {d0}
50         fstmead r0, {d0}
51         fstmiad r0!, {d0}
52         fstmead r0!, {d0}
53         fstmdbd r0!, {d0}
54         fstmfdd r0!, {d0}
55
56         @ Conversion operations
57
58         fsitod  d0, s0
59         fuitod  d0, s0
60
61         ftosid  s0, d0
62         ftosizd s0, d0
63         ftouid  s0, d0
64         ftouizd s0, d0
65
66         fcvtds  d0, s0
67         fcvtsd  s0, d0
68         
69         @ ARM from VFP operations
70
71         fmrdh   r0, d0
72         fmrdl   r0, d0
73
74         @ VFP From ARM operations
75
76         fmdhr   d0, r0
77         fmdlr   d0, r0
78
79         @ Now we test that the register fields are updated correctly for
80         @ each class of instruction.
81
82         @ Single register operations (compare-zero):
83
84         fcmpzd  d1
85         fcmpzd  d2
86         fcmpzd  d15
87
88         @ Two register comparison operations:
89
90         fcmpd   d0, d1
91         fcmpd   d0, d2
92         fcmpd   d0, d15
93         fcmpd   d1, d0
94         fcmpd   d2, d0
95         fcmpd   d15, d0
96         fcmpd   d5, d12
97
98         @ Two register data operations (monadic)
99
100         fnegd   d0, d1
101         fnegd   d0, d2
102         fnegd   d0, d15
103         fnegd   d1, d0
104         fnegd   d2, d0
105         fnegd   d15, d0
106         fnegd   d12, d5
107         
108         @ Three register data operations (dyadic)
109
110         faddd   d0, d0, d1
111         faddd   d0, d0, d2
112         faddd   d0, d0, d15
113         faddd   d0, d1, d0
114         faddd   d0, d2, d0
115         faddd   d0, d15, d0
116         faddd   d1, d0, d0
117         faddd   d2, d0, d0
118         faddd   d15, d0, d0
119         faddd   d12, d9, d5
120
121         @ Conversion operations
122
123         fcvtds  d0, s1
124         fcvtds  d0, s2
125         fcvtds  d0, s31
126         fcvtds  d1, s0
127         fcvtds  d2, s0
128         fcvtds  d15, s0
129         fcvtsd  s1, d0
130         fcvtsd  s2, d0
131         fcvtsd  s31, d0
132         fcvtsd  s0, d1
133         fcvtsd  s0, d2
134         fcvtsd  s0, d15
135
136         @ Move to VFP from ARM
137
138         fmrdh   r1, d0
139         fmrdh   r14, d0
140         fmrdh   r0, d1
141         fmrdh   r0, d2
142         fmrdh   r0, d15
143         fmrdl   r1, d0
144         fmrdl   r14, d0
145         fmrdl   r0, d1
146         fmrdl   r0, d2
147         fmrdl   r0, d15
148
149         @ Move to ARM from VFP
150
151         fmdhr   d0, r1
152         fmdhr   d0, r14
153         fmdhr   d1, r0
154         fmdhr   d2, r0
155         fmdhr   d15, r0
156         fmdlr   d0, r1
157         fmdlr   d0, r14
158         fmdlr   d1, r0
159         fmdlr   d2, r0
160         fmdlr   d15, r0
161
162         @ Load/store operations
163
164         fldd    d0, [r1]
165         fldd    d0, [r14]
166         fldd    d0, [r0, #0]
167         fldd    d0, [r0, #1020]
168         fldd    d0, [r0, #-1020]
169         fldd    d1, [r0]
170         fldd    d2, [r0]
171         fldd    d15, [r0]
172         fstd    d12, [r12, #804]
173
174         @ Load/store multiple operations
175
176         fldmiad r0, {d1}
177         fldmiad r0, {d2}
178         fldmiad r0, {d15}
179         fldmiad r0, {d0-d1}
180         fldmiad r0, {d0-d2}
181         fldmiad r0, {d0-d15}
182         fldmiad r0, {d1-d15}
183         fldmiad r0, {d2-d15}
184         fldmiad r0, {d14-d15}
185         fldmiad r1, {d0}
186         fldmiad r14, {d0}
187
188         @ Check that we assemble all the register names correctly
189
190         fcmpzd  d0
191         fcmpzd  d1
192         fcmpzd  d2
193         fcmpzd  d3
194         fcmpzd  d4
195         fcmpzd  d5
196         fcmpzd  d6
197         fcmpzd  d7
198         fcmpzd  d8
199         fcmpzd  d9
200         fcmpzd  d10
201         fcmpzd  d11
202         fcmpzd  d12
203         fcmpzd  d13
204         fcmpzd  d14
205         fcmpzd  d15
206
207         @ Now we check the placement of the conditional execution substring.
208         @ On VFP this is always at the end of the instruction.
209         
210         @ Comparison operations
211
212         fcmpedeq        d1, d15
213         fcmpezdeq       d2
214         fcmpdeq d3, d14
215         fcmpzdeq        d4
216
217         @ Monadic data operations
218
219         fabsdeq d5, d13
220         fcpydeq d6, d12
221         fnegdeq d7, d11
222         fsqrtdeq        d8, d10
223
224         @ Dyadic data operations
225
226         fadddeq d9, d1, d15
227         fdivdeq d2, d3, d14
228         fmacdeq d4, d13, d12
229         fmscdeq d5, d6, d11
230         fmuldeq d7, d10, d9
231         fnmacdeq        d8, d9, d10
232         fnmscdeq        d7, d6, d11
233         fnmuldeq        d5, d4, d12
234         fsubdeq d3, d13, d14
235
236         @ Load/store operations
237
238         flddeq  d2, [r5]
239         fstdeq  d1, [r12]
240
241         @ Load/store multiple operations
242
243         fldmiadeq       r1, {d1}
244         fldmfddeq       r2, {d2}
245         fldmiadeq       r3!, {d3}
246         fldmfddeq       r4!, {d4}
247         fldmdbdeq       r5!, {d5}
248         fldmeadeq       r6!, {d6}
249
250         fstmiadeq       r7, {d15}
251         fstmeadeq       r8, {d14}
252         fstmiadeq       r9!, {d13}
253         fstmeadeq       r10!, {d12}
254         fstmdbdeq       r11!, {d11}
255         fstmfddeq       r12!, {d10}
256
257         @ Conversion operations
258
259         fsitodeq        d15, s1
260         fuitodeq        d1, s31
261
262         ftosideq        s1, d15
263         ftosizdeq       s31, d2
264         ftouideq        s15, d2
265         ftouizdeq       s11, d3
266
267         fcvtdseq        d1, s10
268         fcvtsdeq        s11, d1
269         
270         @ ARM from VFP operations
271
272         fmrdheq r8, d1
273         fmrdleq r7, d15
274
275         @ VFP From ARM operations
276
277         fmdhreq d1, r15
278         fmdlreq d15, r1
279
280         # Add three nop instructions to ensure that the
281         # output is 32-byte aligned as required for arm-aout.
282         nop
283         nop
284         nop