patches/gcc/4.3.2/340-make-mno-spe-work-as-expected.patch
author Michael Hope <michael.hope@linaro.org>
Wed Oct 19 15:27:32 2011 +1300 (2011-10-19)
changeset 2739 f320e22f2cba
parent 792 da7a34dfa178
permissions -rw-r--r--
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>
     1 2008-04-03  Nathan Froyd  <froydnj@codesourcery.com>
     2             Nathan Sidwell  <nathan@codesourcery.com>
     3 
     4         * config/rs6000/rs6000.opt (mspe): Remove Var property.
     5         (misel): Likewise.
     6         * config/rs6000/rs6000.h (rs6000_spe): Declare.
     7         (rs6000_isel): Likewise.
     8         * config/rs6000/rs6000.c (rs6000_spe): New variable.
     9         (rs6000_isel): New variable.
    10         (rs6000_handle_option): Handle OPT_mspe and OPT_misel.                                                                                         
    11 
    12 diff -durN gcc-4.3.2.orig/gcc/config/rs6000/rs6000.c gcc-4.3.2/gcc/config/rs6000/rs6000.c
    13 --- gcc-4.3.2.orig/gcc/config/rs6000/rs6000.c	2008-06-10 19:13:57.000000000 +0200
    14 +++ gcc-4.3.2/gcc/config/rs6000/rs6000.c	2008-09-23 19:46:45.000000000 +0200
    15 @@ -174,9 +174,15 @@
    16  /* Nonzero to use AltiVec ABI.  */
    17  int rs6000_altivec_abi;
    18  
    19 +/* Nonzero if we want SPE SIMD instructions.  */
    20 +int rs6000_spe;
    21 +
    22  /* Nonzero if we want SPE ABI extensions.  */
    23  int rs6000_spe_abi;
    24  
    25 +/* Nonzero to use isel instructions.  */
    26 +int rs6000_isel;
    27 +
    28  /* Nonzero if floating point operations are done in the GPRs.  */
    29  int rs6000_float_gprs = 0;
    30  
    31 @@ -2144,11 +2150,21 @@
    32        rs6000_parse_yes_no_option ("vrsave", arg, &(TARGET_ALTIVEC_VRSAVE));
    33        break;
    34  
    35 +    case OPT_misel:
    36 +      rs6000_explicit_options.isel = true;
    37 +      rs6000_isel = value;
    38 +      break;
    39 +
    40      case OPT_misel_:
    41        rs6000_explicit_options.isel = true;
    42        rs6000_parse_yes_no_option ("isel", arg, &(rs6000_isel));
    43        break;
    44  
    45 +    case OPT_mspe:
    46 +      rs6000_explicit_options.spe = true;
    47 +      rs6000_spe = value;
    48 +      break;
    49 +
    50      case OPT_mspe_:
    51        rs6000_explicit_options.spe = true;
    52        rs6000_parse_yes_no_option ("spe", arg, &(rs6000_spe));
    53 diff -durN gcc-4.3.2.orig/gcc/config/rs6000/rs6000.opt gcc-4.3.2/gcc/config/rs6000/rs6000.opt
    54 --- gcc-4.3.2.orig/gcc/config/rs6000/rs6000.opt	2007-10-31 08:56:01.000000000 +0100
    55 +++ gcc-4.3.2/gcc/config/rs6000/rs6000.opt	2008-09-23 19:46:45.000000000 +0200
    56 @@ -190,7 +190,7 @@
    57  -mvrsave=yes/no	Deprecated option.  Use -mvrsave/-mno-vrsave instead
    58  
    59  misel
    60 -Target Var(rs6000_isel)
    61 +Target
    62  Generate isel instructions
    63  
    64  misel=
    65 @@ -198,7 +198,7 @@
    66  -misel=yes/no	Deprecated option.  Use -misel/-mno-isel instead
    67  
    68  mspe
    69 -Target Var(rs6000_spe)
    70 +Target
    71  Generate SPE SIMD instructions on E500
    72  
    73  mpaired
    74 diff -durN gcc-4.3.2.orig/gcc/config/rs6000/rs6000.h gcc-4.3.2/gcc/config/rs6000/rs6000.h
    75 --- gcc-4.3.2.orig/gcc/config/rs6000/rs6000.h	2008-01-26 18:18:35.000000000 +0100
    76 +++ gcc-4.3.2/gcc/config/rs6000/rs6000.h	2008-09-23 19:46:45.000000000 +0200
    77 @@ -349,6 +349,8 @@
    78  extern int rs6000_ieeequad;
    79  extern int rs6000_altivec_abi;
    80  extern int rs6000_spe_abi;
    81 +extern int rs6000_spe;
    82 +extern int rs6000_isel;
    83  extern int rs6000_float_gprs;
    84  extern int rs6000_alignment_flags;
    85  extern const char *rs6000_sched_insert_nops_str;