---
.../gcc.target/arm/armv8_2-fp16-conv-1.c | 99 ++++++++++++++++---
1 file changed, 83 insertions(+), 16 deletions(-)
diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
index c9639a542ae..279aafbc7b4 100644
--- a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
+++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-conv-1.c
@@ -2,100 +2,167 @@
/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
/* { dg-options "-O2" } */
/* { dg-add-options arm_v8_2a_fp16_scalar } */
+/* { dg-final { check-function-bodies "**" "" } } */
/* Test ARMv8.2 FP16 conversions. */
#include <arm_fp16.h>
+/*
+** f16_to_f32:
+** ...
+** vcvtb\.f32\.f16 (s[0-9]+), \1
+** ...
+*/
float
f16_to_f32 (__fp16 a)
{
return (float)a;
}
+/*
+** f16_to_pf32:
+** ...
+** vcvtb\.f32\.f16 (s[0-9]+), \1
+** ...
+*/
float
f16_to_pf32 (__fp16* a)
{
return (float)*a;
}
+/*
+** f16_to_s16:
+** ...
+** vcvtb\.f32\.f16 (s[0-9]+), \1
+** vcvt\.s32\.f32 \1, \1
+** ...
+*/
short
f16_to_s16 (__fp16 a)
{
return (short)a;
}
+/*
+** pf16_to_s16:
+** ...
+** vcvtb\.f32\.f16 (s[0-9]+), \1
+** vcvt\.s32\.f32 \1, \1
+** ...
+*/
short
pf16_to_s16 (__fp16* a)
{
return (short)*a;
}
-/* { dg-final { scan-assembler-times {vcvtb\.f32\.f16\ts[0-9]+, s[0-9]+} 4 } } */
-
+/*
+** f32_to_f16:
+** ...
+** vcvtb\.f16\.f32 (s[0-9]+), \1
+** ...
+*/
__fp16
f32_to_f16 (float a)
{
return (__fp16)a;
}
+/*
+** f32_to_pf16:
+** ...
+** vcvtb\.f16\.f32 (s[0-9]+), \1
+** ...
+*/
void
f32_to_pf16 (__fp16* x, float a)
{
*x = (__fp16)a;
}
+/*
+** s16_to_f16:
+** ...
+** vcvt\.f32\.s32 (s[0-9]+), \1
+** vcvtb\.f16\.f32 \1, \1
+** ...
+*/
__fp16
s16_to_f16 (short a)
{
return (__fp16)a;
}
+/*
+** s16_to_pf16:
+** ...
+** vcvt\.f32\.s32 (s[0-9]+), \1
+** vcvtb\.f16\.f32 \1, \1
+** ...
+*/
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 } } */
-
+/*
+** s16_to_f32:
+** ...
+** vcvt\.f32\.s32 (s[0-9]+), \1
+** ...
+*/
float
s16_to_f32 (short a)
{
return (float)a;
}
-/* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 3 } } */
-
+/*
+** f32_to_s16:
+** ...
+** vcvt\.s32\.f32 (s[0-9]+), \1
+** ...
+*/
short
f32_to_s16 (float a)
{
return (short)a;
}
-/* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 3 } } */
-
+/*
+** f32_to_u16:
+** ...
+** vcvt\.u32\.f32 (s[0-9]+), \1
+** ...
+*/
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 } } */
-
+/*
+** f64_to_s16:
+** ...
+** vcvt\.s32\.f64 s[0-9]+, d[0-9]+
+** ...
+*/
short
f64_to_s16 (double a)
{
return (short)a;
}
-/* { dg-final { scan-assembler-times {vcvt\.s32\.f64\ts[0-9]+, d[0-9]+} 1 } } */
-
+/*
+** f64_to_s16:
+** ...
+** vcvt\.s32\.f64 s[0-9]+, d[0-9]+
+** ...
+*/
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 } }
*/
-
-