This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] real.c: Remove hexfloat middle-end support


Hi,

the attached patch removes the hexfloat decoding and encoding stuff from
real.[ch].  The only user was the S/390 back end which does not support
hexfloat anymore.  Additionally the log2_b field in struct real_format is
removed and all users are adjusted accordingly.

Bootstrapped on i686, s390 and s390x.
No testsuite regressions.

Ok for mainline?

Bye,

-Andreas-


2007-05-15  Andreas Krebbel  <krebbel1@de.ibm.com>

	* defaults.h (IBM_FLOAT_FORMAT): Macro definition removed.
	* doc/tm.texi (IBM_FLOAT_FORMAT): Documentation entry removed.
	* real.c (encode_i370_single, decode_i370_single,
	encode_i370_double, decode_i370_double): Functions removed.
	(i370_single_format, i370_double_format): Initializations removed.
	(real_maxval, round_for_format, exact_real_truncate, significand_size):
	Consider the log2_b field to always be one.
	(ieee_single_format, mips_single_format, coldfire_single_format,
	ieee_double_format, mips_double_format,	coldfire_double_format,
	ieee_extended_motorola_format, ieee_extended_intel_96_format,
	ieee_extended_intel_128_format, ieee_extended_intel_96_round_53_format,
	ibm_extended_format, mips_extended_format, ieee_quad_format,
	mips_quad_format, vax_f_format, vax_d_format, vax_g_format,
	decimal_single_format, decimal_double_format, decimal_quad_format,
	c4x_single_format, c4x_extended_format, real_internal_format): Remove
	initialization of log2_b.
	* real.h (i370_single_format, i370_double_format): Declarations removed.
	* c-cppbuiltin.c (builtin_define_float_constants): Consider the log2_b
	field to always be one.


Index: gcc/defaults.h
===================================================================
*** gcc/defaults.h.orig	2007-05-14 16:19:46.000000000 +0200
--- gcc/defaults.h	2007-05-14 16:20:27.000000000 +0200
*************** Software Foundation, 51 Franklin Street,
*** 623,630 ****
  #define UNKNOWN_FLOAT_FORMAT 0
  #define IEEE_FLOAT_FORMAT 1
  #define VAX_FLOAT_FORMAT 2
! #define IBM_FLOAT_FORMAT 3
! #define C4X_FLOAT_FORMAT 4
  
  /* Default to IEEE float if not specified.  Nearly all machines use it.  */
  #ifndef TARGET_FLOAT_FORMAT
--- 623,629 ----
  #define UNKNOWN_FLOAT_FORMAT 0
  #define IEEE_FLOAT_FORMAT 1
  #define VAX_FLOAT_FORMAT 2
! #define C4X_FLOAT_FORMAT 3
  
  /* Default to IEEE float if not specified.  Nearly all machines use it.  */
  #ifndef TARGET_FLOAT_FORMAT
