Handle a library implementation of ffs calling __builtin_ffs.

* config/mmix/mmix.c (TARGET_INIT_LIBFUNCS): Override with...
	(mmix_init_libfuncs): New function: make __builtin_ffs expand
	to __ffsdi2.

From-SVN: r264381
This commit is contained in:
Hans-Peter Nilsson 2018-09-18 02:42:15 +00:00 committed by Hans-Peter Nilsson
parent 18b0a76251
commit e6bf23cce3
2 changed files with 26 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2018-09-18 Hans-Peter Nilsson <hp@bitrange.com>
Handle a library implementation of ffs calling __builtin_ffs.
* config/mmix/mmix.c (TARGET_INIT_LIBFUNCS): Override with...
(mmix_init_libfuncs): New function: make __builtin_ffs expand
to __ffsdi2.
2018-09-17 David Malcolm <dmalcolm@redhat.com>
* diagnostic-show-locus.c (class layout_range): Add field

View File

@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
#include "memmodel.h"
#include "tm_p.h"
#include "insn-config.h"
#include "optabs.h"
#include "regs.h"
#include "emit-rtl.h"
#include "recog.h"
@ -140,6 +141,7 @@ static void mmix_setup_incoming_varargs
(cumulative_args_t, machine_mode, tree, int *, int);
static void mmix_file_start (void);
static void mmix_file_end (void);
static void mmix_init_libfuncs (void);
static bool mmix_rtx_costs (rtx, machine_mode, int, int, int *, bool);
static int mmix_register_move_cost (machine_mode,
reg_class_t, reg_class_t);
@ -221,6 +223,9 @@ static HOST_WIDE_INT mmix_starting_frame_offset (void);
#undef TARGET_ASM_OUTPUT_SOURCE_FILENAME
#define TARGET_ASM_OUTPUT_SOURCE_FILENAME mmix_asm_output_source_filename
#undef TARGET_INIT_LIBFUNCS
#define TARGET_INIT_LIBFUNCS mmix_init_libfuncs
#undef TARGET_CONDITIONAL_REGISTER_USAGE
#define TARGET_CONDITIONAL_REGISTER_USAGE mmix_conditional_register_usage
@ -1308,6 +1313,20 @@ mmix_asm_output_source_filename (FILE *stream, const char *name)
fprintf (stream, "\n");
}
/* Unfortunately, by default __builtin_ffs is expanded to ffs for
targets where INT_TYPE_SIZE < BITS_PER_WORD. That together with
newlib since 2017-07-04 implementing ffs as __builtin_ffs leads to
(newlib) ffs recursively calling itself. But, because of argument
promotion, and with ffs we're counting from the least bit, the
libgcc equivalent for ffsl works equally well for int arguments, so
just use that. */
static void
mmix_init_libfuncs (void)
{
set_optab_libfunc (ffs_optab, SImode, "__ffsdi2");
}
/* OUTPUT_QUOTED_STRING. */
void