Zum bugreport bei gcc.gnu.org:
Häng da noch die Precompilierte Quelle (also wo alle #includes etc aufgelöst sind) dran, und wie du die Datei erhalten hast!
Sonst kann man das niemals nachvollziehen!
Code:
long foo (long a, long b, long c, unsigned char d){
if(d){
return a+b;
}else{
return a-c;
}
}
Code:
d:\avr\test>avr-gcc blah.c -Os -S -v -fverbose-asm
Reading specs from E:/WinAVR_20060421/lib/gcc/avr/3.4.6/specs
Configured with: ../gcc-3.4.6/configure --prefix=/c/WinAVR --target=avr --enable
=c,c++ --with-dwarf2 --enable-win32-registry=WinAVR --disable-nls
Thread model: single
GCC version 3.4.6
E:/WinAVR_20060421/libexec/gcc/avr/3.4.6/cc1.exe -quiet -v -iprefix e:\WinAVR_2
n/../lib/gcc/avr/3.4.6/ blah.c -quiet -dumpbase blah.c -auxbase blah -Os -versio
e-asm -o blah.s
ignoring nonexistent directory "E:/WinAVR_20060421/avr/sys-include"
#include "..." search starts here:
#include <...> search starts here:
e:\WinAVR_20060421\bin/../lib/gcc/avr/3.4.6/include
E:/WinAVR_20060421/lib/gcc/avr/3.4.6/include
E:/WinAVR_20060421/avr/include
End of search list.
GNU C version 3.4.6 (avr)
compiled by GNU C version 3.4.2 (mingw-special).
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32702
blah.s:
Code:
.file "blah.c"
.arch AVR2
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
; GNU C version 3.4.6 (avr)
; compiled by GNU C version 3.4.2 (mingw-special).
; GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32702
; options passed: -v -iprefix -auxbase -Os -fverbose-asm
; options enabled: -feliminate-unused-debug-types -fdefer-pop
; -fomit-frame-pointer -foptimize-sibling-calls -funit-at-a-time
; -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations
; -fthread-jumps -fstrength-reduce -fpeephole -fforce-mem -ffunction-cse
; -fkeep-static-consts -fcaller-saves -freg-struct-return -fgcse
; -fgcse-lm -fgcse-sm -fgcse-las -floop-optimize -fcrossjumping
; -fif-conversion -fif-conversion2 -frerun-cse-after-loop
; -frerun-loop-opt -fdelete-null-pointer-checks -fsched-interblock
; -fsched-spec -fsched-stalled-insns -fsched-stalled-insns-dep
; -fbranch-count-reg -freorder-functions -fcprop-registers -fcommon
; -fverbose-asm -fregmove -foptimize-register-move -fargument-alias
; -fstrict-aliasing -fmerge-constants -fzero-initialized-in-bss -fident
; -fpeephole2 -fguess-branch-probability -fmath-errno -ftrapping-math
; -minit-stack=__stack -mmcu=avr2
.text
.global foo
.type foo, @function
foo:
/* prologue: frame size=0 */
push r12
push r14
push r15
push r16
push r17
push r28
push r29
/* prologue end (size=7) */
mov r29,r25 ; a, a
mov r28,r24 ; a, a
mov r27,r23 ; a, a
mov r26,r22 ; a, a
tst r12 ; d
breq .L2 ; ,
mov r22,r26 ; <result>, a
mov r23,r27 ; <result>, a
mov r24,r28 ; <result>, a
mov r25,r29 ; <result>, a
add r22,r18 ; <result>, b
adc r23,r19 ; <result>, b
adc r24,r20 ; <result>, b
adc r25,r21 ; <result>, b
rjmp .L1 ;
.L2:
mov r22,r26 ; <result>, a
mov r23,r27 ; <result>, a
mov r24,r28 ; <result>, a
mov r25,r29 ; <result>, a
sub r22,r14 ; <result>, c
sbc r23,r15 ; <result>, c
sbc r24,r16 ; <result>, c
sbc r25,r17 ; <result>, c
.L1:
/* epilogue: frame size=0 */
pop r29
pop r28
pop r17
pop r16
pop r15
pop r14
pop r12
ret
/* epilogue end (size=8) */
/* function foo size 38 (23) */
.size foo, .-foo
/* File "blah.c": code 38 = 0x0026 ( 23), prologues 7, epilogues 8 */
Lesezeichen