diff options
Diffstat (limited to 'gcc/real.c')
-rw-r--r-- | gcc/real.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/real.c b/gcc/real.c index 16cd02acb7f..4a4b04012ce 100644 --- a/gcc/real.c +++ b/gcc/real.c @@ -2280,6 +2280,33 @@ real_nan (r, str, quiet, mode) return true; } +/* Fills R with the largest finite value representable in mode MODE. + If SIGN is non-zero, R is set to the most negative finite value. */ + +void +real_maxval (r, sign, mode) + REAL_VALUE_TYPE *r; + int sign; + enum machine_mode mode; +{ + const struct real_format *fmt; + int np2; + + fmt = real_format_for_mode[mode - QFmode]; + if (fmt == NULL) + abort (); + + r->class = rvc_normal; + r->sign = sign; + r->signalling = 0; + r->canonical = 0; + r->exp = fmt->emax * fmt->log2_b; + + np2 = SIGNIFICAND_BITS - fmt->p * fmt->log2_b; + memset (r->sig, -1, SIGSZ * sizeof (unsigned long)); + clear_significand_below (r, np2); +} + /* Fills R with 2**N. */ void |