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