[H8-ML(1905)] Re: 3068F Lan マイコンに付属の Cコンパイラのバグ ( 仕様 ?)
From: Masahiro Ochiai <user@xxxxxxxxxxxxx>
Date: 2002年05月31日(金)23時37分01秒

bset,bclrは8ビットアドレッシング専用ですが、I/Oポートは8ビット幅アクセスが多いので、
1ビットのセット・クリアだけはこれらの命令を出力してくれてもいいかなぁと思ったわけです。
そうするとロードとストアが一命令でできるので、高速化できるなぁと思っています。

H8ってメモリ(グローバル変数)に対してインクリメントできないんですよね。だから、

	1.メモリからレジスタにロード
	2.レジスタをインクリメント
	3.レジスタ値をメモリにストア

と3ステップが必要になります。それはそれで仕方ありませんが、この3ステップ中に割り込みが
発生し、その変数を参照・更新したりすると、結果がおかしくなってしまいます。

そのため、uClinuxのソースでは

	1.ccrをpush
	2.割込み禁止する
	3.上記インクリメント処理
	4.popしてccrにセット

というコードをみることができました。include/asm-h8300/atomic.h

ニーモニックにADD,INC,ADDS,ADDXとバリエーションがあるのに、どれもディスティネーションは
レジスタのみというのはさみしいです。ついこの間64ビット変数の加算をしようとADDXを使おう
としたら、バイトしか受けつけないし...ADDXはBCD演算専用?


-- 
落合 正弘
Masahiro OCHIAI
http://strawberry-linux.com/
スレッド概略
[1887(R)](起点)
 └[1904(U)]
   └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]