如何在启用 SSE 的情况下编译 Linux 内核?



我处于以下情况:

  1. 我正在向 Linux 内核添加基于浮点的算法。我知道我不应该那样做,但我想试一试,看看它有多糟糕。
  2. kernel_fpu_begin/kernel_fpu_end用于每个浮点计算块。
  3. 当我运行make编译内核代码时,出现此错误:SSE register return with SSE disabled,相应的行input[3] = (float)util / (float)max;

以下是我的问题:

  1. 我在生成文件中找不到-mno-sse -mno-sse2,我该怎么做才能启用 SSE?
  2. 当我声明一些浮点变量时,例如float x[10],我应该使用kernel_fpu_begin/kernel_fpu_end吗?

谢谢!

您需要阻止编译器使用 SSE 例如在kernel_fpu_begin之前或之后复制end的 16 字节结构。 因此,您不能只使用使用-msse2编译的文件中的函数内的块。

您可以将 FP 代码放在单独的函数中,并在该函数上使用__attribute__((target("sse2")))"avx",以便在没有命令行选项的情况下启用它,特别是针对 x86。

显然,该函数无法按值返回float,因为标准调用约定以 XMM0 返回,并且您需要在没有 XMM0 的情况下编译调用方。

最新更新