Cc: Kaz Kojima <kkoj...@gcc.gnu.org> --- gcc/config/sh/linux.h | 4 ++++ gcc/config/sh/sh.c | 8 ++++++++ 2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h index edfd99b..7a75341 100644 --- a/gcc/config/sh/linux.h +++ b/gcc/config/sh/linux.h @@ -131,3 +131,7 @@ along with GCC; see the file COPYING3. If not see #define SH_DIV_STRATEGY_DEFAULT SH_DIV_CALL2 #undef SH_DIV_STR_FOR_SIZE #define SH_DIV_STR_FOR_SIZE "call2" + +/* Install the __sync libcalls. */ +#undef TARGET_INIT_LIBFUNCS +#define TARGET_INIT_LIBFUNCS sh_init_sync_libfuncs diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 03c3c48..2545a63 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -302,6 +302,8 @@ static void sh_trampoline_init (rtx, tree, rtx); static rtx sh_trampoline_adjust_address (rtx); static void sh_conditional_register_usage (void); static bool sh_legitimate_constant_p (enum machine_mode, rtx); + +static void sh_init_sync_libfuncs (void) ATTRIBUTE_UNUSED; static const struct attribute_spec sh_attribute_table[] = { @@ -12499,4 +12501,10 @@ sh_legitimate_constant_p (enum machine_mode mode, rtx x) enum sh_divide_strategy_e sh_div_strategy = SH_DIV_STRATEGY_DEFAULT; +static void +sh_init_sync_libfuncs (void) +{ + init_sync_libfuncs (UNITS_PER_WORD); +} + #include "gt-sh.h" -- 1.7.6.4