1 /* { dg-do compile } */
2 /* { dg-options "-O3" } */
6 #define BUILD_TEST(TYPE1, TYPE2, Q1, Q2, SUFFIX, INDEX1, INDEX2) \
7 TYPE1 __attribute__((noinline,noclone)) \
8 test_copy##Q1##_lane##Q2##_##SUFFIX (TYPE1 a, TYPE2 b) \
10 return vcopy##Q1##_lane##Q2##_##SUFFIX (a, INDEX1, b, INDEX2); \
14 BUILD_TEST (poly8x8_t
, poly8x8_t
, , , p8
, 7, 6)
15 BUILD_TEST (int8x8_t
, int8x8_t
, , , s8
, 7, 6)
16 BUILD_TEST (uint8x8_t
, uint8x8_t
, , , u8
, 7, 6)
17 /* { dg-final { scan-assembler-times "ins\\tv0.b\\\[7\\\], v1.b\\\[6\\\]" 3 } } */
18 BUILD_TEST (poly16x4_t
, poly16x4_t
, , , p16
, 3, 2)
19 BUILD_TEST (int16x4_t
, int16x4_t
, , , s16
, 3, 2)
20 BUILD_TEST (uint16x4_t
, uint16x4_t
, , , u16
, 3, 2)
21 /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[3\\\], v1.h\\\[2\\\]" 3 } } */
22 BUILD_TEST (float32x2_t
, float32x2_t
, , , f32
, 1, 0)
23 BUILD_TEST (int32x2_t
, int32x2_t
, , , s32
, 1, 0)
24 BUILD_TEST (uint32x2_t
, uint32x2_t
, , , u32
, 1, 0)
25 /* { dg-final { scan-assembler-times "ins\\tv0.s\\\[1\\\], v1.s\\\[0\\\]" 3 } } */
26 BUILD_TEST (int64x1_t
, int64x1_t
, , , s64
, 0, 0)
27 BUILD_TEST (uint64x1_t
, uint64x1_t
, , , u64
, 0, 0)
28 BUILD_TEST (float64x1_t
, float64x1_t
, , , f64
, 0, 0)
29 /* { dg-final { scan-assembler-times "fmov\\td0, d1" 3 } } */
33 BUILD_TEST (poly8x8_t
, poly8x16_t
, , q
, p8
, 7, 15)
34 BUILD_TEST (int8x8_t
, int8x16_t
, , q
, s8
, 7, 15)
35 BUILD_TEST (uint8x8_t
, uint8x16_t
, , q
, u8
, 7, 15)
36 /* { dg-final { scan-assembler-times "ins\\tv0.b\\\[7\\\], v1.b\\\[15\\\]" 3 } } */
37 BUILD_TEST (poly16x4_t
, poly16x8_t
, , q
, p16
, 3, 7)
38 BUILD_TEST (int16x4_t
, int16x8_t
, , q
, s16
, 3, 7)
39 BUILD_TEST (uint16x4_t
, uint16x8_t
, , q
, u16
, 3, 7)
40 /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[3\\\], v1.h\\\[7\\\]" 3 } } */
41 BUILD_TEST (float32x2_t
, float32x4_t
, , q
, f32
, 1, 3)
42 BUILD_TEST (int32x2_t
, int32x4_t
, , q
, s32
, 1, 3)
43 BUILD_TEST (uint32x2_t
, uint32x4_t
, , q
, u32
, 1, 3)
44 /* { dg-final { scan-assembler-times "ins\\tv0.s\\\[1\\\], v1.s\\\[3\\\]" 3 } } */
45 BUILD_TEST (float64x1_t
, float64x2_t
, , q
, f64
, 0, 1)
46 BUILD_TEST (int64x1_t
, int64x2_t
, , q
, s64
, 0, 1)
47 BUILD_TEST (uint64x1_t
, uint64x2_t
, , q
, u64
, 0, 1)
48 /* { dg-final { scan-assembler-times "dup\\td0, v1.d\\\[1\\\]" 3 } } */
51 BUILD_TEST (poly8x16_t
, poly8x8_t
, q
, , p8
, 15, 7)
52 BUILD_TEST (int8x16_t
, int8x8_t
, q
, , s8
, 15, 7)
53 BUILD_TEST (uint8x16_t
, uint8x8_t
, q
, , u8
, 15, 7)
54 /* { dg-final { scan-assembler-times "ins\\tv0.b\\\[15\\\], v1.b\\\[7\\\]" 3 } } */
55 BUILD_TEST (poly16x8_t
, poly16x4_t
, q
, , p16
, 7, 3)
56 BUILD_TEST (int16x8_t
, int16x4_t
, q
, , s16
, 7, 3)
57 BUILD_TEST (uint16x8_t
, uint16x4_t
, q
, , u16
, 7, 3)
58 /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[7\\\], v1.h\\\[3\\\]" 3 } } */
59 BUILD_TEST (float32x4_t
, float32x2_t
, q
, , f32
, 3, 1)
60 BUILD_TEST (int32x4_t
, int32x2_t
, q
, , s32
, 3, 1)
61 BUILD_TEST (uint32x4_t
, uint32x2_t
, q
, , u32
, 3, 1)
62 /* { dg-final { scan-assembler-times "ins\\tv0.s\\\[3\\\], v1.s\\\[1\\\]" 3 } } */
63 BUILD_TEST (float64x2_t
, float64x1_t
, q
, , f64
, 1, 0)
64 BUILD_TEST (int64x2_t
, int64x1_t
, q
, , s64
, 1, 0)
65 BUILD_TEST (uint64x2_t
, uint64x1_t
, q
, , u64
, 1, 0)
66 /* { dg-final { scan-assembler-times "ins\\tv0.d\\\[1\\\], v1.d\\\[0\\\]" 3 } } */
70 BUILD_TEST (poly8x16_t
, poly8x16_t
, q
, q
, p8
, 14, 15)
71 BUILD_TEST (int8x16_t
, int8x16_t
, q
, q
, s8
, 14, 15)
72 BUILD_TEST (uint8x16_t
, uint8x16_t
, q
, q
, u8
, 14, 15)
73 /* { dg-final { scan-assembler-times "ins\\tv0.b\\\[14\\\], v1.b\\\[15\\\]" 3 } } */
74 BUILD_TEST (poly16x8_t
, poly16x8_t
, q
, q
, p16
, 6, 7)
75 BUILD_TEST (int16x8_t
, int16x8_t
, q
, q
, s16
, 6, 7)
76 BUILD_TEST (uint16x8_t
, uint16x8_t
, q
, q
, u16
, 6, 7)
77 /* { dg-final { scan-assembler-times "ins\\tv0.h\\\[6\\\], v1.h\\\[7\\\]" 3 } } */
78 BUILD_TEST (float32x4_t
, float32x4_t
, q
, q
, f32
, 2, 3)
79 BUILD_TEST (int32x4_t
, int32x4_t
, q
, q
, s32
, 2, 3)
80 BUILD_TEST (uint32x4_t
, uint32x4_t
, q
, q
, u32
, 2, 3)
81 /* { dg-final { scan-assembler-times "ins\\tv0.s\\\[2\\\], v1.s\\\[3\\\]" 3 } } */
82 BUILD_TEST (float64x2_t
, float64x2_t
, q
, q
, f64
, 1, 1)
83 BUILD_TEST (int64x2_t
, int64x2_t
, q
, q
, s64
, 1, 1)
84 BUILD_TEST (uint64x2_t
, uint64x2_t
, q
, q
, u64
, 1, 1)
85 /* { dg-final { scan-assembler-times "ins\\tv0.d\\\[1\\\], v1.d\\\[1\\\]" 3 } } */