[U-Boot] [RFC PATCH 0/4] Enable Thumb build for ARM platforms

Aneesh V
2012-02-06T13:22:21Z

On Monday 06 February 2012 05:56 PM, Aneesh V wrote:
> On Monday 06 February 2012 05:07 PM, Aneesh V wrote:
>> Thumb is an alternate instruction set available in many
>> ARM processors. Below is a detailed description from ARM
>> specs:
>>
>> "The Thumb instruction set is a re-encoded subset of the
>> ARM instruction set. Thumb instructions execute in their
>> own processor state, with the architecture defining the
>> mechanisms required to transition between ARM and Thumb
>> states. The key difference is that Thumb instructions are
>> half the size of ARM instructions(16 bits compared with 32
>> bits). Greater code density can usually be achieved by using
>> the Thumb instruction set in preference to the ARM instruction
>> set, at a cost of some reduction in performance"
>>
>> "In ARMv6T2, Thumb-2 technology is introduced. This technology
>> makes it possible to extend the original Thumb instruction set
>> with many 32-bit instructions. The range of 32-bit Thumb instructions
>> included in ARMv6T2 permits Thumb code to achieve performance
>> similar to ARM code, with code density better than that of earlier
>> Thumb code. From ARMv6T2, the ARM and Thumb instruction sets provide
>> almost identical functionality"
>>
>> This series adds Thumb support in U-Boot and enables it for
>> OMAP4. It also fixes issues faced while booting OMAP4 with
>> Thumb-2 images of U-Boot and SPL.
>>
>> Thumb mode is becoming increasingly relevant for U-Boot with
>> the advent of SPL. It's very important to keep SPL size smaller
>> considering the internal RAM size constraints on many platforms.
>> On OMAP4 the size reduction enables us to use SPL on secure devices
>> that have smaller internal RAM available for non-secure world.
>>
>> I would request all who are interested in this feature to test it
>> and give feedback. To make that easier I have pushed my patches
>> here (along with the timer patch from Nicolas that fixes boot on
>> OMAP4):
>>
>> git at github.com:aneeshv/u-boot.git
>> branch: thumb
>>
>> To enable support for new platforms you just need to add
>> CONFIG_SYS_THUMB_BUILD in your config file.
>
> Some statistics:
>
> Code-size reduction:
> Image ARM build Thumb build % Reduction
> u-boot.bin 190408 144676 24.01%
> u-boot-spl.bin 33200 25096 24.40%
>
> Performance(timestamp just before the main loop):
> ARM build Thumb build % Reduction
> 898510us 878247us -2.25%
>
> That is, performance actually improved marginally for the Thumb
> build, maybe because of the reduced image sizes.

Oops! I missed details about the tool-chains I used. I succcessfully
tried the following tool-chains for the Thumb build.

1. Sourcery G++ Lite 2010q1-202
arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2010q1-202) 4.4.1
GNU ld (Sourcery G++ Lite 2010q1-202) - binutils 2.19.51.20090709

2. Linaro 4.6-2012.01
arm-linux-gnueabi-gcc (crosstool-NG linaro-1.13.1-2012.01-20120125 -
Linaro GCC 2012.01) 4.6.3 20120105 (prerelease)
GNU ld (crosstool-NG linaro-1.13.1-2012.01-20120125 - Linaro GCC
2012.01) 2.22

Test reports with different tool-chains will be greatly appreciated!

best regards,
Aneesh