aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2025-02-15 09:17:41 -0700
committerJeff Law <jlaw@ventanamicro.com>2025-02-15 09:17:41 -0700
commit11cc336eed42892b7cfc2bfcf7b3f3f86f61787a (patch)
treec24df8a3c690cea6a9624ce57a64373954c23ee1
parentf9868e623fc80c6c6260c9dc6c7280db90433207 (diff)
downloadgcc-11cc336eed42892b7cfc2bfcf7b3f3f86f61787a.zip
gcc-11cc336eed42892b7cfc2bfcf7b3f3f86f61787a.tar.gz
gcc-11cc336eed42892b7cfc2bfcf7b3f3f86f61787a.tar.bz2
[PATCH] rx: allow cmpstrnsi len to be zero
The SCMPU instruction doesn't change the C and Z flags when the incoming length is zero, which means the insn will produce a value based upon the existing flag values. As a quick kludge, adjust these flags to ensure a zero result in this case. gcc/ * config/rx/rx.md (rx_cmpstrn): Correctly handle len=0 case.
-rw-r--r--gcc/config/rx/rx.md4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md
index 8921158..edb2c96 100644
--- a/gcc/config/rx/rx.md
+++ b/gcc/config/rx/rx.md
@@ -2590,7 +2590,9 @@
(clobber (reg:SI 3))
(clobber (reg:CC CC_REG))]
"rx_allow_string_insns"
- "scmpu ; Perform the string comparison
+ "setpsw z ; Set flags in case len is zero
+ setpsw c
+ scmpu ; Perform the string comparison
mov #-1, %0 ; Set up -1 result (which cannot be created
; by the SC insn)
bnc ?+ ; If Carry is not set skip over