aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudio Bantaloukas <claudio.bantaloukas@arm.com>2024-11-11 18:08:28 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-11-11 18:08:28 +0000
commit2ad277478620037103379ffad6a99dc00bf0bca7 (patch)
treedc3ebfaf3dc38ebd455490c0a619b7eb0a683344
parent416a8b375589d4c2891b437d0991296ef32bde98 (diff)
downloadgcc-2ad277478620037103379ffad6a99dc00bf0bca7.zip
gcc-2ad277478620037103379ffad6a99dc00bf0bca7.tar.gz
gcc-2ad277478620037103379ffad6a99dc00bf0bca7.tar.bz2
aarch64: return scalar fp8 values in fp registers
According to the aapcs64: If the argument is an 8-bit (...) precision Floating-point or short vector type and the NSRN is less than 8, then the argument is allocated to the least significant bits of register v[NSRN]. gcc/ * config/aarch64/aarch64.cc (aarch64_vfp_is_call_or_return_candidate): use fp registers to return svmfloat8_t parameters. gcc/testsuite/ * gcc.target/aarch64/fp8_scalar_1.c:
-rw-r--r--gcc/config/aarch64/aarch64.cc3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/fp8_scalar_1.c4
2 files changed, 4 insertions, 3 deletions
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index e9cee0a..00bcf18 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -22306,7 +22306,8 @@ aarch64_vfp_is_call_or_return_candidate (machine_mode mode,
if ((!composite_p
&& (GET_MODE_CLASS (mode) == MODE_FLOAT
- || GET_MODE_CLASS (mode) == MODE_DECIMAL_FLOAT))
+ || GET_MODE_CLASS (mode) == MODE_DECIMAL_FLOAT
+ || (type && TYPE_MAIN_VARIANT (type) == aarch64_mfp8_type_node)))
|| aarch64_short_vector_p (type, mode))
{
*count = 1;
diff --git a/gcc/testsuite/gcc.target/aarch64/fp8_scalar_1.c b/gcc/testsuite/gcc.target/aarch64/fp8_scalar_1.c
index 1bc2ac2..61edf06 100644
--- a/gcc/testsuite/gcc.target/aarch64/fp8_scalar_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/fp8_scalar_1.c
@@ -7,10 +7,10 @@
/*
**stacktest1:
+** umov w0, v0.b\[0\]
** sub sp, sp, #16
-** and w0, w0, 255
** strb w0, \[sp, 15\]
-** ldrb w0, \[sp, 15\]
+** ldr b0, \[sp, 15\]
** add sp, sp, 16
** ret
*/