Automaticke pretypovani u AVR-GCC

Tomáš Halabala tomas.halabala@iol.cz
Středa Červenec 22 14:13:54 CEST 2009


Lukáš Grepl napsal(a):
>> 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

To by mozna melo nasledujici reseni:
a4 = ((x >> 16) >> 8);
:-)



Další informace o konferenci Hw-list