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

问题描述 投票:1回答:1

我处于以下情况:

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

这是我的问题:

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

谢谢!

compiler-errors linux-kernel sse fpu
1个回答
0
投票

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

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

显然,该函数不能按值return

一个"avx",因为标准调用约定以XMM0返回,并且您需要在不进行编译的情况下编译调用方。”>
© www.soinside.com 2019 - 2024. All rights reserved.