Commit 62a12b27 by Andreas Schwab Committed by David Edelsohn

real.c: Allow sizeof (REAL_VALUE_TYPE) > 2*NE.

2002-04-19  Andreas Schwab  <schwab@suse.de>

        * real.c: Allow sizeof (REAL_VALUE_TYPE) > 2*NE.
        (PUT_REAL): Restore old definition.

From-SVN: r52527
parent 1405141b
2002-04-19 Andreas Schwab <schwab@suse.de>
* real.c: Allow sizeof (REAL_VALUE_TYPE) > 2*NE.
(PUT_REAL): Restore old definition.
2002-04-19 Dan Nicolaescu <dann@godzilla.ics.uci.edu> 2002-04-19 Dan Nicolaescu <dann@godzilla.ics.uci.edu>
Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
......
...@@ -209,7 +209,7 @@ typedef unsigned int UHItype __attribute__ ((mode (HI))); ...@@ -209,7 +209,7 @@ typedef unsigned int UHItype __attribute__ ((mode (HI)));
#endif #endif
/* Calculate the size of the generic "e" type. This always has /* Calculate the size of the generic "e" type. This always has
identical in-memory size and representation to REAL_VALUE_TYPE. identical in-memory size to REAL_VALUE_TYPE.
There are only two supported sizes: ten and six 16-bit words (160 There are only two supported sizes: ten and six 16-bit words (160
or 96 bits). */ or 96 bits). */
...@@ -224,11 +224,13 @@ typedef unsigned int UHItype __attribute__ ((mode (HI))); ...@@ -224,11 +224,13 @@ typedef unsigned int UHItype __attribute__ ((mode (HI)));
# define MINDECEXP -4956 # define MINDECEXP -4956
#endif #endif
/* Fail compilation if 2*NE is not the appropriate size. */ /* Fail compilation if 2*NE is not the appropriate size.
If HOST_BITS_PER_WIDE_INT is 64, we're going to have padding
at the end of the array, because neither 96 nor 160 is
evenly divisible by 64. */
struct compile_test_dummy { struct compile_test_dummy {
char twice_NE_must_equal_sizeof_REAL_VALUE_TYPE char twice_NE_must_equal_sizeof_REAL_VALUE_TYPE
[(sizeof (REAL_VALUE_TYPE) == 2*NE) ? 1 : -1]; [(sizeof (REAL_VALUE_TYPE) >= 2*NE) ? 1 : -1];
}; };
/* Construct macros to translate between REAL_VALUE_TYPE and e type. /* Construct macros to translate between REAL_VALUE_TYPE and e type.
...@@ -236,7 +238,12 @@ struct compile_test_dummy { ...@@ -236,7 +238,12 @@ struct compile_test_dummy {
A REAL_VALUE_TYPE is guaranteed to occupy contiguous locations A REAL_VALUE_TYPE is guaranteed to occupy contiguous locations
in memory, with no holes. */ in memory, with no holes. */
#define GET_REAL(r, e) memcpy ((e), (r), 2*NE) #define GET_REAL(r, e) memcpy ((e), (r), 2*NE)
#define PUT_REAL(e, r) memcpy ((r), (e), 2*NE) #define PUT_REAL(e, r) \
do { \
memcpy (r, e, 2*NE); \
if (2*NE < sizeof (*r)) \
memset ((char *) (r) + 2*NE, 0, sizeof (*r) - 2*NE); \
} while (0)
/* Number of 16 bit words in internal format */ /* Number of 16 bit words in internal format */
#define NI (NE+3) #define NI (NE+3)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment