我正在查看在XCode中编译的iOS代码(使用gcc编译为ARM架构),据我所见,编译器从未使用过ARM允许任意指令带有条件的特性,而是像在英特尔和其他架构上一样,在条件下分支。
这是否只是GCC的限制(我可以理解,因为“条件=分支”嵌入到编译器体系结构中的层次太高,以至于不允许其他情况),还是需要打开特定的优化标志才能允许编译条件指令?
(显然,我很清楚我正在做出关于应该使用条件指令的大胆假设,并且实际上会进行优化,但我有使用早期ARM芯片编程并使用和分析Acorn原始ARM C编译器输出的经验,因此我有一个大致的想法。)
更新:经过以下信息的调查,发现:
- XCode以Thumb-2模式编译,其中没有提供任意指令的条件执行; - 在某些情况下,它会使用ITE(if-then-else)指令来有效地生成具有条件执行的指令。
这是否只是GCC的限制(我可以理解,因为“条件=分支”嵌入到编译器体系结构中的层次太高,以至于不允许其他情况),还是需要打开特定的优化标志才能允许编译条件指令?
(显然,我很清楚我正在做出关于应该使用条件指令的大胆假设,并且实际上会进行优化,但我有使用早期ARM芯片编程并使用和分析Acorn原始ARM C编译器输出的经验,因此我有一个大致的想法。)
更新:经过以下信息的调查,发现:
- XCode以Thumb-2模式编译,其中没有提供任意指令的条件执行; - 在某些情况下,它会使用ITE(if-then-else)指令来有效地生成具有条件执行的指令。