-
Data: 2009-06-11 14:16:54
Temat: Re: Problem lekko OT, ale w WinAVR ;-)
Od: Grzegorz Kurczyk <g...@c...slupsk.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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.
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ść.
Przekazując do funkcji zmienną typu long lub wspomniany wcześniej typ
tRect wszystko jest cacy w kolejnych rejestrach r20..r23.
Tak jak wspomniałem dyskusja jest czysto akademicka w stylu: "czemu
kompilator robi to akurat tak, choć w assemblerze wygodniej byłoby
inaczej ?" ;-)
Chyba, że w kompilatorze jest jakaś przełącznik, coby przy przekazywaniu
parametrów char nie był "przekształcany" w int. Pamiętam, że starsze
wersje przy poleceniu switch(zmienna_typu_char) wykonywały niepotrzebne
dwubajtowe porównania na typie int.
Pozdrawiam
Grzegorz
Następne wpisy z tego wątku
- 11.06.09 15:02 J.F.
- 11.06.09 15:30 Grzegorz Kurczyk
- 11.06.09 17:45 Zbych
- 11.06.09 18:51 Adam Dybkowski
- 12.06.09 00:53 T.M.F.
- 12.06.09 00:56 T.M.F.
- 12.06.09 00:58 T.M.F.
- 11.06.09 19:01 Zbych
- 11.06.09 19:02 Zbych
- 11.06.09 20:16 Adam Dybkowski
- 12.06.09 03:35 T.M.F.
- 12.06.09 03:37 T.M.F.
- 12.06.09 07:54 Zbych
- 12.06.09 08:14 Zbych
- 12.06.09 09:05 Grzegorz Kurczyk
Najnowsze wątki z tej grupy
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
- Korekcja perspektywy
- Wentylator zabija zasilacze LEDek?
- Re: Kompensacja mocy biernej przy 230VAC
- Totaliztyczny obowiązek naprawy maszyn i urządzeń
- Niby uziom ale nie
Najnowsze wątki
- 2025-05-06 "Unia Europejska poważnie myśli o wprowadzeniu całkowitego zakaz importu gazu
- 2025-05-05 Jak naładować akumulator iRobot DC 14,4V 3300 mAh zasilaczem ?
- 2025-05-05 Kopanie Bitcoinów kosztuje 137.000 $, więcej niż cena 95.000 $
- 2025-05-05 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-05-05 Kraków => Production Coordinator / Representant Product Dev <=
- 2025-05-05 Gdynia => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-05-05 Gdańsk => Senior Node.js Developer (doświadczenie z framework Nest.j
- 2025-05-05 Salwador
- 2025-05-05 Gdańsk => Controlling systems Consultant <=
- 2025-05-05 Czeladź => Key Account Manager IT <=
- 2025-05-05 Zielona Góra => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, P
- 2025-05-05 Gdańsk => Senior Node.js Developer (Nest.js framework) <=
- 2025-05-05 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-05-05 Kraków => NMS System Administrator <=
- 2025-05-05 Gliwice => Business Development Manager - Network and Network Security