GCCについて
■ このスレッドは過去ログ倉庫に格納されています
0784デフォルトの名無しさん
NGNGtypedef float MATRIX[4][4];
inline void foo(MATRIX& mat) {
asm volatile("ここで mat に書き込む" :: "r"(&mat));
// ここで mat 読み出す
}
こういうコードを書くと、gcc がインラインアセンブラで mat を書き換えたことに気づ
かず、レジスタに残ってる mat[4][4] の要素を再利用することがある。明示的に
mat 書き換えたよ、と宣言したいんだけどどうしたらいい?
いちおう解決方法は見つけたんだが、どっちもイマイチなんで。
1. clobbered registeres に "memory" と書く
これだと mat に限らず、すべてのレジスタをいったん破棄してしまうから、効率が
イマイチ…。
2. inline にしない
これも効率の面から避けたい
■ このスレッドは過去ログ倉庫に格納されています