(→Summary) |
m (snapshot) |
||
| Line 5: | Line 5: | ||
=== Introduction and Background === | === Introduction and Background === | ||
| - | Responsibility area of Nokia is to take care of ARM processor architecture support in MeeGo toolchain. Current toolchain setup in MeeGo Release 1.1 | + | Responsibility area of Nokia is to take care of ARM processor architecture support in MeeGo toolchain. Current toolchain setup in MeeGo Release 1.1 only partially supports the use of FPU in ARM architecture. |
Gcc compiler provides three options to support floating points in -mfloat-abi [1]: | Gcc compiler provides three options to support floating points in -mfloat-abi [1]: | ||
| - | * soft - Full | + | * soft - Full software implementation of floating point. Fits to those processors without FPU. All FPU operations are emulated by the compiler. |
* softfp - FPU unit is used, but the code is compatible to full software float code. Floating Point operations are passed to FPU in integer registers. | * softfp - FPU unit is used, but the code is compatible to full software float code. Floating Point operations are passed to FPU in integer registers. | ||
* hard - Floating Point arguments are passed directly in FPU registers. No compatibility to options soft and softfp. | * hard - Floating Point arguments are passed directly in FPU registers. No compatibility to options soft and softfp. | ||
Contents |
This page describes proposal to upgrade MeeGo toolchain in MeeGo Release 1.2. Current toolchain is based on gcc-4.5.0 and it is proposed to be upgraded to gcc-4.5.1 based in the Rel 1.2. Also full support of FPU (Floating Point Unit) in ARM processor architecture is proposed to be taken into use in the toolchain.
Responsibility area of Nokia is to take care of ARM processor architecture support in MeeGo toolchain. Current toolchain setup in MeeGo Release 1.1 only partially supports the use of FPU in ARM architecture.
Gcc compiler provides three options to support floating points in -mfloat-abi [1]:
Linaro (http://www.linaro.org) is providing ARM support to gcc. Linaro provides ARM patches to gcc upstream. Support of -mfloat-abi=hard option is available in gcc-4.5.1.
Performance tests comparing options -mfloat-abi=softp and -mfloat-abi=hardfp are done using Linaro 2010.11 (http://lists.linaro.org/pipermail/linaro-toolchain/2010-November/000414.html) toolchain. E.g. in PythonBench16 the improvement is 60 %.
Nokia propose to upgrade gcc-4.5.1 with -mfloat-abi=hard option support. This change applies in MeeGo Release 1.2.
Together with gcc update, binutils is updated to version 2.20 or newer and (e)glibc to version 2.10 or newer.
Reason to update is that gcc-4.5.1 contains numbers of ARM patches (submitted by Linaro) that are important for Nokia and other device vendors that develope ARM based devices.
Architecture name is also thought by Debian [2]. Debian considered "armv7hf" to be used to indicate if the hard floating point architecture is used. The name "armel" indicates that the hard floating point architecture is not used (-mfloat-abi=softfp). Since it is useful to also indicate that little endian mode is used, the new architecture name is proposed to be "armv7hl". The sub-architecture name "armv7nhl" is used to indicate NEON optimized binary.
Current softfp support (-mfloat-abi=softfp) is not allowed in MeeGo Release 1.2 and onwards.
In the same architecture the two sets of toolchain setups is proposed to be published as in follows:
* ARMv7 architecture (-march=armv7-a) * VFPv3-D16 (-mfpu=vfpv3-d16)
* ARMv7 architecture (-march=armv7-a) * NEON (-mfpu=neon)
Applications using the optimized set are provided as dedicated binaries that optimized for each HW platform.
Following impacts can be foreseen if the Toolchain is changed or not changed.
Toolchain changed:
Toolchain NOT changed:
Analysis of impacts:
Toolchain version must be agreed during 11/2010 and it must be available to testing in OBS at the begin of 12/2010.
Toolchain change in MeeGo Release 1.2 as follows:
[1] http://wiki.debian.org/ArmHardFloatPort/VfpComparison#DetailsonGCCfloating-pointoptions