public inbox for crossgcc@sourceware.org
 help / color / mirror / Atom feed
From: Michael Hope <michael.hope@linaro.org>
To: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Cc: crossgcc@sourceware.org
Subject: Re: [PATCH] scripts: add softfp support
Date: Fri, 21 Oct 2011 02:17:00 -0000	[thread overview]
Message-ID: <4EA0D614.80709@linaro.org> (raw)
In-Reply-To: <201110192302.12549.yann.morin.1998@anciens.enib.fr>

On 20/10/11 10:02, Yann E. MORIN wrote:
> Michael, All,
>
> On Wednesday 19 October 2011 04:29:20 Michael Hope wrote:
>> # HG changeset patch
>> # User Michael Hope<michael.hope@linaro.org>
>> # Date 1318991252 -46800
>> # Node ID a31d097e28cd73d07a5484129929a500b4d58efa
>> # Parent  a32156bd31c0d395e8d346431b123a7d2caa14cd
>> scripts: add softfp support
>>
>> ARM compilers can be built for soft float (software only, floats in
>> core registers), hard float (uses floating point instructions, floats
>> in FPU registers), or the half-way house softfp (uses floating point
>> instructions, floats in core registers).
>
> Feature definitely a nice addition, but too close to the release to
> add it now (which reminds me I should document the release plan on
> the website...). FYI, it's a release every three months, with about
> a 15-day slack before, used to stabilise the stuff. Next release is
> due by October the 31st, so we just entered the 15-day delay...
>
> I was thinking about cutting the release branch ahead of time, but
> handling both the relase and the devel at the same time is a bit
> complicated in my head, and does colide a bit on the schedule...
> I'd like to try, but this release is special: it also colides with
> the Prague events. Probably I'll do it for the next release (Feb`12)...
>
>> Add support for softfp cross compilers to the GCC and GLIBC
>> configuration.  Needed for Ubuntu and other distros that are softfp.
>
> What about uClibc? How will it cope with softfp?
>
>> Signed-off-by: Michael Hope<michael.hope@linaro.org>
>>
>> diff -r a32156bd31c0 -r a31d097e28cd config/target.in
>> --- a/config/target.in	Sun Oct 16 17:51:42 2011 +0200
>> +++ b/config/target.in	Wed Oct 19 15:27:32 2011 +1300
>> @@ -271,6 +271,22 @@
>>         If your processor has no FPU, then you most probably want this, as it
>>         is faster than emulating the FPU in the kernel.
>>
>> +config ARCH_FLOAT_SOFTFP
>
> I'm a bit reluctant at adding an architecture-specific option to this
> generic file. Currently, all arch options are in the related arch file.
>
> However, I agreee that there is no easy way to nicely handle that with
> the current infrastructure... :-/
>
> *But* I recall a similar approach a few months back... It seemed that ARM
> is not the only architecture that support softfp. Seems PPC also uses it.
> So:
>
>> +    bool
>> +    prompt "softfp"
>> +    depends on ARCH_arm
>
>   - this arch-specific "depends on" should go away
>   - and either we keep the option un-protected, or we hide it behind
>     ARCH_SUPPORT_SOFTFP (or the like) which is set by archs that
>     support it.
>
>> +    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
>>
>>   config TARGET_CFLAGS
>> diff -r a32156bd31c0 -r a31d097e28cd scripts/build/libc/glibc-eglibc.sh-common
>> --- a/scripts/build/libc/glibc-eglibc.sh-common	Sun Oct 16 17:51:42 2011 +0200
>> +++ b/scripts/build/libc/glibc-eglibc.sh-common	Wed Oct 19 15:27:32 2011 +1300
>> @@ -132,9 +132,10 @@
>>           *) extra_config+=("--disable-shared");;
>>       esac
>>
>> -    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
>> -        y,) extra_config+=("--with-fp");;
>> -        ,y) extra_config+=("--without-fp");;
>> +    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW},${CT_ARCH_FLOAT_SOFTFP}" in
>> +        y,,) extra_config+=("--with-fp");;
>> +        ,y,) extra_config+=("--without-fp");;
>> +        ,,y) extra_config+=("--with-fp");;
>>       esac
>
> Argh!... This is starting to be unreadable... :-/
>
> config ARCH_FLOAT
>      string
>      default "hard"   if ARCH_FLOAT_HW
>      default "soft"   if ARCH_FLOAT_SW
>      default "softfp" if ARCH_FLOAT_SOFTFP
>
> Then:
>      case "${CT_ARCH_FLOAT}" in
>          hard)   ...;;
>          soft)   ...;;
>          softfp) ...;;
>      esac
>
> I'll do it.
>
>>       if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then
>> diff -r a32156bd31c0 -r a31d097e28cd scripts/functions
>> --- a/scripts/functions	Sun Oct 16 17:51:42 2011 +0200
>> +++ b/scripts/functions	Wed Oct 19 15:27:32 2011 +1300
>> @@ -984,6 +984,7 @@
>>       [ "${CT_ARCH_TUNE}"     ]&&  { CT_ARCH_TUNE_CFLAG="-mtune=${CT_ARCH_TUNE}";  CT_ARCH_WITH_TUNE="--with-tune=${CT_ARCH_TUNE}"; }
>>       [ "${CT_ARCH_FPU}"      ]&&  { CT_ARCH_FPU_CFLAG="-mfpu=${CT_ARCH_FPU}";     CT_ARCH_WITH_FPU="--with-fpu=${CT_ARCH_FPU}";    }
>>       [ "${CT_ARCH_FLOAT_SW}" ]&&  { CT_ARCH_FLOAT_CFLAG="-msoft-float";           CT_ARCH_WITH_FLOAT="--with-float=soft";          }
>> +    [ "${CT_ARCH_FLOAT_SOFTFP}" ]&&  { CT_ARCH_FLOAT_CFLAG="-mfloat-abi=softfp"; CT_ARCH_WITH_FLOAT="--with-float=softfp";        }
>
> And the last time this came up, it was pointed that CT_ARCH_FLOAT_HW did
> force neither -hard-float not --with-float=hard
>
> I'll look at it...
>
>>       # Build the default kernel tuple part
>>       CT_TARGET_KERNEL="${CT_KERNEL}"
>
> Can we sit on this for now, and revisit after the release?

