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