mezi zidli a klavesnici

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Úterý Únor 28 16:57:22 CET 2012


Produkt AVRGCC pro XMEGA

     for (i=0; i<5; i++) Sum += Pole[i];
  24e:    29 81           ldd    r18, Y+1    ; 0x01
  250:    3a 81           ldd    r19, Y+2    ; 0x02
  252:    8b 81           ldd    r24, Y+3    ; 0x03
  254:    9c 81           ldd    r25, Y+4    ; 0x04
  256:    28 0f           add    r18, r24
  258:    39 1f           adc    r19, r25
  25a:    8d 81           ldd    r24, Y+5    ; 0x05
  25c:    9e 81           ldd    r25, Y+6    ; 0x06
  25e:    28 0f           add    r18, r24
  260:    39 1f           adc    r19, r25
  262:    8f 81           ldd    r24, Y+7    ; 0x07
  264:    98 85           ldd    r25, Y+8    ; 0x08
  266:    28 0f           add    r18, r24
  268:    39 1f           adc    r19, r25
  26a:    89 85           ldd    r24, Y+9    ; 0x09
  26c:    9a 85           ldd    r25, Y+10    ; 0x0a
  26e:    28 0f           add    r18, r24
  270:    39 1f           adc    r19, r25
  ;-)

Zdrojak:
int main(void)
{
     char i;
     int Sum;
     volatile int Pole[5] = {1,2,3,4,5};
     for (i=0; i<5; i++) Sum += Pole[i];
     return Sum;
}

to volatile a return je tam kvuli tomu, ze jinak to zoptimalizuje 
totalne (zadny soucet se neprovede, protoze neni vysledek potreba nebo 
secte konstanty)...
Volba optimalizace na Os

Dne 28.2.2012 11:26, Andrej Jancura napsal(a):
> 2012/2/28 Michal Gregor<a2x1nptda8 na email.cz>:
>>> for i=0 to 5
>>> Soucet += Pole[i]
>>> Toto znamena, nastav i, vypocitaj adresu prvku, indexovo zober
>>> hodnotu, pricitaj k vysledku, inkrementuj i, porovnaj i na koniec...
>>
>> Toto znamena secti pole a moderni prekladac by to MOHL poznat a
>> optimalizovat.  Tedy v pripade ze pole neni dynamicke a je ulozeno na fixni
>> adrese.
>> (Pro dynamicke pole je to nesmysl)
> Mozem sa spytat, vy taky moderny prekladac poznate? Lebo ja nie... A
> uz vonkoncom nie taky aby bol navyse zadarmo. Mohol by to vediet robit
> PicC PRO ten s tymi optimalizaciami, ale uz vidim velku vacsinu, ako
> plati 1400$ za komplikator...
>
> A.
>
>
>> Michal Gregor
>>
>> ----- Original Message ----- From: "Andrej Jancura"<aj.hwlist na gmail.com>
>> To: "HW-news"<hw-list na list.hw.cz>
>> Sent: Tuesday, February 28, 2012 11:07 AM
>>
>> Subject: Re: mezi zidli a klavesnici
>>
>>
>> Myslim, ze ste nepochopili, co sa deje v asembleri...
>>
>> 2012/2/28 Michal Gregor<a2x1nptda8 na email.cz>:
>>> Prekladace neumi pracovat poradne s pointery ve smycce. Takze v C staci se
>>> vybodnout na cykly a hned to bezi rychleji. Treba toto:
>>> for i=0 to 5
>>> Soucet += Pole[i]
>>
>> Toto znamena, nastav i, vypocitaj adresu prvku, indexovo zober
>> hodnotu, pricitaj k vysledku, inkrementuj i, porovnaj i na koniec...
>>
>>> Je lepsi zapsat
>>> Soucet += Pole[0]
>>
>> Toto naproti tomu znamena pricitaj k vysledku hodnotu na pevnej adrese
>> prvku pola, co je podla mna jedna trivialna asm instrukcia...
>>
>>> Soucet += Pole[1]
>>> Soucet += Pole[2]
>>> Soucet += Pole[3]
>>> Soucet += Pole[4]
>>> Soucet += Pole[5]
>>>
>>> Vypada do dlouze, ale po prelozeni je to obvykle kratsi a nekolikanasobne
>>> rychlejsi
>>>
>> A uz viete aj preco to tak je...
>>
>> A.
>>
>>> Michal Gregor
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list