GCC 编译时切换浮点支持?

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

我正在为两个不同的 riscv 处理器开发一些程序。一个是IMC,另一个是IMFC。我想在我的程序中添加一个编译开关,以阻止 IMC 目标的浮点代码,并为 IMFC 目标保留完整的浮点代码。理想情况下,我会得到类似伪代码的东西

#if RISCV_FLOATING_POINT_SUPPORTED // Floating point maths #endif // Non floating point maths 

我一直在进行一些挖掘,但在任何在线文档中都找不到此开关。我看到很多有关编译选项的文档(例如 -march),但这并没有真正帮助我(或者如果有的话,我不确定如何在编译时解析它)。我使用的是 GCC 版本 11.2。任何帮助将不胜感激。谢谢!!

编辑:对这篇文章的两个回复已经有很大帮助了。我运行了

echo | gcc -dM -E -march=rv32imfc -
rv32imc 并比较了两个输出。我发现了一些增量,应该可以让我做我想做的事。感谢大家的意见!

gcc riscv
1个回答
0
投票

基本上有两件事需要考虑:ABI 和指令存在。

以下是三种可能的选择:

  1. 硬浮动(存在 F/D/Q 扩展)。
$ riscv64-linux-gnu-gcc -E -dM -c test.c
#define __riscv_float_abi_double 1
#define __riscv_d 2000000
#define __riscv_f 2000000
...

我的编译器默认为 gc 级别扩展,因此这里我们有 double 和 float 指令集支持,以及硬浮点 ABI。

  1. 硬浮点指令,但软浮点ABI
$ riscv64-linux-gnu-gcc -E -dM -c test.c -mabi=lp64
#define __riscv_float_abi_soft 1
#define __riscv_d 2000000
#define __riscv_f 2000000
...

编译器假定固件支持或模拟指令,并将根据需要使用它们,但使用软浮点 ABI 来传递浮点参数和结果。

  1. 无浮点指令,软浮点ABI
#define __riscv_float_abi_soft 1
...

假设处理器不支持 FP 指令; soft-float ABI 和软浮点库支持用于浮点代码。

© www.soinside.com 2019 - 2024. All rights reserved.