158 lines
3.3 KiB
C
158 lines
3.3 KiB
C
|
/*
|
||
|
* 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 <stdlib.h>
|
||
|
|
||
|
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;
|
||
|
}
|