Applied this no-op patch that uses new define PC_SIZE
instead of a magic number.
Johann
--
AVR: lib1funcs.S: Use PC_SIZE instead of a magic number.
libgcc/
* config/avr/asm-defs.h (REGNO): Recognize: x, y, z, X, Y, Z.
(PC_SIZE): New define.
* config/avr/lib1funcs.S (__mulpsi3, __mulsi3): Use it.
diff --git a/libgcc/config/avr/asm-defs.h b/libgcc/config/avr/asm-defs.h
index 1e0add53021..62879464f9d 100644
--- a/libgcc/config/avr/asm-defs.h
+++ b/libgcc/config/avr/asm-defs.h
@@ -73,7 +73,9 @@
xl, xh, yl, yh, zl, zh, \
Xl, Xh, Yl, Yh, Zl, Zh, \
xL, xH, yL, yH, zL, zH, \
- XL, XH, YL, YH, ZL, ZH
+ XL, XH, YL, YH, ZL, ZH, \
+ x, xh, y, yh, z, zh, \
+ X, XH, Y, YH, Z, ZH
.ifc \name,\reg
\sym = 26 + ..regno % 6
..regno.done = 1
@@ -102,9 +104,11 @@
#if defined (__AVR_HAVE_EIJMP_EICALL__)
#define XICALL eicall
#define XIJMP eijmp
+#define PC_SIZE 3
#else
#define XICALL icall
#define XIJMP ijmp
+#define PC_SIZE 2
#endif
@@ -229,7 +233,10 @@
#ifndef __AVR_TINY__
-;;; Prologue stuff
+;;; Convenience macro for easy use of __prologue_saves__.
+;;; Push the N_PUSHED callee-saved registers Y, R17, R16, R15, ...
+;;; with 0 <= N_PUSHED <= 18. The frame pointer (Y) is set up according
+;;; to a frame size of N_FRAME. Clobbers TMP_REG. Does not clobber T.
.macro do_prologue_saves n_pushed n_frame=0
ldi r26, lo8 (\n_frame)
ldi r27, hi8 (\n_frame)
@@ -239,8 +246,8 @@
.L_prologue_saves.\@:
.endm
-
-;; Epilogue stuff
+;;; Convenience macro for easy use of __epilogue_restores__.
+;;; Undo the effect of __prologue_saves__. Clobbers TMP_REG.
.macro do_epilogue_restores n_pushed n_frame=0
in r28, __SP_L__
#ifdef __AVR_HAVE_SPH__
diff --git a/libgcc/config/avr/lib1funcs.S b/libgcc/config/avr/lib1funcs.S
index 4978a2e969c..6af40122f02 100644
--- a/libgcc/config/avr/lib1funcs.S
+++ b/libgcc/config/avr/lib1funcs.S
@@ -273,16 +273,15 @@ DEFUN __mulhisi3
#if defined (L_mulsi3)
DEFUN __mulsi3
#if defined (__AVR_TINY__)
- in r26, __SP_L__ ; safe to use X, as it is CC0/CC1
- in r27, __SP_H__
- subi r26, lo8(-3) ; Add 3 to point past return address
- sbci r27, hi8(-3)
- push B0 ; save callee saved regs
- push B1
- ld B0, X+ ; load from caller stack
- ld B1, X+
- ld B2, X+
- ld B3, X
+ in r26, __SP_L__ ; Safe to use X, as it is CC0/CC1.
+ in r27, __SP_H__
+ waddi r26, 1 + PC_SIZE ; Add 3 to point past return address.
+ push B0 ; Save callee saved regs.
+ push B1
+ ld B0, X+ ; Load from arg pointer.
+ ld B1, X+
+ ld B2, X+
+ ld B3, X
#endif
;; Clear result
clr CC2
@@ -569,15 +568,14 @@ DEFUN __mulpsi3
DEFUN __mulpsi3
#if defined (__AVR_TINY__)
- in r26,__SP_L__
- in r27,__SP_H__
- subi r26, lo8(-3) ; Add 3 to point past return address
- sbci r27, hi8(-3)
- push B0 ; save callee saved regs
- push B1
- ld B0,X+ ; load from caller stack
- ld B1,X+
- ld B2,X+
+ in r26, __SP_L__
+ in r27, __SP_H__
+ waddi r26, 1 + PC_SIZE ; Add 3 to point past return address.
+ push B0 ; Save callee saved regs.
+ push B1
+ ld B0, X+ ; Load from arg pointer.
+ ld B1, X+
+ ld B2, X+
#endif /* defined (__AVR_TINY__) */
;; C[] = 0