iPhone Thumb& VFP

时间:2010-01-13 15:40:49

标签: c++ iphone floating-point thumb

如何'编译Thumb'和VFP代码相互关联?

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

我知道这是非常深刻的 - 但可能有人知道...... c

1 个答案:

答案 0 :(得分:3)

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

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

如果您尝试在拇指模式下使用VFP汇编指令,则只会出现汇编程序错误。

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

另请注意,拇指和ARM编译之间的切换可以按源文件完成,因此您可以用拇指编译大部分项目,并将ARM用于执行大量浮点操作的几个例程。如果要编写汇编代码,可以在每个函数的ARM和thumb之间切换。