Commit e65a3857 by David Edelsohn Committed by David Edelsohn

darwin.md (load_macho_picbase): Ignore operand 0.

        * config/rs6000/darwin.md (load_macho_picbase): Ignore operand 0.
        (load_macho_picbase_{si,di}): Convert to LR hard reg.
        (call_indirect_nonlocal_darwin64): Same.
        (call_nonlocal_darwin64): Same.
        (call_value_indirect_nonlocal_darwin64): Same.
        (call_value_nonlocal_darwin64): Same.
        (sibcall_nonlocal_darwin64): Same.
        (sibcall_value_nonlocal_darwin64): Same.
        (sibcall_symbolic_64): Same.
        (sibcall_value_symbolic_64): Same.
        * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Remove
        LR pseudo.
        (rs6000_emit_load_toc_table): Same.
        * config/rs6000/altivec.md (restore_world): Convert to LR hard reg.
        * config/rs6000/rs6000.md (mulh_call): Convert to LR hard reg.
        (mull_call): Same.
        (divss_call): Same.
        (divus_call): Same.
        (quoss_call): Same.
        (quous_call): Same.
        (load_toc_v4_pic_si): Same
        (load_toc_v4_PIC_1): Same.
        (load_toc_v4_PIC_1b): Same.
        (call_indirect_aix{32,64}): Same.
        (call_value_indirect_aix{32,64}): Same.
        (call): Same.
        (call_value): Same.
        (call_local{32,64}): Same.
        (call_value_local{32,64}): Same.
        (call_indirect_nonlocal_aix{32,64}): Same.
        (call_nonlocal_aix{32,64}): Same.
        (call_value_indirect_nonlocal_aix{32,64}): Same.
        (call_value_nonlocal_aix{32,64}): Same.
        (call_indirect_nonlocal_sysv<mode>): Same.
        (call_nonlocal_sysv<mode>): Same.
        (call_value_indirect_nonlocal_sysv<mode>): Same.
        (call_value_nonlocal_sysv<mode>): Same.
        (sibcall): Same.
        (sibcall_local{32,64}): Same.
        (sibcall_value_local{32,64}): Same.
        (sibcall_nonlocal_aix{32,64}): Same.
        (sibcall_value_nonlocal_aix{32,64}): Same.
        (sibcall_value_nonlocal_aix{32,64}): Same.
        (sibcall_nonlocal_sysv<mode>): Same.
        (sibcall_value): Same.
        (sibcall_value_nonlocal_sysv<mode>): Same.

