[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] Optimization - what is bad on this code ?
From: |
Vaclav Peroutka |
Subject: |
[avr-gcc-list] Optimization - what is bad on this code ? |
Date: |
Sun, 04 Oct 2009 21:33:13 +0200 (CEST) |
Hello all,
I am sorry, but maybe somebody has expierience why the following code is
deleted during optimization. I have two functions for printing of numbers
(uart_puts() just send string to UART) :
void uart_putux( unsigned int aInt)
{
unsigned char buf[5];
unsigned char icnt = 4;
buf[icnt--] = 0x00;
while(icnt+1) {
buf[icnt] = (aInt&0x0f) + 0x30;
if (buf[icnt] > 0x39) {
buf[icnt] += 0x07;
}
aInt >>= 4;
icnt--;
}
uart_puts( buf);
}
void uart_putlx( unsigned long aInt)
{
unsigned char buf[9];
unsigned char icnt = 8;
buf[icnt--] = 0x00;
while(icnt+1) {
buf[icnt] = (aInt&0x0f) + 0x30;
if (buf[icnt] > 0x39) {
buf[icnt] += 0x07;
}
aInt >>= 4;
icnt--;
}
uart_puts( buf);
}
After I compile and link the code, in .LST I see following:
void uart_putux( unsigned int aInt)
{
35a: ff cf rjmp .-2 ; 0x35a <uart_putux>
0000035c <uart_putlx>:
}
uart_puts( buf);
}
void uart_putlx( unsigned long aInt)
{
35c: ff cf rjmp .-2 ; 0x35c <uart_putlx>
For compilation I use following:
/opt/avr-gcc.4.3.4/bin/avr-gcc -g -mmcu=atmega16 -Wall -Wstrict-prototypes -Os
-mcall-prologues -I /opt/avr-gcc.4.3.4/bin/include -fno-inline-small-functions
-fno-reorder-blocks -fno-reorder-blocks-and-partition -fno-reorder-functions
-fno-toplevel-reorder -fno-move-loop-invariants -c -o hal.o hal.c
If I remove "-Os", the code is there. But if I understand correctly, gcc sees
the code unusable. What is bad inside ? The code worked in older avr-gcc...
Thank you for help,
Vaclav
- [avr-gcc-list] Optimization - what is bad on this code ?,
Vaclav Peroutka <=