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:
parent
18b0a76251
commit
e6bf23cce3
2 changed files with 26 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue