blob: 8bfe06ac3e611823afb19ddef7cb8db95f173bc8 [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-save-temps -O2 -fno-inline" } */
#define FUNC_DEFS(__a) \
float \
fsfoo##__a (int x) \
{ \
return ((float) x)/(1lu << __a); \
} \
float \
fusfoo##__a (unsigned int x) \
{ \
return ((float) x)/(1lu << __a); \
} \
float \
fslfoo##__a (long long x) \
{ \
return ((float) x)/(1lu << __a); \
} \
float \
fulfoo##__a (unsigned long long x) \
{ \
return ((float) x)/(1lu << __a); \
} \
#define FUNC_DEFD(__a) \
double \
dsfoo##__a (int x) \
{ \
return ((double) x)/(1lu << __a); \
} \
double \
dusfoo##__a (unsigned int x) \
{ \
return ((double) x)/(1lu << __a); \
} \
double \
dslfoo##__a (long long x) \
{ \
return ((double) x)/(1lu << __a); \
} \
double \
dulfoo##__a (unsigned long long x) \
{ \
return ((double) x)/(1lu << __a); \
}
FUNC_DEFS (4)
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], w\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], w\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], x\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], x\[0-9\]*.*#4" 1 } } */
FUNC_DEFD (4)
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], w\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], w\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], x\[0-9\]*.*#4" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], x\[0-9\]*.*#4" 1 } } */
FUNC_DEFS (8)
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], w\[0-9\]*.*#8" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], w\[0-9\]*.*#8" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], x\[0-9\]*.*#8" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], x\[0-9\]*.*#8" 1 } } */
FUNC_DEFD (8)
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], w\[0-9\]*.*#8" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], w\[0-9\]*.*#8" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], x\[0-9\]*.*#8" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], x\[0-9\]*.*#8" 1 } } */
FUNC_DEFS (16)
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], w\[0-9\]*.*#16" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], w\[0-9\]*.*#16" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], x\[0-9\]*.*#16" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], x\[0-9\]*.*#16" 1 } } */
FUNC_DEFD (16)
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], w\[0-9\]*.*#16" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], w\[0-9\]*.*#16" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], x\[0-9\]*.*#16" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], x\[0-9\]*.*#16" 1 } } */
FUNC_DEFS (32)
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], w\[0-9\]*.*#32" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], w\[0-9\]*.*#32" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\ts\[0-9\], x\[0-9\]*.*#32" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\ts\[0-9\], x\[0-9\]*.*#32" 1 } } */
FUNC_DEFD (32)
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], w\[0-9\]*.*#32" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], w\[0-9\]*.*#32" 1 } } */
/* { dg-final { scan-assembler-times "scvtf\td\[0-9\], x\[0-9\]*.*#32" 1 } } */
/* { dg-final { scan-assembler-times "ucvtf\td\[0-9\], x\[0-9\]*.*#32" 1 } } */
#define FUNC_TESTS(__a, __b) \
do \
{ \
if (fsfoo##__a (__b) != ((int) i) * (1.0f/(1lu << __a)) ) \
__builtin_abort (); \
if (fusfoo##__a (__b) != ((int) i) * (1.0f/(1lu << __a)) ) \
__builtin_abort (); \
if (fslfoo##__a (__b) != ((int) i) * (1.0f/(1lu << __a)) ) \
__builtin_abort (); \
if (fulfoo##__a (__b) != ((int) i) * (1.0f/(1lu << __a)) ) \
__builtin_abort (); \
} while (0)
#define FUNC_TESTD(__a, __b) \
do \
{ \
if (dsfoo##__a (__b) != ((int) i) * (1.0d/(1lu << __a)) ) \
__builtin_abort (); \
if (dusfoo##__a (__b) != ((int) i) * (1.0d/(1lu << __a)) ) \
__builtin_abort (); \
if (dslfoo##__a (__b) != ((int) i) * (1.0d/(1lu << __a)) ) \
__builtin_abort (); \
if (dulfoo##__a (__b) != ((int) i) * (1.0d/(1lu << __a)) ) \
__builtin_abort (); \
} while (0)
int
main (void)
{
int i;
for (i = 0; i < 32; i ++)
{
FUNC_TESTS (4, i);
FUNC_TESTS (8, i);
FUNC_TESTS (16, i);
FUNC_TESTS (32, i);
FUNC_TESTD (4, i);
FUNC_TESTD (8, i);
FUNC_TESTD (16, i);
FUNC_TESTD (32, i);
}
return 0;
}