| /* { dg-do run } */ |
| #define vector(elcount, type) \ |
| __attribute__((vector_size((elcount)*sizeof(type)))) type |
| |
| #define check_compare(count, res, i0, i1, op, fmt) \ |
| do { \ |
| int __i; \ |
| for (__i = 0; __i < count; __i ++) { \ |
| if ((res)[__i] != ((i0)[__i] op (i1)[__i] ? -1 : 0)) \ |
| { \ |
| __builtin_printf ("%i != ((" fmt " " #op " " fmt " ? -1 : 0) ", \ |
| (res)[__i], (i0)[__i], (i1)[__i]); \ |
| __builtin_abort (); \ |
| } \ |
| } \ |
| } while (0) |
| |
| #define test(count, v0, v1, res, fmt); \ |
| do { \ |
| res = (v0 > v1); \ |
| check_compare (count, res, v0, v1, >, fmt); \ |
| res = (v0 < v1); \ |
| check_compare (count, res, v0, v1, <, fmt); \ |
| res = (v0 >= v1); \ |
| check_compare (count, res, v0, v1, >=, fmt); \ |
| res = (v0 <= v1); \ |
| check_compare (count, res, v0, v1, <=, fmt); \ |
| res = (v0 == v1); \ |
| check_compare (count, res, v0, v1, ==, fmt); \ |
| res = (v0 != v1); \ |
| check_compare (count, res, v0, v1, !=, fmt); \ |
| } while (0) |
| |
| |
| int main (int argc, char *argv[]) { |
| #define INT int |
| vector (4, INT) i0; |
| vector (4, INT) i1; |
| vector (4, int) ires; |
| int i; |
| |
| i0 = (vector (4, INT)){(INT)argc, 1, 2, 10}; |
| i1 = (vector (4, INT)){0, 3, 2, (INT)-23}; |
| test (4, i0, i1, ires, "%i"); |
| #undef INT |
| |
| #define INT unsigned int |
| vector (4, int) ures; |
| vector (4, INT) u0; |
| vector (4, INT) u1; |
| |
| u0 = (vector (4, INT)){(INT)argc, 1, 2, 10}; |
| u1 = (vector (4, INT)){0, 3, 2, (INT)-23}; |
| test (4, u0, u1, ures, "%u"); |
| #undef INT |
| |
| |
| #define SHORT short |
| vector (8, SHORT) s0; |
| vector (8, SHORT) s1; |
| vector (8, short) sres; |
| |
| s0 = (vector (8, SHORT)){(SHORT)argc, 1, 2, 10, 6, 87, (SHORT)-5, 2}; |
| s1 = (vector (8, SHORT)){0, 3, 2, (SHORT)-23, 12, 10, (SHORT)-2, 0}; |
| test (8, s0, s1, sres, "%i"); |
| #undef SHORT |
| |
| #define SHORT unsigned short |
| vector (8, SHORT) us0; |
| vector (8, SHORT) us1; |
| vector (8, short) usres; |
| |
| us0 = (vector (8, SHORT)){(SHORT)argc, 1, 2, 10, 6, 87, (SHORT)-5, 2}; |
| us1 = (vector (8, SHORT)){0, 3, 2, (SHORT)-23, 12, 10, (SHORT)-2, 0}; |
| test (8, us0, us1, usres, "%u"); |
| #undef SHORT |
| |
| #define CHAR signed char |
| vector (16, CHAR) c0; |
| vector (16, CHAR) c1; |
| vector (16, signed char) cres; |
| |
| c0 = (vector (16, CHAR)){(CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2, \ |
| (CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2 }; |
| |
| c1 = (vector (16, CHAR)){0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0, \ |
| 0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0}; |
| test (16, c0, c1, cres, "%i"); |
| #undef CHAR |
| |
| #define CHAR unsigned char |
| vector (16, CHAR) uc0; |
| vector (16, CHAR) uc1; |
| vector (16, signed char) ucres; |
| |
| uc0 = (vector (16, CHAR)){(CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2, \ |
| (CHAR)argc, 1, 2, 10, 6, 87, (CHAR)-5, 2 }; |
| |
| uc1 = (vector (16, CHAR)){0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0, \ |
| 0, 3, 2, (CHAR)-23, 12, 10, (CHAR)-2, 0}; |
| test (16, uc0, uc1, ucres, "%u"); |
| #undef CHAR |
| /* Float comparison. */ |
| vector (4, float) f0; |
| vector (4, float) f1; |
| __typeof (f0 == f1) ifres; |
| |
| f0 = (vector (4, float)){(float)argc, 1., 2., 10.}; |
| f1 = (vector (4, float)){0., 3., 2., (float)-23}; |
| test (4, f0, f1, ifres, "%f"); |
| |
| /* Double comparison. */ |
| vector (2, double) d0; |
| vector (2, double) d1; |
| __typeof (d0 == d1) idres; |
| |
| d0 = (vector (2, double)){(double)argc, 10.}; |
| d1 = (vector (2, double)){0., (double)-23}; |
| test (2, d0, d1, idres, "%f"); |
| |
| |
| return 0; |
| } |
| |