Hi All,
Well I think this patch fixes it..
Does someone want to test it and put it into the CVS?
Regards,
Peter Jansen
diff -rU 3 gcc/gcc-3.3/gcc/config/msp430/msp430.c
gcc-patched/gcc-3.3/gcc/config/msp430/msp430.c
--- gcc/gcc-3.3/gcc/config/msp430/msp430.c 2005-03-18 01:08:46.000000000
+1100
+++ gcc-patched/gcc-3.3/gcc/config/msp430/msp430.c 2005-12-17
19:03:28.000000000 +1100
@@ -1325,6 +1325,10 @@
print_sub_operand (file, XEXP (addr, 1), code);
+ /* shift if the indirect pointer register is the stack pointer */
+ if ((code >= 'M' && code <= 'N') && (REGNO (XEXP (addr, 0)) == 1))
+ shift = code - 'M';
+
if (shift)
fprintf (file, "+%d", shift * ml);
diff -rU 3 gcc/gcc-3.3/gcc/config/msp430/msp430.md
gcc-patched/gcc-3.3/gcc/config/msp430/msp430.md
--- gcc/gcc-3.3/gcc/config/msp430/msp430.md 2004-08-10 22:59:05.000000000
+1000
+++ gcc-patched/gcc-3.3/gcc/config/msp430/msp430.md 2005-12-17
19:03:33.000000000 +1100
@@ -28,6 +28,8 @@
;; D 3 6
;; E adds nothing to reg but used only with (mem:hi (reg:hi))
;; F no trim array
+;; M Add 0 to address is using stack pointer
+;; N Add 2 to address is using stack pointer
;; Extra constarains:
;; P hardware constants: -1,0,+1,+2,+4,+8
;; Q Indexed destination register as X(Rn)
@@ -371,7 +373,7 @@
(call (mem:HI (match_operand:HI 1 "general_operand" "r,P,mi"))
(match_operand:HI 2 "general_operand" "X,X,X")))]
""
- "call\\t%1"
+ "call\\t%N1"
[ (set_attr "length" "1,1,2")
(set_attr "cc" "clobber")])