瀏覽代碼

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.
Rich Felker 9 年之前
父節點
當前提交
d0ca7b1054
共有 1 個文件被更改,包括 41 次插入30 次删除
  1. 41 30
      patches/gcc-5.2.0/0007-fdpic.diff

+ 41 - 30
patches/gcc-5.2.0/0007-fdpic.diff

@@ -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
      }
      }
  }
  }