我处于以下情况:
kernel_fpu_begin/kernel_fpu_end
在每个浮点计算块中使用。 make
编译内核代码时,出现以下错误:SSE register return with SSE disabled
,对应的行是input[3] = (float)util / (float)max;
这是我的问题:
-mno-sse -mno-sse2
,该怎么做才能启用SSE? float x[10]
,我应该使用kernel_fpu_begin/kernel_fpu_end
吗? 谢谢!
最佳答案
您需要停止编译器使用SSE等功能。在kernel_fpu_begin
之前或end
之后复制一个16字节的结构。因此,您不能只在使用-msse2
编译的文件中的函数内部使用块。
您可能可以将FP代码放在单独的函数中,并在该函数上使用 __attribute__((target("sse2")))
或"avx"
来启用它,而无需使用命令行选项(特别是x86)。
显然,该函数无法按值返回float
,因为标准调用约定在XMM0中返回,并且您需要在不使用的情况下编译调用程序。
关于compiler-errors - 如何在启用了SSE的情况下编译Linux内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62125060/