1

“为 Thumb 编译”和 VFP 代码如何相互关联?

在 iPhone 2G/3G 上,我知道 Thumb 指令集不包括浮点计算(在 3GS 上,Thumb2 显然有..)。那么,如果为 thumb 编译,但使用 VFP 代码进行浮点计算,会发生什么?

我知道这很深入-但可能这里有人知道...c

4

1 回答 1

3

我不确定“使用 VFP 代码”是什么意思。您的意思是浮点代码,它可能被编译以在 VFP 上运行,还是您的意思是实际的 VFP 汇编指令?

如果您在 thumb 模式下编译并使用浮点,则会为代码中的每个浮点操作进行函数调用。这些函数调用(它们的名称类似于__muldf3vfp)将模式切换到 ARM,将数据移入浮点寄存器,执行操作,将数据移回整数寄存器,然后返回。如果在 ARM 模式下编译,这对于只有一条指令的东西来说是很多工作,所以不要在浮点密集型代码中使用 thumb。

如果你尝试在 thumb 模式下使用 VFP 汇编指令,你只会得到一个汇编错误。

如您所述,3GS 支持 thumb2,它确实可以访问 VFP 和 NEON 寄存器,因此这种情况不适用。

另请注意,可以根据源文件在 thumb 和 ARM 编译之间切换,因此您可以在 thumb 中编译大部分项目,并将 ARM 用于一些执行大量浮点的例程,例如。如果你想编写汇编代码,你可以在 ARM 和 thumb 每个函数之间切换。

于 2010-01-13T15:46:47.447 回答