diff --git a/gcc/testsuite/gcc.target/i386/20030217-1.c b/gcc/testsuite/gcc.target/i386/20030217-1.c
index f19fd27..d2b2480 100644
--- a/gcc/testsuite/gcc.target/i386/20030217-1.c
+++ b/gcc/testsuite/gcc.target/i386/20030217-1.c
@@ -2,6 +2,7 @@
    are parsed correctly.  */
 /* { dg-do run } */
 /* { dg-options "-std=c99" } */
+/* { dg-require-effective-target large_long_double } */
 
 long double d = 0x0.0000003ffffffff00000p-16357L;
 long double e = 0x0.0000003ffffffff00000p-16356L;
diff --git a/gcc/testsuite/gcc.target/i386/20030217-2.c b/gcc/testsuite/gcc.target/i386/20030217-2.c
new file mode 100644
index 0000000..d0606a2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/20030217-2.c
@@ -0,0 +1,23 @@
+/* Test whether denormal floating point constants in hexadecimal notation
+   are parsed correctly.  */
+/* { dg-do run } */
+/* { dg-options "-std=c99" } */
+
+long double d;
+long double e;
+
+long double f = 2.2250738585072014E-308L;
+
+extern void abort (void);
+extern void exit (int);
+
+int
+main (void)
+{
+   d = 0x0.0000003ffffffff00000p-1048L;
+   e = 0x0.0000003ffffffff00000p-1047L;
+  if (d != e / 2.0)
+    abort ();
+
+  exit (0);
+}
diff --git a/gcc/testsuite/gcc.target/i386/387-3.c b/gcc/testsuite/gcc.target/i386/387-3.c
index d00c729..1b8dc8b 100644
--- a/gcc/testsuite/gcc.target/i386/387-3.c
+++ b/gcc/testsuite/gcc.target/i386/387-3.c
@@ -2,6 +2,7 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mfpmath=387 -mfancy-math-387" } */
 /* { dg-final { scan-assembler "fldpi" } } */
+/* { dg-require-effective-target large_long_double } */
 
 long double add_pi(long double x)
 {
diff --git a/gcc/testsuite/gcc.target/i386/387-4.c b/gcc/testsuite/gcc.target/i386/387-4.c
index e4f4a48..27c48ed 100644
--- a/gcc/testsuite/gcc.target/i386/387-4.c
+++ b/gcc/testsuite/gcc.target/i386/387-4.c
@@ -1,6 +1,7 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -mfancy-math-387" } */
 /* { dg-final { scan-assembler "fldpi" } } */
+/* { dg-require-effective-target large_long_double } */
 
 long double atanl (long double);
 
diff --git a/gcc/testsuite/gcc.target/i386/excess-precision-1.c b/gcc/testsuite/gcc.target/i386/excess-precision-1.c
index bd825d6..1bd3b88 100644
--- a/gcc/testsuite/gcc.target/i386/excess-precision-1.c
+++ b/gcc/testsuite/gcc.target/i386/excess-precision-1.c
@@ -38,12 +38,22 @@ test_add (void)
     abort ();
   if (f1 + f2 < fadd1)
     abort ();
-  if (d1 + d2 + d3 == dadd2)
-    abort ();
-  if (!(d1 + d2 + d3 > dadd2))
-    abort ();
-  if (!(d1 + d2 + d3 >= dadd2))
-    abort ();
+  if (sizeof(long double) > sizeof(double)) {
+    if ( d1 + d2 + d3 == dadd2)
+      abort ();
+    if (!(d1 + d2 + d3 > dadd2))
+      abort ();
+    if (!(d1 + d2 + d3 >= dadd2))
+      abort ();
+  }
+  else {
+    if ( d1 + d2 + d3 != dadd2 )
+      abort();
+    if ( d1 + d2 + d3 < dadd2 )
+      abort();
+    if ( d1 + d2 + d3 > dadd2 )
+      abort();
+  }
 }
 
 volatile long double ldsub1 = 1.0l - 0x1.0p-30l;
@@ -90,10 +100,18 @@ test_mul (void)
     abort ();
   if ((0, dbl_min * dbl_min * dbl_min) != dbl_min3)
     abort ();
-  if (dbl_min * dbl_min * dbl_min == 0)
-    abort ();
-  if ((flt_min * flt_min ? dbl_min * dbl_min * dbl_min : 0) == 0)
-    abort ();
+  if (sizeof(long double) > sizeof(double) ) {
+    if (dbl_min * dbl_min * dbl_min == 0)
+      abort ();
+    if ((flt_min * flt_min ? dbl_min * dbl_min * dbl_min : 0) == 0)
+      abort ();
+  }
+  else {
+    if (dbl_min * dbl_min * dbl_min != 0)
+      abort ();
+    if ((flt_min * flt_min ? dbl_min * dbl_min * dbl_min : 1) != 0)
+      abort ();
+  }
   if ((flt_min * flt_min ? : 0) == 0)
     abort ();
 }
