我在以下情况:
- 我是一个内核不允许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;
}
这里是从生成文件中的相关行:
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代码做乘法。
由于弥敦道