On 2 February 2011 10:47, Dave Martin <dave.mar...@linaro.org> wrote:
> On Tue, Feb 1, 2011 at 12:33 PM, David Gilbert <david.gilb...@linaro.org> 
> wrote:
>> Hi,
>>  What do people understand to be the expected semantics of IT blocks
>> in the cases below, of which there has been some confusion
>> in relation to a recent Qt issue.
>>
>>  The code in question had a sequence something like:
>>
>>
>>  comparison
>>  IT... EQ
>>  blahEQ
>>  TEQ
>>  BEQ
>>
>> The important bits here are that we have an IT EQ block and two special 
>> cases:
>>
>>  1) There is a TEQ in the IT block - are all comparisons in the block
>> allowed and do their effects immediately take
>> effect?  As far as I can tell this is allowed and any flag changes are
>> used straight away;
>
> Yes; yes; and: you're right.  This was a specific intention, since
> there was always a common idiom on ARM of sequences like this:
>
> CMP r0, #1
> CMPEQ r1, #2
> CMPEQ r2, #3
> BEQ ...
>
> with the effect of "if(r0==1 && r1==2 && r2==3) ..."
>
>>
>>  2) There is a BEQ at the end of the IT block, as far as I can tell,
>> as long as the destination of the BEQ is close it shouldn't
>> make any difference if the BEQ is included in the IT block or not.
>
> Again, I believe you're right.  The assembler will generate different
> code, because the explicit conditional branch encodings are not
> allowed in IT blocks.  But the assembler takes care of this for you:
>
> 00000000 <f>:
>   0:   d001            beq.n   6 <g>
>
> versus
>
>   2:   bf08            it      eq
>   4:   e7ff            beq.n   6 <g>
>
> 00000006 <g>:
>
> Both snippets are equivalent, though as you say, with IT you can
> insert more code between the branch and its destination before the
> assembler will barf with a fixup overflow, because the unconditional
> branch encoding (e000..e7fff) has more bits to express the branch
> offset.

Thanks for the confirmation Dave.

Dave

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to