From-SVN: r123193
parent 3303be15
2007-03-25 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/darwin.md (load_macho_picbase): Ignore operand 0.
(load_macho_picbase_{si,di}): Convert to LR hard reg.
(call_indirect_nonlocal_darwin64): Same.
(call_nonlocal_darwin64): Same.
(call_value_indirect_nonlocal_darwin64): Same.
(call_value_nonlocal_darwin64): Same.
(sibcall_nonlocal_darwin64): Same.
(sibcall_value_nonlocal_darwin64): Same.
(sibcall_symbolic_64): Same.
(sibcall_value_symbolic_64): Same.
* config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Remove
LR pseudo.
(rs6000_emit_load_toc_table): Same.
* config/rs6000/altivec.md (restore_world): Convert to LR hard reg.
* config/rs6000/rs6000.md (mulh_call): Convert to LR hard reg.
(mull_call): Same.
(divss_call): Same.
(divus_call): Same.
(quoss_call): Same.
(quous_call): Same.
(load_toc_v4_pic_si): Same
(load_toc_v4_PIC_1): Same.
(load_toc_v4_PIC_1b): Same.
(call_indirect_aix{32,64}): Same.
(call_value_indirect_aix{32,64}): Same.
(call): Same.
(call_value): Same.
(call_local{32,64}): Same.
(call_value_local{32,64}): Same.
(call_indirect_nonlocal_aix{32,64}): Same.
(call_nonlocal_aix{32,64}): Same.
(call_value_indirect_nonlocal_aix{32,64}): Same.
(call_value_nonlocal_aix{32,64}): Same.
(call_indirect_nonlocal_sysv<mode>): Same.
(call_nonlocal_sysv<mode>): Same.
(call_value_indirect_nonlocal_sysv<mode>): Same.
(call_value_nonlocal_sysv<mode>): Same.
(sibcall): Same.
(sibcall_local{32,64}): Same.
(sibcall_value_local{32,64}): Same.
(sibcall_nonlocal_aix{32,64}): Same.
(sibcall_value_nonlocal_aix{32,64}): Same.
(sibcall_nonlocal_sysv<mode>): Same.
(sibcall_value): Same.
(sibcall_value_nonlocal_sysv<mode>): Same.
2007-03-24 Paul Brook <paul@codesourcery.com>
* config/arm/lib1funcs.asm (div0): Use ARM_FUNC_START and do_push.
......
......@@ -312,7 +312,7 @@
(define_insn "*restore_world"
[(match_parallel 0 "restore_world_operation"
[(return)
(use (match_operand:SI 1 "register_operand" "l"))
(use (reg:SI 65))
(use (match_operand:SI 2 "call_operand" "s"))
(clobber (match_operand:SI 3 "gpc_reg_operand" "=r"))])]
"TARGET_MACHO && (DEFAULT_ABI == ABI_DARWIN) && TARGET_32BIT"
......
......@@ -245,28 +245,28 @@ Boston, MA 02110-1301, USA. */
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic"
{
if (TARGET_32BIT)
emit_insn (gen_load_macho_picbase_si (operands[0], operands[1]));
emit_insn (gen_load_macho_picbase_si (operands[1]));
else
emit_insn (gen_load_macho_picbase_di (operands[0], operands[1]));
emit_insn (gen_load_macho_picbase_di (operands[1]));
DONE;
})
(define_insn "load_macho_picbase_si"
[(set (match_operand:SI 0 "register_operand" "=l")
(unspec:SI [(match_operand:SI 1 "immediate_operand" "s")
[(set (reg:SI 65)
(unspec:SI [(match_operand:SI 0 "immediate_operand" "s")
(pc)] UNSPEC_LD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic"
"bcl 20,31,%1\\n%1:"
"bcl 20,31,%0\\n%0:"
[(set_attr "type" "branch")
(set_attr "length" "4")])
(define_insn "load_macho_picbase_di"
[(set (match_operand:DI 0 "register_operand" "=l")
(unspec:DI [(match_operand:DI 1 "immediate_operand" "s")
[(set (reg:DI 65)
(unspec:DI [(match_operand:DI 0 "immediate_operand" "s")
(pc)] UNSPEC_LD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic && TARGET_64BIT"
"bcl 20,31,%1\\n%1:"
"bcl 20,31,%0\\n%0:"
[(set_attr "type" "branch")
(set_attr "length" "4")])
......@@ -312,7 +312,7 @@ Boston, MA 02110-1301, USA. */
[(call (mem:SI (match_operand:DI 0 "register_operand" "c,*l,c,*l"))
(match_operand 1 "" "g,g,g,g"))
(use (match_operand:SI 2 "immediate_operand" "O,O,n,n"))
(clobber (match_scratch:SI 3 "=l,l,l,l"))]
(clobber (reg:SI 65))]
"DEFAULT_ABI == ABI_DARWIN && TARGET_64BIT"
{
return "b%T0l";
......@@ -324,7 +324,7 @@ Boston, MA 02110-1301, USA. */
[(call (mem:SI (match_operand:DI 0 "symbol_ref_operand" "s,s"))
(match_operand 1 "" "g,g"))
(use (match_operand:SI 2 "immediate_operand" "O,n"))
(clobber (match_scratch:SI 3 "=l,l"))]
(clobber (reg:SI 65))]
"(DEFAULT_ABI == ABI_DARWIN)
&& (INTVAL (operands[2]) & CALL_LONG) == 0"
{
......@@ -342,7 +342,7 @@ Boston, MA 02110-1301, USA. */
(call (mem:SI (match_operand:DI 1 "register_operand" "c,*l,c,*l"))
(match_operand 2 "" "g,g,g,g")))
(use (match_operand:SI 3 "immediate_operand" "O,O,n,n"))
(clobber (match_scratch:SI 4 "=l,l,l,l"))]
(clobber (reg:SI 65))]
"DEFAULT_ABI == ABI_DARWIN"
{
return "b%T1l";
......@@ -355,7 +355,7 @@ Boston, MA 02110-1301, USA. */
(call (mem:SI (match_operand:DI 1 "symbol_ref_operand" "s,s"))
(match_operand 2 "" "g,g")))
(use (match_operand:SI 3 "immediate_operand" "O,n"))
(clobber (match_scratch:SI 4 "=l,l"))]
(clobber (reg:SI 65))]
"(DEFAULT_ABI == ABI_DARWIN)
&& (INTVAL (operands[3]) & CALL_LONG) == 0"
{
......@@ -372,7 +372,7 @@ Boston, MA 02110-1301, USA. */
[(call (mem:SI (match_operand:DI 0 "symbol_ref_operand" "s,s"))
(match_operand 1 "" ""))
(use (match_operand 2 "immediate_operand" "O,n"))
(use (match_operand:SI 3 "register_operand" "l,l"))
(use (reg:SI 65))
(return)]
"(DEFAULT_ABI == ABI_DARWIN)
&& (INTVAL (operands[2]) & CALL_LONG) == 0"
......@@ -387,7 +387,7 @@ Boston, MA 02110-1301, USA. */
(call (mem:SI (match_operand:DI 1 "symbol_ref_operand" "s,s"))
(match_operand 2 "" "")))
(use (match_operand:SI 3 "immediate_operand" "O,n"))
(use (match_operand:SI 4 "register_operand" "l,l"))
(use (reg:SI 65))
(return)]
"(DEFAULT_ABI == ABI_DARWIN)
&& (INTVAL (operands[3]) & CALL_LONG) == 0"
......@@ -403,7 +403,7 @@ Boston, MA 02110-1301, USA. */
[(call (mem:SI (match_operand:DI 0 "call_operand" "s,c")) ; 64
(match_operand 1 "" ""))
(use (match_operand 2 "" ""))
(use (match_operand:SI 3 "register_operand" "l,l"))
(use (reg:SI 65))
(return)]
"TARGET_64BIT && DEFAULT_ABI == ABI_DARWIN"
"*
......@@ -423,7 +423,7 @@ Boston, MA 02110-1301, USA. */
(call (mem:SI (match_operand:DI 1 "call_operand" "s,c"))
(match_operand 2 "" "")))
(use (match_operand:SI 3 "" ""))
(use (match_operand:SI 4 "register_operand" "l,l"))
(use (reg:SI 65))
(return)]
"TARGET_64BIT && DEFAULT_ABI == ABI_DARWIN"
"*
......
......@@ -3444,17 +3444,17 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
rs6000_emit_move (got, gsym, Pmode);
else
{
rtx tempLR, tmp3, mem;
rtx tmp3, mem;
rtx first, last;
tempLR = gen_reg_rtx (Pmode);
tmp1 = gen_reg_rtx (Pmode);
tmp2 = gen_reg_rtx (Pmode);
tmp3 = gen_reg_rtx (Pmode);
mem = gen_const_mem (Pmode, tmp1);
first = emit_insn (gen_load_toc_v4_PIC_1b (tempLR, gsym));
emit_move_insn (tmp1, tempLR);
first = emit_insn (gen_load_toc_v4_PIC_1b (gsym));
emit_move_insn (tmp1,
gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM));
emit_move_insn (tmp2, mem);
emit_insn (gen_addsi3 (tmp3, tmp1, tmp2));
last = emit_move_insn (got, tmp3);
......@@ -13988,7 +13988,7 @@ rs6000_emit_load_toc_table (int fromprolog)
if (TARGET_ELF && TARGET_SECURE_PLT && DEFAULT_ABI != ABI_AIX && flag_pic)
{
char buf[30];
rtx lab, tmp1, tmp2, got, tempLR;
rtx lab, tmp1, tmp2, got;
ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno);
lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
......@@ -14002,13 +14002,11 @@ rs6000_emit_load_toc_table (int fromprolog)
tmp1 = gen_reg_rtx (Pmode);
tmp2 = gen_reg_rtx (Pmode);
}
tempLR = (fromprolog
? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
: gen_reg_rtx (Pmode));
insn = emit_insn (gen_load_toc_v4_PIC_1 (tempLR, lab));
insn = emit_insn (gen_load_toc_v4_PIC_1 (lab));
if (fromprolog)
rs6000_maybe_dead (insn);
insn = emit_move_insn (tmp1, tempLR);
insn = emit_move_insn (tmp1,
gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM));
if (fromprolog)
rs6000_maybe_dead (insn);
insn = emit_insn (gen_load_toc_v4_PIC_3b (tmp2, tmp1, got, lab));
......@@ -14020,23 +14018,17 @@ rs6000_emit_load_toc_table (int fromprolog)
}
else if (TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 1)
{
rtx tempLR = (fromprolog
? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
: gen_reg_rtx (Pmode));
insn = emit_insn (gen_load_toc_v4_pic_si (tempLR));
insn = emit_insn (gen_load_toc_v4_pic_si ());
if (fromprolog)
rs6000_maybe_dead (insn);
insn = emit_move_insn (dest, tempLR);
insn = emit_move_insn (dest,
gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM));
if (fromprolog)
rs6000_maybe_dead (insn);
}
else if (TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2)
{
char buf[30];
rtx tempLR = (fromprolog
? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
: gen_reg_rtx (Pmode));
rtx temp0 = (fromprolog
? gen_rtx_REG (Pmode, 0)
: gen_reg_rtx (Pmode));
......@@ -14051,9 +14043,10 @@ rs6000_emit_load_toc_table (int fromprolog)
ASM_GENERATE_INTERNAL_LABEL (buf, "LCL", rs6000_pic_labelno);
symL = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1 (tempLR,
symF)));
rs6000_maybe_dead (emit_move_insn (dest, tempLR));
rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1 (symF)));
rs6000_maybe_dead (emit_move_insn (dest,
gen_rtx_REG (Pmode,
LINK_REGISTER_REGNUM)));
rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_2 (temp0, dest,
symL,
symF)));
......@@ -14063,8 +14056,9 @@ rs6000_emit_load_toc_table (int fromprolog)
rtx tocsym;
tocsym = gen_rtx_SYMBOL_REF (Pmode, toc_label_name);
emit_insn (gen_load_toc_v4_PIC_1b (tempLR, tocsym));
emit_move_insn (dest, tempLR);
emit_insn (gen_load_toc_v4_PIC_1b (tocsym));
emit_move_insn (dest,
gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM));
emit_move_insn (temp0, gen_rtx_MEM (Pmode, dest));
}
insn = emit_insn (gen_addsi3 (dest, temp0, dest));
......
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