diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f11b75 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/config.sub b/config.sub old mode 100644 new mode 100755 diff --git a/emit-rtl.c b/emit-rtl.c index 18da1f0..11b0ae2 100644 --- a/emit-rtl.c +++ b/emit-rtl.c @@ -3406,7 +3406,8 @@ init_emit_once (line_numbers) bzero ((char *) &u, sizeof u); /* Zero any holes in a structure. */ u.d = i == 0 ? dconst0 : i == 1 ? dconst1 : dconst2; - bcopy ((char *) &u, (char *) &CONST_DOUBLE_LOW (tem), sizeof u); + bcopy ((char *) &u, (char *) &CONST_DOUBLE_LOW (tem), sizeof u / 2); + bcopy ((char *) &u + (sizeof u / 2), (char *) &CONST_DOUBLE_HIGH (tem), sizeof u / 2); CONST_DOUBLE_MEM (tem) = cc0_rtx; PUT_MODE (tem, mode); diff --git a/move-if-change b/move-if-change old mode 100644 new mode 100755 diff --git a/real.h b/real.h index d51c9e1..3e7f907 100644 --- a/real.h +++ b/real.h @@ -21,6 +21,8 @@ Boston, MA 02111-1307, USA. */ #ifndef REAL_H_INCLUDED #define REAL_H_INCLUDED +#include + /* Define codes for all the float formats that we know of. */ #define UNKNOWN_FLOAT_FORMAT 0 #define IEEE_FLOAT_FORMAT 1 @@ -432,7 +434,8 @@ REAL_VALUE_TYPE real_value_from_int_cst (); #define REAL_VALUE_FROM_CONST_DOUBLE(to, from) \ do { union real_extract u; \ - bcopy ((char *) &CONST_DOUBLE_LOW ((from)), (char *) &u, sizeof u); \ + bcopy ((uint8_t *) &CONST_DOUBLE_LOW ((from)), (uint8_t *) &u, (sizeof u) / 2); \ + bcopy ((uint8_t *) &CONST_DOUBLE_HIGH ((from)), ((uint8_t *) &u) + (sizeof u / 2), (sizeof u) / 2); \ to = u.d; } while (0) /* Return a CONST_DOUBLE with value R and mode M. */ diff --git a/varasm.c b/varasm.c index eae0ea4..e20d763 100644 --- a/varasm.c +++ b/varasm.c @@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA. */ #include "config.h" #include #include +#include /* #include */ #include "rtl.h" #include "tree.h" @@ -2265,8 +2266,9 @@ immed_real_const_1 (d, mode) If one is found, return it. */ for (r = const_double_chain; r; r = CONST_DOUBLE_CHAIN (r)) - if (! bcmp ((char *) &CONST_DOUBLE_LOW (r), (char *) &u, sizeof u) - && GET_MODE (r) == mode) + if (! bcmp ((char *) &CONST_DOUBLE_LOW (r), (char *) &u, sizeof u / 2) && + ! bcmp ((char *) &CONST_DOUBLE_HIGH (r), ((char *) &u) + (sizeof u / 2), sizeof u / 2) + && GET_MODE (r) == mode) return r; /* No; make a new one and add it to the chain. @@ -2281,7 +2283,8 @@ immed_real_const_1 (d, mode) rtl_in_saveable_obstack (); r = rtx_alloc (CONST_DOUBLE); PUT_MODE (r, mode); - bcopy ((char *) &u, (char *) &CONST_DOUBLE_LOW (r), sizeof u); + bcopy ((char *) &u, (char *) &CONST_DOUBLE_LOW (r), sizeof u / 2); + bcopy (((char *) &u) + + (sizeof u / 2), (char *) &CONST_DOUBLE_HIGH (r), sizeof u / 2); pop_obstacks (); /* Don't touch const_double_chain in nested function; see force_const_mem.