aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-08-05 05:41:34 +0000
committerJeff Law <law@gcc.gnu.org>1999-08-04 23:41:34 -0600
commitd7afe8ec4478d6dee4fdccd88f719542ae1d5ea0 (patch)
tree44b02777f0fc79323fcb30fba49f6d94ef81e9ab
parent67a60018259cec4835f6ce45753f9cae89e5a833 (diff)
downloadgcc-d7afe8ec4478d6dee4fdccd88f719542ae1d5ea0.zip
gcc-d7afe8ec4478d6dee4fdccd88f719542ae1d5ea0.tar.gz
gcc-d7afe8ec4478d6dee4fdccd88f719542ae1d5ea0.tar.bz2
real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules.
* real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules. (PUT_REAL): Likewise. From-SVN: r28521
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/real.c52
2 files changed, 31 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 07d6b58..fee7376 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Wed Aug 4 23:39:20 1999 Mark Mitchell <mark@codesourcery.com>
+
+ * real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules.
+ (PUT_REAL): Likewise.
+
Wed Aug 4 20:45:04 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* final.c (shorten_branches): Don't add an alignment for loops
diff --git a/gcc/real.c b/gcc/real.c
index a077213..6594bd8 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -274,34 +274,34 @@ do { \
/* Emulator uses target format internally
but host stores it in host endian-ness. */
-#define GET_REAL(r,e) \
-do { \
- if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \
- e53toe ((unsigned EMUSHORT *) (r), (e)); \
- else \
- { \
- unsigned EMUSHORT w[4]; \
- w[3] = ((EMUSHORT *) r)[0]; \
- w[2] = ((EMUSHORT *) r)[1]; \
- w[1] = ((EMUSHORT *) r)[2]; \
- w[0] = ((EMUSHORT *) r)[3]; \
- e53toe (w, (e)); \
- } \
+#define GET_REAL(r,e) \
+do { \
+ if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \
+ e53toe ((unsigned EMUSHORT *) (r), (e)); \
+ else \
+ { \
+ unsigned EMUSHORT w[4]; \
+ bcopy (((EMUSHORT *) r), &w[3], sizeof (EMUSHORT)); \
+ bcopy (((EMUSHORT *) r) + 1, &w[2], sizeof (EMUSHORT)); \
+ bcopy (((EMUSHORT *) r) + 2, &w[1], sizeof (EMUSHORT)); \
+ bcopy (((EMUSHORT *) r) + 3, &w[0], sizeof (EMUSHORT)); \
+ e53toe (w, (e)); \
+ } \
} while (0)
-#define PUT_REAL(e,r) \
-do { \
- if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \
- etoe53 ((e), (unsigned EMUSHORT *) (r)); \
- else \
- { \
- unsigned EMUSHORT w[4]; \
- etoe53 ((e), w); \
- *((EMUSHORT *) r) = w[3]; \
- *((EMUSHORT *) r + 1) = w[2]; \
- *((EMUSHORT *) r + 2) = w[1]; \
- *((EMUSHORT *) r + 3) = w[0]; \
- } \
+#define PUT_REAL(e,r) \
+do { \
+ if (HOST_FLOAT_WORDS_BIG_ENDIAN == REAL_WORDS_BIG_ENDIAN) \
+ etoe53 ((e), (unsigned EMUSHORT *) (r)); \
+ else \
+ { \
+ unsigned EMUSHORT w[4]; \
+ etoe53 ((e), w); \
+ bcopy (&w[3], ((EMUSHORT *) r), sizeof (EMUSHORT)); \
+ bcopy (&w[2], ((EMUSHORT *) r) + 1, sizeof (EMUSHORT)); \
+ bcopy (&w[1], ((EMUSHORT *) r) + 2, sizeof (EMUSHORT)); \
+ bcopy (&w[0], ((EMUSHORT *) r) + 3, sizeof (EMUSHORT)); \
+ } \
} while (0)
#else /* not REAL_ARITHMETIC */