I have hit this roadblock in porting over my application from my mega128
test bed to the xmega. As far as I can tell the compiler completely wedges
a very simple routine (and it worked earlier, so it *must* be something I am
doing.)
Anyway, the code is below. The compiler fails to re-load R24 with the
proper stack value after poking the CCP register..
The generated code is the same -Os and -O1, I have not tried anything else.
void PrintBanner(FILE *fp)
{
fprintf_P(fp, PSTR("%s\r\n"), VersionString);
}
75 .global PrintBanner
77 PrintBanner:
78 .LFB93:
79 .LM9:
80 .LVL6:
81 /* prologue: function */
82 /* frame size = 0 */
83 .LM10:
84 003a 00D0 rcall .
85 003c 00D0 rcall .
86 003e EDB7 in r30,__SP_L__
87 0040 FEB7 in r31,__SP_H__
88 0042 3196 adiw r30,1
89 0044 ADB7 in r26,__SP_L__
90 0046 BEB7 in r27,__SP_H__
91 0048 1196 adiw r26,1
92 004a 8D93 st X+,r24
93 004c 9C93 st X,r25
94 004e 1297 sbiw r26,1+1
95 0050 80E0 ldi r24,lo8(__c.5488)
96 0052 90E0 ldi r25,hi8(__c.5488)
97 .LVL7:
98 0054 8283 std Z+2,r24
99 0056 9383 std Z+3,r25
100 0058 80E0 ldi r24,lo8(VersionString)
101 005a 90E0 ldi r25,hi8(VersionString)
102 005c 8483 std Z+4,r24
103 005e 9583 std Z+5,r25
104 0060 0E94 0000 call fprintf_P
105 0064 8DB7 in r24,__SP_L__
106 0066 9EB7 in r25,__SP_H__
107 0068 0696 adiw r24,6
108 006a 082E mov __tmp_reg__,r24
109 006c 88ED ldi r24,0xD8
110 006e 84BF out __CCP__,r24
111 0070 9EBF out __SP_H__,r25
112 0072 8DBF out __SP_L__,r24
113 0074 802D mov r24,__tmp_reg__
114 /* epilogue start */
115 .LM11:
116 0076 0895 ret
_______________________________________________
AVR-GCC-list mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list