Index: gcc/doc/tm.texi
===================================================================
*** gcc/doc/tm.texi.orig	2007-05-14 16:19:46.000000000 +0200
--- gcc/doc/tm.texi	2007-05-14 16:20:27.000000000 +0200
*************** need to define @code{TARGET_FLOAT_FORMAT
*** 1340,1348 ****
  This code indicates the ``F float'' (for @code{float}) and ``D float''
  or ``G float'' formats (for @code{double}) used on the VAX and PDP-11@.
  
- @item IBM_FLOAT_FORMAT
- This code indicates the format used on the IBM System/370.
- 
  @item C4X_FLOAT_FORMAT
  This code indicates the format used on the TMS320C3x/C4x.
  @end ftable
--- 1340,1345 ----
Index: gcc/real.c
===================================================================
*** gcc/real.c.orig	2007-05-14 16:20:23.000000000 +0200
--- gcc/real.c	2007-05-15 10:38:43.000000000 +0200
***************
*** 65,76 ****
     have guard digits or rounding, the computation of 10**exp can
     accumulate more than a few digits of error.  The previous incarnation
     of real.c successfully used a 144-bit fraction; given the current
!    layout of REAL_VALUE_TYPE we're forced to expand to at least 160 bits.
! 
!    Target floating point models that use base 16 instead of base 2
!    (i.e. IBM 370), are handled during round_for_format, in which we
!    canonicalize the exponent to be a multiple of 4 (log2(16)), and
!    adjust the significand to match.  */
  
  
  /* Used to classify two numbers simultaneously.  */
--- 65,71 ----
     have guard digits or rounding, the computation of 10**exp can
     accumulate more than a few digits of error.  The previous incarnation
     of real.c successfully used a 144-bit fraction; given the current
!    layout of REAL_VALUE_TYPE we're forced to expand to at least 160 bits.  */
  
  
  /* Used to classify two numbers simultaneously.  */
*************** real_maxval (REAL_VALUE_TYPE *r, int sig
*** 2282,2290 ****
      {
        r->cl = rvc_normal;
        r->sign = sign;
!       SET_REAL_EXP (r, 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);
  
--- 2277,2285 ----
      {
        r->cl = rvc_normal;
        r->sign = sign;
!       SET_REAL_EXP (r, fmt->emax);
  
!       np2 = SIGNIFICAND_BITS - fmt->p;
        memset (r->sig, -1, SIGSZ * sizeof (unsigned long));
        clear_significand_below (r, np2);
  
*************** round_for_format (const struct real_form
*** 2342,2350 ****
        decimal_real_convert (r, DFmode, r);
      }
  
!   p2 = fmt->p * fmt->log2_b;
!   emin2m1 = (fmt->emin - 1) * fmt->log2_b;
!   emax2 = fmt->emax * fmt->log2_b;
  
    np2 = SIGNIFICAND_BITS - p2;
    switch (r->cl)
--- 2337,2345 ----
        decimal_real_convert (r, DFmode, r);
      }
  
!   p2 = fmt->p;
!   emin2m1 = fmt->emin - 1;
!   emax2 = fmt->emax;
  
    np2 = SIGNIFICAND_BITS - p2;
    switch (r->cl)
*************** round_for_format (const struct real_form
*** 2372,2393 ****
        gcc_unreachable ();
      }
  
-   /* If we're not base2, normalize the exponent to a multiple of
-      the true base.  */
-   if (fmt->log2_b != 1)
-     {
-       int shift;
- 
-       gcc_assert (fmt->b != 10);
-       shift = REAL_EXP (r) & (fmt->log2_b - 1);
-       if (shift)
- 	{
- 	  shift = fmt->log2_b - shift;
- 	  r->sig[0] |= sticky_rshift_significand (r, r, shift);
- 	  SET_REAL_EXP (r, REAL_EXP (r) + shift);
- 	}
-     }
- 
    /* Check the range of the exponent.  If we're out of range,
       either underflow or overflow.  */
    if (REAL_EXP (r) > emax2)
--- 2367,2372 ----
*************** round_for_format (const struct real_form
*** 2443,2461 ****
  	  if (REAL_EXP (r) > emax2)
  	    goto overflow;
  	  r->sig[SIGSZ-1] = SIG_MSB;
- 
- 	  if (fmt->log2_b != 1)
- 	    {
- 	      int shift = REAL_EXP (r) & (fmt->log2_b - 1);
- 	      if (shift)
- 		{
- 		  shift = fmt->log2_b - shift;
- 		  rshift_significand (r, r, shift);
- 		  SET_REAL_EXP (r, REAL_EXP (r) + shift);
- 		  if (REAL_EXP (r) > emax2)
- 		    goto overflow;
- 		}
- 	    }
  	}
      }
  
--- 2422,2427 ----
*************** exact_real_truncate (enum machine_mode m
*** 2513,2519 ****
    gcc_assert (fmt);
  
    /* Don't allow conversion to denormals.  */
!   emin2m1 = (fmt->emin - 1) * fmt->log2_b;
    if (REAL_EXP (a) <= emin2m1)
      return false;
  
--- 2479,2485 ----
    gcc_assert (fmt);
  
    /* Don't allow conversion to denormals.  */
!   emin2m1 = fmt->emin - 1;
    if (REAL_EXP (a) <= emin2m1)
      return false;
  
*************** significand_size (enum machine_mode mode
*** 2604,2610 ****
        double log2_10 = 3.3219281;
        return fmt->p * log2_10;
      }
!   return fmt->p * fmt->log2_b;
  }
  
  /* Return a hash value for the given real value.  */
--- 2570,2576 ----
        double log2_10 = 3.3219281;
        return fmt->p * log2_10;
      }
!   return fmt->p;
  }
  
  /* Return a hash value for the given real value.  */
