ARM: correct handling of features in arch_extension
[oota-llvm.git] / test / MC / ARM / directive-arch_extension-simd.s
1 @ RUN: not llvm-mc -triple armv7-eabi -filetype asm -o /dev/null 2>&1 %s \
2 @ RUN:   | FileCheck %s -check-prefix CHECK-V7 -check-prefix CHECK
3 @ RUN: not llvm-mc -triple armv8-eabi -filetype asm -o /dev/null 2>&1 %s \
4 @ RUN:   | FileCheck %s -check-prefix CHECK-V8 -check-prefix CHECK
5 @ RUN: not llvm-mc -triple thumbv7-eabi -filetype asm -o /dev/null 2>&1 %s \
6 @ RUN:   | FileCheck %s -check-prefix CHECK-V7 -check-prefix CHECK
7 @ RUN: not llvm-mc -triple thumbv8-eabi -filetype asm -o /dev/null 2>&1 %s \
8 @ RUN:   | FileCheck %s -check-prefix CHECK-V8 -check-prefix CHECK
9
10         .syntax unified
11
12         .arch_extension simd
13 @ CHECK-V7: error: architectural extension 'simd' is not allowed for the current base architecture
14 @ CHECK-V7-NEXT:        .arch_extension simd
15 @ CHECK-V7-NEXT:                     ^
16
17         .type simd,%function
18 simd:
19         vmaxnm.f32 s0, s0, s0
20 @ CHECK-V7: error: instruction requires: FPARMv8
21         vminnm.f32 s0, s0, s0
22 @ CHECK-V7: error: instruction requires: FPARMv8
23
24         vmaxnm.f64 d0, d0, d0
25 @ CHECK-V7: error: instruction requires: FPARMv8
26         vminnm.f64 d0, d0, d0
27 @ CHECK-V7: error: instruction requires: FPARMv8
28
29         vcvta.s32.f32 s0, s0
30 @ CHECK-V7: error: instruction requires: FPARMv8
31         vcvta.u32.f32 s0, s0
32 @ CHECK-V7: error: instruction requires: FPARMv8
33         vcvta.s32.f64 s0, d0
34 @ CHECK-V7: error: instruction requires: FPARMv8
35         vcvta.u32.f64 s0, d0
36 @ CHECK-V7: error: instruction requires: FPARMv8
37         vcvtn.s32.f32 s0, s0
38 @ CHECK-V7: error: instruction requires: FPARMv8
39         vcvtn.u32.f32 s0, s0
40 @ CHECK-V7: error: instruction requires: FPARMv8
41         vcvtn.s32.f64 s0, d0
42 @ CHECK-V7: error: instruction requires: FPARMv8
43         vcvtn.u32.f64 s0, d0
44 @ CHECK-V7: error: instruction requires: FPARMv8
45         vcvtp.s32.f32 s0, s0
46 @ CHECK-V7: error: instruction requires: FPARMv8
47         vcvtp.u32.f32 s0, s0
48 @ CHECK-V7: error: instruction requires: FPARMv8
49         vcvtp.s32.f64 s0, d0
50 @ CHECK-V7: error: instruction requires: FPARMv8
51         vcvtp.u32.f64 s0, d0
52 @ CHECK-V7: error: instruction requires: FPARMv8
53         vcvtm.s32.f32 s0, s0
54 @ CHECK-V7: error: instruction requires: FPARMv8
55         vcvtm.u32.f32 s0, s0
56 @ CHECK-V7: error: instruction requires: FPARMv8
57         vcvtm.s32.f64 s0, d0
58 @ CHECK-V7: error: instruction requires: FPARMv8
59         vcvtm.u32.f64 s0, d0
60 @ CHECK-V7: error: instruction requires: FPARMv8
61
62         vrintz.f32 s0, s1
63 @ CHECK-V7: error: instruction requires: FPARMv8
64         vrintz.f64 d0, d1
65 @ CHECK-V7: error: instruction requires: FPARMv8
66         vrintz.f32.f32 s0, s0
67 @ CHECK-V7: error: instruction requires: FPARMv8
68         vrintz.f64.f64 d0, d0
69 @ CHECK-V7: error: instruction requires: FPARMv8
70         vrintr.f32 s0, s1
71 @ CHECK-V7: error: instruction requires: FPARMv8
72         vrintr.f64 d0, d1
73 @ CHECK-V7: error: instruction requires: FPARMv8
74         vrintr.f32.f32 s0, s0
75 @ CHECK-V7: error: instruction requires: FPARMv8
76         vrintr.f64.f64 d0, d0
77 @ CHECK-V7: error: instruction requires: FPARMv8
78         vrintx.f32 s0, s1
79 @ CHECK-V7: error: instruction requires: FPARMv8
80         vrintx.f64 d0, d1
81 @ CHECK-V7: error: instruction requires: FPARMv8
82         vrintx.f32.f32 s0, s0
83 @ CHECK-V7: error: instruction requires: FPARMv8
84         vrintx.f64.f64 d0, d0
85 @ CHECK-V7: error: instruction requires: FPARMv8
86
87         vrinta.f32 s0, s0
88 @ CHECK-V7: error: instruction requires: FPARMv8
89         vrinta.f64 d0, d0
90 @ CHECK-V7: error: instruction requires: FPARMv8
91         vrinta.f32.f32 s0, s0
92 @ CHECK-V7: error: instruction requires: FPARMv8
93         vrinta.f64.f64 d0, d0
94 @ CHECK-V7: error: instruction requires: FPARMv8
95         vrintn.f32 s0, s0
96 @ CHECK-V7: error: instruction requires: FPARMv8
97         vrintn.f64 d0, d0
98 @ CHECK-V7: error: instruction requires: FPARMv8
99         vrintn.f32.f32 s0, s0
100 @ CHECK-V7: error: instruction requires: FPARMv8
101         vrintn.f64.f64 d0, d0
102 @ CHECK-V7: error: instruction requires: FPARMv8
103         vrintp.f32 s0, s0
104 @ CHECK-V7: error: instruction requires: FPARMv8
105         vrintp.f64 d0, d0
106 @ CHECK-V7: error: instruction requires: FPARMv8
107         vrintp.f32.f32 s0, s0
108 @ CHECK-V7: error: instruction requires: FPARMv8
109         vrintp.f64.f64 d0, d0
110 @ CHECK-V7: error: instruction requires: FPARMv8
111         vrintm.f32 s0, s0
112 @ CHECK-V7: error: instruction requires: FPARMv8
113         vrintm.f64 d0, d0
114 @ CHECK-V7: error: instruction requires: FPARMv8
115         vrintm.f32.f32 s0, s0
116 @ CHECK-V7: error: instruction requires: FPARMv8
117         vrintm.f64.f64 d0, d0
118 @ CHECK-V7: error: instruction requires: FPARMv8
119
120         .arch_extension nosimd
121 @ CHECK-V7: error: architectural extension 'simd' is not allowed for the current base architecture
122 @ CHECK-V7-NEXT:        .arch_extension nosimd
123 @ CHECK-V7-NEXT:                     ^
124
125         .type nosimd,%function
126 nosimd:
127         vmaxnm.f32 s0, s0, s0
128 @ CHECK: error: instruction requires: FPARMv8
129         vminnm.f32 s0, s0, s0
130 @ CHECK: error: instruction requires: FPARMv8
131
132         vmaxnm.f64 d0, d0, d0
133 @ CHECK: error: instruction requires: FPARMv8
134         vminnm.f64 d0, d0, d0
135 @ CHECK: error: instruction requires: FPARMv8
136
137         vcvta.s32.f32 s0, s0
138 @ CHECK: error: instruction requires: FPARMv8
139         vcvta.u32.f32 s0, s0
140 @ CHECK: error: instruction requires: FPARMv8
141         vcvta.s32.f64 s0, d0
142 @ CHECK: error: instruction requires: FPARMv8
143         vcvta.u32.f64 s0, d0
144 @ CHECK: error: instruction requires: FPARMv8
145         vcvtn.s32.f32 s0, s0
146 @ CHECK: error: instruction requires: FPARMv8
147         vcvtn.u32.f32 s0, s0
148 @ CHECK: error: instruction requires: FPARMv8
149         vcvtn.s32.f64 s0, d0
150 @ CHECK: error: instruction requires: FPARMv8
151         vcvtn.u32.f64 s0, d0
152 @ CHECK: error: instruction requires: FPARMv8
153         vcvtp.s32.f32 s0, s0
154 @ CHECK: error: instruction requires: FPARMv8
155         vcvtp.u32.f32 s0, s0
156 @ CHECK: error: instruction requires: FPARMv8
157         vcvtp.s32.f64 s0, d0
158 @ CHECK: error: instruction requires: FPARMv8
159         vcvtp.u32.f64 s0, d0
160 @ CHECK: error: instruction requires: FPARMv8
161         vcvtm.s32.f32 s0, s0
162 @ CHECK: error: instruction requires: FPARMv8
163         vcvtm.u32.f32 s0, s0
164 @ CHECK: error: instruction requires: FPARMv8
165         vcvtm.s32.f64 s0, d0
166 @ CHECK: error: instruction requires: FPARMv8
167         vcvtm.u32.f64 s0, d0
168 @ CHECK: error: instruction requires: FPARMv8
169
170         vrintz.f32 s0, s1
171 @ CHECK: error: instruction requires: FPARMv8
172         vrintz.f64 d0, d1
173 @ CHECK: error: instruction requires: FPARMv8
174         vrintz.f32.f32 s0, s0
175 @ CHECK: error: instruction requires: FPARMv8
176         vrintz.f64.f64 d0, d0
177 @ CHECK: error: instruction requires: FPARMv8
178         vrintr.f32 s0, s1
179 @ CHECK: error: instruction requires: FPARMv8
180         vrintr.f64 d0, d1
181 @ CHECK: error: instruction requires: FPARMv8
182         vrintr.f32.f32 s0, s0
183 @ CHECK: error: instruction requires: FPARMv8
184         vrintr.f64.f64 d0, d0
185 @ CHECK: error: instruction requires: FPARMv8
186         vrintx.f32 s0, s1
187 @ CHECK: error: instruction requires: FPARMv8
188         vrintx.f64 d0, d1
189 @ CHECK: error: instruction requires: FPARMv8
190         vrintx.f32.f32 s0, s0
191 @ CHECK: error: instruction requires: FPARMv8
192         vrintx.f64.f64 d0, d0
193 @ CHECK: error: instruction requires: FPARMv8
194
195         vrinta.f32 s0, s0
196 @ CHECK: error: instruction requires: FPARMv8
197         vrinta.f64 d0, d0
198 @ CHECK: error: instruction requires: FPARMv8
199         vrinta.f32.f32 s0, s0
200 @ CHECK: error: instruction requires: FPARMv8
201         vrinta.f64.f64 d0, d0
202 @ CHECK: error: instruction requires: FPARMv8
203         vrintn.f32 s0, s0
204 @ CHECK: error: instruction requires: FPARMv8
205         vrintn.f64 d0, d0
206 @ CHECK: error: instruction requires: FPARMv8
207         vrintn.f32.f32 s0, s0
208 @ CHECK: error: instruction requires: FPARMv8
209         vrintn.f64.f64 d0, d0
210 @ CHECK: error: instruction requires: FPARMv8
211         vrintp.f32 s0, s0
212 @ CHECK: error: instruction requires: FPARMv8
213         vrintp.f64 d0, d0
214 @ CHECK: error: instruction requires: FPARMv8
215         vrintp.f32.f32 s0, s0
216 @ CHECK: error: instruction requires: FPARMv8
217         vrintp.f64.f64 d0, d0
218 @ CHECK: error: instruction requires: FPARMv8
219         vrintm.f32 s0, s0
220 @ CHECK: error: instruction requires: FPARMv8
221         vrintm.f64 d0, d0
222 @ CHECK: error: instruction requires: FPARMv8
223         vrintm.f32.f32 s0, s0
224 @ CHECK: error: instruction requires: FPARMv8
225         vrintm.f64.f64 d0, d0
226 @ CHECK: error: instruction requires: FPARMv8
227