【问题标题】:iPhone Thumb & VFPiPhone 拇指 & VFP
【发布时间】:2010-01-13 23:52:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ iphone floating-point thumb


    【解决方案1】:

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

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

    如果您尝试在拇指模式下使用 VFP 汇编指令,您只会收到汇编错误。

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

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

    【讨论】:

    • 我的意思是实际的 VFP 组装说明。但是 - 什么编译器设置可以自动为 VFP 编译浮点数学?
    • 在我的回答中添加了在拇指模式下使用 VFP 汇编指令只会给你一个汇编错误。此外,浮点默认编译为 VFP(针对使用 NEON 指令的 3GS 时的单精度除外)。
    • 嗯。我正在开发一款 3d 游戏,它会进行大量的 fp 数学运算(矩阵计算、矢量变换等)——但是,转动拇指只会略微降低性能而不是提高性能。你知道这能告诉我什么吗?
    • 以及如何为每个源文件设置拇指模式?
    • 您是在测量 3GS 或更早型号的性能吗?要为 XCode 项目中的单个文件设置拇指模式,请右键单击源列表中的文件,单击 Get Info,选择 Build 选项卡,然后将 -mthumb 添加到 Additional Compiler Flags 字段。 (这个字段实际上是每个文件/目标组合,所以如果你的项目有多个目标,你需要确保正确的一个是活动的)
    猜你喜欢
    • 2016-03-05
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多