aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/config/i386
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/gcc/config/i386')
-rw-r--r--gcc-4.8/gcc/config/i386/i386-c.c3
-rw-r--r--gcc-4.8/gcc/config/i386/i386.c16
-rw-r--r--gcc-4.8/gcc/config/i386/i386.h5
-rw-r--r--gcc-4.8/gcc/config/i386/i386.opt8
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 9eb9f5f08..8be38daaa 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