[U-Boot] Query on CONFIG_SYS_THUMB_BUILD

Bill Pringlemeir
2014-11-19T16:31:05Z

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

> Dear Albert,
>
> In message <20141119074214.3d414ce6@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