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

Arm DS5 Ultimate edition访问传递给asm调用的第一个浮点参数时的不同行为,arm,neon,ds-5,Arm,Neon,Ds 5,我使用DS5终极版在cortex-a53 32位上进行汇编编码和执行。 从我的C函数调用asm函数。 通常的规范是当从C函数调用asm函数并传递参数时,第一个浮点参数出现在s0寄存器中。 例如,func_asm(浮点a,浮点*b); 第一个浮点参数“a”进入s0寄存器,参数“b”出现在r0寄存器中。 但是,在我的例子中,我得到了r0寄存器中的第一个浮点参数'a'和r1寄存器中的'b'。 我正在使用以下选项生成文件 --目标=手臂无eabi-三月=手臂V7-a-mcpu=皮质-a53-mfpu=霓

我使用DS5终极版在cortex-a53 32位上进行汇编编码和执行。 从我的C函数调用asm函数。 通常的规范是当从C函数调用asm函数并传递参数时,第一个浮点参数出现在s0寄存器中。 例如,func_asm(浮点a,浮点*b); 第一个浮点参数“a”进入s0寄存器,参数“b”出现在r0寄存器中。 但是,在我的例子中,我得到了r0寄存器中的第一个浮点参数'a'和r1寄存器中的'b'。 我正在使用以下选项生成文件 --目标=手臂无eabi-三月=手臂V7-a-mcpu=皮质-a53-mfpu=霓虹灯
请建议需要添加什么选项才能在s0寄存器中正确获取第一个浮点参数。

您必须为ARM编译器(一个叮当的叉子)设置硬/软浮点选项

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

  • -mfloat abi=硬
  • -mfloat abi=软FP
  • -mfloat abi=软
哈德:这就是你要找的。编译器将生成充分利用VFP的机器代码

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

软:无VFP利用率

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


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

谢谢杰克!那很有帮助。。我试过使用softfp选项。现在我修改为optionhard,它从s0寄存器获取float参数。正如您所建议的,不建议使用硬选项,因此将使用softfp并相应地访问参数。您运行的是什么操作系统?大多数Linux发行版都改用了硬浮动,因为它的效率要高得多。