diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2012-03-28 20:57:42 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2012-03-28 20:57:42 +0000 |
commit | 5de57f8022aab8888c984a51f12ece6ee30e3693 (patch) | |
tree | 69435bfe0364a910f6858b4ac5637a7fd2c5f661 | |
parent | ab074ef58a1ef1c8853a660526e19ca4ef20115a (diff) |
Default to -mfix-r4000 -mfix-r4400 when building in big endian mode. This is
a lifesaver for R4000 and R4400 operation; without these, every int->long
promotion occuring shortly after an integer multiplication (such as an array
element access when the array item size is not a power of two) loses horribly,
and panic^Whilarity ensues.
This mostly causes assembly insns to be shuffled, but almost no code size
growth and no noticeable performance hit on processors which do not need
these insn placement workarounds.
-rw-r--r-- | gnu/gcc/gcc/config/mips/openbsd.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gnu/gcc/gcc/config/mips/openbsd.h b/gnu/gcc/gcc/config/mips/openbsd.h index e8fe656a01e..c62789e84d9 100644 --- a/gnu/gcc/gcc/config/mips/openbsd.h +++ b/gnu/gcc/gcc/config/mips/openbsd.h @@ -205,3 +205,14 @@ Boston, MA 02110-1301, USA. */ #define LIB_SPEC OBSD_LIB_SPEC #undef ENABLE_EXECUTE_STACK + +/* Default to -mfix-r4000 -mfix-r4400 when compiling big endian. */ +#undef OVERRIDE_OPTIONS +#define OVERRIDE_OPTIONS \ + do { \ + if (TARGET_BIG_ENDIAN) \ + { \ + target_flags |= MASK_FIX_R4000 | MASK_FIX_R4400; \ + } \ + override_options (); \ + } while (0) |