mezi zidli a klavesnici
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Úterý Únor 28 17:02:05 CET 2012
Ted jak na to koukam, tak me prekvapilo, ze prekladac pochopil praci s
neinicializovanou promennou a prvni soucet rovnou nahradi prirazenim,
coz by se takhle psat samo nemelo, protoze 9 z 10 prekladacu to prelozi
asi normalne a nebude to fungovat...
Dne 28.2.2012 16:57, Jaroslav Buchta napsal(a):
> 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
>
> _______________________________________________
> 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