I'll keep it locally.  I'll stop sending new features until after the release.

Here's an updated version.  Still no uClibc support though...


diff --git a/config/arch/arm.in b/config/arch/arm.in
index 4b96335..12016fd 100644
--- a/config/arch/arm.in
+++ b/config/arch/arm.in
@@ -10,6 +10,7 @@
  ## select ARCH_SUPPORT_CPU
  ## select ARCH_SUPPORT_TUNE
  ## select ARCH_SUPPORT_FPU
+## select ARCH_SUPPORT_SOFTFP
  ##
  ## help The ARM architecture, as defined by:
  ## help     http://www.arm.com/
diff --git a/config/target.in b/config/target.in
index 8282a9d..6514e3e 100644
--- a/config/target.in
+++ b/config/target.in
@@ -15,6 +15,7 @@
  config ARCH_SUPPORT_CPU
  config ARCH_SUPPORT_TUNE
  config ARCH_SUPPORT_FPU
+config ARCH_SUPPORT_SOFTFP

  config ARCH_DEFAULT_HAS_MMU
  config ARCH_DEFAULT_BE
@@ -144,6 +145,9 @@
  config ARCH_SUPPORT_FPU
      bool

+config ARCH_SUPPORT_SOFTFP
+    bool
+
  config ARCH_ARCH
      string
      prompt "Architecture level"
@@ -271,6 +275,22 @@
        If your processor has no FPU, then you most probably want this, as it
        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

  config TARGET_CFLAGS
@@ -296,6 +316,12 @@

        Leave blank if you don't know better.

+config ARCH_FLOAT
+    string
+    default "hard"   if ARCH_FLOAT_HW
+    default "soft"   if ARCH_FLOAT_SW
+    default "softfp" if ARCH_FLOAT_SOFTFP
+
  source "config.gen/arch.in.2"

  endmenu
diff --git a/scripts/functions b/scripts/functions
index a8696fe..2f81073 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -983,7 +983,12 @@
      [ "${CT_ARCH_CPU}"      ] && { CT_ARCH_CPU_CFLAG="-mcpu=${CT_ARCH_CPU}";     CT_ARCH_WITH_CPU="--with-cpu=${CT_ARCH_CPU}";    }
      [ "${CT_ARCH_TUNE}"     ] && { CT_ARCH_TUNE_CFLAG="-mtune=${CT_ARCH_TUNE}";  CT_ARCH_WITH_TUNE="--with-tune=${CT_ARCH_TUNE}"; }
      [ "${CT_ARCH_FPU}"      ] && { CT_ARCH_FPU_CFLAG="-mfpu=${CT_ARCH_FPU}";     CT_ARCH_WITH_FPU="--with-fpu=${CT_ARCH_FPU}";    }
