This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

What does it mean 'IT can be omitted'?

Hi,

When I read the following on ARM website, I don't understand the first line. When I change ITTE to TE (as 'IT can be omitted"), the assembler complains an error of this line.

Could you explain it to me?

Thanks,

  ITTE NE ; IT can be omitted

  ANDNE r0,r0,r1 ; 16-bit AND, not ANDS

  ADDSNE r2,r2,#1 ; 32-bit ADDS (16-bit ADDS does not set flags in IT block)

  MOVEQ r2,r3 ; 16-bit MOV

  ITT AL ; emit 2 non-flag setting 16-bit instructions

  ADDAL r0,r0,r1 ; 16-bit ADD, not ADDS

  SUBAL r2,r2,#1 ; 16-bit SUB, not SUB

  ADD r0,r0,r1 ; expands into 32-bit ADD

  IT NE

  ADD r0,r0,r1 ; syntax error: no condition code used in IT block

    ITT    EQ       

    MOVEQ  r0,r1

    BEQ    dloop

Parents
  • In Thumb mode ITNE is a variant of the IT instruction - but all the information to generate the instruction is there in the NE and EQ conditions on the following three instructions and the assembler can generate it from that. So one can leave the entire line out. Have a look at the IT instruction. The condition NE in the operand field is the same as the NE at the end of ANDNE, the T (then) following IT means the same code NE isapplies in the ADDSNE instruction and the E (else) at the end of ITTE applies the opposite code EQ to MOVEQ.

Reply
  • In Thumb mode ITNE is a variant of the IT instruction - but all the information to generate the instruction is there in the NE and EQ conditions on the following three instructions and the assembler can generate it from that. So one can leave the entire line out. Have a look at the IT instruction. The condition NE in the operand field is the same as the NE at the end of ANDNE, the T (then) following IT means the same code NE isapplies in the ADDSNE instruction and the E (else) at the end of ITTE applies the opposite code EQ to MOVEQ.

Children
No data