Commit e6bf23cc by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

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
parent 18b0a762
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
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment