/* Verify that fsca and fssra yield reasonable results. */ /* This test calls the sinf and cosf library functions for targets other than sh4a, but the VxWorks kernel doesn't have those functions. */ /* { dg-do run { target { "sh*-*-*" && { ! vxworks_kernel } } } } */ /* { dg-options "-O -ffast-math" } */ #include #include float sqrt_arg = 4.0f, sqrt_res = 2.0f; float dg2rad_f; double dg2rad_d; float __attribute__ ((noinline)) test_sinf (float x) { return sinf (x); } float __attribute ((noinline)) test_cosf (float x) { return cosf (x); } void check_f (float res, float expected) { if (res >= expected - 0.001f && res <= expected + 0.001f) return; abort (); } void check_d (double res, double expected) { if (res >= expected - 0.001 && res <= expected + 0.001) return; abort (); } int main() { check_f (sqrtf(sqrt_arg), sqrt_res); dg2rad_f = dg2rad_d = atan(1) / 45; check_f (test_sinf(90*dg2rad_f), 1); check_f (test_cosf(90*dg2rad_f), 0); check_d (sin(-90*dg2rad_d), -1); check_d (cos(180*dg2rad_d), -1); check_d (sin(-45*dg2rad_d) * cosf(135*dg2rad_f), 0.5); exit (0); }