diff options
author | Pavel Chupin <pavel.v.chupin@intel.com> | 2014-01-30 22:13:55 +0400 |
---|---|---|
committer | Pavel Chupin <pavel.v.chupin@intel.com> | 2014-02-05 18:49:08 +0400 |
commit | 5854943608ddcce075eab056ee15318a8abce5f1 (patch) | |
tree | 7c8230ed46284c52ac5e72296d87c8ae437f5f20 /gcc-4.8/gcc/config | |
parent | 5be615df32ce970fcccda93cf577e9ce35b1d397 (diff) | |
download | toolchain_gcc-5854943608ddcce075eab056ee15318a8abce5f1.tar.gz toolchain_gcc-5854943608ddcce075eab056ee15318a8abce5f1.tar.bz2 toolchain_gcc-5854943608ddcce075eab056ee15318a8abce5f1.zip |
[4.8] Add -mlong-double-128 and make it default for 64-bit Bionic
Backport of r207428:
2014-02-03 H.J. Lu <hongjiu.lu@intel.com>
gcc/
* config/i386/i386.c (flag_opts): Add -mlong-double-128.
(ix86_option_override_internal): Default long double to 64-bit for
32-bit Bionic and to 128-bit for 64-bit Bionic.
* config/i386/i386.h (LONG_DOUBLE_TYPE_SIZE): Use 128 if
TARGET_LONG_DOUBLE_128 is true.
(LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Likewise.
* config/i386/i386.opt (mlong-double-80): Negate -mlong-double-64.
(mlong-double-64): Negate -mlong-double-128.
(mlong-double-128): New option.
* config/i386/i386-c.c (ix86_target_macros): Define
__LONG_DOUBLE_128__ for TARGET_LONG_DOUBLE_128.
* doc/invoke.texi: Document -mlong-double-128.
gcc/testsuite/
* gcc.target/i386/long-double-64-1.c: Verify __multf3 isn't used.
* gcc.target/i386/long-double-64-4.c: Likewise.
* gcc.target/i386/long-double-80-1.c: Likewise.
* gcc.target/i386/long-double-80-2.c: Likewise.
* gcc.target/i386/long-double-80-3.c: Likewise.
* gcc.target/i386/long-double-80-4.c: Likewise.
* gcc.target/i386/long-double-80-5.c: Likewise.
* gcc.target/i386/long-double-64-2.c: Limit to ia32. Verify
__multf3 isn't used.
* gcc.target/i386/long-double-64-3.c: Likewise.
* gcc.target/i386/long-double-128-1.c: New test.
* gcc.target/i386/long-double-128-2.c: Likewise.
* gcc.target/i386/long-double-128-3.c: Likewise.
* gcc.target/i386/long-double-128-4.c: Likewise.
* gcc.target/i386/long-double-128-5.c: Likewise.
* gcc.target/i386/long-double-128-6.c: Likewise.
* gcc.target/i386/long-double-128-7.c: Likewise.
* gcc.target/i386/long-double-128-8.c: Likewise.
* gcc.target/i386/long-double-128-9.c: Likewise.
* gcc.target/i386/long-double-64-5.c: Likewise.
* gcc.target/i386/long-double-64-6.c: Likewise.
* gcc.target/i386/long-double-64-7.c: Likewise.
* gcc.target/i386/long-double-64-8.c: Likewise.
* gcc.target/i386/long-double-64-9.c: Likewise.
* gcc.target/i386/long-double-80-10.c: Likewise.
* gcc.target/i386/long-double-80-8.c: Likewise.
* gcc.target/i386/long-double-80-9.c: Likewise.
Change-Id: I2e1ce44792dd78df521fa485f2c0d2303dbb83bd
Signed-off-by: Pavel Chupin <pavel.v.chupin@intel.com>
Diffstat (limited to 'gcc-4.8/gcc/config')
-rw-r--r-- | gcc-4.8/gcc/config/i386/i386-c.c | 3 | ||||
-rw-r--r-- | gcc-4.8/gcc/config/i386/i386.c | 16 | ||||
-rw-r--r-- | gcc-4.8/gcc/config/i386/i386.h | 5 | ||||
-rw-r--r-- | gcc-4.8/gcc/config/i386/i386.opt | 8 |
4 files changed, 26 insertions, 6 deletions
diff --git a/gcc-4.8/gcc/config/i386/i386-c.c b/gcc-4.8/gcc/config/i386/i386-c.c index ef1e1eb3c..932e3d2eb 100644 --- a/gcc-4.8/gcc/config/i386/i386-c.c +++ b/gcc-4.8/gcc/config/i386/i386-c.c @@ -458,6 +458,9 @@ ix86_target_macros (void) if (TARGET_LONG_DOUBLE_64) cpp_define (parse_in, "__LONG_DOUBLE_64__"); + if (TARGET_LONG_DOUBLE_128) + cpp_define (parse_in, "__LONG_DOUBLE_128__"); + cpp_define_formatted (parse_in, "__ATOMIC_HLE_ACQUIRE=%d", IX86_HLE_ACQUIRE); cpp_define_formatted (parse_in, "__ATOMIC_HLE_RELEASE=%d", IX86_HLE_RELEASE); diff --git a/gcc-4.8/gcc/config/i386/i386.c b/gcc-4.8/gcc/config/i386/i386.c index ddc76a558..fed91164d 100644 --- a/gcc-4.8/gcc/config/i386/i386.c +++ b/gcc-4.8/gcc/config/i386/i386.c @@ -2674,6 +2674,7 @@ ix86_target_string (HOST_WIDE_INT isa, int flags, const char *arch, static struct ix86_target_opts flag_opts[] = { { "-m128bit-long-double", MASK_128BIT_LONG_DOUBLE }, + { "-mlong-double-128", MASK_LONG_DOUBLE_128 }, { "-mlong-double-64", MASK_LONG_DOUBLE_64 }, { "-m80387", MASK_80387 }, { "-maccumulate-outgoing-args", MASK_ACCUMULATE_OUTGOING_ARGS }, @@ -4006,10 +4007,19 @@ ix86_option_override_internal (bool main_args_p) else if (target_flags_explicit & MASK_RECIP) recip_mask &= ~(RECIP_MASK_ALL & ~recip_mask_explicit); - /* Default long double to 64-bit for Bionic. */ + /* Default long double to 64-bit for 32-bit Bionic and to __float128 + for 64-bit Bionic. */ if (TARGET_HAS_BIONIC - && !(target_flags_explicit & MASK_LONG_DOUBLE_64)) - target_flags |= MASK_LONG_DOUBLE_64; + && !(target_flags_explicit + & (MASK_LONG_DOUBLE_64 | MASK_LONG_DOUBLE_128))) + target_flags |= (TARGET_64BIT + ? MASK_LONG_DOUBLE_128 + : MASK_LONG_DOUBLE_64); + + if ((target_flags & MASK_LONG_DOUBLE_128)) + target_flags &= ~MASK_LONG_DOUBLE_64; + else if ((target_flags & MASK_LONG_DOUBLE_64)) + target_flags &= ~MASK_LONG_DOUBLE_128; /* Save the initial options in case the user does function specific options. */ diff --git a/gcc-4.8/gcc/config/i386/i386.h b/gcc-4.8/gcc/config/i386/i386.h index 2a8e34c09..ead60937c 100644 --- a/gcc-4.8/gcc/config/i386/i386.h +++ b/gcc-4.8/gcc/config/i386/i386.h @@ -691,12 +691,15 @@ enum target_cpu_default #define LONG_LONG_TYPE_SIZE 64 #define FLOAT_TYPE_SIZE 32 #define DOUBLE_TYPE_SIZE 64 -#define LONG_DOUBLE_TYPE_SIZE (TARGET_LONG_DOUBLE_64 ? 64 : 80) +#define LONG_DOUBLE_TYPE_SIZE \ + (TARGET_LONG_DOUBLE_64 ? 64 : (TARGET_LONG_DOUBLE_128 ? 128 : 80)) /* Define this to set long double type size to use in libgcc2.c, which can not depend on target_flags. */ #ifdef __LONG_DOUBLE_64__ #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64 +#elif defined (__LONG_DOUBLE_128__) +#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128 #else #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 80 #endif diff --git a/gcc-4.8/gcc/config/i386/i386.opt b/gcc-4.8/gcc/config/i386/i386.opt index f5ad69e26..b13ca84ab 100644 --- a/gcc-4.8/gcc/config/i386/i386.opt +++ b/gcc-4.8/gcc/config/i386/i386.opt @@ -86,13 +86,17 @@ Target RejectNegative Report InverseMask(128BIT_LONG_DOUBLE) Save sizeof(long double) is 12 mlong-double-80 -Target Report RejectNegative InverseMask(LONG_DOUBLE_64) Save +Target Report RejectNegative Negative(mlong-double-64) InverseMask(LONG_DOUBLE_64) Save Use 80-bit long double mlong-double-64 -Target Report RejectNegative Mask(LONG_DOUBLE_64) Save +Target Report RejectNegative Negative(mlong-double-128) Mask(LONG_DOUBLE_64) InverseMask(LONG_DOUBLE_128) Save Use 64-bit long double +mlong-double-128 +Target Report RejectNegative Negative(mlong-double-80) Mask(LONG_DOUBLE_128) InverseMask(LONG_DOUBLE_64) Save +Use 128-bit long double + maccumulate-outgoing-args Target Report Mask(ACCUMULATE_OUTGOING_ARGS) Save Reserve space for outgoing arguments in the function prologue |