Jak zoptymalizować generowany kod w AVR-GCC w porównaniu do innych kompilatorów?

Re: AVR-GCC czy ktoś używa.





Poprzedni Następny
Wiadomość
Spis treści
From: "Grzegorz Kurczyk" <control_at_nospam_post.pl>
Subject: Re: AVR-GCC czy ktoś używa.
Date: Sun, 15 Apr 2001 03:02:15 +0200


Serdecznie dziękuję wszystkim Grupowiczom za pomoc.
Juz wszystko działa. Kompilator jest dość sympatyczny, tylko mam wrażenie,
że nie generuje zbyt optymalnego kodu (albo ja coś źle robię ?). W
bibliotece <iomacros.h> są makra do obsługi portów I/O i operacja typu:

if (bit_is_set(port, bit)) {
...
}
jest wyjątkowo nieoptymalna. Większość kompilatorów (ICC, CodeVision itp)
realizuje to w postaci pary rozkazów np:
SBIS 0x1B,2
RJMP +0x000B

Tymczasem AVR-GCC tworzy dość dziwaczną konstrukcję:
CLR R24
SBIC 0x1B,2
INC R24
STD Y+1,R24
LDD R24,Y+1
AND R24,R24
BREQ +0x08

Czy może ktoś z Grupowiczów ma pomysł na jej optymalizację?

No ale to już po Świętach ...

Jeszcze raz wszystkim dziękuję i życzę spokojnych i zdrowych Świąt
Wielkanocnych.


--
Pozdrawiam
Grzegorz

http://www.control.prv.pl
ftp://213.25.234.186
control_at_nospam_post.pl





Poprzedni Następny
Wiadomość
Spis treści
From: marekm_at_nospam_amelek.gda.pl (Marek Michalkiewicz)
Subject: Re: AVR-GCC czy ktoś używa.
Date: 16 Apr 2001 16:14:41 GMT


Grzegorz Kurczyk <control_at_nospam_post.pl> wrote:
Tymczasem AVR-GCC tworzy dość dziwaczną konstrukcję:
CLR R24
SBIC 0x1B,2
INC R24
STD Y+1,R24
LDD R24,Y+1
AND R24,R24
BREQ +0x08

Czy może ktoś z Grupowiczów ma pomysł na jej optymalizację?

Sądząc po tym STD i LDD to powinno pomóc -O, a jeszcze lepiej -O2 ;).
Cytuję:

Without `-O', the compiler only allocates variables declared
`register' in registers.

no i przydzielił na stosie - a mógłby w rejestrze i w prostszych
funkcjach w ogóle nie przydzielać r29:r28 (Y) jako "frame pointer".
Aż tak krótko (SBIC i RJMP) to nie będzie, ale zawsze nieco lepiej.

pozdrawiam
Marek