libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / neon-sve-bridge.c
blob4f8f26cec1b44cdba222757a2988089b5ed4acc4
1 // { dg-options "-march=armv8.2-a+sve" }
2 // { dg-do run { target aarch64_sve_hw } }
4 #include <arm_neon_sve_bridge.h>
6 extern void abort (void);
8 int
9 svget_neonq_test ()
11 int64_t val1 = 987654321;
12 int64_t val2 = 123456789;
13 svint64_t sveInput = svdupq_n_s64 (val1, val2);
14 int64x2_t neonReturn = svget_neonq_s64 (sveInput);
15 int64_t val1Return = vgetq_lane_s64 (neonReturn, 0);
16 int64_t val2Return = vgetq_lane_s64 (neonReturn, 1);
17 if (val1 == val1Return && val2 == val2Return)
18 return 0;
19 return 1;
22 int
23 svset_neonq_test ()
25 int64_t val1 = 987654321;
26 int64_t val2 = 123456789;
27 int64x2_t NeonInput;
28 NeonInput = vsetq_lane_s64 (val1, NeonInput, 0);
29 NeonInput = vsetq_lane_s64 (val2, NeonInput, 1);
30 svint64_t sveReturn = svset_neonq_s64 (sveReturn, NeonInput);
31 int64_t val1Return = svlasta_s64 (svptrue_b64(), sveReturn);
32 int64_t val2Return = svlastb_s64 (svptrue_pat_b8(SV_VL16), sveReturn);
33 if (val1 == val1Return && val2 == val2Return)
34 return 0;
35 return 1;
38 int
39 svdup_neonq_test ()
41 int64_t val1 = 987654321;
42 int64_t val2 = 123456789;
43 int64x2_t NeonInput;
44 NeonInput = vsetq_lane_s64 (val1, NeonInput, 0);
45 NeonInput = vsetq_lane_s64 (val2, NeonInput, 1);
46 svint64_t sveReturn = svdup_neonq_s64 (NeonInput);
47 int64_t val1Return = svlasta_s64 (svptrue_b64(), sveReturn);
48 int64_t val2Return = svlastb_s64 (svptrue_b64(), sveReturn);
49 if (val1 == val1Return && val2 == val2Return)
50 return 0;
51 return 1;
54 int
55 main ()
57 if (svget_neonq_test () == 1)
58 abort ();
59 if (svset_neonq_test () == 1)
60 abort ();
61 if (svdup_neonq_test () == 1)
62 abort ();
63 return 0;