1
+ //@ revisions: base d32 neon
1
2
//@ assembly-output: emit-asm
2
3
//@ compile-flags: --target armv7-unknown-linux-gnueabihf
3
- //@ compile-flags: -C target-feature=+neon
4
4
//@ compile-flags: -C opt-level=0
5
+ //@[d32] compile-flags: -C target-feature=+d32
6
+ //@[neon] compile-flags: -C target-feature=+neon --cfg d32
7
+ //@[neon] filecheck-flags: --check-prefix d32
5
8
//@ needs-llvm-components: arm
6
9
7
- #![ feature( no_core, lang_items, rustc_attrs, repr_simd) ]
10
+ #![ feature( no_core, lang_items, rustc_attrs, repr_simd, f16 ) ]
8
11
#![ crate_type = "rlib" ]
9
12
#![ no_core]
10
13
#![ allow( asm_sub_register, non_camel_case_types) ]
@@ -38,6 +41,8 @@ pub struct i32x2(i32, i32);
38
41
#[ repr( simd) ]
39
42
pub struct i64x1 ( i64 ) ;
40
43
#[ repr( simd) ]
44
+ pub struct f16x4 ( f16 , f16 , f16 , f16 ) ;
45
+ #[ repr( simd) ]
41
46
pub struct f32x2 ( f32 , f32 ) ;
42
47
#[ repr( simd) ]
43
48
pub struct i8x16 ( i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 , i8 ) ;
@@ -48,11 +53,14 @@ pub struct i32x4(i32, i32, i32, i32);
48
53
#[ repr( simd) ]
49
54
pub struct i64x2 ( i64 , i64 ) ;
50
55
#[ repr( simd) ]
56
+ pub struct f16x8 ( f16 , f16 , f16 , f16 , f16 , f16 , f16 , f16 ) ;
57
+ #[ repr( simd) ]
51
58
pub struct f32x4 ( f32 , f32 , f32 , f32 ) ;
52
59
53
60
impl Copy for i8 { }
54
61
impl Copy for i16 { }
55
62
impl Copy for i32 { }
63
+ impl Copy for f16 { }
56
64
impl Copy for f32 { }
57
65
impl Copy for i64 { }
58
66
impl Copy for f64 { }
@@ -61,11 +69,13 @@ impl Copy for i8x8 {}
61
69
impl Copy for i16x4 { }
62
70
impl Copy for i32x2 { }
63
71
impl Copy for i64x1 { }
72
+ impl Copy for f16x4 { }
64
73
impl Copy for f32x2 { }
65
74
impl Copy for i8x16 { }
66
75
impl Copy for i16x8 { }
67
76
impl Copy for i32x4 { }
68
77
impl Copy for i64x2 { }
78
+ impl Copy for f16x8 { }
69
79
impl Copy for f32x4 { }
70
80
71
81
extern "C" {
@@ -152,6 +162,12 @@ check!(reg_i16 i16 reg "mov");
152
162
// CHECK: @NO_APP
153
163
check ! ( reg_i32 i32 reg "mov" ) ;
154
164
165
+ // CHECK-LABEL: reg_f16:
166
+ // CHECK: @APP
167
+ // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
168
+ // CHECK: @NO_APP
169
+ check ! ( reg_f16 f16 reg "mov" ) ;
170
+
155
171
// CHECK-LABEL: reg_f32:
156
172
// CHECK: @APP
157
173
// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
@@ -170,6 +186,12 @@ check!(reg_ptr ptr reg "mov");
170
186
// CHECK: @NO_APP
171
187
check ! ( sreg_i32 i32 sreg "vmov.f32" ) ;
172
188
189
+ // CHECK-LABEL: sreg_f16:
190
+ // CHECK: @APP
191
+ // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
192
+ // CHECK: @NO_APP
193
+ check ! ( sreg_f16 f16 sreg "vmov.f32" ) ;
194
+
173
195
// CHECK-LABEL: sreg_f32:
174
196
// CHECK: @APP
175
197
// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
@@ -188,52 +210,72 @@ check!(sreg_ptr ptr sreg "vmov.f32");
188
210
// CHECK: @NO_APP
189
211
check ! ( sreg_low16_i32 i32 sreg_low16 "vmov.f32" ) ;
190
212
191
- // CHECK-LABEL: sreg_low16_f32 :
213
+ // CHECK-LABEL: sreg_low16_f16 :
192
214
// CHECK: @APP
193
215
// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
194
216
// CHECK: @NO_APP
195
- check ! ( sreg_low16_f32 f32 sreg_low16 "vmov.f32" ) ;
217
+ check ! ( sreg_low16_f16 f16 sreg_low16 "vmov.f32" ) ;
196
218
197
- // CHECK-LABEL: dreg_i64 :
219
+ // CHECK-LABEL: sreg_low16_f32 :
198
220
// CHECK: @APP
199
- // CHECK: vmov.f64 d {{[0-9]+}}, d {{[0-9]+}}
221
+ // CHECK: vmov.f32 s {{[0-9]+}}, s {{[0-9]+}}
200
222
// CHECK: @NO_APP
223
+ check ! ( sreg_low16_f32 f32 sreg_low16 "vmov.f32" ) ;
224
+
225
+ // d32-LABEL: dreg_i64:
226
+ // d32: @APP
227
+ // d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
228
+ // d32: @NO_APP
229
+ #[ cfg( d32) ]
201
230
check ! ( dreg_i64 i64 dreg "vmov.f64" ) ;
202
231
203
- // CHECK-LABEL: dreg_f64:
204
- // CHECK: @APP
205
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
206
- // CHECK: @NO_APP
232
+ // d32-LABEL: dreg_f64:
233
+ // d32: @APP
234
+ // d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
235
+ // d32: @NO_APP
236
+ #[ cfg( d32) ]
207
237
check ! ( dreg_f64 f64 dreg "vmov.f64" ) ;
208
238
209
- // CHECK-LABEL: dreg_i8x8:
210
- // CHECK: @APP
211
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
212
- // CHECK: @NO_APP
239
+ // neon-LABEL: dreg_i8x8:
240
+ // neon: @APP
241
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
242
+ // neon: @NO_APP
243
+ #[ cfg( neon) ]
213
244
check ! ( dreg_i8x8 i8x8 dreg "vmov.f64" ) ;
214
245
215
- // CHECK-LABEL: dreg_i16x4:
216
- // CHECK: @APP
217
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
218
- // CHECK: @NO_APP
246
+ // neon-LABEL: dreg_i16x4:
247
+ // neon: @APP
248
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
249
+ // neon: @NO_APP
250
+ #[ cfg( neon) ]
219
251
check ! ( dreg_i16x4 i16x4 dreg "vmov.f64" ) ;
220
252
221
- // CHECK-LABEL: dreg_i32x2:
222
- // CHECK: @APP
223
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
224
- // CHECK: @NO_APP
253
+ // neon-LABEL: dreg_i32x2:
254
+ // neon: @APP
255
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
256
+ // neon: @NO_APP
257
+ #[ cfg( neon) ]
225
258
check ! ( dreg_i32x2 i32x2 dreg "vmov.f64" ) ;
226
259
227
- // CHECK-LABEL: dreg_i64x1:
228
- // CHECK: @APP
229
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
230
- // CHECK: @NO_APP
260
+ // neon-LABEL: dreg_i64x1:
261
+ // neon: @APP
262
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
263
+ // neon: @NO_APP
264
+ #[ cfg( neon) ]
231
265
check ! ( dreg_i64x1 i64x1 dreg "vmov.f64" ) ;
232
266
233
- // CHECK-LABEL: dreg_f32x2:
234
- // CHECK: @APP
235
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
236
- // CHECK: @NO_APP
267
+ // neon-LABEL: dreg_f16x4:
268
+ // neon: @APP
269
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
270
+ // neon: @NO_APP
271
+ #[ cfg( neon) ]
272
+ check ! ( dreg_f16x4 f16x4 dreg "vmov.f64" ) ;
273
+
274
+ // neon-LABEL: dreg_f32x2:
275
+ // neon: @APP
276
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
277
+ // neon: @NO_APP
278
+ #[ cfg( neon) ]
237
279
check ! ( dreg_f32x2 f32x2 dreg "vmov.f64" ) ;
238
280
239
281
// CHECK-LABEL: dreg_low16_i64:
@@ -248,34 +290,46 @@ check!(dreg_low16_i64 i64 dreg_low16 "vmov.f64");
248
290
// CHECK: @NO_APP
249
291
check ! ( dreg_low16_f64 f64 dreg_low16 "vmov.f64" ) ;
250
292
251
- // CHECK-LABEL: dreg_low16_i8x8:
252
- // CHECK: @APP
253
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
254
- // CHECK: @NO_APP
293
+ // neon-LABEL: dreg_low16_i8x8:
294
+ // neon: @APP
295
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
296
+ // neon: @NO_APP
297
+ #[ cfg( neon) ]
255
298
check ! ( dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64" ) ;
256
299
257
- // CHECK-LABEL: dreg_low16_i16x4:
258
- // CHECK: @APP
259
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
260
- // CHECK: @NO_APP
300
+ // neon-LABEL: dreg_low16_i16x4:
301
+ // neon: @APP
302
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
303
+ // neon: @NO_APP
304
+ #[ cfg( neon) ]
261
305
check ! ( dreg_low16_i16x4 i16x4 dreg_low16 "vmov.f64" ) ;
262
306
263
- // CHECK-LABEL: dreg_low16_i32x2:
264
- // CHECK: @APP
265
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
266
- // CHECK: @NO_APP
307
+ // neon-LABEL: dreg_low16_i32x2:
308
+ // neon: @APP
309
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
310
+ // neon: @NO_APP
311
+ #[ cfg( neon) ]
267
312
check ! ( dreg_low16_i32x2 i32x2 dreg_low16 "vmov.f64" ) ;
268
313
269
- // CHECK-LABEL: dreg_low16_i64x1:
270
- // CHECK: @APP
271
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
272
- // CHECK: @NO_APP
314
+ // neon-LABEL: dreg_low16_i64x1:
315
+ // neon: @APP
316
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
317
+ // neon: @NO_APP
318
+ #[ cfg( neon) ]
273
319
check ! ( dreg_low16_i64x1 i64x1 dreg_low16 "vmov.f64" ) ;
274
320
275
- // CHECK-LABEL: dreg_low16_f32x2:
276
- // CHECK: @APP
277
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
278
- // CHECK: @NO_APP
321
+ // neon-LABEL: dreg_low16_f16x4:
322
+ // neon: @APP
323
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
324
+ // neon: @NO_APP
325
+ #[ cfg( neon) ]
326
+ check ! ( dreg_low16_f16x4 f16x4 dreg_low16 "vmov.f64" ) ;
327
+
328
+ // neon-LABEL: dreg_low16_f32x2:
329
+ // neon: @APP
330
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
331
+ // neon: @NO_APP
332
+ #[ cfg( neon) ]
279
333
check ! ( dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64" ) ;
280
334
281
335
// CHECK-LABEL: dreg_low8_i64:
@@ -290,124 +344,172 @@ check!(dreg_low8_i64 i64 dreg_low8 "vmov.f64");
290
344
// CHECK: @NO_APP
291
345
check ! ( dreg_low8_f64 f64 dreg_low8 "vmov.f64" ) ;
292
346
293
- // CHECK-LABEL: dreg_low8_i8x8:
294
- // CHECK: @APP
295
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
296
- // CHECK: @NO_APP
347
+ // neon-LABEL: dreg_low8_i8x8:
348
+ // neon: @APP
349
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
350
+ // neon: @NO_APP
351
+ #[ cfg( neon) ]
297
352
check ! ( dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64" ) ;
298
353
299
- // CHECK-LABEL: dreg_low8_i16x4:
300
- // CHECK: @APP
301
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
302
- // CHECK: @NO_APP
354
+ // neon-LABEL: dreg_low8_i16x4:
355
+ // neon: @APP
356
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
357
+ // neon: @NO_APP
358
+ #[ cfg( neon) ]
303
359
check ! ( dreg_low8_i16x4 i16x4 dreg_low8 "vmov.f64" ) ;
304
360
305
- // CHECK-LABEL: dreg_low8_i32x2:
306
- // CHECK: @APP
307
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
308
- // CHECK: @NO_APP
361
+ // neon-LABEL: dreg_low8_i32x2:
362
+ // neon: @APP
363
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
364
+ // neon: @NO_APP
365
+ #[ cfg( neon) ]
309
366
check ! ( dreg_low8_i32x2 i32x2 dreg_low8 "vmov.f64" ) ;
310
367
311
- // CHECK-LABEL: dreg_low8_i64x1:
312
- // CHECK: @APP
313
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
314
- // CHECK: @NO_APP
368
+ // neon-LABEL: dreg_low8_i64x1:
369
+ // neon: @APP
370
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
371
+ // neon: @NO_APP
372
+ #[ cfg( neon) ]
315
373
check ! ( dreg_low8_i64x1 i64x1 dreg_low8 "vmov.f64" ) ;
316
374
317
- // CHECK-LABEL: dreg_low8_f32x2:
318
- // CHECK: @APP
319
- // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
320
- // CHECK: @NO_APP
375
+ // neon-LABEL: dreg_low8_f16x4:
376
+ // neon: @APP
377
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
378
+ // neon: @NO_APP
379
+ #[ cfg( neon) ]
380
+ check ! ( dreg_low8_f16x4 f16x4 dreg_low8 "vmov.f64" ) ;
381
+
382
+ // neon-LABEL: dreg_low8_f32x2:
383
+ // neon: @APP
384
+ // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
385
+ // neon: @NO_APP
386
+ #[ cfg( neon) ]
321
387
check ! ( dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64" ) ;
322
388
323
- // CHECK-LABEL: qreg_i8x16:
324
- // CHECK: @APP
325
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
326
- // CHECK: @NO_APP
389
+ // neon-LABEL: qreg_i8x16:
390
+ // neon: @APP
391
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
392
+ // neon: @NO_APP
393
+ #[ cfg( neon) ]
327
394
check ! ( qreg_i8x16 i8x16 qreg "vmov" ) ;
328
395
329
- // CHECK-LABEL: qreg_i16x8:
330
- // CHECK: @APP
331
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
332
- // CHECK: @NO_APP
396
+ // neon-LABEL: qreg_i16x8:
397
+ // neon: @APP
398
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
399
+ // neon: @NO_APP
400
+ #[ cfg( neon) ]
333
401
check ! ( qreg_i16x8 i16x8 qreg "vmov" ) ;
334
402
335
- // CHECK-LABEL: qreg_i32x4:
336
- // CHECK: @APP
337
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
338
- // CHECK: @NO_APP
403
+ // neon-LABEL: qreg_i32x4:
404
+ // neon: @APP
405
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
406
+ // neon: @NO_APP
407
+ #[ cfg( neon) ]
339
408
check ! ( qreg_i32x4 i32x4 qreg "vmov" ) ;
340
409
341
- // CHECK-LABEL: qreg_i64x2:
342
- // CHECK: @APP
343
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
344
- // CHECK: @NO_APP
410
+ // neon-LABEL: qreg_i64x2:
411
+ // neon: @APP
412
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
413
+ // neon: @NO_APP
414
+ #[ cfg( neon) ]
345
415
check ! ( qreg_i64x2 i64x2 qreg "vmov" ) ;
346
416
347
- // CHECK-LABEL: qreg_f32x4:
348
- // CHECK: @APP
349
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
350
- // CHECK: @NO_APP
417
+ // neon-LABEL: qreg_f16x8:
418
+ // neon: @APP
419
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
420
+ // neon: @NO_APP
421
+ #[ cfg( neon) ]
422
+ check ! ( qreg_f16x8 f16x8 qreg "vmov" ) ;
423
+
424
+ // neon-LABEL: qreg_f32x4:
425
+ // neon: @APP
426
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
427
+ // neon: @NO_APP
428
+ #[ cfg( neon) ]
351
429
check ! ( qreg_f32x4 f32x4 qreg "vmov" ) ;
352
430
353
- // CHECK-LABEL: qreg_low8_i8x16:
354
- // CHECK: @APP
355
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
356
- // CHECK: @NO_APP
431
+ // neon-LABEL: qreg_low8_i8x16:
432
+ // neon: @APP
433
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
434
+ // neon: @NO_APP
435
+ #[ cfg( neon) ]
357
436
check ! ( qreg_low8_i8x16 i8x16 qreg_low8 "vmov" ) ;
358
437
359
- // CHECK-LABEL: qreg_low8_i16x8:
360
- // CHECK: @APP
361
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
362
- // CHECK: @NO_APP
438
+ // neon-LABEL: qreg_low8_i16x8:
439
+ // neon: @APP
440
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
441
+ // neon: @NO_APP
442
+ #[ cfg( neon) ]
363
443
check ! ( qreg_low8_i16x8 i16x8 qreg_low8 "vmov" ) ;
364
444
365
- // CHECK-LABEL: qreg_low8_i32x4:
366
- // CHECK: @APP
367
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
368
- // CHECK: @NO_APP
445
+ // neon-LABEL: qreg_low8_i32x4:
446
+ // neon: @APP
447
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
448
+ // neon: @NO_APP
449
+ #[ cfg( neon) ]
369
450
check ! ( qreg_low8_i32x4 i32x4 qreg_low8 "vmov" ) ;
370
451
371
- // CHECK-LABEL: qreg_low8_i64x2:
372
- // CHECK: @APP
373
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
374
- // CHECK: @NO_APP
452
+ // neon-LABEL: qreg_low8_i64x2:
453
+ // neon: @APP
454
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
455
+ // neon: @NO_APP
456
+ #[ cfg( neon) ]
375
457
check ! ( qreg_low8_i64x2 i64x2 qreg_low8 "vmov" ) ;
376
458
377
- // CHECK-LABEL: qreg_low8_f32x4:
378
- // CHECK: @APP
379
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
380
- // CHECK: @NO_APP
459
+ // neon-LABEL: qreg_low8_f16x8:
460
+ // neon: @APP
461
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
462
+ // neon: @NO_APP
463
+ #[ cfg( neon) ]
464
+ check ! ( qreg_low8_f16x8 f16x8 qreg_low8 "vmov" ) ;
465
+
466
+ // neon-LABEL: qreg_low8_f32x4:
467
+ // neon: @APP
468
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
469
+ // neon: @NO_APP
470
+ #[ cfg( neon) ]
381
471
check ! ( qreg_low8_f32x4 f32x4 qreg_low8 "vmov" ) ;
382
472
383
- // CHECK-LABEL: qreg_low4_i8x16:
384
- // CHECK: @APP
385
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
386
- // CHECK: @NO_APP
473
+ // neon-LABEL: qreg_low4_i8x16:
474
+ // neon: @APP
475
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
476
+ // neon: @NO_APP
477
+ #[ cfg( neon) ]
387
478
check ! ( qreg_low4_i8x16 i8x16 qreg_low4 "vmov" ) ;
388
479
389
- // CHECK-LABEL: qreg_low4_i16x8:
390
- // CHECK: @APP
391
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
392
- // CHECK: @NO_APP
480
+ // neon-LABEL: qreg_low4_i16x8:
481
+ // neon: @APP
482
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
483
+ // neon: @NO_APP
484
+ #[ cfg( neon) ]
393
485
check ! ( qreg_low4_i16x8 i16x8 qreg_low4 "vmov" ) ;
394
486
395
- // CHECK-LABEL: qreg_low4_i32x4:
396
- // CHECK: @APP
397
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
398
- // CHECK: @NO_APP
487
+ // neon-LABEL: qreg_low4_i32x4:
488
+ // neon: @APP
489
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
490
+ // neon: @NO_APP
491
+ #[ cfg( neon) ]
399
492
check ! ( qreg_low4_i32x4 i32x4 qreg_low4 "vmov" ) ;
400
493
401
- // CHECK-LABEL: qreg_low4_i64x2:
402
- // CHECK: @APP
403
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
404
- // CHECK: @NO_APP
494
+ // neon-LABEL: qreg_low4_i64x2:
495
+ // neon: @APP
496
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
497
+ // neon: @NO_APP
498
+ #[ cfg( neon) ]
405
499
check ! ( qreg_low4_i64x2 i64x2 qreg_low4 "vmov" ) ;
406
500
407
- // CHECK-LABEL: qreg_low4_f32x4:
408
- // CHECK: @APP
409
- // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
410
- // CHECK: @NO_APP
501
+ // neon-LABEL: qreg_low4_f16x8:
502
+ // neon: @APP
503
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
504
+ // neon: @NO_APP
505
+ #[ cfg( neon) ]
506
+ check ! ( qreg_low4_f16x8 f16x8 qreg_low4 "vmov" ) ;
507
+
508
+ // neon-LABEL: qreg_low4_f32x4:
509
+ // neon: @APP
510
+ // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
511
+ // neon: @NO_APP
512
+ #[ cfg( neon) ]
411
513
check ! ( qreg_low4_f32x4 f32x4 qreg_low4 "vmov" ) ;
412
514
413
515
// CHECK-LABEL: r0_i8:
@@ -428,6 +530,12 @@ check_reg!(r0_i16 i16 "r0" "mov");
428
530
// CHECK: @NO_APP
429
531
check_reg ! ( r0_i32 i32 "r0" "mov" ) ;
430
532
533
+ // CHECK-LABEL: r0_f16:
534
+ // CHECK: @APP
535
+ // CHECK: mov r0, r0
536
+ // CHECK: @NO_APP
537
+ check_reg ! ( r0_f16 f16 "r0" "mov" ) ;
538
+
431
539
// CHECK-LABEL: r0_f32:
432
540
// CHECK: @APP
433
541
// CHECK: mov r0, r0
@@ -446,6 +554,12 @@ check_reg!(r0_ptr ptr "r0" "mov");
446
554
// CHECK: @NO_APP
447
555
check_reg ! ( s0_i32 i32 "s0" "vmov.f32" ) ;
448
556
557
+ // CHECK-LABEL: s0_f16:
558
+ // CHECK: @APP
559
+ // CHECK: vmov.f32 s0, s0
560
+ // CHECK: @NO_APP
561
+ check_reg ! ( s0_f16 f16 "s0" "vmov.f32" ) ;
562
+
449
563
// CHECK-LABEL: s0_f32:
450
564
// CHECK: @APP
451
565
// CHECK: vmov.f32 s0, s0
@@ -458,74 +572,101 @@ check_reg!(s0_f32 f32 "s0" "vmov.f32");
458
572
// CHECK: @NO_APP
459
573
check_reg ! ( s0_ptr ptr "s0" "vmov.f32" ) ;
460
574
461
- // CHECK-LABEL: d0_i64:
462
- // CHECK: @APP
463
- // CHECK: vmov.f64 d0, d0
464
- // CHECK: @NO_APP
575
+ // FIXME(#126797): "d0" should work with `i64` and `f64` even when `d32` is disabled.
576
+ // d32-LABEL: d0_i64:
577
+ // d32: @APP
578
+ // d32: vmov.f64 d0, d0
579
+ // d32: @NO_APP
580
+ #[ cfg( d32) ]
465
581
check_reg ! ( d0_i64 i64 "d0" "vmov.f64" ) ;
466
582
467
- // CHECK-LABEL: d0_f64:
468
- // CHECK: @APP
469
- // CHECK: vmov.f64 d0, d0
470
- // CHECK: @NO_APP
583
+ // d32-LABEL: d0_f64:
584
+ // d32: @APP
585
+ // d32: vmov.f64 d0, d0
586
+ // d32: @NO_APP
587
+ #[ cfg( d32) ]
471
588
check_reg ! ( d0_f64 f64 "d0" "vmov.f64" ) ;
472
589
473
- // CHECK-LABEL: d0_i8x8:
474
- // CHECK: @APP
475
- // CHECK: vmov.f64 d0, d0
476
- // CHECK: @NO_APP
590
+ // neon-LABEL: d0_i8x8:
591
+ // neon: @APP
592
+ // neon: vmov.f64 d0, d0
593
+ // neon: @NO_APP
594
+ #[ cfg( neon) ]
477
595
check_reg ! ( d0_i8x8 i8x8 "d0" "vmov.f64" ) ;
478
596
479
- // CHECK-LABEL: d0_i16x4:
480
- // CHECK: @APP
481
- // CHECK: vmov.f64 d0, d0
482
- // CHECK: @NO_APP
597
+ // neon-LABEL: d0_i16x4:
598
+ // neon: @APP
599
+ // neon: vmov.f64 d0, d0
600
+ // neon: @NO_APP
601
+ #[ cfg( neon) ]
483
602
check_reg ! ( d0_i16x4 i16x4 "d0" "vmov.f64" ) ;
484
603
485
- // CHECK-LABEL: d0_i32x2:
486
- // CHECK: @APP
487
- // CHECK: vmov.f64 d0, d0
488
- // CHECK: @NO_APP
604
+ // neon-LABEL: d0_i32x2:
605
+ // neon: @APP
606
+ // neon: vmov.f64 d0, d0
607
+ // neon: @NO_APP
608
+ #[ cfg( neon) ]
489
609
check_reg ! ( d0_i32x2 i32x2 "d0" "vmov.f64" ) ;
490
610
491
- // CHECK-LABEL: d0_i64x1:
492
- // CHECK: @APP
493
- // CHECK: vmov.f64 d0, d0
494
- // CHECK: @NO_APP
611
+ // neon-LABEL: d0_i64x1:
612
+ // neon: @APP
613
+ // neon: vmov.f64 d0, d0
614
+ // neon: @NO_APP
615
+ #[ cfg( neon) ]
495
616
check_reg ! ( d0_i64x1 i64x1 "d0" "vmov.f64" ) ;
496
617
497
- // CHECK-LABEL: d0_f32x2:
498
- // CHECK: @APP
499
- // CHECK: vmov.f64 d0, d0
500
- // CHECK: @NO_APP
618
+ // neon-LABEL: d0_f16x4:
619
+ // neon: @APP
620
+ // neon: vmov.f64 d0, d0
621
+ // neon: @NO_APP
622
+ #[ cfg( neon) ]
623
+ check_reg ! ( d0_f16x4 f16x4 "d0" "vmov.f64" ) ;
624
+
625
+ // neon-LABEL: d0_f32x2:
626
+ // neon: @APP
627
+ // neon: vmov.f64 d0, d0
628
+ // neon: @NO_APP
629
+ #[ cfg( neon) ]
501
630
check_reg ! ( d0_f32x2 f32x2 "d0" "vmov.f64" ) ;
502
631
503
- // CHECK-LABEL: q0_i8x16:
504
- // CHECK: @APP
505
- // CHECK: vorr q0, q0, q0
506
- // CHECK: @NO_APP
632
+ // neon-LABEL: q0_i8x16:
633
+ // neon: @APP
634
+ // neon: vorr q0, q0, q0
635
+ // neon: @NO_APP
636
+ #[ cfg( neon) ]
507
637
check_reg ! ( q0_i8x16 i8x16 "q0" "vmov" ) ;
508
638
509
- // CHECK-LABEL: q0_i16x8:
510
- // CHECK: @APP
511
- // CHECK: vorr q0, q0, q0
512
- // CHECK: @NO_APP
639
+ // neon-LABEL: q0_i16x8:
640
+ // neon: @APP
641
+ // neon: vorr q0, q0, q0
642
+ // neon: @NO_APP
643
+ #[ cfg( neon) ]
513
644
check_reg ! ( q0_i16x8 i16x8 "q0" "vmov" ) ;
514
645
515
- // CHECK-LABEL: q0_i32x4:
516
- // CHECK: @APP
517
- // CHECK: vorr q0, q0, q0
518
- // CHECK: @NO_APP
646
+ // neon-LABEL: q0_i32x4:
647
+ // neon: @APP
648
+ // neon: vorr q0, q0, q0
649
+ // neon: @NO_APP
650
+ #[ cfg( neon) ]
519
651
check_reg ! ( q0_i32x4 i32x4 "q0" "vmov" ) ;
520
652
521
- // CHECK-LABEL: q0_i64x2:
522
- // CHECK: @APP
523
- // CHECK: vorr q0, q0, q0
524
- // CHECK: @NO_APP
653
+ // neon-LABEL: q0_i64x2:
654
+ // neon: @APP
655
+ // neon: vorr q0, q0, q0
656
+ // neon: @NO_APP
657
+ #[ cfg( neon) ]
525
658
check_reg ! ( q0_i64x2 i64x2 "q0" "vmov" ) ;
526
659
527
- // CHECK-LABEL: q0_f32x4:
528
- // CHECK: @APP
529
- // CHECK: vorr q0, q0, q0
530
- // CHECK: @NO_APP
660
+ // neon-LABEL: q0_f16x8:
661
+ // neon: @APP
662
+ // neon: vorr q0, q0, q0
663
+ // neon: @NO_APP
664
+ #[ cfg( neon) ]
665
+ check_reg ! ( q0_f16x8 f16x8 "q0" "vmov" ) ;
666
+
667
+ // neon-LABEL: q0_f32x4:
668
+ // neon: @APP
669
+ // neon: vorr q0, q0, q0
670
+ // neon: @NO_APP
671
+ #[ cfg( neon) ]
531
672
check_reg ! ( q0_f32x4 f32x4 "q0" "vmov" ) ;
0 commit comments