Novejsi WinAVR produkuje o 70% vetsi kod

Miroslav Šinko sinkomiro@gmail.com
Čtvrtek Červenec 23 23:16:19 CEST 2009


2009/7/23, Petr Simek <psimek@jcu.cz>:
> > S tym sbi je to v nejakom headri niecim podmienene. Vecer mozem
> > pozriet, mari sa mi, ze som to nejako riesil...
>
> Prohledal jsem soubory a je to v   #include <compat/deprecated.h>
> takze timhle se to da znovu zapnout.

Este sa vratim k tomuto. Na set/clear bit pouzivam tak trochu
vykradnute makra (ale kod v nich je bezny:-)

#ifndef BV
   #define BV(bit)  (1<<(bit))
#endif
#ifndef cbi
   #define cbi(reg,bit) reg &= ~(BV(bit))
#endif
#ifndef sbi
   #define sbi(reg,bit) reg |= (BV(bit))
#endif

Ked sa pouzije prepinac -fgcse, GCC zacne pouzivat priamo instrukcie
cbi/sbi. Tento prepinac pouziva optimalizator automaticky pri O2, O3 a
Os.
Priklad na porovnanie:
;sbi(IO_PORT, IO_OUT_RELAY);
 150:	c4 9a       	sbi	0x18, 4	; 24

Bez prepinaca a s nizsimi optimalizaciami prekladac pouzije tento kod:
;sbi(IO_PORT, IO_OUT_RELAY);
 154:	e8 e3       	ldi	r30, 0x38	; 56
 156:	f0 e0       	ldi	r31, 0x00	; 0
 158:	80 81       	ld	r24, Z
 15a:	80 61       	ori	r24, 0x10	; 16
 15c:	80 83       	st	Z, r24

miro



Další informace o konferenci Hw-list