blob: c9639a542ae3e5c145ab999a760eff78800358bc [file] [log] [blame]
/* { dg-do compile } */
/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
/* { dg-options "-O2" } */
/* { dg-add-options arm_v8_2a_fp16_scalar } */
/* Test ARMv8.2 FP16 conversions. */
#include <arm_fp16.h>
float
f16_to_f32 (__fp16 a)
{
return (float)a;
}
float
f16_to_pf32 (__fp16* a)
{
return (float)*a;
}
short
f16_to_s16 (__fp16 a)
{
return (short)a;
}
short
pf16_to_s16 (__fp16* a)
{
return (short)*a;
}
/* { dg-final { scan-assembler-times {vcvtb\.f32\.f16\ts[0-9]+, s[0-9]+} 4 } } */
__fp16
f32_to_f16 (float a)
{
return (__fp16)a;
}
void
f32_to_pf16 (__fp16* x, float a)
{
*x = (__fp16)a;
}
__fp16
s16_to_f16 (short a)
{
return (__fp16)a;
}
void
s16_to_pf16 (__fp16* x, short a)
{
*x = (__fp16)a;
}
/* { dg-final { scan-assembler-times {vcvtb\.f16\.f32\ts[0-9]+, s[0-9]+} 4 } } */
float
s16_to_f32 (short a)
{
return (float)a;
}
/* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 3 } } */
short
f32_to_s16 (float a)
{
return (short)a;
}
/* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 3 } } */
unsigned short
f32_to_u16 (float a)
{
return (unsigned short)a;
}
/* { dg-final { scan-assembler-times {vcvt\.u32\.f32\ts[0-9]+, s[0-9]+} 1 } } */
short
f64_to_s16 (double a)
{
return (short)a;
}
/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */
unsigned short
f64_to_u16 (double a)
{
return (unsigned short)a;
}
/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */