[gcc r14-9271] AVR: target/114100 - Factor in -mtiny-stack in frame pointer adjustments

Georg-Johann Lay gjl@gcc.gnu.org
Sat Mar 2 09:21:51 GMT 2024


https://gcc.gnu.org/g:96bad6c06d0108014a2b0e5d0921cb18066bb789

commit r14-9271-g96bad6c06d0108014a2b0e5d0921cb18066bb789
Author: Georg-Johann Lay <avr@gjlay.de>
Date:   Sat Mar 2 10:03:06 2024 +0100

    AVR: target/114100 - Factor in -mtiny-stack in frame pointer adjustments
    
    gcc/
            PR target/114100
            * config/avr/avr.cc (avr_out_plus_1) [-mtiny-stack]: Only adjust
            the low part of the frame pointer with 8-bit stack pointer.

Diff:
---
 gcc/config/avr/avr.cc | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc
index 94ef7c591a9..d39d6707c97 100644
--- a/gcc/config/avr/avr.cc
+++ b/gcc/config/avr/avr.cc
@@ -8983,14 +8983,17 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
 	  && frame_pointer_needed
 	  && REGNO (xop[0]) == FRAME_POINTER_REGNUM)
 	{
-	  rtx xval16 = simplify_gen_subreg (HImode, xval, imode, i);
-	  if (xval16 == const1_rtx || xval16 == constm1_rtx)
+	  if (AVR_HAVE_8BIT_SP)
+	    {
+	      avr_asm_len ("subi %A0,%n2", xop, plen, 1);
+	      return;
+	    }
+	  else if (xop[2] == const1_rtx || xop[2] == constm1_rtx)
 	    {
-	      avr_asm_len ((code == PLUS) == (xval16 == const1_rtx)
+	      avr_asm_len (xop[2] == const1_rtx
 			   ? "ld __tmp_reg__,%a0+"
 			   : "ld __tmp_reg__,-%a0", xop, plen, 1);
-	      i++;
-	      continue;
+	      return;
 	    }
 	}


More information about the Gcc-cvs mailing list