[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] compiler improvments
From: |
Dmitry K. |
Subject: |
Re: [avr-gcc-list] compiler improvments |
Date: |
Fri, 9 Jan 2004 18:49:00 +1000 |
User-agent: |
KMail/1.5 |
9 Jan 2004 HutchinsonAndy wrote:
> I got it down to 60.
>
> Try -fnew-ra (it might bomb if sign/zero extended are used)
What version?
avr-gcc (GCC) 3.3.2 with -fnew-ra:
code 64 = 0x0040 ( 25), prologues 20, epilogues 19
+ Use of a stack (it even more important) is reduced.
"it might bomb" ? Produce erroneous code?
> I have been using Butterfly code as a trial.
What is it, "Butterfly"?
About funny example:
> >Program:
> >
> > typedef struct { long lo; int in; } lo_in;
> > lo_in foo (void)
> > {
> > lo_in x;
> > x.lo = 1;
> > x.in = 2;
> > return x;
> > }
> >
In my opinion, this example combines a set of optimization omissions:
1. "mov r24,r26" -- filling unused place in structure.
See "-O0": r24/r25 -- return arbitrary values (stack contents).
2. Read from RAM: "ldd r*,Y+* / mov r*,r*".
It can be done without extra "mov"es.
3. Save/restore a set of unused registers:
r8,r9,r10,r11,r13
4. Does not prefer free registers: r0,r27,r30
Regards.
--------------------------------------------------------------------
"-Os -fnew-ra" result:
foo:
/* prologue: frame size=6 */
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
push r16
push r17
push r28
push r29
in r28,__SP_L__
in r29,__SP_H__
sbiw r28,6
in __tmp_reg__,__SREG__
cli
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28
/* prologue end (size=20) */
ldi r24,lo8(1)
ldi r25,hi8(1)
ldi r26,hlo8(1)
ldi r27,hhi8(1)
std Y+1,r24
std Y+2,r25
std Y+3,r26
std Y+4,r27
ldi r24,lo8(2)
ldi r25,hi8(2)
std Y+5,r24
std Y+6,r25
ldd r31,Y+6
ldd r12,Y+1
ldd r15,Y+2
ldd r14,Y+3
ldd r17,Y+4
ldd r16,Y+5
mov r18,r12
mov r19,r15
mov r20,r14
mov r21,r17
mov r22,r16
mov r23,r31
mov r24,r26
/* epilogue: frame size=6 */
adiw r28,6
in __tmp_reg__,__SREG__
cli
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28
pop r29
pop r28
pop r17
pop r16
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
ret
/* epilogue end (size=19) */
- [avr-gcc-list] compiler improvments, HutchinsonAndy, 2004/01/04
- RE: [avr-gcc-list] compiler improvments, Asko Kauppi, 2004/01/05
- Re: [avr-gcc-list] compiler improvments, HutchinsonAndy, 2004/01/09
- Re: [avr-gcc-list] compiler improvments, HutchinsonAndy, 2004/01/10
- Re: [avr-gcc-list] compiler improvments, Martin Thomas, 2004/01/12
- Re: [avr-gcc-list] compiler improvments, HutchinsonAndy, 2004/01/19