访问传递给 asm 调用的第一个浮点参数时 DS5 Ultimate 版的不同行为

DS5 Ultimate edition different behavior while accessing first float argument passed to asm call

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

您必须为 ARM 编译器(Clang 分支)添加 hard/soft 浮点选项

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

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

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

的机器代码

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

软:没有使用 VFP

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

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