[U-Boot] Query on CONFIG_SYS_THUMB_BUILD

Bill Pringlemeir bpringlemeir at nbsps.com
Wed Nov 19 17:31:05 CET 2014


On 19 Nov 2014, wd at denx.de wrote:

> Dear Albert,
>
> In message <20141119074214.3d414ce6 at lilith> you wrote:
>>
>> For -mauto-it, it is not documented in the gas documentation online
>> or in my current as' --target-help. I'll dig this deeper today, but
>> barring any scream from me, the change above is fine globally in
>> U-Boot.

> Apparently this [1] is where it is coming from; no further
> documentation there, though.

> [1] https://sourceware.org/ml/binutils/2009-05/msg00132.html

I would think that if this worked they would make it automatic and not
an option.  Probably this is only in certain binutils/as.

With 4.6.3 and 4.9.1 I do not have this option,

[foo.S]
.syntax unified
.thumb
foo:
   cmp r0, #5
   movne r1,#6
   moveq r1,#2
   bx lr
bar:
   cmp r0, #10
   movhi r1,#3
   movls r1,#7
   moveq r1,#11
   bx lr

$ arm-none-linux-gnueabi.gcc4.6.3/bin/arm-none-linux-gnueabi-as
-mcpu=cortex-a5 -mimplicit-it=always foo.S -o foo.o
$ arm-none-linux-gnueabi-vybrid-4.9.1/bin/arm-none-linux-gnueabi-as
-mcpu=cortex-a5 -mimplicit-it=always foo.S -o foo.o

Both give 'objdump -S foo.o',
foo.o:     file format elf32-littlearm

Disassembly of section .text:

00000000 <foo>:
   0:   2805            cmp     r0, #5
   2:   bf14            ite     ne
   4:   2106            movne   r1, #6
   6:   2102            moveq   r1, #2
   8:   4770            bx      lr

0000000a <bar>:
   a:   280a            cmp     r0, #10
   c:   bf8c            ite     hi
   e:   2103            movhi   r1, #3
  10:   2107            movls   r1, #7
  12:   bf08            it      eq
  14:   210b            moveq   r1, #11
  16:   4770            bx      lr

I think before the patch there would be 'it' values before each and
every condition.  In fact, if you change 'bar' to,

bar:
   cmp r0, #10
   movhi r1,#3
   movlo r1,#7
   moveq r1,#11
   bx lr

You get three 'IT' conditions as 'HI' and 'LO' are not opposite.  The
patch seem to detect things that are the exact opposite.  The 'bar'
above ends up with '11' in r1 if the value is zero, but it temporarily
'7'.  The 2nd bar will only place 11 in r1.

Fwiw,
Bill Pringlemeir.

Ref: https://wiki.ubuntu.com/ARM/Thumb2PortingHowto#Conditional_Execution


More information about the U-Boot mailing list