*************** const struct real_format ieee_single_for
*** 2775,2781 ****
      encode_ieee_single,
      decode_ieee_single,
      2,
-     1,
      24,
      24,
      -125,
--- 2741,2746 ----
*************** const struct real_format mips_single_for
*** 2795,2801 ****
      encode_ieee_single,
      decode_ieee_single,
      2,
-     1,
      24,
      24,
      -125,
--- 2760,2765 ----
*************** const struct real_format coldfire_single
*** 2815,2821 ****
      encode_ieee_single,
      decode_ieee_single,
      2,
-     1,
      24,
      24,
      -125,
--- 2779,2784 ----
*************** const struct real_format ieee_double_for
*** 3023,3029 ****
      encode_ieee_double,
      decode_ieee_double,
      2,
-     1,
      53,
      53,
      -1021,
--- 2986,2991 ----
*************** const struct real_format mips_double_for
*** 3043,3049 ****
      encode_ieee_double,
      decode_ieee_double,
      2,
-     1,
      53,
      53,
      -1021,
--- 3005,3010 ----
*************** const struct real_format coldfire_double
*** 3063,3069 ****
      encode_ieee_double,
      decode_ieee_double,
      2,
-     1,
      53,
      53,
      -1021,
--- 3024,3029 ----
*************** const struct real_format ieee_extended_m
*** 3393,3399 ****
      encode_ieee_extended_motorola,
      decode_ieee_extended_motorola,
      2,
-     1,
      64,
      64,
      -16382,
--- 3353,3358 ----
*************** const struct real_format ieee_extended_i
*** 3413,3419 ****
      encode_ieee_extended_intel_96,
      decode_ieee_extended_intel_96,
      2,
-     1,
      64,
      64,
      -16381,
--- 3372,3377 ----
*************** const struct real_format ieee_extended_i
*** 3433,3439 ****
      encode_ieee_extended_intel_128,
      decode_ieee_extended_intel_128,
      2,
-     1,
      64,
      64,
      -16381,
--- 3391,3396 ----
*************** const struct real_format ieee_extended_i
*** 3455,3461 ****
      encode_ieee_extended_intel_96,
      decode_ieee_extended_intel_96,
      2,
-     1,
      53,
      53,
      -16381,
--- 3412,3417 ----
*************** const struct real_format ibm_extended_fo
*** 3542,3548 ****
      encode_ibm_extended,
      decode_ibm_extended,
      2,
-     1,
      53 + 53,
      53,
      -1021 + 53,
--- 3498,3503 ----
*************** const struct real_format mips_extended_f
*** 3562,3568 ****
      encode_ibm_extended,
      decode_ibm_extended,
      2,
-     1,
      53 + 53,
      53,
      -1021 + 53,
--- 3517,3522 ----
*************** const struct real_format ieee_quad_forma
*** 3824,3830 ****
      encode_ieee_quad,
      decode_ieee_quad,
      2,
-     1,
      113,
      113,
      -16381,
--- 3778,3783 ----
*************** const struct real_format mips_quad_forma
*** 3844,3850 ****
      encode_ieee_quad,
      decode_ieee_quad,
      2,
-     1,
      113,
      113,
      -16381,
--- 3797,3802 ----
*************** const struct real_format vax_f_format =
*** 4143,4149 ****
      encode_vax_f,
      decode_vax_f,
      2,
-     1,
      24,
      24,
      -127,
--- 4095,4100 ----
*************** const struct real_format vax_d_format =
*** 4163,4169 ****
      encode_vax_d,
      decode_vax_d,
      2,
-     1,
      56,
      56,
      -127,
--- 4114,4119 ----
*************** const struct real_format vax_g_format =
*** 4183,4189 ****
      encode_vax_g,
      decode_vax_g,
      2,
-     1,
      53,
      53,
      -1023,
--- 4133,4138 ----
*************** const struct real_format vax_g_format =
*** 4198,4400 ****
      false
    };
  
