aboutsummaryrefslogtreecommitdiff
path: root/gcc/real.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/real.c')
-rw-r--r--gcc/real.c47
1 files changed, 45 insertions, 2 deletions
diff --git a/gcc/real.c b/gcc/real.c
index 019821d..077e313 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -1818,8 +1818,8 @@ eisnan (x)
return (0);
}
-/* Fill e-type number X with infinity pattern (IEEE)
- or largest possible number (non-IEEE). */
+/* Fill e-type number X with infinity pattern (IEEE)
+ or largest possible number (non-IEEE). */
static void
einfin (x)
@@ -1860,6 +1860,49 @@ einfin (x)
#endif
}
+/* Similar, except return it as a REAL_VALUE_TYPE. */
+
+REAL_VALUE_TYPE
+ereal_inf (mode)
+ enum machine_mode mode;
+{
+ REAL_VALUE_TYPE r;
+ UEMUSHORT e[NE];
+ int prec, rndsav;
+
+ switch (mode)
+ {
+ case QFmode:
+ case SFmode:
+ prec = 24;
+ break;
+ case HFmode:
+ case DFmode:
+ prec = 53;
+ break;
+ case TFmode:
+ if (!INTEL_EXTENDED_IEEE_FORMAT)
+ {
+ prec = 113;
+ break;
+ }
+ /* FALLTHRU */
+ case XFmode:
+ prec = 64;
+ break;
+ default:
+ abort ();
+ }
+
+ rndsav = rndprc;
+ rndprc = prec;
+ einfin (e);
+ rndprc = rndsav;
+
+ PUT_REAL (e, &r);
+ return r;
+}
+
/* Output an e-type NaN.
This generates Intel's quiet NaN pattern for extended real.
The exponent is 7fff, the leading mantissa word is c000. */