Hello, The sh4a-fprun.c test case was bogus. It did not really use the fsca instruction to do any calculations, because the things it tests could be evaluated at compile time and folded away. The test case was supposed to be failing since rev 188149, as I introduced a bug in the commit for PR 53512. I got the sincos standard name pattern wrong -- the sin and cos outputs are swapped.
The attached patch fixes the test case by using noinline wrappers around sinf and cosf. Committed as obvious as rev 193419. The other fixes for the docs and the sincos pattern in sh.md will follow. Cheers, Oleg testsuite/ChangeLog: * gcc.target/sh/sh4a-fprun.c: Add test_sinf and test_cosf noinline wrappers around sinf and cosf.
Index: gcc/testsuite/gcc.target/sh/sh4a-fprun.c =================================================================== --- gcc/testsuite/gcc.target/sh/sh4a-fprun.c (revision 193405) +++ gcc/testsuite/gcc.target/sh/sh4a-fprun.c (working copy) @@ -11,25 +11,43 @@ float dg2rad_f; double dg2rad_d; -void check_f (float res, float expected) { +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) { +void +check_d (double res, double expected) +{ if (res >= expected - 0.001 && res <= expected + 0.001) return; abort (); } -int main() { +int +main() +{ check_f (sqrtf(sqrt_arg), sqrt_res); dg2rad_f = dg2rad_d = atan(1) / 45; - check_f (sinf(90*dg2rad_f), 1); - check_f (cosf(90*dg2rad_f), 0); + 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);