/* * Require float128 support because __ibm128 currently is not enabled unless we * also have __float128 support. We require software IEEE 128-bit support, * which will work on power8. If we have hardware IEEE 128-bit support (power9 * or power10), ppc_float128_sw will still enable running the test. */ /* { dg-do run } */ /* { dg-require-effective-target ppc_float128_sw } */ /* { dg-options "-O2 -mvsx -mfloat128" } */ /* { dg-prune-output ".-mfloat128. option may not be fully supported" } */ /* * PR target/104253 * * Verify that the various conversions to and from __ibm128 work. When the * default for long double is changed to IEEE 128-bit, originally GCC would * call the functions using an 'if' name instead of 'tf' name. */ #include extern float ibm128_to_sf (__ibm128) __attribute__((noinline)); extern double ibm128_to_df (__ibm128) __attribute__((noinline)); extern int ibm128_to_si (__ibm128) __attribute__((noinline)); extern long long ibm128_to_di (__ibm128) __attribute__((noinline)); extern unsigned int ibm128_to_usi (__ibm128) __attribute__((noinline)); extern unsigned long long ibm128_to_udi (__ibm128) __attribute__((noinline)); extern __ibm128 sf_to_ibm128 (float) __attribute__((noinline)); extern __ibm128 df_to_ibm128 (double) __attribute__((noinline)); extern __ibm128 si_to_ibm128 (int) __attribute__((noinline)); extern __ibm128 di_to_ibm128 (long long) __attribute__((noinline)); extern __ibm128 usi_to_ibm128 (unsigned int) __attribute__((noinline)); extern __ibm128 udi_to_ibm128 (unsigned long long) __attribute__((noinline)); float ibm128_to_sf (__ibm128 x) { return x; } double ibm128_to_df (__ibm128 x) { return x; } int ibm128_to_si (__ibm128 x) { return x; } long long ibm128_to_di (__ibm128 x) { return x; } unsigned int ibm128_to_usi (__ibm128 x) { return x; } unsigned long long ibm128_to_udi (__ibm128 x) { return x; } __ibm128 sf_to_ibm128 (float x) { return x; } __ibm128 df_to_ibm128 (double x) { return x; } __ibm128 si_to_ibm128 (int x) { return x; } __ibm128 di_to_ibm128 (long long x) { return x; } __ibm128 usi_to_ibm128 (unsigned int x) { return x; } __ibm128 udi_to_ibm128 (unsigned long long x) { return x; } volatile float seven_sf = 7.0f; volatile double seven_df = 7.0; volatile int seven_si = 7; volatile long long seven_di = 7LL; volatile unsigned int seven_usi = 7U; volatile unsigned long long seven_udi = 7ULL; volatile __ibm128 seven_ibm128 = 7.0; int main (void) { if (seven_ibm128 != sf_to_ibm128 (seven_sf)) abort (); if (seven_ibm128 != df_to_ibm128 (seven_df)) abort (); if (seven_ibm128 != si_to_ibm128 (seven_si)) abort (); if (seven_ibm128 != di_to_ibm128 (seven_di)) abort (); if (seven_ibm128 != usi_to_ibm128 (seven_usi)) abort (); if (seven_ibm128 != udi_to_ibm128 (seven_udi)) abort (); if (seven_sf != ibm128_to_sf (seven_ibm128)) abort (); if (seven_df != ibm128_to_df (seven_ibm128)) abort (); if (seven_si != ibm128_to_si (seven_ibm128)) abort (); if (seven_di != ibm128_to_di (seven_ibm128)) abort (); if (seven_usi != ibm128_to_usi (seven_ibm128)) abort (); if (seven_udi != ibm128_to_udi (seven_ibm128)) abort (); return 0; }