eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem lekko OT, ale w WinAVR ;-)Re: Problem lekko OT, ale w WinAVR ;-)
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!new
    sfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
    From: "T.M.F." <t...@n...mp.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Problem lekko OT, ale w WinAVR ;-)
    Date: Thu, 11 Jun 2009 20:56:53 -0400
    Organization: TP - http://www.tp.pl/
    Lines: 51
    Message-ID: <h0rkjn$1ol$1@nemesis.news.neostrada.pl>
    References: <h0qku7$a6o$1@atlantis.news.neostrada.pl>
    <h0r3ok$c87$1@atlantis.news.neostrada.pl>
    NNTP-Posting-Host: dvi241.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: nemesis.news.neostrada.pl 1244747191 1813 83.22.42.241 (11 Jun 2009 19:06:31
    GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Thu, 11 Jun 2009 19:06:31 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090513
    Fedora/3.0-2.3.beta2.fc11 Thunderbird/3.0b2
    In-Reply-To: <h0r3ok$c87$1@atlantis.news.neostrada.pl>
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:565210
    [ ukryj nagłówki ]

    W dniu 11.06.2009 10:16, Grzegorz Kurczyk pisze:
    > Dziękuję wszystkim za odzew :-)
    >
    > Metody opisywane przez Kolegów męczyłem już wcześniej (poza przesiadką
    > na C++), ale nie przynoszą one spodziewanego rezultatu. Może sprecyzuję
    > o co mi chodzi. Sprawa jest czysto "akademicka" i wynika z mojego
    > pewnego rodzaju "zboczenia" w dążeniu do absurdalnej optymalizacji kodu
    > wynikowego ;-)
    > Jest tak. Funkcja zdefiniowana tradycyjnie:
    >
    > void ProgressBar(char x, char y, char w, char h, char value) {
    > ....
    > }
    >
    > przy wywołaniu:
    > ProgressBar(0, 90, 128, 5, y);
    >
    > otrzymujemy w kodzie wynikowym:
    > 37e2: 0b 2d mov r16, r11
    > 37e4: 25 e0 ldi r18, 0x05 ; 5
    > 37e6: 40 e8 ldi r20, 0x80 ; 128
    > 37e8: 6a e5 ldi r22, 0x5A ; 90
    > 37ea: 80 e0 ldi r24, 0x00 ; 0
    > 37ec: 0e 94 b4 17 call 0x2f68 ; 0x2f68 <ProgressBar>
    >
    >
    > I to co mnie "wkurza", to czemu łachudra przekazuje parametry w
    > rejestrach r16, r18, r20, r22, r24 niejako promując typ char do int ?
    > Jakby nie mógł po kolei r16..r20.

    Jakiej wersji gcc uzywasz? Ja tu nigdzie nie widze promocji do int bo
    starsze czesci tych rejestrow nie zawieraja zera.

    > Oczywiście w tym przypadku nie ma to większego znaczenia, ale przy
    > większej ilości parametrów przekazywanych do funkcji i/lub większej
    > ilości zmiennych lokalnych funkcji, zaczyna się kombinacja ze stosem lub
    > z dolnymi rejestrami. Kompilator w pewnym sensie "szatkuje" sobie obszar
    > rejestrów doprowadzając do sytuacji, że w pewnym momencie brakuje np
    > czterech kolejnych rejestrów do zapamiętania lokalnej zmiennej typu long
    > choć pojedynczych wolnych rejestrów jest wystarczająca ilość.

    Sprawdz jak to sie zachowa przy wiekszej ilosci parametrow. Zapewne
    kompilator bedzie oszczedniej gospodarowal rejestrami. Zauwaz, ze w
    twoim przykladzie nie ma takiej potrzeby, a wygenerowany kod jest tak
    samo efektywny.

    --
    Inteligentny dom - http://idom.wizzard.one.pl
    http://idom.sourceforge.net/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: