[PR81647][AARCH64] Fix handling of Unordered Comparisons in aarch64-simd.md
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / vect.c
blobff70cae43b4c483442686f6e824c723b3ce3bc01
2 /* { dg-do run } */
3 /* { dg-options "-O3" } */
5 #include "vect.x"
7 extern void abort (void);
9 void set_vector (int *a, int n)
11 int i;
12 for (i=0; i<16; i++)
13 a[i] = n;
16 void check_vector (pRINT c, pRINT result, char *str)
18 int i;
19 for (i=0; i<16 ; i++)
20 if (c[i] != result[i])
21 abort ();
24 #define TEST(func, sign) set_vector (sign##c, 0); \
25 func (sign##a, sign##b, sign##c); \
26 check_vector (sign##c, func##_vector, #func);
29 #define TESTV(func, sign) \
30 if (func (sign##a) != func##_value) \
31 abort ();
33 #define TESTVLL(func, sign) \
34 if (func (ll##sign##a) != func##_value) \
35 abort ();
37 int main (void)
39 int sa[16];
40 int sb[16];
41 int sc[16];
42 unsigned int ua[16];
43 unsigned int ub[16];
44 unsigned int uc[16];
45 long long llsa[16];
46 unsigned long long llua[16];
47 int i;
49 /* Table of standard values to compare against. */
50 unsigned int test_bic_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
51 unsigned int test_orn_vector[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
52 int mla_vector[] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225};
53 int mls_vector[] = {0, -1, -4, -9, -16, -25, -36, -49, -64, -81, -100, -121, -144, -169, -196, -225};
54 int smax_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
55 int smin_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
56 unsigned int umax_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
57 unsigned int umin_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
58 int sabd_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
59 int saba_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
60 int reduce_smax_value = 0;
61 int reduce_smin_value = -15;
62 unsigned int reduce_umax_value = 15;
63 unsigned int reduce_umin_value = 0;
64 unsigned int reduce_add_u32_value = 120;
65 int reduce_add_s32_value = -120;
66 long long reduce_add_s64_value = -120;
67 unsigned long long reduce_add_u64_value = 120;
69 /* Set up input vectors. */
70 for (i=0; i < 16; i++)
72 sa[i] = sb[i] = -i;
73 llsa[i] = (long long)-i;
74 ua[i] = ub[i] = i;
75 llua[i] = (unsigned long long)i;
78 TEST (test_bic, s);
79 TEST (test_orn, s);
80 TEST (mla, s);
81 TEST (mls, s);
82 TEST (smax, s);
83 TEST (smin, s);
84 TEST (umax, u);
85 TEST (umin, u);
86 TEST (sabd, s);
87 TEST (saba, s);
88 TESTV (reduce_smax, s);
89 TESTV (reduce_smin, s);
90 TESTV (reduce_umax, u);
91 TESTV (reduce_umin, u);
92 TESTV (reduce_add_u32, u);
93 TESTV (reduce_add_s32, s);
94 TESTVLL (reduce_add_u64, u);
95 TESTVLL (reduce_add_s64, s);
96 return 0;