On 27/08/2025 16:07, Torbjörn SVENSSON wrote:
> Reduce fp16-aapcs testcases to return value testing since parameter
> passing are already tested in aapcs/vfp*.c
>
> gcc/testsuite/ChangeLog:
> * gcc.target/arm/fp16-aapcs.c: New test.
> * gcc.target/arm/fp16-aapcs-1.c: Removed.
> * gcc.target/arm/fp16-aapcs-2.c: Likewise.
> * gcc.target/arm/fp16-aapcs-3.c: Likewise.
> * gcc.target/arm/fp16-aapcs-4.c: Likewise.
>
> Signed-off-by: Torbjörn SVENSSON <[email protected]>
> ---
> gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c | 65 ---------------------
> gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c | 44 --------------
> gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c | 65 ---------------------
> gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c | 44 --------------
> gcc/testsuite/gcc.target/arm/fp16-aapcs.c | 24 ++++++++
> 5 files changed, 24 insertions(+), 218 deletions(-)
> delete mode 100644 gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
> delete mode 100644 gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> delete mode 100644 gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
> delete mode 100644 gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> create mode 100644 gcc/testsuite/gcc.target/arm/fp16-aapcs.c
OK (with the whitespace nit fixed).
Apologies for the delay reviewing this.
R.
>
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
> deleted file mode 100644
> index b18d7cda65c..00000000000
> --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-require-effective-target arm_hard_vfp_ok } */
> -/* { dg-require-effective-target arm_fp16_ok } */
> -/* { dg-options "-O2" } */
> -/* { dg-add-options arm_fp16_ieee } */
> -/* { dg-final { check-function-bodies "**" "" "" } } */
> -
> -/* Test __fp16 arguments and return value in registers (hard-float). */
> -
> -void
> -swap (__fp16, __fp16);
> -
> -/*
> -** F:
> -** ...
> -** (
> -
> -Below block is for non-armv8.1
> -** (
> -** vmov\.f32 (s[3-9]|s1[0-5]), s0
> -** ...
> -** vmov\.f32 s0, s1
> -** ...
> -** vmov\.f32 s1, \1
> -** |
> -** vmov\.f32 (s[3-9]|s1[0-5]), s1
> -** ...
> -** vmov\.f32 s1, s0
> -** ...
> -** vmov\.f32 s0, \2
> -** )
> -** vstr\.32 s2, \[sp, #4\] @ int
> -** bl swap
> -** vldr\.32 s2, \[sp, #4\] @ int
> -** vmov\.f32 s0, s2
> -
> -** |
> -
> -Below block is for armv8.1
> -** (
> -** vmov (s[3-9]|s1[0-5]), s0 @ __fp16
> -** ...
> -** vmov s0, s1 @ __fp16
> -** ...
> -** vmov s1, \3 @ __fp16
> -** |
> -** vmov (s[3-9]|s1[0-5]), s1 @ __fp16
> -** ...
> -** vmov s1, s0 @ __fp16
> -** ...
> -** vmov s0, \4 @ __fp16
> -** )
> -** vstr\.32 s2, \[sp, #4\] @ int
> -** bl swap
> -** vldr\.16 s0, \[sp, #4\]
> -
> -** )
> -** ...
> -*/
> -__fp16
> -F (__fp16 a, __fp16 b, __fp16 c)
> -{
> - swap (b, a);
> - return c;
> -}
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> deleted file mode 100644
> index 48510e89536..00000000000
> --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-require-effective-target arm_fp16_ok } */
> -/* { dg-options "-mfloat-abi=softfp -O2 -mno-long-calls" } */
> -/* { dg-add-options arm_fp16_ieee } */
> -/* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" }
> } */
> -/* { dg-final { check-function-bodies "**" "" "" } } */
> -
> -/* Test __fp16 arguments and return value in registers (softfp). */
> -
> -void
> -swap (__fp16, __fp16);
> -
> -/*
> -** F:
> -** ...
> -** (
> -** mov r3, r0 @ __fp16
> -** ...
> -** mov r0, r1 @ __fp16
> -** ...
> -** mov r1, r3 @ __fp16
> -** |
> -** mov r3, r1 @ __fp16
> -** ...
> -** mov r1, r0 @ __fp16
> -** ...
> -** mov r0, r3 @ __fp16
> -** )
> -** ...
> -*/
> -/*
> -** F: { target arm_little_endian }
> -** ...
> -** str r2, \[sp, #4\]
> -** bl swap
> -** ldrh r0, \[sp, #4\] @ __fp16
> -** ...
> -*/
> -__fp16
> -F (__fp16 a, __fp16 b, __fp16 c)
> -{
> - swap (b, a);
> - return c;
> -}
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
> deleted file mode 100644
> index 7238ef3a02e..00000000000
> --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c
> +++ /dev/null
> @@ -1,65 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-require-effective-target arm_hard_vfp_ok } */
> -/* { dg-require-effective-target arm_fp16_alternative_ok } */
> -/* { dg-options "-O2" } */
> -/* { dg-add-options arm_fp16_alternative } */
> -/* { dg-final { check-function-bodies "**" "" "" } } */
> -
> -/* Test __fp16 arguments and return value in registers (hard-float). */
> -
> -void
> -swap (__fp16, __fp16);
> -
> -/*
> -** F:
> -** ...
> -** (
> -
> -Below block is for non-armv8.1
> -** (
> -** vmov\.f32 (s[3-9]|s1[0-5]), s0
> -** ...
> -** vmov\.f32 s0, s1
> -** ...
> -** vmov\.f32 s1, \1
> -** |
> -** vmov\.f32 (s[3-9]|s1[0-5]), s1
> -** ...
> -** vmov\.f32 s1, s0
> -** ...
> -** vmov\.f32 s0, \2
> -** )
> -** vstr\.32 s2, \[sp, #4\] @ int
> -** bl swap
> -** vldr\.32 s2, \[sp, #4\] @ int
> -** vmov\.f32 s0, s2
> -
> -** |
> -
> -Below block is for armv8.1
> -** (
> -** vmov (s[3-9]|s1[0-5]), s0
> -** ...
> -** vmov s0, s1
> -** ...
> -** vmov s1, \3
> -** |
> -** vmov (s[3-9]|s1[0-5]), s1
> -** ...
> -** vmov s1, s0
> -** ...
> -** vmov s0, \4
> -** )
> -** vstr\.32 s2, \[sp, #4\] @ int
> -** bl swap
> -** vldr\.16 s0, \[sp, #4\]
> -
> -** )
> -** ...
> -*/
> -__fp16
> -F (__fp16 a, __fp16 b, __fp16 c)
> -{
> - swap (b, a);
> - return c;
> -}
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> deleted file mode 100644
> index 13f08d8afa3..00000000000
> --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/* { dg-do compile } */
> -/* { dg-require-effective-target arm_fp16_alternative_ok } */
> -/* { dg-options "-mfloat-abi=softfp -O2" } */
> -/* { dg-add-options arm_fp16_alternative } */
> -/* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" }
> } */
> -/* { dg-final { check-function-bodies "**" "" "" } } */
> -
> -/* Test __fp16 arguments and return value in registers (softfp). */
> -
> -void
> -swap (__fp16, __fp16);
> -
> -/*
> -** F:
> -** ...
> -** (
> -** mov r3, r0 @ __fp16
> -** ...
> -** mov r0, r1 @ __fp16
> -** ...
> -** mov r1, r3 @ __fp16
> -** |
> -** mov r3, r1 @ __fp16
> -** ...
> -** mov r1, r0 @ __fp16
> -** ...
> -** mov r0, r3 @ __fp16
> -** )
> -** ...
> -*/
> -/*
> -** F: { target arm_little_endian }
> -** ...
> -** str r2, \[sp, #4\]
> -** bl swap
> -** ldrh r0, \[sp, #4\] @ __fp16
> -** ...
> -*/
> -__fp16
> -F (__fp16 a, __fp16 b, __fp16 c)
> -{
> - swap (b, a);
> - return c;
> -}
> diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs.c
> b/gcc/testsuite/gcc.target/arm/fp16-aapcs.c
> new file mode 100644
> index 00000000000..564f5629ba9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/arm/fp16-aapcs.c
> @@ -0,0 +1,24 @@
> +/* { dg-do compile } */
> +/* { dg-require-effective-target arm_fp16_alternative_ok } */
> +/* { dg-options "-O2" } */
> +/* { dg-add-options arm_fp16_alternative } */
> +/* { dg-final { check-function-bodies "**" "" "" } } */
> +
> +/* Test __fp16 arguments and return value in registers. */
> +
> +__fp16 f();
> +void g(__fp16);
> +void h();
> +
> +/*
> + ** test:
> + ** ...
> + ** bl f
> + ** bl g
> + ** ...
> + */
> +int test()
> +{
> + g(f());
> + h();
> +}