winavr problemik

Mam dużo "swich" -ów lub if elsif elsif ..

tak po kilkadziesiąt.

Co tu zrobić żeby winavr używał indirect jumpów zamiast zamieniał swich na if wlsif.

To bez sensu żeby robić cpi stała cpi stał

i tak 60 razy.

Mam małe procedurki, a indirecty by mi przyspieszyły kod.

Reply to
newxmega
Loading thread data ...

Tablice skoków są tworzone chyba tylko z bloków switch. Do tego wartości przy case muszą spełniać odpowiednie warunki, tzn. musi być ich dostatecznie dużo i muszą być ułożone po kolei (wartości jako zbiór, w kodzie już kolejność występowania jest dowolna). Jest gdzieś do tego jakaś reguła, ale nie jestem w stanie jej znaleźć. O ile pamiętam (ale to mogło być akurat w innym kompilatorze) to dopuszczalne są niewielkie dziury w wartościach, była na to jakaś matematyczna formułka, typu ilość wartości w jednym ciągu / szerokość zakresu > jakaś stała, do tego jeszcze musiała być odpowiednio duża ilość przypadków, ale to akurat u Ciebie nie jest problemem, to było raczej w okolicy 5. Jeżeli się zgadzało to switch był zamieniany na tablicę skoków. Coś znalazłem, może się przyda, nie za bardzo mam czas żeby przeczytać:

formatting link

Reply to
shg

newxmega pisze:

Jak ilość kodu w blokach warunkowych nie jest za mała, to możesz sobie zrobić ręcznie tablicę z adresami funkcji.

a próbowałeś -Os?

dodaj atrybut optimize.

Reply to
Zbych

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.