diff --git a/gcc/testsuite/gcc.target/i386/excess-precision-3.c b/gcc/testsuite/gcc.target/i386/excess-precision-3.c
index 3de61b4..1fd038a 100644
--- a/gcc/testsuite/gcc.target/i386/excess-precision-3.c
+++ b/gcc/testsuite/gcc.target/i386/excess-precision-3.c
@@ -15,6 +15,7 @@ volatile float f3 = 0x1.0p-60f;
 volatile double d1 = 1.0;
 volatile double d2 = 0x1.0p-30;
 volatile double d3 = 0x1.0p-60;
+volatile double d3d = 0x1.0p-52;
 volatile float fadd1 = 1.0f + 0x1.0p-30f;
 volatile double dadd2 = 1.0 + 0x1.0p-30 + 0x1.0p-60;
 volatile double dh = 0x1.0p-24;
@@ -35,9 +36,15 @@ test_assign (void)
   if (d != dadd2)
     abort ();
   /* Verify rounding direct to float without double rounding.  */
-  f = d1 + dh + d3;
-  if (f != fha)
-    abort ();
+  if (sizeof(long double) > sizeof(double)  )  {
+    f = d1 + dh + d3;
+    if (f != fha)
+      abort ();
+  } else {
+      f = d1 + dh + d3d;
+      if (f != fha)
+        abort ();
+  }
 }
 
 void
@@ -193,16 +200,28 @@ test_builtin (void)
     abort ();
   if (!__builtin_islessgreater (flt_min * flt_min, 0.0f))
     abort ();
-  if (!__builtin_isgreater (dbl_min * dbl_min, 0.0))
-    abort ();
   if (!__builtin_isgreaterequal (dbl_min * dbl_min, 0.0))
     abort ();
-  if (!__builtin_isless (0.0, dbl_min * dbl_min))
-    abort ();
-  if (__builtin_islessequal (dbl_min * dbl_min, 0.0))
-    abort ();
-  if (!__builtin_islessgreater (dbl_min * dbl_min, 0.0))
-    abort ();
+  if (sizeof(long double) > sizeof(double)  ) {
+    if (!__builtin_isgreater (dbl_min * dbl_min, 0.0))
+      abort ();
+    if (!__builtin_isless (0.0, dbl_min * dbl_min))
+      abort ();
+    if (__builtin_islessequal (dbl_min * dbl_min, 0.0))
+      abort ();
+    if (!__builtin_islessgreater (dbl_min * dbl_min, 0.0))
+      abort ();
+  }
+  else {
+    if (__builtin_isgreater (dbl_min * dbl_min, 0.0))
+      abort ();
+    if (__builtin_isless (0.0, dbl_min * dbl_min))
+      abort ();
+    if (!__builtin_islessequal (dbl_min * dbl_min, 0.0))
+      abort ();
+    if (__builtin_islessgreater (dbl_min * dbl_min, 0.0))
+      abort ();
+  }
 }
 
 int
diff --git a/gcc/testsuite/gcc.target/i386/pr36578-1.c b/gcc/testsuite/gcc.target/i386/pr36578-1.c
index 4999935..5ede23a 100644
--- a/gcc/testsuite/gcc.target/i386/pr36578-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr36578-1.c
@@ -2,6 +2,7 @@
 /* { dg-do run } */
 /* { dg-options "-msse2 -mfpmath=sse" } */
 /* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target large_long_double } */
 
 #include "sse2-check.h"
 
diff --git a/gcc/testsuite/gcc.target/i386/pr36578-2.c b/gcc/testsuite/gcc.target/i386/pr36578-2.c
index 5d6556f..bfde2cb 100644
--- a/gcc/testsuite/gcc.target/i386/pr36578-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr36578-2.c
@@ -11,13 +11,18 @@ extern int printf(const char *, ...);
 
 volatile double d1 = 0x1.000001p0;
 volatile double d2 = 0x1p-54;
+volatile double d2d = 0x1p-52;
 volatile float f = 0x1.000002p0f;
 volatile float f2;
 
 static void
 sse2_test (void)
 {
-  f2 = (float)((long double)d1 + (long double)d2);
+  if (sizeof(long double) > sizeof(double)  ) {
+	f2 = (float)((long double)d1 + (long double)d2);
+  } else {
+	f2 = (float)((long double)d1 + (long double)d2d);
+  }
   if (f != f2)
     abort ();
   exit (0);
