visium.c (machine_libfunc_index): New enum.
* config/visium/visium.c (machine_libfunc_index): New enum. (machine_libfuncs): New structure. (visium_libfuncs): New static variable. (TARGET_INIT_LIBFUNCS): Define to... (visium_init_libfuncs): ...this. New function. (expand_block_move_4): Use the appropriate libfunc. (expand_block_move_2): Likewise. (expand_block_move_1): Likewise. (expand_block_set_4): Likewise. (expand_block_set_2): Likewise. (expand_block_set_1): Likewise. (visium_trampoline_init): Likewise. From-SVN: r233488
This commit is contained in:
parent
01c93899e2
commit
8072945b83
@ -1,3 +1,18 @@
|
||||
2016-02-17 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* config/visium/visium.c (machine_libfunc_index): New enum.
|
||||
(machine_libfuncs): New structure.
|
||||
(visium_libfuncs): New static variable.
|
||||
(TARGET_INIT_LIBFUNCS): Define to...
|
||||
(visium_init_libfuncs): ...this. New function.
|
||||
(expand_block_move_4): Use the appropriate libfunc.
|
||||
(expand_block_move_2): Likewise.
|
||||
(expand_block_move_1): Likewise.
|
||||
(expand_block_set_4): Likewise.
|
||||
(expand_block_set_2): Likewise.
|
||||
(expand_block_set_1): Likewise.
|
||||
(visium_trampoline_init): Likewise.
|
||||
|
||||
2016-02-17 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/msp430/msp430.c (msp430_mcu_data): Sync with data from
|
||||
|
@ -57,6 +57,41 @@
|
||||
/* This file should be included last. */
|
||||
#include "target-def.h"
|
||||
|
||||
/* Enumeration of indexes into machine_libfunc_table. */
|
||||
enum machine_libfunc_index
|
||||
{
|
||||
MLTI_long_int_memcpy,
|
||||
MLTI_wrd_memcpy,
|
||||
MLTI_byt_memcpy,
|
||||
|
||||
MLTI_long_int_memset,
|
||||
MLTI_wrd_memset,
|
||||
MLTI_byt_memset,
|
||||
|
||||
MLTI_set_trampoline_parity,
|
||||
|
||||
MLTI_MAX
|
||||
};
|
||||
|
||||
struct GTY(()) machine_libfuncs
|
||||
{
|
||||
rtx table[MLTI_MAX];
|
||||
};
|
||||
|
||||
/* The table of Visium-specific libfuncs. */
|
||||
static GTY(()) struct machine_libfuncs visium_libfuncs;
|
||||
|
||||
#define vlt visium_libfuncs.table
|
||||
|
||||
/* Accessor macros for visium_libfuncs. */
|
||||
#define long_int_memcpy_libfunc (vlt[MLTI_long_int_memcpy])
|
||||
#define wrd_memcpy_libfunc (vlt[MLTI_wrd_memcpy])
|
||||
#define byt_memcpy_libfunc (vlt[MLTI_byt_memcpy])
|
||||
#define long_int_memset_libfunc (vlt[MLTI_long_int_memset])
|
||||
#define wrd_memset_libfunc (vlt[MLTI_wrd_memset])
|
||||
#define byt_memset_libfunc (vlt[MLTI_byt_memset])
|
||||
#define set_trampoline_parity_libfunc (vlt[MLTI_set_trampoline_parity])
|
||||
|
||||
/* Machine specific function data. */
|
||||
struct GTY (()) machine_function
|
||||
{
|
||||
@ -187,6 +222,8 @@ static bool visium_rtx_costs (rtx, machine_mode, int, int, int *, bool);
|
||||
|
||||
static void visium_option_override (void);
|
||||
|
||||
static void visium_init_libfuncs (void);
|
||||
|
||||
static unsigned int visium_reorg (void);
|
||||
|
||||
/* Setup the global target hooks structure. */
|
||||
@ -282,6 +319,9 @@ static unsigned int visium_reorg (void);
|
||||
#undef TARGET_OPTION_OVERRIDE
|
||||
#define TARGET_OPTION_OVERRIDE visium_option_override
|
||||
|
||||
#undef TARGET_INIT_LIBFUNCS
|
||||
#define TARGET_INIT_LIBFUNCS visium_init_libfuncs
|
||||
|
||||
#undef TARGET_CONDITIONAL_REGISTER_USAGE
|
||||
#define TARGET_CONDITIONAL_REGISTER_USAGE visium_conditional_register_usage
|
||||
|
||||
@ -422,6 +462,23 @@ visium_option_override (void)
|
||||
register_pass (&insert_pass_visium_reorg);
|
||||
}
|
||||
|
||||
/* Register the Visium-specific libfuncs with the middle-end. */
|
||||
|
||||
static void
|
||||
visium_init_libfuncs (void)
|
||||
{
|
||||
if (!TARGET_BMI)
|
||||
long_int_memcpy_libfunc = init_one_libfunc ("__long_int_memcpy");
|
||||
wrd_memcpy_libfunc = init_one_libfunc ("__wrd_memcpy");
|
||||
byt_memcpy_libfunc = init_one_libfunc ("__byt_memcpy");
|
||||
|
||||
long_int_memset_libfunc = init_one_libfunc ("__long_int_memset");
|
||||
wrd_memset_libfunc = init_one_libfunc ("__wrd_memset");
|
||||
byt_memset_libfunc = init_one_libfunc ("__byt_memset");
|
||||
|
||||
set_trampoline_parity_libfunc = init_one_libfunc ("__set_trampoline_parity");
|
||||
}
|
||||
|
||||
/* Return the number of instructions that can issue on the same cycle. */
|
||||
|
||||
static int
|
||||
@ -2226,7 +2283,6 @@ visium_split_cstore (enum rtx_code op_code, rtx op0, rtx op1,
|
||||
static void
|
||||
expand_block_move_4 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
|
||||
{
|
||||
const rtx sym = gen_rtx_SYMBOL_REF (Pmode, "__long_int_memcpy");
|
||||
unsigned HOST_WIDE_INT bytes = UINTVAL (bytes_rtx);
|
||||
unsigned int rem = bytes % 4;
|
||||
|
||||
@ -2250,8 +2306,9 @@ expand_block_move_4 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
|
||||
emit_insn (insn);
|
||||
}
|
||||
else
|
||||
emit_library_call (sym, LCT_NORMAL, VOIDmode, 3, dst_reg, Pmode, src_reg,
|
||||
Pmode,
|
||||
emit_library_call (long_int_memcpy_libfunc, LCT_NORMAL, VOIDmode, 3,
|
||||
dst_reg, Pmode,
|
||||
src_reg, Pmode,
|
||||
convert_to_mode (TYPE_MODE (sizetype),
|
||||
GEN_INT (bytes >> 2),
|
||||
TYPE_UNSIGNED (sizetype)),
|
||||
@ -2282,12 +2339,12 @@ expand_block_move_4 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
|
||||
static void
|
||||
expand_block_move_2 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
|
||||
{
|
||||
const rtx sym = gen_rtx_SYMBOL_REF (Pmode, "__wrd_memcpy");
|
||||
unsigned HOST_WIDE_INT bytes = UINTVAL (bytes_rtx);
|
||||
unsigned int rem = bytes % 2;
|
||||
|
||||
emit_library_call (sym, LCT_NORMAL, VOIDmode, 3, dst_reg, Pmode, src_reg,
|
||||
Pmode,
|
||||
emit_library_call (wrd_memcpy_libfunc, LCT_NORMAL, VOIDmode, 3,
|
||||
dst_reg, Pmode,
|
||||
src_reg, Pmode,
|
||||
convert_to_mode (TYPE_MODE (sizetype),
|
||||
GEN_INT (bytes >> 1),
|
||||
TYPE_UNSIGNED (sizetype)),
|
||||
@ -2309,9 +2366,8 @@ expand_block_move_2 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
|
||||
static void
|
||||
expand_block_move_1 (rtx dst_reg, rtx src_reg, rtx bytes_rtx)
|
||||
{
|
||||
const rtx sym = gen_rtx_SYMBOL_REF (Pmode, "__byt_memcpy");
|
||||
|
||||
emit_library_call (sym, LCT_NORMAL, VOIDmode, 3, dst_reg, Pmode,
|
||||
emit_library_call (byt_memcpy_libfunc, LCT_NORMAL, VOIDmode, 3,
|
||||
dst_reg, Pmode,
|
||||
src_reg, Pmode,
|
||||
convert_to_mode (TYPE_MODE (sizetype),
|
||||
bytes_rtx,
|
||||
@ -2325,12 +2381,12 @@ expand_block_move_1 (rtx dst_reg, rtx src_reg, rtx bytes_rtx)
|
||||
static void
|
||||
expand_block_set_4 (rtx dst, rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
|
||||
{
|
||||
const rtx sym = gen_rtx_SYMBOL_REF (Pmode, "__long_int_memset");
|
||||
unsigned HOST_WIDE_INT bytes = UINTVAL (bytes_rtx);
|
||||
unsigned int rem = bytes % 4;
|
||||
|
||||
value_rtx = convert_to_mode (Pmode, value_rtx, 1);
|
||||
emit_library_call (sym, LCT_NORMAL, VOIDmode, 3, dst_reg, Pmode,
|
||||
emit_library_call (long_int_memset_libfunc, LCT_NORMAL, VOIDmode, 3,
|
||||
dst_reg, Pmode,
|
||||
value_rtx, Pmode,
|
||||
convert_to_mode (TYPE_MODE (sizetype),
|
||||
GEN_INT (bytes >> 2),
|
||||
@ -2371,12 +2427,12 @@ expand_block_set_4 (rtx dst, rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
|
||||
static void
|
||||
expand_block_set_2 (rtx dst, rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
|
||||
{
|
||||
const rtx sym = gen_rtx_SYMBOL_REF (Pmode, "__wrd_memset");
|
||||
unsigned HOST_WIDE_INT bytes = UINTVAL (bytes_rtx);
|
||||
unsigned int rem = bytes % 2;
|
||||
|
||||
value_rtx = convert_to_mode (Pmode, value_rtx, 1);
|
||||
emit_library_call (sym, LCT_NORMAL, VOIDmode, 3, dst_reg, Pmode,
|
||||
emit_library_call (wrd_memset_libfunc, LCT_NORMAL, VOIDmode, 3,
|
||||
dst_reg, Pmode,
|
||||
value_rtx, Pmode,
|
||||
convert_to_mode (TYPE_MODE (sizetype),
|
||||
GEN_INT (bytes >> 1),
|
||||
@ -2398,10 +2454,9 @@ expand_block_set_2 (rtx dst, rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
|
||||
static void
|
||||
expand_block_set_1 (rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
|
||||
{
|
||||
const rtx sym = gen_rtx_SYMBOL_REF (Pmode, "__byt_memset");
|
||||
|
||||
value_rtx = convert_to_mode (Pmode, value_rtx, 1);
|
||||
emit_library_call (sym, LCT_NORMAL, VOIDmode, 3, dst_reg, Pmode,
|
||||
emit_library_call (byt_memset_libfunc, LCT_NORMAL, VOIDmode, 3,
|
||||
dst_reg, Pmode,
|
||||
value_rtx, Pmode,
|
||||
convert_to_mode (TYPE_MODE (sizetype),
|
||||
bytes_rtx,
|
||||
@ -2552,8 +2607,8 @@ visium_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
|
||||
GEN_INT (0xffff), NULL_RTX),
|
||||
0x04940000));
|
||||
|
||||
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__set_trampoline_parity"),
|
||||
LCT_NORMAL, VOIDmode, 1, addr, SImode);
|
||||
emit_library_call (set_trampoline_parity_libfunc, LCT_NORMAL, VOIDmode, 1,
|
||||
addr, SImode);
|
||||
}
|
||||
|
||||
/* Return true if the current function must have and use a frame pointer. */
|
||||
|
Loading…
Reference in New Issue
Block a user