Automaticke pretypovani u AVR-GCC

Lukáš Grepl L.Grepl@sh.cvut.cz
Středa Červenec 22 13:59:53 CEST 2009


> trojku převedl na int, což jak píšete odpovídá ANSI C. Ale proč to tedy 
> dodržuje překladač podle nálady? To už asi zůstane nezodpovězeno.
> Odpovědí je zřejmě asi IAR.

Každý překladač (resp. jeho optimalizátor) zná určité "zkratky", kde 
určitý kus kódu v některých určitých variantách (které zná) přeloží lépe 
než obecně. Ale prostě ne všechny obvyklé varianty ten optimalizátor umí.

Lépe optimalizující kompilátor takových zkratek zná víc a dokáže je 
použít v širším spektru případů, než horší kompilátor, který vše 
překládá "doslova". No a samozřejmě prográtoři kompilátorů jsou taky 
lidé, takže občas na něco zapomenou.

Např. jsem se setkal s tím, že jsem měl kus kódu asi tohoto znění:

unsigned long x;
unsigned char a1, a2, a3, a4;

a1 = x;
a2 = x >> 8;
a3 = x >> 16;
a4 = x >> 24;

který se přeložil tak, že první tři přiřazení prostě vybraly ten správný 
byte z dwordu x, zatímco to čtvrté se přeložilo jako smyčka s 24 
iteracemi rotace po jednom bitu.

Lukáš Grepl



Další informace o konferenci Hw-list