[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] Strange Optimizing
From: |
Alex Wenger |
Subject: |
[avr-gcc-list] Strange Optimizing |
Date: |
Thu, 23 Sep 2004 17:31:31 +0200 |
User-agent: |
Mozilla Thunderbird 0.8 (Windows/20040913) |
When i compile:
void cmd_write_ee()
{
uint8_t size;
uint8_t adr;
adr = messageBuf[1];
size = TWI_bufPtr-2;
if (size > 8) return; /// Parameter boundary check
eeprom_write_block(messageBuf+2,adr,size);
}
-------------------------------------------------------
"gcc -Os -mcall-prologues" makes
-------------------------------------------------------
void cmd_write_ee()
{
uint8_t size;
uint8_t adr;
adr = messageBuf[1];
604: 20 91 45 01 lds r18, 0x0145
size = TWI_bufPtr-2;
608: 80 91 39 01 lds r24, 0x0139
60c: 82 50 subi r24, 0x02 ; 2
if (size > 8) return; /// Parameter boundary check
60e: 89 30 cpi r24, 0x09 ; 9
610: 38 f4 brcc .+14 ; 0x620
eeprom_write_block(messageBuf+2,adr,size);
612: 99 27 eor r25, r25
614: 33 27 eor r19, r19
616: ac 01 movw r20, r24
618: b9 01 movw r22, r18
61a: 86 e4 ldi r24, 0x46 ; 70
61c: 91 e0 ldi r25, 0x01 ; 1
61e: 07 d2 rcall .+1038 ; 0xa2e
620: 08 95 ret
622: 08 95 ret
00000624 <cmd_read_ee>:
}
-------------------------------------------------------
- Why are there 2 rets on the end?
- Why is R25 cleared on 612?
- Why it first use R24 and R18 and then copy them to R20 and R22
hand corrected code:
-------------------------------------------------------
void cmd_write_ee()
{
uint8_t size;
uint8_t adr;
adr = messageBuf[1];
604: 20 91 45 01 lds r22, 0x0145
size = TWI_bufPtr-2;
608: 80 91 39 01 lds r20, 0x0139
60c: 82 50 subi r20, 0x02 ; 2
if (size > 8) return; /// Parameter boundary check
60e: 89 30 cpi r24, 0x09 ; 9
610: 38 f4 brcc .+14 ; 0x620
eeprom_write_block(messageBuf+2,adr,size);
612: 33 27 eor r19, r19
614: 86 e4 ldi r24, 0x46 ; 70
616: 91 e0 ldi r25, 0x01 ; 1
618: 07 d2 rcall .+1038 ; 0xa2e
61a: 08 95 ret
61c: 08 95 ret
00000624 <cmd_read_ee>:
}
-------------------------------------------------------
saved 6 Bytes.....
BlueLoop
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avr-gcc-list] Strange Optimizing,
Alex Wenger <=