Я смотрю на некоторый код, скомпилированный для iOS в XCode (скомпилированный для ARM с gcc), и, насколько я могу видеть, компилятор никогда не использовал функцию ARM, позволяющую произвольным инструкциям иметь присоединенное к ним условие,но вместо этого всегда выполняется переход на условие, как это было бы в случае Intel и других архитектур.
Является ли это просто ограничением GCC (я могу понять, что это может быть так: «условие = ветвь» встроено вслишком высокий уровень в архитектуре компилятора, чтобы допустить иное), или есть определенный флаг оптимизации, который необходимо включить, чтобы разрешить компиляцию условных инструкций?
(Очевидно, я ценю, что делаю большие предположения относительногде использование условных инструкций "должно" быть использовано и фактически было бы оптимизацией, но у меня есть опыт программирования более ранних чипов ARM и использования и анализа выходных данных оригинального компилятора ARM C Acorn, поэтому у меня есть приблизительное представление.)
Обновление: ВложивЭто стало возможным благодаря информации, приведенной ниже, и получается:
- XCode компилируется в режиме Thumb-2, в котором условное выполнение произвольных инструкций недоступно;
- В некоторых случаяходнако в некоторых случаях он использует инструкцию ITE (if-then-else) для эффективного создания инструкций с условным выполнением.