Testing on m68k-linux -mcpu=5206 (aka coldfire, aka no cas insn) revealed that we hadn't properly registered __sync_val_compare_and_swap_4. Oops.
r~
* optabs.c (init_sync_libfuncs_1): Include max in iteration. diff --git a/gcc/optabs.c b/gcc/optabs.c index 1aafd28..0ce21e9 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -6606,7 +6606,7 @@ init_sync_libfuncs_1 (optab tab, const char *base, int max) buf[len + 2] = '\0'; mode = QImode; - for (i = 1; i < max; i *= 2) + for (i = 1; i <= max; i *= 2) { buf[len + 1] = '0' + i; set_optab_libfunc (tab, mode, buf);