https://gcc.gnu.org/g:11cc336eed42892b7cfc2bfcf7b3f3f86f61787a

commit r15-7567-g11cc336eed42892b7cfc2bfcf7b3f3f86f61787a
Author: Keith Packard <kei...@keithp.com>
Date:   Sat Feb 15 09:17:41 2025 -0700

    [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.

Diff:
---
 gcc/config/rx/rx.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md
index 89211585c9ce..edb2c96603f5 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

Reply via email to