update gcc fdpic patch
two changes are made: 1. always enable flag_pic for fdpic. without this, various ICE and bad codegen was observed. 2. allow sibcall for fdpic; it's valid since r12 is call-clobbered.
This commit is contained in:
parent
72b4cdc7e2
commit
d0ca7b1054
|
@ -145,7 +145,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh-protos.h gcc-5.2.0/gcc/config/s
|
||||||
#endif /* ! GCC_SH_PROTOS_H */
|
#endif /* ! GCC_SH_PROTOS_H */
|
||||||
diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
--- ../baseline/gcc-5.2.0/gcc/config/sh/sh.c 2015-09-04 20:23:46.694785580 +0000
|
--- ../baseline/gcc-5.2.0/gcc/config/sh/sh.c 2015-09-04 20:23:46.694785580 +0000
|
||||||
+++ gcc-5.2.0/gcc/config/sh/sh.c 2015-09-11 03:56:36.709796457 +0000
|
+++ gcc-5.2.0/gcc/config/sh/sh.c 2015-09-21 05:22:57.786789746 +0000
|
||||||
@@ -288,6 +288,7 @@ static rtx sh_expand_builtin (tree, rtx,
|
@@ -288,6 +288,7 @@ static rtx sh_expand_builtin (tree, rtx,
|
||||||
static void sh_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
|
static void sh_output_mi_thunk (FILE *, tree, HOST_WIDE_INT,
|
||||||
HOST_WIDE_INT, tree);
|
HOST_WIDE_INT, tree);
|
||||||
|
@ -193,11 +193,13 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||||
|
|
||||||
|
|
||||||
@@ -1012,6 +1024,11 @@ sh_option_override (void)
|
@@ -1012,6 +1024,13 @@ sh_option_override (void)
|
||||||
if (! global_options_set.x_TARGET_ZDCBRANCH && TARGET_HARD_SH4)
|
if (! global_options_set.x_TARGET_ZDCBRANCH && TARGET_HARD_SH4)
|
||||||
TARGET_ZDCBRANCH = 1;
|
TARGET_ZDCBRANCH = 1;
|
||||||
|
|
||||||
+// FIXME: is this right?
|
+ if (TARGET_FDPIC && !flag_pic)
|
||||||
|
+ flag_pic = 2;
|
||||||
|
+
|
||||||
+ if (TARGET_FDPIC
|
+ if (TARGET_FDPIC
|
||||||
+ && (TARGET_SHMEDIA || TARGET_SHCOMPACT || !TARGET_SH2))
|
+ && (TARGET_SHMEDIA || TARGET_SHCOMPACT || !TARGET_SH2))
|
||||||
+ sorry ("non-SH2 FDPIC");
|
+ sorry ("non-SH2 FDPIC");
|
||||||
|
@ -205,7 +207,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
|
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
|
||||||
if (! VALID_REGISTER_P (regno))
|
if (! VALID_REGISTER_P (regno))
|
||||||
sh_register_names[regno][0] = '\0';
|
sh_register_names[regno][0] = '\0';
|
||||||
@@ -1020,7 +1037,7 @@ sh_option_override (void)
|
@@ -1020,7 +1039,7 @@ sh_option_override (void)
|
||||||
if (! VALID_REGISTER_P (ADDREGNAMES_REGNO (regno)))
|
if (! VALID_REGISTER_P (ADDREGNAMES_REGNO (regno)))
|
||||||
sh_additional_register_names[regno][0] = '\0';
|
sh_additional_register_names[regno][0] = '\0';
|
||||||
|
|
||||||
|
@ -214,7 +216,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
|| (TARGET_SHMEDIA && !TARGET_PT_FIXED))
|
|| (TARGET_SHMEDIA && !TARGET_PT_FIXED))
|
||||||
flag_no_function_cse = 1;
|
flag_no_function_cse = 1;
|
||||||
|
|
||||||
@@ -1695,6 +1712,14 @@ sh_asm_output_addr_const_extra (FILE *fi
|
@@ -1695,6 +1714,14 @@ sh_asm_output_addr_const_extra (FILE *fi
|
||||||
output_addr_const (file, XVECEXP (x, 0, 1));
|
output_addr_const (file, XVECEXP (x, 0, 1));
|
||||||
fputs ("-.)", file);
|
fputs ("-.)", file);
|
||||||
break;
|
break;
|
||||||
|
@ -229,7 +231,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1721,8 +1746,10 @@ sh_encode_section_info (tree decl, rtx r
|
@@ -1721,8 +1748,10 @@ sh_encode_section_info (tree decl, rtx r
|
||||||
void
|
void
|
||||||
prepare_move_operands (rtx operands[], machine_mode mode)
|
prepare_move_operands (rtx operands[], machine_mode mode)
|
||||||
{
|
{
|
||||||
|
@ -241,7 +243,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
&& ! ((mode == Pmode || mode == ptr_mode)
|
&& ! ((mode == Pmode || mode == ptr_mode)
|
||||||
&& tls_symbolic_operand (operands[1], Pmode) != TLS_MODEL_NONE))
|
&& tls_symbolic_operand (operands[1], Pmode) != TLS_MODEL_NONE))
|
||||||
{
|
{
|
||||||
@@ -1842,7 +1869,7 @@ prepare_move_operands (rtx operands[], m
|
@@ -1842,7 +1871,7 @@ prepare_move_operands (rtx operands[], m
|
||||||
{
|
{
|
||||||
rtx tga_op1, tga_ret, tmp, tmp2;
|
rtx tga_op1, tga_ret, tmp, tmp2;
|
||||||
|
|
||||||
|
@ -250,7 +252,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
&& (tls_kind == TLS_MODEL_GLOBAL_DYNAMIC
|
&& (tls_kind == TLS_MODEL_GLOBAL_DYNAMIC
|
||||||
|| tls_kind == TLS_MODEL_LOCAL_DYNAMIC
|
|| tls_kind == TLS_MODEL_LOCAL_DYNAMIC
|
||||||
|| tls_kind == TLS_MODEL_INITIAL_EXEC))
|
|| tls_kind == TLS_MODEL_INITIAL_EXEC))
|
||||||
@@ -1863,6 +1890,11 @@ prepare_move_operands (rtx operands[], m
|
@@ -1863,6 +1892,11 @@ prepare_move_operands (rtx operands[], m
|
||||||
{
|
{
|
||||||
case TLS_MODEL_GLOBAL_DYNAMIC:
|
case TLS_MODEL_GLOBAL_DYNAMIC:
|
||||||
tga_ret = gen_rtx_REG (Pmode, R0_REG);
|
tga_ret = gen_rtx_REG (Pmode, R0_REG);
|
||||||
|
@ -262,7 +264,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_call_insn (gen_tls_global_dynamic (tga_ret, op1));
|
emit_call_insn (gen_tls_global_dynamic (tga_ret, op1));
|
||||||
tmp = gen_reg_rtx (Pmode);
|
tmp = gen_reg_rtx (Pmode);
|
||||||
emit_move_insn (tmp, tga_ret);
|
emit_move_insn (tmp, tga_ret);
|
||||||
@@ -1871,6 +1903,11 @@ prepare_move_operands (rtx operands[], m
|
@@ -1871,6 +1905,11 @@ prepare_move_operands (rtx operands[], m
|
||||||
|
|
||||||
case TLS_MODEL_LOCAL_DYNAMIC:
|
case TLS_MODEL_LOCAL_DYNAMIC:
|
||||||
tga_ret = gen_rtx_REG (Pmode, R0_REG);
|
tga_ret = gen_rtx_REG (Pmode, R0_REG);
|
||||||
|
@ -274,7 +276,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_call_insn (gen_tls_local_dynamic (tga_ret, op1));
|
emit_call_insn (gen_tls_local_dynamic (tga_ret, op1));
|
||||||
|
|
||||||
tmp = gen_reg_rtx (Pmode);
|
tmp = gen_reg_rtx (Pmode);
|
||||||
@@ -1888,6 +1925,11 @@ prepare_move_operands (rtx operands[], m
|
@@ -1888,6 +1927,11 @@ prepare_move_operands (rtx operands[], m
|
||||||
case TLS_MODEL_INITIAL_EXEC:
|
case TLS_MODEL_INITIAL_EXEC:
|
||||||
tga_op1 = !can_create_pseudo_p () ? op0 : gen_reg_rtx (Pmode);
|
tga_op1 = !can_create_pseudo_p () ? op0 : gen_reg_rtx (Pmode);
|
||||||
tmp = gen_sym2GOTTPOFF (op1);
|
tmp = gen_sym2GOTTPOFF (op1);
|
||||||
|
@ -286,7 +288,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_insn (gen_tls_initial_exec (tga_op1, tmp));
|
emit_insn (gen_tls_initial_exec (tga_op1, tmp));
|
||||||
op1 = tga_op1;
|
op1 = tga_op1;
|
||||||
break;
|
break;
|
||||||
@@ -1914,6 +1956,20 @@ prepare_move_operands (rtx operands[], m
|
@@ -1914,6 +1958,20 @@ prepare_move_operands (rtx operands[], m
|
||||||
operands[1] = op1;
|
operands[1] = op1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -307,7 +309,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implement the canonicalize_comparison target hook for the combine
|
/* Implement the canonicalize_comparison target hook for the combine
|
||||||
@@ -3018,6 +3074,26 @@ sh_file_start (void)
|
@@ -3018,6 +3076,26 @@ sh_file_start (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +336,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
/* Check if PAT includes UNSPEC_CALLER unspec pattern. */
|
/* Check if PAT includes UNSPEC_CALLER unspec pattern. */
|
||||||
static bool
|
static bool
|
||||||
unspec_caller_rtx_p (rtx pat)
|
unspec_caller_rtx_p (rtx pat)
|
||||||
@@ -3044,7 +3120,7 @@ sh_cannot_copy_insn_p (rtx_insn *insn)
|
@@ -3044,7 +3122,7 @@ sh_cannot_copy_insn_p (rtx_insn *insn)
|
||||||
{
|
{
|
||||||
rtx pat;
|
rtx pat;
|
||||||
|
|
||||||
|
@ -343,7 +345,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!NONJUMP_INSN_P (insn))
|
if (!NONJUMP_INSN_P (insn))
|
||||||
@@ -3053,6 +3129,19 @@ sh_cannot_copy_insn_p (rtx_insn *insn)
|
@@ -3053,6 +3131,19 @@ sh_cannot_copy_insn_p (rtx_insn *insn)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pat = PATTERN (insn);
|
pat = PATTERN (insn);
|
||||||
|
@ -363,7 +365,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
if (GET_CODE (pat) != SET)
|
if (GET_CODE (pat) != SET)
|
||||||
return false;
|
return false;
|
||||||
pat = SET_SRC (pat);
|
pat = SET_SRC (pat);
|
||||||
@@ -4027,6 +4116,7 @@ expand_ashiftrt (rtx *operands)
|
@@ -4027,6 +4118,7 @@ expand_ashiftrt (rtx *operands)
|
||||||
rtx wrk;
|
rtx wrk;
|
||||||
char func[18];
|
char func[18];
|
||||||
int value;
|
int value;
|
||||||
|
@ -371,7 +373,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
|
|
||||||
if (TARGET_DYNSHIFT)
|
if (TARGET_DYNSHIFT)
|
||||||
{
|
{
|
||||||
@@ -4092,8 +4182,8 @@ expand_ashiftrt (rtx *operands)
|
@@ -4092,8 +4184,8 @@ expand_ashiftrt (rtx *operands)
|
||||||
/* Load the value into an arg reg and call a helper. */
|
/* Load the value into an arg reg and call a helper. */
|
||||||
emit_move_insn (gen_rtx_REG (SImode, 4), operands[1]);
|
emit_move_insn (gen_rtx_REG (SImode, 4), operands[1]);
|
||||||
sprintf (func, "__ashiftrt_r4_%d", value);
|
sprintf (func, "__ashiftrt_r4_%d", value);
|
||||||
|
@ -382,7 +384,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_move_insn (operands[0], gen_rtx_REG (SImode, 4));
|
emit_move_insn (operands[0], gen_rtx_REG (SImode, 4));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -7941,7 +8031,9 @@ sh_expand_prologue (void)
|
@@ -7941,7 +8033,9 @@ sh_expand_prologue (void)
|
||||||
stack_usage += d;
|
stack_usage += d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,7 +395,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_insn (gen_GOTaddr2picreg (const0_rtx));
|
emit_insn (gen_GOTaddr2picreg (const0_rtx));
|
||||||
|
|
||||||
if (SHMEDIA_REGS_STACK_ADJUST ())
|
if (SHMEDIA_REGS_STACK_ADJUST ())
|
||||||
@@ -7951,7 +8043,7 @@ sh_expand_prologue (void)
|
@@ -7951,7 +8045,7 @@ sh_expand_prologue (void)
|
||||||
function_symbol (gen_rtx_REG (Pmode, R0_REG),
|
function_symbol (gen_rtx_REG (Pmode, R0_REG),
|
||||||
(TARGET_FPU_ANY
|
(TARGET_FPU_ANY
|
||||||
? "__GCC_push_shmedia_regs"
|
? "__GCC_push_shmedia_regs"
|
||||||
|
@ -402,7 +404,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_insn (gen_shmedia_save_restore_regs_compact
|
emit_insn (gen_shmedia_save_restore_regs_compact
|
||||||
(GEN_INT (-SHMEDIA_REGS_STACK_ADJUST ())));
|
(GEN_INT (-SHMEDIA_REGS_STACK_ADJUST ())));
|
||||||
}
|
}
|
||||||
@@ -7974,7 +8066,7 @@ sh_expand_prologue (void)
|
@@ -7974,7 +8068,7 @@ sh_expand_prologue (void)
|
||||||
/* This must NOT go through the PLT, otherwise mach and macl
|
/* This must NOT go through the PLT, otherwise mach and macl
|
||||||
may be clobbered. */
|
may be clobbered. */
|
||||||
function_symbol (gen_rtx_REG (Pmode, R0_REG),
|
function_symbol (gen_rtx_REG (Pmode, R0_REG),
|
||||||
|
@ -411,7 +413,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
emit_insn (gen_shcompact_incoming_args ());
|
emit_insn (gen_shcompact_incoming_args ());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8064,7 +8156,7 @@ sh_expand_epilogue (bool sibcall_p)
|
@@ -8064,7 +8158,7 @@ sh_expand_epilogue (bool sibcall_p)
|
||||||
function_symbol (gen_rtx_REG (Pmode, R0_REG),
|
function_symbol (gen_rtx_REG (Pmode, R0_REG),
|
||||||
(TARGET_FPU_ANY
|
(TARGET_FPU_ANY
|
||||||
? "__GCC_pop_shmedia_regs"
|
? "__GCC_pop_shmedia_regs"
|
||||||
|
@ -420,7 +422,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
/* This must NOT go through the PLT, otherwise mach and macl
|
/* This must NOT go through the PLT, otherwise mach and macl
|
||||||
may be clobbered. */
|
may be clobbered. */
|
||||||
emit_insn (gen_shmedia_save_restore_regs_compact
|
emit_insn (gen_shmedia_save_restore_regs_compact
|
||||||
@@ -10445,7 +10537,9 @@ nonpic_symbol_mentioned_p (rtx x)
|
@@ -10445,7 +10539,9 @@ nonpic_symbol_mentioned_p (rtx x)
|
||||||
|| XINT (x, 1) == UNSPEC_PLT
|
|| XINT (x, 1) == UNSPEC_PLT
|
||||||
|| XINT (x, 1) == UNSPEC_PCREL
|
|| XINT (x, 1) == UNSPEC_PCREL
|
||||||
|| XINT (x, 1) == UNSPEC_SYMOFF
|
|| XINT (x, 1) == UNSPEC_SYMOFF
|
||||||
|
@ -431,7 +433,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
fmt = GET_RTX_FORMAT (GET_CODE (x));
|
fmt = GET_RTX_FORMAT (GET_CODE (x));
|
||||||
@@ -10480,7 +10574,28 @@ legitimize_pic_address (rtx orig, machin
|
@@ -10480,7 +10576,28 @@ legitimize_pic_address (rtx orig, machin
|
||||||
if (reg == NULL_RTX)
|
if (reg == NULL_RTX)
|
||||||
reg = gen_reg_rtx (Pmode);
|
reg = gen_reg_rtx (Pmode);
|
||||||
|
|
||||||
|
@ -461,7 +463,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
else if (GET_CODE (orig) == SYMBOL_REF)
|
else if (GET_CODE (orig) == SYMBOL_REF)
|
||||||
@@ -10488,7 +10603,10 @@ legitimize_pic_address (rtx orig, machin
|
@@ -10488,7 +10605,10 @@ legitimize_pic_address (rtx orig, machin
|
||||||
if (reg == NULL_RTX)
|
if (reg == NULL_RTX)
|
||||||
reg = gen_reg_rtx (Pmode);
|
reg = gen_reg_rtx (Pmode);
|
||||||
|
|
||||||
|
@ -473,7 +475,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
return orig;
|
return orig;
|
||||||
@@ -11662,20 +11780,40 @@ sh_trampoline_init (rtx tramp_mem, tree
|
@@ -11662,20 +11782,40 @@ sh_trampoline_init (rtx tramp_mem, tree
|
||||||
emit_insn (gen_initialize_trampoline (tramp, cxt, fnaddr));
|
emit_insn (gen_initialize_trampoline (tramp, cxt, fnaddr));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -523,7 +525,16 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
LCT_NORMAL, VOIDmode, 1, tramp, SImode);
|
LCT_NORMAL, VOIDmode, 1, tramp, SImode);
|
||||||
else
|
else
|
||||||
emit_insn (gen_ic_invalidate_line (tramp));
|
emit_insn (gen_ic_invalidate_line (tramp));
|
||||||
@@ -12718,10 +12856,18 @@ sh_output_mi_thunk (FILE *file, tree thu
|
@@ -11705,7 +11845,7 @@ sh_function_ok_for_sibcall (tree decl, t
|
||||||
|
&& (! TARGET_SHCOMPACT
|
||||||
|
|| crtl->args.info.stack_regs == 0)
|
||||||
|
&& ! sh_cfun_interrupt_handler_p ()
|
||||||
|
- && (! flag_pic
|
||||||
|
+ && (! flag_pic || TARGET_FDPIC
|
||||||
|
|| (decl && ! (TREE_PUBLIC (decl) || DECL_WEAK (decl)))
|
||||||
|
|| (decl && DECL_VISIBILITY (decl) != VISIBILITY_DEFAULT)));
|
||||||
|
}
|
||||||
|
@@ -12718,10 +12858,18 @@ sh_output_mi_thunk (FILE *file, tree thu
|
||||||
sibcall = gen_sibcalli_thunk (funexp, const0_rtx);
|
sibcall = gen_sibcalli_thunk (funexp, const0_rtx);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -545,7 +556,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -12762,11 +12908,24 @@ sh_output_mi_thunk (FILE *file, tree thu
|
@@ -12762,11 +12910,24 @@ sh_output_mi_thunk (FILE *file, tree thu
|
||||||
epilogue_completed = 0;
|
epilogue_completed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,7 +582,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
/* If this is not an ordinary function, the name usually comes from a
|
/* If this is not an ordinary function, the name usually comes from a
|
||||||
string literal or an sprintf buffer. Make sure we use the same
|
string literal or an sprintf buffer. Make sure we use the same
|
||||||
string consistently, so that cse will be able to unify address loads. */
|
string consistently, so that cse will be able to unify address loads. */
|
||||||
@@ -12774,7 +12933,7 @@ function_symbol (rtx target, const char
|
@@ -12774,7 +12935,7 @@ function_symbol (rtx target, const char
|
||||||
name = IDENTIFIER_POINTER (get_identifier (name));
|
name = IDENTIFIER_POINTER (get_identifier (name));
|
||||||
sym = gen_rtx_SYMBOL_REF (Pmode, name);
|
sym = gen_rtx_SYMBOL_REF (Pmode, name);
|
||||||
SYMBOL_REF_FLAGS (sym) = SYMBOL_FLAG_FUNCTION;
|
SYMBOL_REF_FLAGS (sym) = SYMBOL_FLAG_FUNCTION;
|
||||||
|
@ -580,7 +591,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
case FUNCTION_ORDINARY:
|
case FUNCTION_ORDINARY:
|
||||||
@@ -12789,14 +12948,27 @@ function_symbol (rtx target, const char
|
@@ -12789,14 +12950,27 @@ function_symbol (rtx target, const char
|
||||||
}
|
}
|
||||||
case SFUNC_STATIC:
|
case SFUNC_STATIC:
|
||||||
{
|
{
|
||||||
|
@ -614,7 +625,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
sym = reg;
|
sym = reg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -13419,6 +13591,12 @@ sh_conditional_register_usage (void)
|
@@ -13419,6 +13593,12 @@ sh_conditional_register_usage (void)
|
||||||
fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
|
fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
|
||||||
call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
|
call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
|
||||||
}
|
}
|
||||||
|
@ -627,7 +638,7 @@ diff -urp ../baseline/gcc-5.2.0/gcc/config/sh/sh.c gcc-5.2.0/gcc/config/sh/sh.c
|
||||||
/* Renesas saves and restores mac registers on call. */
|
/* Renesas saves and restores mac registers on call. */
|
||||||
if (TARGET_HITACHI && ! TARGET_NOMACSAVE)
|
if (TARGET_HITACHI && ! TARGET_NOMACSAVE)
|
||||||
{
|
{
|
||||||
@@ -14496,4 +14674,84 @@ sh_use_by_pieces_infrastructure_p (unsig
|
@@ -14496,4 +14676,84 @@ sh_use_by_pieces_infrastructure_p (unsig
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue