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