avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-gcc-list] Unused registers saves/restores ?


From: Dmitry K.
Subject: [avr-gcc-list] Unused registers saves/restores ?
Date: Tue, 10 Jun 2003 07:51:43 +1100
User-agent: KMail/1.5

Hello all,

Compiler:
        avr-gcc --version
        avr-gcc (GCC) 3.3.1 20030519 (prerelease)

Programm:
        typedef struct { long a; int b; } lo_in;

        lo_in foo_lo_in (void)
        {
            lo_in x;
            x.a = 1;
            x.b = 2;
            return x;
        };

Compile with:
        avr-gcc -O3 -S foo_lo_in.c

Result: r2,3,4,7,... not used, but saved/restored:

        .file   "foo_lo_in.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
        .text
.global foo_lo_in
        .type   foo_lo_in, @function
foo_lo_in:
/* prologue: frame size=6 */
        push r2
        push r3
        push r4
        push r5
        push r6
        push r7
        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=26) */
        ldi r23,lo8(0)
        mov r17,r23
        ldi r20,lo8(1)
        ldi r21,hi8(1)
        ldi r22,hlo8(1)
        ldi r23,hhi8(1)
        std Y+1,r20
        std Y+2,r21
        std Y+3,r22
        std Y+4,r23
        ldi r18,lo8(2)
        ldi r19,hi8(2)
        std Y+5,r18
        std Y+6,r19
        ldd r8,Y+6
        ldd r16,Y+1
        ldd r15,Y+2
        ldd r5,Y+3
        ldd r6,Y+4
        ldd r14,Y+5
        mov r18,r16
        mov r19,r15
        mov r20,r5
        mov r21,r6
        mov r22,r14
        mov r23,r8
        mov r24,r17
        mov r25,r17
/* 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
        pop r7
        pop r6
        pop r5
        pop r4
        pop r3
        pop r2
        ret
/* epilogue end (size=25) */
/* function foo_lo_in size 79 (28) */
        .size   foo_lo_in, .-foo_lo_in
/* File "foo_lo_in.c": code   79 = 0x004f (  28), prologues  26, epilogues  25 
*/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]