【问题标题】:Is there a compilation option to stop gcc using floating point instructions in integer code?是否有使用整数代码中的浮点指令停止 gcc 的编译选项?
【发布时间】:2020-06-07 14:01:33
【问题描述】:

当我遇到关于浮点指令的意外异常时,我的纯整数裸机 C 项目刚刚停止。

查看gcc生成的代码,罪魁祸首是fmov d0, x0,用于将值临时存储在浮点寄存器中,而不是在堆栈上。

我不希望它那样做!

我可以用noinline 属性标记一两个函数,但这不能保证问题不会在其他地方再次发生。

【问题讨论】:

  • 前几天有一个关于这个的问题...
  • 你的意思是stackoverflow.com/questions/62029562/…? “ARM,VFP,浮点,惰性上下文切换”你建议我应该用什么搜索来找到我的问题的答案?除了-mgeneral-regs-only,我不知道。

标签: gcc arm64 bare-metal


【解决方案1】:

这个选项可以解决问题:

-mgeneral-regs-only

https://gcc.gnu.org/onlinedocs/gcc-7.1.0/gcc/AArch64-Options.html

生成仅使用通用寄存器的代码。这将阻止编译器使用浮点和高级 SIMD 寄存器,但不会对汇编器施加任何限制。

【讨论】:

    【解决方案2】:

    您需要通知编译器您的目标没有浮点硬件。确切的标志取决于您的目标(对于 ARM,它是 -msoft-float)。

    【讨论】:

    • 谢谢,但我不认为 Aarch64/arm64 有这个选项。无论如何,我找到了 -mgeneral-regs-only
    • @SimonWillcocks 正如我所提到的,这取决于目标,例如MIPS 甚至有 -mno-float(而且您在问题中没有提到 AArch64)。
    • 你说得对,我只是标记了它。对不起,我是这个网站的新手。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多