相关疑难解决方法(0)

SSE寄存器返回SSE禁用

我遇到以下情况:

  • 我正在为不允许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;
}
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

当我运行构建时,我收到此错误:

SSE register return with SSE disabled
Run Code Online (Sandbox Code Playgroud)

(错误指向与d和base_value相乘的行)

知道我能做些什么来解决这个问题吗?删除-mno-sse不是一个选项,但似乎编译器应该能够生成非sse代码来进行乘法运算.

谢谢内森

c floating-point gcc sse

11
推荐指数
1
解决办法
8965
查看次数

标签 统计

c ×1

floating-point ×1

gcc ×1

sse ×1