正直日記



2005/05/11

_ 非最適な最適
2005/01/27の日記の続き。

最近は「取り合えず-O3でいいかぁ」という感じで盲目的に-O3指定している
のだけど、このオプションは出来る限りインライン展開しようとするのね。
まぁそれは知ってたけど、この頃妙にIRAMが圧迫されるなぁと思ったら……

例えば mtrand を実装した
#define CODE_IN_IWRAM __attribute__ ((section (".iwram"), long_call))

CODE_IN_IWRAM
unsigned long genrand(void);
があるとして、
CODE_IN_IWRAM
u32 rand32(void)
{
	return (u32)(genrand()); /* あまり意味は無い */
}

CODE_IN_IWRAM
u16 rand16(void)
{
	return (u16)(genrand() & 0xffff);
}

CODE_IN_IWRAM
u8 rand8(void)
{
	return (u8)(genrand() & 0xff);
}
それぞれの型で返す関数を作るとする……と、全部展開されるし(^^;ニラ こんなのはマクロで書けっつう話でした。
_ 固定小数点数
後先考えずに突貫工事してきたせいか、ソースによって小数部が8bitだったり
7bitだったり15bitだったりして混乱してきたからなんとかする。sinテーブル
を符号1bitの小数部7bitで持ってるから、それに合わせりゃいいか。こういう
ノウハウって教科書化されてないのかね。つーても設計によるから意味ないか。
ちょっと考えりゃ分かるはずだし。俺は馬鹿なので分かりませんでしたよ。

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12