Arm DS5 Ultimate edition访问传递给asm调用的第一个浮点参数时的不同行为
我使用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=霓虹灯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=霓
请建议需要添加什么选项才能在s0寄存器中正确获取第一个浮点参数。您必须为ARM编译器(一个叮当的叉子)设置硬/软浮点选项 在GCC/Clang中,它们如下所示:
- -mfloat abi=硬
- -mfloat abi=软FP
- -mfloat abi=软
硬
选项并不常用。您的二进制文件甚至不会链接到使用softfp/soft
选项编译的其他二进制文件
我强烈建议不要使用
硬
选项,除非你知道自己在做什么。谢谢杰克!那很有帮助。。我试过使用softfp选项。现在我修改为optionhard,它从s0寄存器获取float参数。正如您所建议的,不建议使用硬选项,因此将使用softfp并相应地访问参数。您运行的是什么操作系统?大多数Linux发行版都改用了硬浮动,因为它的效率要高得多。