blob: 7b02de35464787ccdc4eb5b28be01a71e8ca668f [file] [log] [blame]
/* 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 { target { has_fsca } } } */
/* { dg-options "-O2 -mfsca -funsafe-math-optimizations -fno-ipa-icf" } */
/* { dg-final { scan-assembler-times "fsca" 7 } } */
/* { dg-final { scan-assembler-times "shad" 1 } } */
/* { dg-final { scan-assembler-times "lds\tr\[0-9\],fpul" 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);
}