aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2023-04-18 12:06:49 +0100
committerKyrylo Tkachov <kyrylo.tkachov@arm.com>2023-04-18 12:06:49 +0100
commit2d70f3213fe4e76722cd55e48f8eb0820c56ec7a (patch)
treeae6533de43e91c825f161294bc84ea63c9d593e4 /gcc
parent4204ed2dc74390ab3689d1d6a53001761338baf6 (diff)
downloadgcc-2d70f3213fe4e76722cd55e48f8eb0820c56ec7a.zip
gcc-2d70f3213fe4e76722cd55e48f8eb0820c56ec7a.tar.gz
gcc-2d70f3213fe4e76722cd55e48f8eb0820c56ec7a.tar.bz2
aarch64: Add QI -> HI zero-extension for LDAPR
This patch is a straightforward extension of the zero-extending LDAPR pattern to represent QI -> HI load-extends. This maps down to a LDAPRB-W instruction. This lets us remove a redundant zero-extend in the new test function. Bootstrapped and tested on aarch64-none-linux-gnu. gcc/ChangeLog: * config/aarch64/atomics.md (*aarch64_atomic_load<ALLX:mode>_rcpc_zext): Use SD_HSDI for destination mode iterator. gcc/testsuite/ChangeLog: * gcc.target/aarch64/ldapr-zext.c: Add test for u8 to u16 extension.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/aarch64/atomics.md6
-rw-r--r--gcc/testsuite/gcc.target/aarch64/ldapr-zext.c8
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index 999f86e..2b6f04e 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -705,13 +705,13 @@
)
(define_insn "*aarch64_atomic_load<ALLX:mode>_rcpc_zext"
- [(set (match_operand:GPI 0 "register_operand" "=r")
- (zero_extend:GPI
+ [(set (match_operand:SD_HSDI 0 "register_operand" "=r")
+ (zero_extend:SD_HSDI
(unspec_volatile:ALLX
[(match_operand:ALLX 1 "aarch64_sync_memory_operand" "Q")
(match_operand:SI 2 "const_int_operand")] ;; model
UNSPECV_LDAP)))]
- "TARGET_RCPC && (<GPI:sizen> > <ALLX:sizen>)"
+ "TARGET_RCPC && (<SD_HSDI:sizen> > <ALLX:sizen>)"
"ldapr<ALLX:atomic_sfx>\t%w0, %1"
)
diff --git a/gcc/testsuite/gcc.target/aarch64/ldapr-zext.c b/gcc/testsuite/gcc.target/aarch64/ldapr-zext.c
index 6f448ee..e9d9058 100644
--- a/gcc/testsuite/gcc.target/aarch64/ldapr-zext.c
+++ b/gcc/testsuite/gcc.target/aarch64/ldapr-zext.c
@@ -65,3 +65,11 @@ TEST(u8_u32, u8, unsigned)
*/
TEST(u16_u32, u16, unsigned)
+/*
+**test_u8_u16:
+**...
+** ldaprb w0, \[x[0-9]+\]
+** ret
+*/
+TEST(u8_u16, u8, unsigned short)
+