diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-08-05 05:41:34 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-08-04 23:41:34 -0600 |
commit | d7afe8ec4478d6dee4fdccd88f719542ae1d5ea0 (patch) | |
tree | 44b02777f0fc79323fcb30fba49f6d94ef81e9ab | |
parent | 67a60018259cec4835f6ce45753f9cae89e5a833 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/real.c | 52 |
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 @@ -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 */ |