]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules.
authorMark Mitchell <mark@codesourcery.com>
Thu, 5 Aug 1999 05:42:43 +0000 (05:42 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 5 Aug 1999 05:42:43 +0000 (23:42 -0600)
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.

From-SVN: r28522

gcc/ChangeLog
gcc/real.c

index 4f18aab798b18cf6e6418a2dba4e50bfb19bb6f0..0c2eccb588bcbdeb399e045e579dc53106048886 100644 (file)
@@ -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 02:15:32 1999  Richard Henderson <rth@cygnus.com>
 
        * jump.c (delete_insn): Delete the addr_vec when deleting a tablejump.
index 2d615757af1606fc8f575892a6178a9707bb7afd..a3fda6d4c91ae4f98affeb5b399fca1c75a21f5d 100644 (file)
@@ -269,34 +269,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 */