WINAVR - prekvapiva optimalizace

Jan Waclawek konfera@efton.sk
Pátek Prosinec 12 13:45:09 CET 2008


No, po prve, WinAVR nie je prekladac.

Pricina tej zvlastnej optimalizacie je mozno v tom, ze gcc v mnohych optimalizaciach (ktore su robene este vo faze ktora je procesorovo nespecificka) ide tvrdo v linii vlastnosti "velkych" procesorov, a potom je to uz v tom backende ktory je specificky pre AVR tazko napravit.

SDCC ten kusok (musel som k nemu samozrejme dopisat definicie atd.) prelozil napr. takto:

                            138 ;	pp.c:19: DsTSensCount = 10;
   0000 75*00 0A            139 	mov	_DsTSensCount,#0x0A
                            140 ;	pp.c:21: pd = &DsTSensDesc[0];
                            141 ;	pp.c:22: for (idx=0; idx<DsTSensCount; idx++)
   0003 7A 34               142 	mov	r2,#_DsTSensDesc
   0005 7B 12               143 	mov	r3,#(_DsTSensDesc >> 8)
   0007 7C 00               144 	mov	r4,#0x00
   0009                     145 00101$:
   0009 C3                  146 	clr	c
   000A EC                  147 	mov	a,r4
   000B 95*00               148 	subb	a,_DsTSensCount
   000D 50 1A               149 	jnc	00105$
                            150 ;	pp.c:24: pd++->status = TSENS_ERR_HW;
   000F 8A 05               151 	mov	ar5,r2
   0011 8B 06               152 	mov	ar6,r3
   0013 74 0F               153 	mov	a,#0x0F
   0015 2A                  154 	add	a,r2
   0016 FA                  155 	mov	r2,a
   0017 E4                  156 	clr	a
   0018 3B                  157 	addc	a,r3
   0019 FB                  158 	mov	r3,a
   001A 74 0A               159 	mov	a,#0x0A
   001C 2D                  160 	add	a,r5
   001D F5 82               161 	mov	dpl,a
   001F E4                  162 	clr	a
   0020 3E                  163 	addc	a,r6
   0021 F5 83               164 	mov	dph,a
   0023 74 05               165 	mov	a,#0x05
   0025 F0                  166 	movx	@dptr,a
                            167 ;	pp.c:22: for (idx=0; idx<DsTSensCount; idx++)
   0026 0C                  168 	inc	r4
   0027 80 E0               169 	sjmp	00101$
   0029                     170 00105$:
   0029 22                  171 	ret



wek



----- Original Message ---------------
>No, ja uz se naucil I 3. pravidlo, ze zadny prekladac neni dokonaly a obcas
>neco prelozi I uplne blbe :-) Zvlast tem pro MCU neverim dokud preklad
>nevidim.
>A kratsi jsem myslel na pocet instrukci, tady neni rychlost dulezita. Ale I
>na rychlost by to IMHO vyslo podstatne lepe s pouzitim promenne typu BYTE
>pro pocitani iteraci cyklu. Adresa by se jen pricitala, nemusela by se
>porovnavat v 16b forme a pripravovat koncova adresa dalsimi x instrukcemi.
>Takze v tomto pripade optimalizaci nepovazuji za zdarilou.




Další informace o konferenci Hw-list