1

我正在使用 DS5 终极版在 cortex-a53 32 位上进行汇编编码和执行。从我的 C 函数中,我调用 asm 函数。通常的规范是当从 C 函数调用 asm 函数并传递参数时,第一个浮点参数存在于 s0 寄存器中。例如,func_asm(float a, float * b); 第一个浮点参数“a”进入 s0 寄存器,参数“b”出现在 r0 寄存器中。但是,在我的情况下,我在 r0 寄存器中得到第一个浮点参数“a”,在 r1 寄存器中得到“b”。我正在使用带有以下选项的 make 文件构建 --target=arm-arm-none-eabi -march=armv7-a -mcpu=cortex-a53 -mfpu=neon 请建议需要添加什么选项来获取第一个 float 参数在 s0 寄存器中正确。

4

1 回答 1

1

您必须为 ARM 编译器(Clang fork)放置硬/软浮点选项

在 GCC/Clang 中,它们如下所示:

  • -mfloat-abi=硬
  • -mfloat-abi=softfp
  • -mfloat-abi=软

难:这就是你要找的。编译器将生成充分利用 VFP 的机器代码

softfp:最常用的形式。即使使用了 VFP,参数传递也是通过整数寄存器进行的

软:不使用 VFP

请注意,hard您打算使用的选项并不常用。而且您的二进制文件甚至不会链接到使用该softfp/soft选项编译的其他文件。

我强烈建议不要使用该hard选项,除非您知道自己在做什么。

于 2018-11-09T10:02:35.240 回答