Automaticke pretypovani u AVR-GCC

Miroslav Šinko sinkomiro@gmail.com
Středa Červenec 22 13:57:28 CEST 2009


2009/7/22 Tomáš Halabala <tomas.halabala@iol.cz>:
> Miroslav Šinko napsal(a):
> Vzhledem k tomu, ze se jedna o funkci AND (&), mezi nejakou 8-bitovou
> promennou a konstantou, plati a to i v pripade kdyz bude konstanta vetsi
> jak 255, ze bude vysledek s konverzi i bez konverze vzdy stejny. Takze
> pokud by v GCC bylo nejake rozpoznavani, tak je spatne, protoze dle meho
> nazoru neexistuje pripad, kdy by konverze v pripade funkce AND a
> 8-bitove promenne k necemu byla. Po konverzi 8-bitove promenne na 16
> bitu, bude vzdy hornich 8 bitu nulovych, coz ve spojeni s funkci AND
> nijak nemeni vysledek.

V tomto sa nehadam, no nie je povinnostou prekladaca vobec nieco
rozpoznavat. Norma jasne pise, ze cislo 3 bude typu int, dalej, ze pre
operator AND sa uplatnia usual arithmetic conversions, pre celociselne
typy integer promotions a v nich je definovane rozsirenie nizsieho
typu na vyssi, pre vas pipad sa konkretne unsigned byte rozsiri na
signed int. Takto to prekladac bez optimalizacie prelozi.

Ze so zapnutou optimalizaciou v niektorom pripade nerozpozna
zbytocnost konverzie, zatial co v inom pripade ano, nie je
"narokovatelne". Takze to mozno povazovat za nedostatok, ale nie za
chybu.

miro



Další informace o konferenci Hw-list