arch: add softfp support

Some architectures support a mixed hard/soft floating point, where
the compiler emits hardware floating point instructions, but passes
the operands in core (aka integer) registers.

For example, ARM supports this mode (to come in the next changeset).

Add support for softfp cross compilers to the GCC and GLIBC
configuration. Needed for Ubuntu and other distros that are softfp.

Signed-off-by: Michael Hope <michael.hope@linaro.org>
[yann.morin.1998@anciens.enib.fr: split the original patch]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
This commit is contained in:
Yann E. MORIN"
2011-10-19 15:27:32 +13:00
committed by Michael Hope
parent 67ede2f5d4
commit 4fc56b1d14
3 changed files with 26 additions and 0 deletions

View File

@ -15,6 +15,7 @@ config ARCH_SUPPORT_ABI
config ARCH_SUPPORT_CPU config ARCH_SUPPORT_CPU
config ARCH_SUPPORT_TUNE config ARCH_SUPPORT_TUNE
config ARCH_SUPPORT_FPU config ARCH_SUPPORT_FPU
config ARCH_SUPPORT_SOFTFP
config ARCH_DEFAULT_HAS_MMU config ARCH_DEFAULT_HAS_MMU
config ARCH_DEFAULT_BE config ARCH_DEFAULT_BE
@ -144,6 +145,9 @@ config ARCH_SUPPORT_TUNE
config ARCH_SUPPORT_FPU config ARCH_SUPPORT_FPU
bool bool
config ARCH_SUPPORT_SOFTFP
bool
config ARCH_ARCH config ARCH_ARCH
string string
prompt "Architecture level" prompt "Architecture level"
@ -271,6 +275,22 @@ config ARCH_FLOAT_SW
If your processor has no FPU, then you most probably want this, as it If your processor has no FPU, then you most probably want this, as it
is faster than emulating the FPU in the kernel. is faster than emulating the FPU in the kernel.
config ARCH_FLOAT_SOFTFP
bool
prompt "softfp"
depends on ARCH_SUPPORT_SOFTFP
help
Emit hardware floating point opcodes but use the software
floating point calling convention.
Architectures such as ARM use different registers for passing
floating point values depending on if they're in software mode
or hardware mode. softfp emits FPU instructions but uses the
software FP calling convention allowing softfp code to
interoperate with legacy software only code.
If in doubt, use 'software' or 'hardware' mode instead.
endchoice endchoice
config TARGET_CFLAGS config TARGET_CFLAGS
@ -300,6 +320,7 @@ config ARCH_FLOAT
string string
default "hard" if ARCH_FLOAT_HW default "hard" if ARCH_FLOAT_HW
default "soft" if ARCH_FLOAT_SW default "soft" if ARCH_FLOAT_SW
default "softfp" if ARCH_FLOAT_SOFTFP
source "config.gen/arch.in.2" source "config.gen/arch.in.2"

View File

@ -135,6 +135,7 @@ do_libc_backend() {
case "${CT_ARCH_FLOAT}" in case "${CT_ARCH_FLOAT}" in
hard) extra_config+=("--with-fp");; hard) extra_config+=("--with-fp");;
soft) extra_config+=("--without-fp");; soft) extra_config+=("--without-fp");;
softfp) extra_config+=("--with-fp");;
esac esac
if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then

View File

@ -993,6 +993,10 @@ CT_DoBuildTargetTuple() {
CT_ARCH_FLOAT_CFLAG="-msoft-float" CT_ARCH_FLOAT_CFLAG="-msoft-float"
CT_ARCH_WITH_FLOAT="--with-float=soft" CT_ARCH_WITH_FLOAT="--with-float=soft"
;; ;;
softfp)
CT_ARCH_FLOAT_CFLAG="-mfloat-abi=softfp"
CT_ARCH_WITH_FLOAT="--with-float=softfp"
;;
esac esac
# Build the default kernel tuple part # Build the default kernel tuple part