From: Mark Mitchell Date: Thu, 5 Aug 1999 05:41:34 +0000 (+0000) Subject: real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d7afe8ec4478d6dee4fdccd88f719542ae1d5ea0;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07d6b585a2a..fee7376c39b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Aug 4 23:39:20 1999 Mark Mitchell + + * real.c (GET_REAL): Don't violate ANSI/ISO aliasing rules. + (PUT_REAL): Likewise. + Wed Aug 4 20:45:04 1999 J"orn Rennecke * final.c (shorten_branches): Don't add an alignment for loops diff --git a/gcc/real.c b/gcc/real.c index a077213309c..6594bd8c1f3 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 */