diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2014-10-30 09:35:42 +0000 |
---|---|---|
committer | <> | 2015-01-09 11:51:27 +0000 |
commit | c27a97d04853380f1e80525391b3f0d156ed4c84 (patch) | |
tree | 68ffaade7c605bc80cffa18360799c98a810976f /gcc/testsuite/gcc.target/sh/pr54680.c | |
parent | 6af3fdec2262dd94954acc5e426ef71cbd4521d3 (diff) | |
download | gcc-tarball-c27a97d04853380f1e80525391b3f0d156ed4c84.tar.gz |
Imported from /home/lorry/working-area/delta_gcc-tarball/gcc-4.9.2.tar.bz2.gcc-4.9.2
Diffstat (limited to 'gcc/testsuite/gcc.target/sh/pr54680.c')
-rw-r--r-- | gcc/testsuite/gcc.target/sh/pr54680.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/sh/pr54680.c b/gcc/testsuite/gcc.target/sh/pr54680.c new file mode 100644 index 0000000000..9171eeaf65 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/pr54680.c @@ -0,0 +1,66 @@ +/* Verify that the fsca input value is not converted to float and then back + to int. Notice that we can't count just "lds" insns because mode switches + use "lds.l". */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mfsca -funsafe-math-optimizations" } */ +/* { dg-skip-if "" { "sh*-*-*" } { "-m1" "-m2*" "-m3*" "-m4al" "*nofpu" "-m4-340*" "-m4-400*" "-m4-500*" "-m5*" } { "" } } */ +/* { dg-final { scan-assembler-times "fsca" 7 } } */ +/* { dg-final { scan-assembler-times "shad" 1 } } */ +/* { dg-final { scan-assembler-times "lds\t" 6 } } */ +/* { dg-final { scan-assembler-times "fmul" 2 } } */ +/* { dg-final { scan-assembler-times "ftrc" 1 } } */ + +#include <math.h> + +static const float pi = 3.14159265359f; + +float +test00 (int x) +{ + /* 1x shad, 1x lds, 1x fsca */ + return sinf ( (x >> 8) * (2*pi) / (1 << 16)); +} + +float +test01 (int x) +{ + /* 1x lds, 1x fsca */ + return sinf (x * (2*pi) / 65536); +} + +float +test02 (int x) +{ + /* 1x lds, 1x fsca */ + return sinf (x * (2*pi / 65536)); +} + +float +test03 (int x) +{ + /* 1x lds, 1x fsca */ + float scale = 2*pi / 65536; + return sinf (x * scale); +} + +float +test04 (int x) +{ + /* 1x lds, 1x fsca */ + return cosf (x / 65536.0f * 2*pi); +} + +float +test05 (int x) +{ + /* 1x lds, 1x fsca, 1x fmul */ + float scale = 2*pi / 65536; + return sinf (x * scale) * cosf (x * scale); +} + +float +test_06 (float x) +{ + /* 1x fmul, 1x ftrc, 1x fsca */ + return sinf (x); +} |