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

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

[avr-gcc-list] int (*256) optimization problem in avr-gcc 4.5.3


From: Paweł Stawicki
Subject: [avr-gcc-list] int (*256) optimization problem in avr-gcc 4.5.3
Date: Tue, 7 Feb 2012 00:04:41 +0100

Hi all,

I found a issue in the optimization part of gcc-avr.
(I'm new to this stuff so be patient :) )


I'm losing some data returned from a function,
Attaching the smallest example, I could find.
Similarly bug occurs in the ArduinoISP example,
function program_page().


code:
unsigned char getch();

int f()
{
    int a;
    unsigned char c2;
    a = getch();
    a *= 256;  //!! bug - getch() value disappears
    c2 = getch();
    a  += c2;
    return a;
}


output: 
int f()
{
   0: ef 92       push r14
   2: ff 92       push r15
   4: cf 93       push r28
   6: df 93       push r29
    int a;
    unsigned char c2;
    a = getch();
   8: 0e 94 00 00 call 0 ; 0x0 <_Z1fv>
    a *= 256;  //!! bug - getch() value disappears
   c: 80 e0       ldi r24, 0x00 ; 0
   e: ec 01       movw r28, r24
    c2 = getch();
  10: 0e 94 00 00 call 0 ; 0x0 <_Z1fv>
    a  += c2;
  14: c8 0f       add r28, r24
  16: d1 1d       adc r29, r1
    return a;
}
  18: ce 01       movw r24, r28
  1a: df 91       pop r29
  1c: cf 91       pop r28
  1e: ff 90       pop r15
  20: ef 90       pop r14
  22: 08 95       ret

some info:
system ubuntu 11.10 amd64

#avr-g++ -mmcu=atmega1280 -g -Os -c b.cpp
#avr-objdump -S  -d b.o > b.asm
#avr-g++ -v

Using built-in specs.
COLLECT_GCC=avr-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/avr/4.5.3/lto-wrapper
Target: avr
Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --bindir=/usr/bin --libexecdir=/usr/lib --libdir=/usr/lib --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-checking --disable-libssp --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=avr
Thread model: single
gcc version 4.5.3 (GCC) 


Best regards
Paweł,


reply via email to

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