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.-