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