aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/cris
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2022-02-02 00:00:09 +0100
committerHans-Peter Nilsson <hp@axis.com>2022-02-02 01:20:02 +0100
commit4c4d0af4c94ccf0cfa74c8b13b8ec1029f57cd63 (patch)
tree4faf5afcdf7342385ade8ff6f0f34120d4f78448 /gcc/config/cris
parentae7e4af964eaa80a3d7c43e4a7e1864d9a7cb06b (diff)
downloadgcc-4c4d0af4c94ccf0cfa74c8b13b8ec1029f57cd63.zip
gcc-4c4d0af4c94ccf0cfa74c8b13b8ec1029f57cd63.tar.gz
gcc-4c4d0af4c94ccf0cfa74c8b13b8ec1029f57cd63.tar.bz2
cris: Don't default to -mmul-bug-workaround
This flips the default for the errata handling for an old version (TL;DR: workaround: no multiply instruction last on a cache-line). Newer versions of the CRIS cpu don't have that bug. While the impact of the workaround is very marginal (coremark: less than .05% larger, less than .0005% slower) it's an irritating pseudorandom factor when assessing the impact of other changes. Also, fix a wart requiring changes to more than TARGET_DEFAULT to flip the default. People building old kernels or operating systems to run on ETRAX 100 LX are advised to pass "-mmul-bug-workaround". gcc: * config/cris/cris.h (TARGET_DEFAULT): Don't include MASK_MUL_BUG. (MUL_BUG_ASM_DEFAULT): New macro. (MAYBE_AS_NO_MUL_BUG_ABORT): Define in terms of MUL_BUG_ASM_DEFAULT. * doc/invoke.texi (CRIS Options, -mmul-bug-workaround): Adjust accordingly.
Diffstat (limited to 'gcc/config/cris')
-rw-r--r--gcc/config/cris/cris.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
index b274e11..9245d78 100644
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -153,7 +153,9 @@ extern int cris_cpu_version;
#ifdef HAVE_AS_NO_MUL_BUG_ABORT_OPTION
#define MAYBE_AS_NO_MUL_BUG_ABORT \
- "%{mno-mul-bug-workaround:-no-mul-bug-abort} "
+ "%{mno-mul-bug-workaround:-no-mul-bug-abort} " \
+ "%{mmul-bug-workaround:-mul-bug-abort} " \
+ "%{!mmul-bug-workaround:%{!mno-mul-bug-workaround:" MUL_BUG_ASM_DEFAULT "}} "
#else
#define MAYBE_AS_NO_MUL_BUG_ABORT
#endif
@@ -255,15 +257,26 @@ extern int cris_cpu_version;
(MASK_SIDE_EFFECT_PREFIXES + MASK_STACK_ALIGN \
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
+ MASK_ALIGN_BY_32 \
- + MASK_PROLOGUE_EPILOGUE + MASK_MUL_BUG)
+ + MASK_PROLOGUE_EPILOGUE)
# else /* 0 */
# define TARGET_DEFAULT \
(MASK_SIDE_EFFECT_PREFIXES + MASK_STACK_ALIGN \
+ MASK_CONST_ALIGN + MASK_DATA_ALIGN \
- + MASK_PROLOGUE_EPILOGUE + MASK_MUL_BUG)
+ + MASK_PROLOGUE_EPILOGUE)
# endif
#endif
+/* Don't depend on the assembler default setting for the errata machinery;
+ always pass the option to turn it on or off explicitly. But, we have to
+ decide on which is the *GCC* default, and for that we should only need to
+ consider what's in TARGET_DEFAULT; no other changes should be necessary. */
+
+#if (TARGET_DEFAULT & MASK_MUL_BUG)
+#define MUL_BUG_ASM_DEFAULT "-mul-bug-abort"
+#else
+#define MUL_BUG_ASM_DEFAULT "-no-mul-bug-abort"
+#endif
+
/* Local, providing a default for cris_cpu_version. */
#define CRIS_DEFAULT_CPU_VERSION TARGET_CPU_DEFAULT