X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fconfig%2Fi386%2Fi386.c;h=eddbfb5b19016a1cc20f57acf9265bcfd2514c01;hp=d89adae344762b12658037d0f941efd50a19ad4e;hb=3cb4b8e201bbdc2105b79eb5995ddd5e6c88c56b;hpb=071be23809d255227730595ebfae85181b744ac8 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d89adae3447..eddbfb5b190 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -12675,6 +12675,9 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) tp = get_thread_pointer (true); dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, tp, dest)); + if (GET_MODE (x) != Pmode) + x = gen_rtx_ZERO_EXTEND (Pmode, x); + set_unique_reg_note (get_last_insn (), REG_EQUAL, x); } else @@ -12683,13 +12686,17 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) if (TARGET_64BIT) { - rtx rax = gen_rtx_REG (Pmode, AX_REG), insns; + rtx rax = gen_rtx_REG (Pmode, AX_REG); + rtx insns; start_sequence (); emit_call_insn (gen_tls_global_dynamic_64 (rax, x, caddr)); insns = get_insns (); end_sequence (); + if (GET_MODE (x) != Pmode) + x = gen_rtx_ZERO_EXTEND (Pmode, x); + RTL_CONST_CALL_P (insns) = 1; emit_libcall_block (insns, dest, rax, x); } @@ -12731,7 +12738,8 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) if (TARGET_64BIT) { - rtx rax = gen_rtx_REG (Pmode, AX_REG), insns, eqv; + rtx rax = gen_rtx_REG (Pmode, AX_REG); + rtx insns, eqv; start_sequence (); emit_call_insn (gen_tls_local_dynamic_base_64 (rax, caddr)); @@ -12759,6 +12767,9 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) { dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, dest, tp)); + if (GET_MODE (x) != Pmode) + x = gen_rtx_ZERO_EXTEND (Pmode, x); + set_unique_reg_note (get_last_insn (), REG_EQUAL, x); } break;