У меня есть следующий код сборки ARM.
CMP R0, #0
ITT EQ
MOVEQ R0, #0x7FFFFFFF
BXEQ LR
Во-первых, зачем нужен эквалайзер после инструкций MOV и BX? Ссылка ARM говорит, что условие (EQ) после ITT будет применено к первой команде (MOV) в IT-блоке, а затем из-за второго T в ITT EQ будет применен ко второй команде (BX) в IT-блоке. Итак, если ITT применяет EQ, почему EQ необходимо в MOVEQ и BXEQ?
Во-вторых, зачем вообще нужна ИТ-инструкция? Почему бы просто не иметь:
CMP R0, #0
MOVEQ R0, #0x7FFFFFFF
BXEQ LR
Это MOV не MOVS, поэтому флаги не будут обновляться, а эквалайзер в BXEQ будет "ссылаться" на значения флага, установленные CMP.