-    [ "${CT_ARCH_FLOAT_SW}" ] && { CT_ARCH_FLOAT_CFLAG="-msoft-float";           CT_ARCH_WITH_FLOAT="--with-float=soft";          }
+
+    case "${CT_ARCH_FLOAT}" in
+        hard)   CT_ARCH_FLOAT_CFLAG="-mhard-float";       CT_ARCH_WITH_FLOAT="--with-float=hard";;
+        soft)   CT_ARCH_FLOAT_CFLAG="-msoft-float";       CT_ARCH_WITH_FLOAT="--with-float=soft";;
+        softfp) CT_ARCH_FLOAT_CFLAG="-mfloat-abi=softfp"; CT_ARCH_WITH_FLOAT="--with-float=softfp";;
+    esac

      # Build the default kernel tuple part
      CT_TARGET_KERNEL="${CT_KERNEL}"
diff --git a/scripts/build/libc/glibc-eglibc.sh-common b/scripts/build/libc/glibc-eglibc.sh-common
index 66b26f6..ea0e9b3 100644
--- a/scripts/build/libc/glibc-eglibc.sh-common
+++ b/scripts/build/libc/glibc-eglibc.sh-common
@@ -132,9 +132,10 @@
          *) extra_config+=("--disable-shared");;
      esac

-    case "${CT_ARCH_FLOAT_HW},${CT_ARCH_FLOAT_SW}" in
-        y,) extra_config+=("--with-fp");;
-        ,y) extra_config+=("--without-fp");;
+    case "${CT_ARCH_FLOAT}" in
+        hard)   extra_config+=("--with-fp");;
+        soft)   extra_config+=("--without-fp");;
+        softfp) extra_config+=("--with-fp");;
      esac

      if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then



--
For unsubscribe information see http://sourceware.org/lists.html#faq

  parent reply	other threads:[~2011-10-21  2:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-19  2:29 Michael Hope
2011-10-19 21:02 ` Yann E. MORIN
2011-10-20  0:30   ` Michael Hope
2011-10-21  2:17   ` Michael Hope [this message]
2011-11-01 23:42     ` [PATCH 0 of 4] Adding " Yann E. MORIN
2011-11-01 23:42       ` [PATCH 1 of 4] scripts: introduce float type as a string Yann E. MORIN
2011-11-25 12:20         ` Morten Thunberg Svendsen
2011-11-25 17:13           ` Yann E. MORIN
2011-11-25 23:23             ` [PATCH 0 of 6] Fix --with-float= for architectures that do not support it Yann E. MORIN
2011-11-25 23:23               ` [PATCH 2 of 6] arch/arm: ARM supports setting the floating point type Yann E. MORIN
2011-11-25 23:23               ` [PATCH 1 of 6] config/target: add float support selection Yann E. MORIN
2011-11-28 12:32                 ` Thomas Petazzoni
2011-11-28 17:46                   ` Yann E. MORIN
2011-11-25 23:23               ` [PATCH 3 of 6] arch/mips: MIPS supports setting the floating point type Yann E. MORIN
2011-11-25 23:30               ` [PATCH 6 of 6] config/target: enforce floating point support Yann E. MORIN
2011-11-25 23:30               ` [PATCH 5 of 6] arch/sparc: Sparc supports setting the floating point type Yann E. MORIN
2011-11-25 23:30               ` [PATCH 4 of 6] arch/powerpc: PowerPC " Yann E. MORIN
2011-11-01 23:43       ` [PATCH 3 of 4] arch: add softfp support Yann E. MORIN
2011-11-01 23:43       ` [PATCH 2 of 4] scripts: use the hardfloat option to set configure and CFLAGS Yann E. MORIN
2011-11-01 23:50       ` [PATCH 4 of 4] arch/arm: ARM supports the softfp convention Yann E. MORIN
2011-11-07 20:40       ` [PATCH 0 of 4] Adding softfp support Yann E. MORIN
2011-11-09  0:48       ` Michael Hope
2011-11-09 19:01         ` Yann E. MORIN

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EA0D614.80709@linaro.org \
    --to=michael.hope@linaro.org \
    --cc=crossgcc@sourceware.org \
    --cc=yann.morin.1998@anciens.enib.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).