1/* { dg-do run } */ 2#define vector(elcount, type) \ 3__attribute__((vector_size((elcount)*sizeof(type)))) type 4 5#define check_compare(count, res, i0, i1, op, fmt) \ 6do { \ 7 int __i; \ 8 for (__i = 0; __i < count; __i ++) { \ 9 if ((res)[__i] != ((i0)[__i] op (i1)[__i] ? -1 : 0)) \ 10 { \ 11 __builtin_printf ("%i != ((" fmt " " #op " " fmt " ? -1 : 0) ", \ 12 (res)[__i], (i0)[__i], (i1)[__i]); \ 13 __builtin_abort (); \ 14 } \ 15 } \ 16} while (0) 17 18#define test(count, v0, v1, res, fmt); \ 19do { \ 20 res = (v0 > v1); \ 21 check_compare (count, res, v0, v1, >, fmt); \ 22 res = (v0 < v1); \ 23 check_compare (count, res, v0, v1, <, fmt); \ 24 res = (v0 >= v1); \ 25 check_compare (count, res, v0, v1, >=, fmt); \ 26 res = (v0 <= v1); \ 27 check_compare (count, res, v0, v1, <=, fmt); \ 28 res = (v0 == v1); \ 29 check_compare (count, res, v0, v1, ==, fmt); \ 30 res = (v0 != v1); \ 31 check_compare (count, res, v0, v1, !=, fmt); \ 32} while (0) 33 34 35int main (int argc, char *argv[]) { 36#define INT int 37 vector (4, INT) i0; 38 vector (4, INT) i1; 39 vector (4, int) ires; 40 int i; 41 42 i0 = (vector (4, INT)){(INT)argc, 1, 2, 10}; 43 i1 = (vector (4, INT)){0, 3, 2, (INT)-23}; 44 test (4, i0, i1, ires, "%i"); 45#undef INT 46 47#define INT unsigned int 48 vector (4, int) ures; 49 vector (4, INT) u0; 50 vector (4, INT) u1; 51 52 u0 = (vector (4, INT)){(INT)argc, 1, 2, 10}; 53 u1 = (vector (4, INT)){0, 3, 2, (INT)-23}; 54 test (4, u0, u1, ures, "%u"); 55#undef INT 56 57 58#define SHORT short 59 vector (8, SHORT) s0; 60 vector (8, SHORT) s1; 61 vector (8, short) sres; 62 63 s0 = (vector (8, SHORT)){(SHORT)argc, 1, 2, 10, 6, 87, (SHORT)-5, 2}; 64 s1 = (vector (8, SHORT)){0, 3, 2, (SHORT)-23, 12, 10, (SHORT)-2, 0}; 65 test (8, s0, s1, sres, "%i"); 66#undef SHORT 67 68#define SHORT unsigned short 69 vector (8, SHORT) us0; 70 vector (8, SHORT) us1; 71 vector (8, short) usres; 72 73 us0 = (vector (8, SHORT)){(SHORT)argc, 1, 2, 10, 6, 87, (SHORT)-5, 2}; 74 us1 = (vector (8, SHORT)){0, 3, 2, (SHORT)-23, 12, 10, (SHORT)-2, 0}; 75 test (8, us0, us1, usres, "%u"); 76#undef SHORT 77 78#define CHAR signed char 79 vector (16, CHAR) c0; 80 vector (16, CHAR) c1; 81 vector (16, signed char) cres; 82 83 c0 = (vector (16, CHAR)){(CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2, \ 84 (CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2 }; 85 86 c1 = (vector (16, CHAR)){0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0, \ 87 0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0}; 88 test (16, c0, c1, cres, "%i"); 89#undef CHAR 90 91#define CHAR unsigned char 92 vector (16, CHAR) uc0; 93 vector (16, CHAR) uc1; 94 vector (16, signed char) ucres; 95 96 uc0 = (vector (16, CHAR)){(CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2, \ 97 (CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2 }; 98 99 uc1 = (vector (16, CHAR)){0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0, \ 100 0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0}; 101 test (16, uc0, uc1, ucres, "%u"); 102#undef CHAR 103/* Float comparison. */ 104 vector (4, float) f0; 105 vector (4, float) f1; 106 __typeof (f0 == f1) ifres; 107 108 f0 = (vector (4, float)){(float)argc, 1., 2., 10.}; 109 f1 = (vector (4, float)){0., 3., 2., (float)-23}; 110 test (4, f0, f1, ifres, "%f"); 111 112/* Double comparison. */ 113 vector (2, double) d0; 114 vector (2, double) d1; 115 __typeof (d0 == d1) idres; 116 117 d0 = (vector (2, double)){(double)argc, 10.}; 118 d1 = (vector (2, double)){0., (double)-23}; 119 test (2, d0, d1, idres, "%f"); 120 121 122 return 0; 123} 124 125