| #define B_TEST(TYPE) { TYPE v __attribute__((vector_size(16))); (void)((v < v) < v); } |
| #ifdef __cplusplus |
| #define T_TEST(TYPE) { TYPE s; TYPE v __attribute__((vector_size(16))); __typeof((v<v)[0]) iv __attribute__((vector_size(16))); (void)((iv ? s : s) < v); } |
| #else |
| #define T_TEST(TYPE) |
| #endif |
| #define T(TYPE) B_TEST(TYPE) T_TEST(TYPE) |
| #ifdef __SIZEOF_INT128__ |
| #define SIZEOF_MAXINT __SIZEOF_INT128__ |
| #else |
| #define SIZEOF_MAXINT __SIZEOF_LONG_LONG__ |
| #endif |
| |
| void f () |
| { |
| T(short) |
| T(int) |
| T(long) |
| T(long long) |
| |
| T_TEST(float) |
| T_TEST(double) |
| /* Avoid trouble with non-power-of-two sizes. |
| Also avoid trouble with long double larger than integral types. */ |
| #if !defined(__i386__) && !defined(__x86_64__) && !defined(__m68k__) \ |
| && !defined(__ia64__) && !defined(__hppa__) \ |
| && (__SIZEOF_LONG_DOUBLE__ & (__SIZEOF_LONG_DOUBLE__ - 1)) == 0 \ |
| && __SIZEOF_LONG_DOUBLE__ <= 16 \ |
| && __SIZEOF_LONG_DOUBLE__ <= SIZEOF_MAXINT |
| T_TEST(long double) |
| #endif |
| } |