2018-03-15 Steven G. Kargl <kargl@gcc.gnu.org>
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / vqabs_s64_1.c
blob26f66788c381fc24d9af249d45746df840a55b36
1 /* Test vqabs_s64 intrinsics work correctly. */
2 /* { dg-do run } */
3 /* { dg-options "--save-temps" } */
5 #include <arm_neon.h>
7 extern void abort (void);
9 int __attribute__ ((noinline))
10 test_vqabs_s64 (int64x1_t passed, int64_t expected)
12 return vget_lane_s64 (vqabs_s64 (passed), 0) != expected;
15 int __attribute__ ((noinline))
16 test_vqabsd_s64 (int64_t passed, int64_t expected)
18 return vqabsd_s64 (passed) != expected;
21 /* { dg-final { scan-assembler-times "sqabs\\td\[0-9\]+, d\[0-9\]+" 2 } } */
23 int
24 main (int argc, char **argv)
26 /* Basic test. */
27 if (test_vqabs_s64 (vcreate_s64 (-1), 1))
28 abort ();
29 if (test_vqabsd_s64 (-1, 1))
30 abort ();
32 /* Getting absolute value of min int64_t.
33 Note, exact result cannot be represented in int64_t,
34 so max int64_t is expected. */
35 if (test_vqabs_s64 (vcreate_s64 (0x8000000000000000), 0x7fffffffffffffff))
36 abort ();
37 if (test_vqabsd_s64 (0x8000000000000000, 0x7fffffffffffffff))
38 abort ();
40 /* Another input that gets max int64_t. */
41 if (test_vqabs_s64 (vcreate_s64 (0x8000000000000001), 0x7fffffffffffffff))
42 abort ();
43 if (test_vqabsd_s64 (0x8000000000000001, 0x7fffffffffffffff))
44 abort ();
46 /* Checking that large positive numbers stay the same. */
47 if (test_vqabs_s64 (vcreate_s64 (0x7fffffffffffffff), 0x7fffffffffffffff))
48 abort ();
49 if (test_vqabsd_s64 (0x7fffffffffffffff, 0x7fffffffffffffff))
50 abort ();
52 return 0;