Hello maintainers,
Since release 3.4.3 of gcc, I have a compile error with one of my
unchanged
sources. The error is still in the current 3_4-branch (checked out
today).
------------
avr-gcc -c -mmcu=atmega128 -save-temps -g -Os -Wall -Wstrict-prototypes
-Wsign-c
ompare -Wa,-ahlms=arpcache.lst -D__HARVARD_ARCH__ -I../../build/include
-I../..
/./include ../.././net/arpcache.c -o arpcache.o
../.././net/arpcache.c: In function `NutArpCacheQuery':
../.././net/arpcache.c:487: error: unable to find a register to spill in
class `
POINTER_REGS'
../.././net/arpcache.c:487: error: this is the insn:
(insn 89 206 205 5 ../.././net/arpcache.c:447 (parallel [
(set (mem:BLK (reg/v/f:HI 44 [ mac ]) [0 A8])
(mem:BLK (reg/v/f:HI 28 r28 [orig:46 entry ] [46]) [0
A8]))
(use (reg:QI 24 r24 [59]))
(use (const_int 1 [0x1]))
(clobber (scratch:HI))
(clobber (scratch:HI))
(clobber (scratch:QI))
]) 16 {*movstrqi_insn} (insn_list 86 (insn_list 88 (nil)))
(expr_list:REG_DEAD (reg:QI 24 r24 [59])
(expr_list:REG_DEAD (reg/v/f:HI 44 [ mac ])
(expr_list:REG_UNUSED (scratch:QI)
(expr_list:REG_UNUSED (scratch:HI)
(expr_list:REG_UNUSED (scratch:HI)
(nil)))))))
../.././net/arpcache.c:487: confused by earlier errors, bailing out
make: *** [arpcache.o] Error 1
-------------
If I do the compile with -fno-regmove option, or just -O1 it works fine.
Obviously there was a change from 3.4.2 in optimization procedures in
gcc,
which now causes the crash...
I know, to do further investigations, you need the complete source
code. If
somebody wants to help, just send me a short message and I will send the
sources, or obtain the code directly from
http://www.ethernut.de/en/download.html, latest release, or via cvs from
http://sourceforge.net/projects/ethernut/