aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8
diff options
context:
space:
mode:
authorPavel Chupin <pavel.v.chupin@intel.com>2014-01-30 22:13:55 +0400
committerPavel Chupin <pavel.v.chupin@intel.com>2014-02-05 18:49:08 +0400
commit5854943608ddcce075eab056ee15318a8abce5f1 (patch)
tree7c8230ed46284c52ac5e72296d87c8ae437f5f20 /gcc-4.8
parent5be615df32ce970fcccda93cf577e9ce35b1d397 (diff)
downloadtoolchain_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')
-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
-rw-r--r--gcc-4.8/gcc/doc/invoke.texi8
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-1.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-2.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-3.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-4.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-5.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-6.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-7.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-8.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-9.c13
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-1.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-2.c3
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-3.c3
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-4.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-5.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-6.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-7.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-8.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-9.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-1.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-10.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-2.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-3.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-4.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-5.c1
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-8.c11
-rw-r--r--gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-9.c11
31 files changed, 232 insertions, 10 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
diff --git a/gcc-4.8/gcc/doc/invoke.texi b/gcc-4.8/gcc/doc/invoke.texi
index 2cad6592c..f2ceaa626 100644
--- a/gcc-4.8/gcc/doc/invoke.texi
+++ b/gcc-4.8/gcc/doc/invoke.texi
@@ -648,7 +648,7 @@ Objective-C and Objective-C++ Dialects}.
-mno-align-stringops -minline-all-stringops @gol
-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
-mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol
--m96bit-long-double -mlong-double-64 -mlong-double-80 @gol
+-m96bit-long-double -mlong-double-64 -mlong-double-80 -mlong-double-128 @gol
-mregparm=@var{num} -msseregparm @gol
-mveclibabi=@var{type} -mvect8-ret-in-mem @gol
-mpc32 -mpc64 -mpc80 -mstackrealign @gol
@@ -14099,11 +14099,15 @@ with code compiled without that switch.
@item -mlong-double-64
@itemx -mlong-double-80
+@itemx -mlong-double-128
@opindex mlong-double-64
@opindex mlong-double-80
+@opindex mlong-double-128
These switches control the size of @code{long double} type. A size
of 64 bits makes the @code{long double} type equivalent to the @code{double}
-type. This is the default for Bionic C library.
+type. This is the default for 32-bit Bionic C library. A size
+of 128 bits makes the @code{long double} type equivalent to the
+@code{__float128} type. This is the default for 64-bit Bionic C library.
@strong{Warning:} if you override the default value for your target ABI, this
changes the size of
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-1.c
new file mode 100644
index 000000000..cbd9bb5ec
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-1.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-2.c
new file mode 100644
index 000000000..9aef4bf0c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-2.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -mbionic" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-3.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-3.c
new file mode 100644
index 000000000..86b9b12e2
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-3.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -mandroid" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-4.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-4.c
new file mode 100644
index 000000000..af7363581
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-4.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -mlong-double-128 -mbionic" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-5.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-5.c
new file mode 100644
index 000000000..fb32c5b7e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-5.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-options "-O2 -mlong-double-128 -mandroid" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-6.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-6.c
new file mode 100644
index 000000000..279751620
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-6.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-64 -mlong-double-128" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-7.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-7.c
new file mode 100644
index 000000000..eaa7f6302
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-7.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-64" } */
+
+__float128
+foo (__float128 x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-8.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-8.c
new file mode 100644
index 000000000..d869efc43
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-8.c
@@ -0,0 +1,11 @@
+/* { dg-do run } */
+/* { dg-options "-O0 -mlong-double-64 -mfpmath=387" } */
+
+int
+main ()
+{
+ __float128 a = -0.23456789;
+ if ((double) a >= 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-9.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-9.c
new file mode 100644
index 000000000..bc90f2177
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-128-9.c
@@ -0,0 +1,13 @@
+/* { dg-do run } */
+/* { dg-options "-O0 -mlong-double-64 -mfpmath=sse -msse2" } */
+/* { dg-require-effective-target sse2 } */
+
+#include "sse2-check.h"
+
+static void
+sse2_test (void)
+{
+ __float128 a = -0.23456789;
+ if ((double) a >= 0)
+ __builtin_abort ();
+}
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-1.c
index cf933796f..f5c83a585 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-1.c
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-2.c
index ddf4fe656..13a7be08b 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-2.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-2.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target *-*-linux* } } */
+/* { dg-do compile { target { *-*-linux* && ia32 } } } */
/* { dg-options "-O2 -mbionic" } */
long double
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-3.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-3.c
index e748fab2e..99d3d5ffc 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-3.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-3.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target *-*-linux* } } */
+/* { dg-do compile { target { *-*-linux* && ia32 } } } */
/* { dg-options "-O2 -mandroid" } */
long double
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-4.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-4.c
index d9c25aaec..471f0bf72 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-4.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-4.c
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-5.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-5.c
new file mode 100644
index 000000000..f634425eb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-5.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128 -mlong-double-64" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-6.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-6.c
new file mode 100644
index 000000000..76b030d0c
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-6.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-80 -mlong-double-128 -mlong-double-64" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-7.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-7.c
new file mode 100644
index 000000000..9f66d37e0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-7.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128 -mlong-double-80 -mlong-double-64" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-8.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-8.c
new file mode 100644
index 000000000..fd2fdbc10
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-8.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-O2 -mlong-double-64 -mbionic" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-9.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-9.c
new file mode 100644
index 000000000..595dba358
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-64-9.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-O2 -mlong-double-64 -mandroid" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler-not "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-1.c
index d3b75a0be..887bd6c9f 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-1.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-1.c
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-10.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-10.c
new file mode 100644
index 000000000..311ae4f40
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-10.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128 -mlong-double-64 -mlong-double-80" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-2.c
index 954dfd15d..7ca064394 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-2.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-2.c
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-3.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-3.c
index e0e8365e3..39dc8a450 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-3.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-3.c
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-4.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-4.c
index cac2d55bc..4ee21b662 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-4.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-4.c
@@ -8,3 +8,4 @@ foo (long double x)
}
/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-5.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-5.c
index 4aa606fd1..78a16037e 100644
--- a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-5.c
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-5.c
@@ -8,3 +8,4 @@ foo (__float80 x)
}
/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-8.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-8.c
new file mode 100644
index 000000000..b82305ffb
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-8.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-128 -mlong-double-80" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */
diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-9.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-9.c
new file mode 100644
index 000000000..91ff9d10e
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/long-double-80-9.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mlong-double-64 -mlong-double-128 -mlong-double-80" } */
+
+long double
+foo (long double x)
+{
+ return x * x;
+}
+
+/* { dg-final { scan-assembler "fldt" } } */
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?__multf3" } } */