gcc 4.2.0 a "-Os -mcall-prologues"?

Petr Tomasek tomasek@etf.cuni.cz
Neděle Srpen 19 00:06:28 CEST 2007


Zdravim!

Zlobi me avr-gcc 4.2.0: pri optimalizaci "-Os -mcall-prologues"
z nepochopitelnych duvodu nejsou IO registry prekladacem
vnimany jako "volatile" (prestoze jsou tak nadeklarovany)
a gcc pak produkuje naprosto nesmyslny kod. Napr. nasledujici
funkci (ovladani LCD radice):

void lcd_data(unsigned char d) {
 unsigned char dd;
 PORTDRS|=(1<<LCDRS);
 dd=d/16;
 PORTD=(PORTD & LCDMASK)|dd;
 lcd_enable();
 dd=d%16;
 PORTD=(PORTD & LCDMASK)|dd;
 lcd_enable();
 delay50u();
}

prelozi tak, ze hodnotu do registru PORTD zapise POUZE JEDNOU, 
coz, jak jiste tusite neprinese cileny vysledek.

Muj dotaz je, jestli je to nejak ocekavane chovani,
nebo se jedna o chybu gcc. Setkal jste se s tim nekdo?

Diky!

P.T.

-- 
Petr Tomasek <http://www.etf.cuni.cz/~tomasek>
Jabber: butrus@jabbim.cz



Další informace o konferenci Hw-list