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

标签 compiler-errors linux-kernel sse fpu

我处于以下情况:

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

  • 这是我的问题:
  • 我在Makefile中找不到-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/

    相关文章:

    java - USACO报告错误,因为我的课是公开的,应该与文件匹配

    c++ - 如何修复DevCC编译器错误: [Error] expected unqualified-id before 'if' ?

    gcc - SSE 4 popcount 为 16 个 8 位值?

    c++ - 将Qt C++与lp_solve集成-编译器错误

    c++ - 大小未知的数组作为类成员,用于在运行时制作数组对象(对象创建时间)

    linux-kernel - yocto 项目中的 U-boot 源码

    linux - 为 Linux 使用 SIGCONT 和 CLONE() 和 CLONE_STOPPED 标志

    linux-kernel - 如何在谷歌计算引擎实例上安装自定义内核?

    c - SSE 16 位寄存器的无符号/有符号减法

    c++ - 计算解释为 4 字节的两个整数之间的范数