ITSTATE advances after normal execution of an IT block instruction. This is described by the ITAdvance() pseudocodefunction:
// ITAdvance()// ===========ITAdvance()if ITSTATE<2:0> == '000' thenITSTATE.IT = '00000000';elseITSTATE.IT<4:0> = LSL(ITSTATE.IT<4:0>, 1);
Now my question Does The function ITAdvance() called only after execution of an instruction only in IT Block or after any instruction execution even if it is not in an IT Block .. (being in IT block or not is checked by the least 4 significant bits of ITSTAT register) .... I couldn't find it in the operation pseudo code of any instruction of the ARMv7 manual
Thanks
Hi,
Most of the general pseudoscode towards the end of the manual isn't related to a specific instruction but cover the operation of the processor, accessing memory, taking exceptions etc.
ITAdvacnce() is "called" between instructions so won't be in the operation of any particular instruction but you can see it being called in some exception behaviors, ie TakeSVCException()
The ITSTATE needs to be updated after an instruction in the IT block completes, see A2.5.2 IT block state register, ITSTATE in the v7 Arm ARM.
Hope that helps,
Pete.
Thanks for ur answer ... I guessed that also because it's not mentioned in any instruction pseudo-code , I know it's effect is essential to update ITSTAT in IT block , and it I guess it have no use out of the block
but what I am still uncertain about is your words "ITAdvacnce() is "called" between instructions so won't be in the operation of any particular instruction"
do you mean by "any instruction" in and/or out of the IT block (meaning) or just any instruction but inside the Block ? that's my point , please elaborate
I also need to know where in the reference I can make sure of that information about when it's called .. or just where the function ITAdvance is mentioned itself is an evidence ... I am new to the way That Documentation is organized .. :D