Commit c2bbcb0d by Kaz Kojima

sh.c (prepare_move_operands): Set pic register appropriately for global and…

sh.c (prepare_move_operands): Set pic register appropriately for global and local dynamic tls models even if...

	* config/sh/sh.c (prepare_move_operands): Set pic register
	appropriately for global and local dynamic tls models even
	if flag_pic is unset.

From-SVN: r174792
parent 7c172073
2011-06-08 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/sh.c (prepare_move_operands): Set pic register
appropriately for global and local dynamic tls models even
if flag_pic is unset.
2011-06-07 Jason Merrill <jason@redhat.com> 2011-06-07 Jason Merrill <jason@redhat.com>
* pretty-print.h (ATTRIBUTE_GCC_PPDIAG): Use GCC_DIAG_STYLE if set. * pretty-print.h (ATTRIBUTE_GCC_PPDIAG): Use GCC_DIAG_STYLE if set.
......
...@@ -1844,12 +1844,30 @@ prepare_move_operands (rtx operands[], enum machine_mode mode) ...@@ -1844,12 +1844,30 @@ prepare_move_operands (rtx operands[], enum machine_mode mode)
{ {
rtx tga_op1, tga_ret, tmp, tmp2; rtx tga_op1, tga_ret, tmp, tmp2;
if (! flag_pic
&& (tls_kind == TLS_MODEL_GLOBAL_DYNAMIC
|| tls_kind == TLS_MODEL_LOCAL_DYNAMIC
|| tls_kind == TLS_MODEL_INITIAL_EXEC))
{
/* Don't schedule insns for getting GOT address when
the first scheduling is enabled, to avoid spill
failures for R0. */
if (flag_schedule_insns)
emit_insn (gen_blockage ());
emit_insn (gen_GOTaddr2picreg ());
emit_use (gen_rtx_REG (SImode, PIC_REG));
if (flag_schedule_insns)
emit_insn (gen_blockage ());
}
switch (tls_kind) switch (tls_kind)
{ {
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);
emit_call_insn (gen_tls_global_dynamic (tga_ret, op1)); emit_call_insn (gen_tls_global_dynamic (tga_ret, op1));
op1 = tga_ret; tmp = gen_reg_rtx (Pmode);
emit_move_insn (tmp, tga_ret);
op1 = tmp;
break; break;
case TLS_MODEL_LOCAL_DYNAMIC: case TLS_MODEL_LOCAL_DYNAMIC:
...@@ -1869,18 +1887,6 @@ prepare_move_operands (rtx operands[], enum machine_mode mode) ...@@ -1869,18 +1887,6 @@ prepare_move_operands (rtx operands[], enum machine_mode mode)
break; break;
case TLS_MODEL_INITIAL_EXEC: case TLS_MODEL_INITIAL_EXEC:
if (! flag_pic)
{
/* Don't schedule insns for getting GOT address when
the first scheduling is enabled, to avoid spill
failures for R0. */
if (flag_schedule_insns)
emit_insn (gen_blockage ());
emit_insn (gen_GOTaddr2picreg ());
emit_use (gen_rtx_REG (SImode, PIC_REG));
if (flag_schedule_insns)
emit_insn (gen_blockage ());
}
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);
emit_insn (gen_tls_initial_exec (tga_op1, tmp)); emit_insn (gen_tls_initial_exec (tga_op1, tmp));
......
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