/* { dg-do run } */ /* { dg-options "-O3" } */ #include "vect.x" extern void abort (void); void set_vector (int *a, int n) { int i; for (i=0; i<16; i++) a[i] = n; } void check_vector (pRINT c, pRINT result, char *str) { int i; for (i=0; i<16 ; i++) if (c[i] != result[i]) abort (); } #define TEST(func, sign) set_vector (sign##c, 0); \ func (sign##a, sign##b, sign##c); \ check_vector (sign##c, func##_vector, #func); #define TESTV(func, sign) \ if (func (sign##a) != func##_value) \ abort (); #define TESTVLL(func, sign) \ if (func (ll##sign##a) != func##_value) \ abort (); int main (void) { int sa[16]; int sb[16]; int sc[16]; unsigned int ua[16]; unsigned int ub[16]; unsigned int uc[16]; long long llsa[16]; unsigned long long llua[16]; int i; /* Table of standard values to compare against. */ unsigned int test_bic_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; unsigned int test_orn_vector[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; int mla_vector[] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225}; int mls_vector[] = {0, -1, -4, -9, -16, -25, -36, -49, -64, -81, -100, -121, -144, -169, -196, -225}; int smax_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15}; int smin_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15}; unsigned int umax_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; unsigned int umin_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int sabd_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int saba_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int reduce_smax_value = 0; int reduce_smin_value = -15; unsigned int reduce_umax_value = 15; unsigned int reduce_umin_value = 0; unsigned int reduce_add_u32_value = 120; int reduce_add_s32_value = -120; long long reduce_add_s64_value = -120; unsigned long long reduce_add_u64_value = 120; /* Set up input vectors. */ for (i=0; i < 16; i++) { sa[i] = sb[i] = -i; llsa[i] = (long long)-i; ua[i] = ub[i] = i; llua[i] = (unsigned long long)i; } TEST (test_bic, s); TEST (test_orn, s); TEST (mla, s); TEST (mls, s); TEST (smax, s); TEST (smin, s); TEST (umax, u); TEST (umin, u); TEST (sabd, s); TEST (saba, s); TESTV (reduce_smax, s); TESTV (reduce_smin, s); TESTV (reduce_umax, u); TESTV (reduce_umin, u); TESTV (reduce_add_u32, u); TESTV (reduce_add_s32, s); TESTVLL (reduce_add_u64, u); TESTVLL (reduce_add_s64, s); return 0; }