CC65 crosscompiler v2.12.0

http://www.cc65.org

Od mých testů cross-compileru CC65, uvedených ve Flopu 45, uplynulo již 7 let. Tehdy se jednalo o verzi 2.8.0 a doufám, že i vás zajímá, jak si vede aktuální verze 2.12.0.

Zkompiloval jsem pokusně stejné příklady jako před lety, hello.c a sieve.c a zde jsou výsledky v tabulkách, následované vysvětlujícím komentářem.

---------------------------------------
hello.c - délka výsledného kódu:
---------------------------------------
         v2.8.0 +-   v2.12.0 +-     v+-
neoptim    3087   0     3110   0    +23
opt -Oi    3066 -21     3083 -27    +17
opt -Or    3068 -19     3078 -32    +10
---------------------------------------

---------------------------------------
sieve.c - délka výsledného kódu:
---------------------------------------
         v2.8.0 +-   v2.12.0 +-     v+-
neoptim    4023    0    4001   0    -22
opt -Oi    3844 -179    3820 -181   -24
opt -Or    3844 -179    3804 -197   -40
---------------------------------------

---------------------------------------
sieve.c - čas potřebný pro výpočet:
---------------------------------------
sieve.c  v2.8.0 +-   v2.12.0 +-     v+-
neoptim     146   0      146    0     0
opt -Oi      57 -89       57  -89     0
opt -Or      57 -89       40 -106   -17
---------------------------------------

Komentář
Nepatrný nárůst délky u hello.c mě překvapil, ale při následném průzkumu jsem zjistil, že důvodem jsou drobné opravy chyb funkcí v knihovnách, které program používá. Celkově byla kompilace vylepšena - všimněte si u optimalizovaných verzí relativních úbytků 27, respektive 32 bajtů oproti verzi neoptimalizované (dříve to bylo jen 21, respektive 19 bajtů).

Zlepšení kvality kompilace se naplno ukazuje u druhého příkladu - výpočtu prvočísel v intervalu 2 až 8192 metodou Eratosthenova síta. Tam došlo ve všech případech ke zkrácení kódu. Pěkný je zejména úbytek 40 bajtů u optimalizace "-Or", která pracuje s lokálními proměnnými přímo v nulté stránce. Obecně se taková optimalizace může projevit různě, někdy i nevýhodně, protože na začátku každé funkce musí být obsah používaných registrů v nulté stránce uschován do virtuálního zásobníku a na konci funkce opět obnoven. V našem případě je však tato optimalizace nadmíru úspěšná, neboť krom malého zkrácení kódu došlo hlavně k výraznému zrychlení z 57 na 40 "ticks", tedy o 42% oproti nejlepšímu výsledku optimalizované kompilace pod CC65v2.8.0.

Na platformě C64 jsou výsledky podobné. Zkompilovaný kód příkladu hello.c se oproti starší verzi prodloužil z 2665 na 2744, což ale svědčí jen o daleko větším počtu oprav a přídavků ve funkcích v knihovnách. Skvěle pak dopadla kompilace druhého příkladu s optimalizací "-Or", kdy jsou prvočísla spočítána za 62 "ticks" oproti dřívějším 87. Program je tedy rychlejší o 40%.

-Raster/C.P.U.-