私は次の状況にあります:
- SSE命令を許可しないカーネルのコードを書いています
- 浮動小数点演算を行う必要があります
- x86_64プラットフォーム用にコンパイルしています
問題を説明するコードサンプルを次に示します。
int
main(int argc, char** argv)
{
double d = 0.0, dbase;
uint64_t base_value = 300;
d = (2200.0 - 1000.0)/(1000.0);
dbase = d * base_value;
printf("d = %f, dbase = %f\n", d, dbase);
base_value = dbase;
printf("base_value = %llu\n", (long long unsigned)base_value);
return 0;
}
そして、これがmakefileの関連行です。
CFLAGS += -mcmodel=kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow \
-msoft-float -fno-asynchronous-unwind-tables -fno-omit-frame-pointer
ビルドを実行すると、次のエラーが発生します。
SSE register return with SSE disabled
(エラーは、dとbase_valueを乗算する行を指します)
これを修正するために私ができることはありますか?-mno-sseを削除することはオプションではありませんが、コンパイラーは乗算を行うために非sseコードを生成できるはずです。
ありがとうネイサン