I have had some issues compiling source code with the latest gcc in svn. The following program fails me:
#include <avr/io.h> int main(void) { DDRB |= _BV(DDB5); } avr-gcc -mmcu=at90usb1287 -c test.c -o test.o -O2 /tmp/ccqKOBv9.s: Assembler messages: /tmp/ccqKOBv9.s:16: Error: number must be positive and less than 32 make: *** [all] Error 1 The assembly produced for main: .global main .type main, @function main: /* prologue: function */ /* frame size = 0 */ /* stack size = 0 */ .L__stack_usage = 0 sbi 36,5 ret .size main, .-main .ident "GCC: (GNU) 4.7.0 20111123 (experimental)" The sbi instruction needs values 0-31, 36 is too high. The instruction in avr.md which generates this is *sbi, only enabled with optimizations. I think this is a new optimization added, but 0x20 needs to be subtracted from the memory location. In avr.md I changed: return "sbi %i0,%2"; to return "sbi %i0-0x20,%2"; It fixed the problem. I think this needs to be done all over the place for sbi and cbi, as well as for in and out. There might be a better way to more elegantly output the subtracted value so the assembler doesn't need to do the subtraction. Does anyone know who made the changes? I am using the latest version in svn. Sean _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list