- /* A good reference for these can be found in chapter 9 of
-    "ESA/390 Principles of Operation", IBM document number SA22-7201-01.
-    An on-line version can be found here:
- 
-    http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/DZ9AR001/9.1?DT=19930923083613
- */
- 
- static void encode_i370_single (const struct real_format *fmt,
- 				long *, const REAL_VALUE_TYPE *);
- static void decode_i370_single (const struct real_format *,
- 				REAL_VALUE_TYPE *, const long *);
- static void encode_i370_double (const struct real_format *fmt,
- 				long *, const REAL_VALUE_TYPE *);
- static void decode_i370_double (const struct real_format *,
- 				REAL_VALUE_TYPE *, const long *);
- 
- static void
- encode_i370_single (const struct real_format *fmt ATTRIBUTE_UNUSED,
- 		    long *buf, const REAL_VALUE_TYPE *r)
- {
-   unsigned long sign, exp, sig, image;
- 
-   sign = r->sign << 31;
- 
-   switch (r->cl)
-     {
-     case rvc_zero:
-       image = 0;
-       break;
- 
-     case rvc_inf:
-     case rvc_nan:
-       image = 0x7fffffff | sign;
-       break;
- 
-     case rvc_normal:
-       sig = (r->sig[SIGSZ-1] >> (HOST_BITS_PER_LONG - 24)) & 0xffffff;
-       exp = ((REAL_EXP (r) / 4) + 64) << 24;
-       image = sign | exp | sig;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   buf[0] = image;
- }
- 
- static void
- decode_i370_single (const struct real_format *fmt ATTRIBUTE_UNUSED,
- 		    REAL_VALUE_TYPE *r, const long *buf)
- {
-   unsigned long sign, sig, image = buf[0];
-   int exp;
- 
-   sign = (image >> 31) & 1;
-   exp = (image >> 24) & 0x7f;
-   sig = image & 0xffffff;
- 
-   memset (r, 0, sizeof (*r));
- 
-   if (exp || sig)
-     {
-       r->cl = rvc_normal;
-       r->sign = sign;
-       SET_REAL_EXP (r, (exp - 64) * 4);
-       r->sig[SIGSZ-1] = sig << (HOST_BITS_PER_LONG - 24);
-       normalize (r);
-     }
- }
- 
- static void
- encode_i370_double (const struct real_format *fmt ATTRIBUTE_UNUSED,
- 		    long *buf, const REAL_VALUE_TYPE *r)
- {
-   unsigned long sign, exp, image_hi, image_lo;
- 
-   sign = r->sign << 31;
- 
-   switch (r->cl)
-     {
-     case rvc_zero:
-       image_hi = image_lo = 0;
-       break;
- 
-     case rvc_inf:
-     case rvc_nan:
-       image_hi = 0x7fffffff | sign;
-       image_lo = 0xffffffff;
-       break;
- 
-     case rvc_normal:
-       if (HOST_BITS_PER_LONG == 64)
- 	{
- 	  image_hi = r->sig[SIGSZ-1];
- 	  image_lo = (image_hi >> (64 - 56)) & 0xffffffff;
- 	  image_hi = (image_hi >> (64 - 56 + 1) >> 31) & 0xffffff;
- 	}
-       else
- 	{
- 	  image_hi = r->sig[SIGSZ-1];
- 	  image_lo = r->sig[SIGSZ-2];
- 	  image_lo = (image_lo >> 8) | (image_hi << 24);
- 	  image_hi >>= 8;
- 	}
- 
-       exp = ((REAL_EXP (r) / 4) + 64) << 24;
-       image_hi |= sign | exp;
-       break;
- 
-     default:
-       gcc_unreachable ();
-     }
- 
-   if (FLOAT_WORDS_BIG_ENDIAN)
-     buf[0] = image_hi, buf[1] = image_lo;
-   else
-     buf[0] = image_lo, buf[1] = image_hi;
- }
- 
- static void
- decode_i370_double (const struct real_format *fmt ATTRIBUTE_UNUSED,
- 		    REAL_VALUE_TYPE *r, const long *buf)
- {
-   unsigned long sign, image_hi, image_lo;
-   int exp;
- 
-   if (FLOAT_WORDS_BIG_ENDIAN)
-     image_hi = buf[0], image_lo = buf[1];
-   else
-     image_lo = buf[0], image_hi = buf[1];
- 
-   sign = (image_hi >> 31) & 1;
-   exp = (image_hi >> 24) & 0x7f;
-   image_hi &= 0xffffff;
-   image_lo &= 0xffffffff;
- 
-   memset (r, 0, sizeof (*r));
- 
-   if (exp || image_hi || image_lo)
-     {
-       r->cl = rvc_normal;
-       r->sign = sign;
-       SET_REAL_EXP (r, (exp - 64) * 4 + (SIGNIFICAND_BITS - 56));
- 
-       if (HOST_BITS_PER_LONG == 32)
- 	{
- 	  r->sig[0] = image_lo;
- 	  r->sig[1] = image_hi;
- 	}
-       else
- 	r->sig[0] = image_lo | (image_hi << 31 << 1);
- 
-       normalize (r);
-     }
- }
- 
- const struct real_format i370_single_format =
-   {
-     encode_i370_single,
-     decode_i370_single,
-     16,
-     4,
-     6,
-     6,
-     -64,
-     63,
-     31,
-     31,
-     false,
-     false,
-     false, /* ??? The encoding does allow for "unnormals".  */
-     false, /* ??? The encoding does allow for "unnormals".  */
-     false,
-     false
-   };
- 
- const struct real_format i370_double_format =
-   {
-     encode_i370_double,
-     decode_i370_double,
-     16,
-     4,
-     14,
-     14,
-     -64,
-     63,
-     63,
-     63,
-     false,
-     false,
-     false, /* ??? The encoding does allow for "unnormals".  */
-     false, /* ??? The encoding does allow for "unnormals".  */
-     false,
-     false
-   };
- 
  /* Encode real R into a single precision DFP value in BUF.  */
  static void
  encode_decimal_single (const struct real_format *fmt ATTRIBUTE_UNUSED,
--- 4147,4152 ----
*************** const struct real_format decimal_single_
*** 4455,4461 ****
      encode_decimal_single,
      decode_decimal_single,
      10, 
-     1,  /* log10 */
      7,
      7,
      -95,
--- 4207,4212 ----
*************** const struct real_format decimal_double_
*** 4476,4482 ****
      encode_decimal_double,
      decode_decimal_double,
      10,
-     1,  /* log10 */
      16,
      16,
      -383,
--- 4227,4232 ----
*************** const struct real_format decimal_quad_fo
*** 4497,4503 ****
      encode_decimal_quad,
      decode_decimal_quad,
      10,
-     1,  /* log10 */
      34,
      34,
      -6143,
--- 4247,4252 ----
*************** const struct real_format c4x_single_form
*** 4707,4713 ****
      encode_c4x_single,
      decode_c4x_single,
      2,
-     1,
      24,
      24,
      -126,
--- 4456,4461 ----
*************** const struct real_format c4x_extended_fo
*** 4727,4733 ****
      encode_c4x_extended,
      decode_c4x_extended,
      2,
-     1,
      32,
      32,
      -126,
--- 4475,4480 ----
*************** const struct real_format real_internal_f
*** 4772,4778 ****
      encode_internal,
      decode_internal,
      2,
-     1,
      SIGNIFICAND_BITS - 2,
      SIGNIFICAND_BITS - 2,
      -MAX_EXP,
--- 4519,4524 ----
Index: gcc/real.h
===================================================================
*** gcc/real.h.orig	2007-05-14 16:48:09.000000000 +0200
--- gcc/real.h	2007-05-15 10:33:50.000000000 +0200
*************** struct real_format
*** 126,134 ****
    /* The radix of the exponent and digits of the significand.  */
    int b;
  
-   /* log2(b).  */
-   int log2_b;
- 
    /* Size of the significand in digits of radix B.  */
    int p;
  
--- 126,131 ----
*************** extern const struct real_format mips_qua
*** 272,279 ****
  extern const struct real_format vax_f_format;
  extern const struct real_format vax_d_format;
  extern const struct real_format vax_g_format;
- extern const struct real_format i370_single_format;
- extern const struct real_format i370_double_format;
  extern const struct real_format c4x_single_format;
  extern const struct real_format c4x_extended_format;
  extern const struct real_format real_internal_format;
--- 269,274 ----
Index: gcc/c-cppbuiltin.c
===================================================================
*** gcc/c-cppbuiltin.c.orig	2007-04-20 08:54:20.000000000 +0200
--- gcc/c-cppbuiltin.c	2007-05-15 10:40:56.000000000 +0200
*************** builtin_define_float_constants (const ch
*** 111,117 ****
    /* The radix of the exponent representation.  */
    if (type == float_type_node)
      builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
!   log10_b = log10_2 * fmt->log2_b;
  
    /* The number of radix digits, p, in the floating-point significand.  */
    sprintf (name, "__%s_MANT_DIG__", name_prefix);
--- 111,117 ----
    /* The radix of the exponent representation.  */
    if (type == float_type_node)
      builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
!   log10_b = log10_2;
  
    /* The number of radix digits, p, in the floating-point significand.  */
    sprintf (name, "__%s_MANT_DIG__", name_prefix);
*************** builtin_define_float_constants (const ch
*** 208,219 ****
      char *p;
  
      strcpy (buf, "0x0.");
!     n = fmt->p * fmt->log2_b;
      for (i = 0, p = buf + 4; i + 3 < n; i += 4)
        *p++ = 'f';
      if (i < n)
        *p++ = "08ce"[n - i];
!     sprintf (p, "p%d", fmt->emax * fmt->log2_b);
      if (fmt->pnan < fmt->p)
        {
  	/* This is an IBM extended double format made up of two IEEE
--- 208,219 ----
      char *p;
  
      strcpy (buf, "0x0.");
!     n = fmt->p;
      for (i = 0, p = buf + 4; i + 3 < n; i += 4)
        *p++ = 'f';
      if (i < n)
        *p++ = "08ce"[n - i];
!     sprintf (p, "p%d", fmt->emax);
      if (fmt->pnan < fmt->p)
        {
  	/* This is an IBM extended double format made up of two IEEE
*************** builtin_define_float_constants (const ch
*** 231,237 ****
    /* The minimum normalized positive floating-point number,
       b**(emin-1).  */
    sprintf (name, "__%s_MIN__", name_prefix);
!   sprintf (buf, "0x1p%d", (fmt->emin - 1) * fmt->log2_b);
    builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
  
    /* The difference between 1 and the least value greater than 1 that is
--- 231,237 ----
    /* The minimum normalized positive floating-point number,
       b**(emin-1).  */
    sprintf (name, "__%s_MIN__", name_prefix);
!   sprintf (buf, "0x1p%d", fmt->emin - 1);
    builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
  
    /* The difference between 1 and the least value greater than 1 that is
*************** builtin_define_float_constants (const ch
*** 240,248 ****
    if (fmt->pnan < fmt->p)
      /* This is an IBM extended double format, so 1.0 + any double is
         representable precisely.  */
!       sprintf (buf, "0x1p%d", (fmt->emin - fmt->p) * fmt->log2_b);
      else
!       sprintf (buf, "0x1p%d", (1 - fmt->p) * fmt->log2_b);
    builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
  
    /* For C++ std::numeric_limits<T>::denorm_min.  The minimum denormalized
--- 240,248 ----
    if (fmt->pnan < fmt->p)
      /* This is an IBM extended double format, so 1.0 + any double is
         representable precisely.  */
!       sprintf (buf, "0x1p%d", fmt->emin - fmt->p);
      else
!       sprintf (buf, "0x1p%d", 1 - fmt->p);
    builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
  
    /* For C++ std::numeric_limits<T>::denorm_min.  The minimum denormalized
*************** builtin_define_float_constants (const ch
*** 251,257 ****
    sprintf (name, "__%s_DENORM_MIN__", name_prefix);
    if (fmt->has_denorm)
      {
!       sprintf (buf, "0x1p%d", (fmt->emin - fmt->p) * fmt->log2_b);
        builtin_define_with_hex_fp_value (name, type, decimal_dig,
  					buf, fp_suffix, fp_cast);
      }
--- 251,257 ----
    sprintf (name, "__%s_DENORM_MIN__", name_prefix);
    if (fmt->has_denorm)
      {
!       sprintf (buf, "0x1p%d", fmt->emin - fmt->p);
        builtin_define_with_hex_fp_value (name, type, decimal_dig,
  					buf, fp_suffix, fp_cast);
      }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]