Zahada C atmel studio

Marek Peca marek na duch.cz
Sobota Květen 3 20:31:48 CEST 2014


> Vypada to, ze blbec je prekladac, protoze pouzije BRGE na unsigned. To, ze se 
> skok provede, je OK, protoze podle Atmeliho popisu instrukcni sady ma BRGE 
> skocit, pokud je N XOR V == 0 (coz je).

To jo. BRGE je teda i v tom -O0 prikladu, coz je zajimavy -- asi to TST 
nastavuje nejak jinak, kazdopadne je to dost podivne.

Ten neopti kod je ovsem vtipnej, ++c jako odecist 0xff ;-)))

Rekl bych, ze stoji za to pohledat primo v kruzich kolem AVR-gcc, popr. se 
zeptat, zda jde o znamou/opravenou chybu.

MP

>> 0000135D  INC R11        Increment
>>             if (c >= 0x80) c = 0x20;
>> 0000135E  BRGE PC+0x04        Branch if greater or equal, signed

>> 00001362  LDD R24,Y+1        Load indirect with displacement
>> 00001363  SUBI R24,0xFF        Subtract immediate
>> 00001364  STD Y+1,R24        Store indirect with displacement
>>             if (c >= 0x80) c = 0x20;
>> 00001365  LDD R24,Y+1        Load indirect with displacement
>> 00001366  TST R24        Test for Zero or Minus
>> 00001367  BRGE PC+0x03        Branch if greater or equal, signed
>> 
>> coz uz funguje samozrejme OK.


Další informace o konferenci Hw-list