On Fri, 23 Dec 2011, Richard Guenther wrote: > On Thu, 22 Dec 2011, Richard Henderson wrote: > > > On 12/22/2011 07:46 AM, Richard Guenther wrote: > > > Any way to test, in the testcase, whether the vector modes > > > will have NaNs or not? > > > > v[0] != v[0] ? > > Well, if MODE_HAS_NANS returns false we might fold 0.0/0.0 to 0.0, > or the HW might simply not have NaNs (SPU?) and have 0.0 as the > result. Thus, I want to query GCC capabilities (-ffinite-math-only) > and HW capabilities (what we have in real_mode_format) from inside > the testcase. > > Any idea? Otherwise I'll add dg-skips for the targets that fail > the test.
It seems we have __<type>_HAS_QUIET_NAN__. Nice. Thus I'll use /* { dg-do run } */ extern void abort (void); typedef float vf128 __attribute__((vector_size(16))); typedef float vf64 __attribute__((vector_size(8))); int main() { #if !__FINITE_MATH_ONLY__ #if __FLT_HAS_QUIET_NAN__ vf128 v = (vf128){ 0.f, 0.f, 0.f, 0.f }; vf64 u = (vf64){ 0.f, 0.f }; v = v / (vf128){ 0.f, 0.f, 0.f, 0.f }; if (v[0] == v[0]) abort (); u = u / (vf64){ 0.f, 0.f }; if (u[0] == u[0]) abort (); #endif #endif return 0; }