m68k.c (override_options): Remove USE_GAS, use %.
* config/m68k/m68k.c (override_options): Remove USE_GAS, use %. syntax. (output_dbcc_and_branch, output_scc_di): Replace all jbcc alternatives with just jcc. * config/m68k/m68k.md (addsi_lshrsi_31, beq0_di, bne0_di, bge0_di, blt0_di, bgtu, bltu, bgeu, bleu, bgtu_rev, bltu_rev, bgeu_rev, bleu_rev, jump, dbne_hi, dbne_si, dbge_hi, dbge_si): Likewise. From-SVN: r128576
This commit is contained in:
parent
09e21d09bd
commit
da398bb590
3 changed files with 77 additions and 230 deletions
|
@ -1,3 +1,14 @@
|
|||
2007-09-18 Roman Zippel <zippel@linux-m68k.org>
|
||||
|
||||
* config/m68k/m68k.c (override_options): Remove USE_GAS,
|
||||
use %. syntax.
|
||||
(output_dbcc_and_branch, output_scc_di): Replace all jbcc
|
||||
alternatives with just jcc.
|
||||
* config/m68k/m68k.md (addsi_lshrsi_31, beq0_di, bne0_di,
|
||||
bge0_di, blt0_di, bgtu, bltu, bgeu, bleu, bgtu_rev,
|
||||
bltu_rev, bgeu_rev, bleu_rev, jump, dbne_hi, dbne_si,
|
||||
dbge_hi, dbge_si): Likewise.
|
||||
|
||||
2007-09-18 Roman Zippel <zippel@linux-m68k.org>
|
||||
|
||||
* config/m68k/m68k.md (beq, bne, bgt, blt, bge, ble, bordered,
|
||||
|
|
|
@ -571,11 +571,7 @@ override_options (void)
|
|||
{
|
||||
m68k_symbolic_call_var = M68K_SYMBOLIC_CALL_JSR;
|
||||
|
||||
#if MOTOROLA && !defined (USE_GAS)
|
||||
m68k_symbolic_jump = "jmp %a0";
|
||||
#else
|
||||
m68k_symbolic_jump = "jra %a0";
|
||||
#endif
|
||||
}
|
||||
else if (TARGET_ID_SHARED_LIBRARY)
|
||||
/* All addresses must be loaded from the GOT. */
|
||||
|
@ -590,15 +586,9 @@ override_options (void)
|
|||
if (TARGET_ISAC)
|
||||
/* No unconditional long branch */;
|
||||
else if (TARGET_PCREL)
|
||||
m68k_symbolic_jump = "bra.l %c0";
|
||||
m68k_symbolic_jump = "bra%.l %c0";
|
||||
else
|
||||
{
|
||||
#if defined(USE_GAS)
|
||||
m68k_symbolic_jump = "bra.l %p0";
|
||||
#else
|
||||
m68k_symbolic_jump = "bra %p0";
|
||||
#endif
|
||||
}
|
||||
m68k_symbolic_jump = "bra%.l %p0";
|
||||
/* Turn off function cse if we are doing PIC. We always want
|
||||
function call to be done as `bsr foo@PLTPC'. */
|
||||
/* ??? It's traditional to do this for -mpcrel too, but it isn't
|
||||
|
@ -609,23 +599,15 @@ override_options (void)
|
|||
switch (m68k_symbolic_call_var)
|
||||
{
|
||||
case M68K_SYMBOLIC_CALL_JSR:
|
||||
#if MOTOROLA && !defined (USE_GAS)
|
||||
m68k_symbolic_call = "jsr %a0";
|
||||
#else
|
||||
m68k_symbolic_call = "jbsr %a0";
|
||||
#endif
|
||||
break;
|
||||
|
||||
case M68K_SYMBOLIC_CALL_BSR_C:
|
||||
m68k_symbolic_call = "bsr.l %c0";
|
||||
m68k_symbolic_call = "bsr%.l %c0";
|
||||
break;
|
||||
|
||||
case M68K_SYMBOLIC_CALL_BSR_P:
|
||||
#if defined(USE_GAS)
|
||||
m68k_symbolic_call = "bsr.l %p0";
|
||||
#else
|
||||
m68k_symbolic_call = "bsr %p0";
|
||||
#endif
|
||||
m68k_symbolic_call = "bsr%.l %p0";
|
||||
break;
|
||||
|
||||
case M68K_SYMBOLIC_CALL_NONE:
|
||||
|
@ -1363,73 +1345,43 @@ output_dbcc_and_branch (rtx *operands)
|
|||
switch (GET_CODE (operands[3]))
|
||||
{
|
||||
case EQ:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbeq %0,%l1\n\tjbeq %l2"
|
||||
: "dbeq %0,%l1\n\tjeq %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbeq %0,%l1\n\tjeq %l2", operands);
|
||||
break;
|
||||
|
||||
case NE:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbne %0,%l1\n\tjbne %l2"
|
||||
: "dbne %0,%l1\n\tjne %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbne %0,%l1\n\tjne %l2", operands);
|
||||
break;
|
||||
|
||||
case GT:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbgt %0,%l1\n\tjbgt %l2"
|
||||
: "dbgt %0,%l1\n\tjgt %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbgt %0,%l1\n\tjgt %l2", operands);
|
||||
break;
|
||||
|
||||
case GTU:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbhi %0,%l1\n\tjbhi %l2"
|
||||
: "dbhi %0,%l1\n\tjhi %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbhi %0,%l1\n\tjhi %l2", operands);
|
||||
break;
|
||||
|
||||
case LT:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dblt %0,%l1\n\tjblt %l2"
|
||||
: "dblt %0,%l1\n\tjlt %l2",
|
||||
operands);
|
||||
output_asm_insn ("dblt %0,%l1\n\tjlt %l2", operands);
|
||||
break;
|
||||
|
||||
case LTU:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbcs %0,%l1\n\tjbcs %l2"
|
||||
: "dbcs %0,%l1\n\tjcs %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbcs %0,%l1\n\tjcs %l2", operands);
|
||||
break;
|
||||
|
||||
case GE:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbge %0,%l1\n\tjbge %l2"
|
||||
: "dbge %0,%l1\n\tjge %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbge %0,%l1\n\tjge %l2", operands);
|
||||
break;
|
||||
|
||||
case GEU:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbcc %0,%l1\n\tjbcc %l2"
|
||||
: "dbcc %0,%l1\n\tjcc %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbcc %0,%l1\n\tjcc %l2", operands);
|
||||
break;
|
||||
|
||||
case LE:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dble %0,%l1\n\tjble %l2"
|
||||
: "dble %0,%l1\n\tjle %l2",
|
||||
operands);
|
||||
output_asm_insn ("dble %0,%l1\n\tjle %l2", operands);
|
||||
break;
|
||||
|
||||
case LEU:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "dbls %0,%l1\n\tjbls %l2"
|
||||
: "dbls %0,%l1\n\tjls %l2",
|
||||
operands);
|
||||
output_asm_insn ("dbls %0,%l1\n\tjls %l2", operands);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1441,10 +1393,7 @@ output_dbcc_and_branch (rtx *operands)
|
|||
switch (GET_MODE (operands[0]))
|
||||
{
|
||||
case SImode:
|
||||
output_asm_insn (MOTOROLA
|
||||
? "clr%.w %0\n\tsubq%.l #1,%0\n\tjbpl %l1"
|
||||
: "clr%.w %0\n\tsubq%.l #1,%0\n\tjpl %l1",
|
||||
operands);
|
||||
output_asm_insn ("clr%.w %0\n\tsubq%.l #1,%0\n\tjpl %l1", operands);
|
||||
break;
|
||||
|
||||
case HImode:
|
||||
|
@ -1490,12 +1439,7 @@ output_scc_di (rtx op, rtx operand1, rtx operand2, rtx dest)
|
|||
}
|
||||
loperands[4] = gen_label_rtx ();
|
||||
if (operand2 != const0_rtx)
|
||||
{
|
||||
output_asm_insn (MOTOROLA
|
||||
? "cmp%.l %2,%0\n\tjbne %l4\n\tcmp%.l %3,%1"
|
||||
: "cmp%.l %2,%0\n\tjne %l4\n\tcmp%.l %3,%1",
|
||||
loperands);
|
||||
}
|
||||
output_asm_insn ("cmp%.l %2,%0\n\tjne %l4\n\tcmp%.l %3,%1", loperands);
|
||||
else
|
||||
{
|
||||
if (TARGET_68020 || TARGET_COLDFIRE || ! ADDRESS_REG_P (loperands[0]))
|
||||
|
@ -1503,7 +1447,7 @@ output_scc_di (rtx op, rtx operand1, rtx operand2, rtx dest)
|
|||
else
|
||||
output_asm_insn ("cmp%.w #0,%0", loperands);
|
||||
|
||||
output_asm_insn (MOTOROLA ? "jbne %l4" : "jne %l4", loperands);
|
||||
output_asm_insn ("jne %l4", loperands);
|
||||
|
||||
if (TARGET_68020 || TARGET_COLDFIRE || ! ADDRESS_REG_P (loperands[1]))
|
||||
output_asm_insn ("tst%.l %1", loperands);
|
||||
|
@ -1529,8 +1473,7 @@ output_scc_di (rtx op, rtx operand1, rtx operand2, rtx dest)
|
|||
|
||||
case GT:
|
||||
loperands[6] = gen_label_rtx ();
|
||||
output_asm_insn (MOTOROLA ? "shi %5\n\tjbra %l6" : "shi %5\n\tjra %l6",
|
||||
loperands);
|
||||
output_asm_insn ("shi %5\n\tjra %l6", loperands);
|
||||
(*targetm.asm_out.internal_label) (asm_out_file, "L",
|
||||
CODE_LABEL_NUMBER (loperands[4]));
|
||||
output_asm_insn ("sgt %5", loperands);
|
||||
|
@ -1546,8 +1489,7 @@ output_scc_di (rtx op, rtx operand1, rtx operand2, rtx dest)
|
|||
|
||||
case LT:
|
||||
loperands[6] = gen_label_rtx ();
|
||||
output_asm_insn (MOTOROLA ? "scs %5\n\tjbra %l6" : "scs %5\n\tjra %l6",
|
||||
loperands);
|
||||
output_asm_insn ("scs %5\n\tjra %l6", loperands);
|
||||
(*targetm.asm_out.internal_label) (asm_out_file, "L",
|
||||
CODE_LABEL_NUMBER (loperands[4]));
|
||||
output_asm_insn ("slt %5", loperands);
|
||||
|
@ -1563,8 +1505,7 @@ output_scc_di (rtx op, rtx operand1, rtx operand2, rtx dest)
|
|||
|
||||
case GE:
|
||||
loperands[6] = gen_label_rtx ();
|
||||
output_asm_insn (MOTOROLA ? "scc %5\n\tjbra %l6" : "scc %5\n\tjra %l6",
|
||||
loperands);
|
||||
output_asm_insn ("scc %5\n\tjra %l6", loperands);
|
||||
(*targetm.asm_out.internal_label) (asm_out_file, "L",
|
||||
CODE_LABEL_NUMBER (loperands[4]));
|
||||
output_asm_insn ("sge %5", loperands);
|
||||
|
@ -1580,8 +1521,7 @@ output_scc_di (rtx op, rtx operand1, rtx operand2, rtx dest)
|
|||
|
||||
case LE:
|
||||
loperands[6] = gen_label_rtx ();
|
||||
output_asm_insn (MOTOROLA ? "sls %5\n\tjbra %l6" : "sls %5\n\tjra %l6",
|
||||
loperands);
|
||||
output_asm_insn ("sls %5\n\tjra %l6", loperands);
|
||||
(*targetm.asm_out.internal_label) (asm_out_file, "L",
|
||||
CODE_LABEL_NUMBER (loperands[4]));
|
||||
output_asm_insn ("sle %5", loperands);
|
||||
|
|
|
@ -2400,7 +2400,7 @@
|
|||
operands[2] = gen_rtx_MEM (SImode, XEXP (XEXP (operands[0], 0), 0));
|
||||
}
|
||||
output_asm_insn ("move%.l %1,%0", operands);
|
||||
output_asm_insn (MOTOROLA ? "jbpl %l3" : "jpl %l3", operands);
|
||||
output_asm_insn ("jpl %l3", operands);
|
||||
output_asm_insn ("addq%.l #1,%2", operands);
|
||||
(*targetm.asm_out.internal_label) (asm_out_file, "L",
|
||||
CODE_LABEL_NUMBER (operands[3]));
|
||||
|
@ -6283,19 +6283,14 @@
|
|||
{
|
||||
CC_STATUS_INIT;
|
||||
if (which_alternative == 1)
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "move%.l %0,%2\;or%.l %0,%2\;jbeq %l1";
|
||||
else
|
||||
return "move%.l %0,%2\;or%.l %0,%2\;jeq %l1";
|
||||
}
|
||||
return "move%.l %0,%2\;or%.l %0,%2\;jeq %l1";
|
||||
if ((cc_prev_status.value1
|
||||
&& rtx_equal_p (cc_prev_status.value1, operands[0]))
|
||||
|| (cc_prev_status.value2
|
||||
&& rtx_equal_p (cc_prev_status.value2, operands[0])))
|
||||
{
|
||||
cc_status = cc_prev_status;
|
||||
return MOTOROLA ? "jbeq %l1" : "jeq %l1";
|
||||
return "jeq %l1";
|
||||
}
|
||||
if (GET_CODE (operands[0]) == REG)
|
||||
operands[3] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
|
||||
|
@ -6306,40 +6301,17 @@
|
|||
if (reg_overlap_mentioned_p (operands[2], operands[0]))
|
||||
{
|
||||
if (reg_overlap_mentioned_p (operands[2], operands[3]))
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "or%.l %0,%2\;jbeq %l1";
|
||||
else
|
||||
return "or%.l %0,%2\;jeq %l1";
|
||||
}
|
||||
return "or%.l %0,%2\;jeq %l1";
|
||||
else
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "or%.l %3,%2\;jbeq %l1";
|
||||
else
|
||||
return "or%.l %3,%2\;jeq %l1";
|
||||
}
|
||||
return "or%.l %3,%2\;jeq %l1";
|
||||
}
|
||||
if (MOTOROLA)
|
||||
return "move%.l %0,%2\;or%.l %3,%2\;jbeq %l1";
|
||||
else
|
||||
return "move%.l %0,%2\;or%.l %3,%2\;jeq %l1";
|
||||
return "move%.l %0,%2\;or%.l %3,%2\;jeq %l1";
|
||||
}
|
||||
operands[4] = gen_label_rtx();
|
||||
if (TARGET_68020 || TARGET_COLDFIRE)
|
||||
{
|
||||
if (MOTOROLA)
|
||||
output_asm_insn ("tst%.l %0\;jbne %l4\;tst%.l %3\;jbeq %l1", operands);
|
||||
else
|
||||
output_asm_insn ("tst%.l %0\;jne %l4\;tst%.l %3\;jeq %l1", operands);
|
||||
}
|
||||
output_asm_insn ("tst%.l %0\;jne %l4\;tst%.l %3\;jeq %l1", operands);
|
||||
else
|
||||
{
|
||||
if (MOTOROLA)
|
||||
output_asm_insn ("cmp%.w #0,%0\;jbne %l4\;cmp%.w #0,%3\;jbeq %l1", operands);
|
||||
else
|
||||
output_asm_insn ("cmp%.w #0,%0\;jne %l4\;cmp%.w #0,%3\;jeq %l1", operands);
|
||||
}
|
||||
output_asm_insn ("cmp%.w #0,%0\;jne %l4\;cmp%.w #0,%3\;jeq %l1", operands);
|
||||
(*targetm.asm_out.internal_label) (asm_out_file, "L",
|
||||
CODE_LABEL_NUMBER (operands[4]));
|
||||
return "";
|
||||
|
@ -6360,7 +6332,7 @@
|
|||
&& rtx_equal_p (cc_prev_status.value2, operands[0])))
|
||||
{
|
||||
cc_status = cc_prev_status;
|
||||
return MOTOROLA ? "jbne %l1" : "jne %l1";
|
||||
return "jne %l1";
|
||||
}
|
||||
CC_STATUS_INIT;
|
||||
if (GET_CODE (operands[0]) == REG)
|
||||
|
@ -6372,39 +6344,16 @@
|
|||
if (reg_overlap_mentioned_p (operands[2], operands[0]))
|
||||
{
|
||||
if (reg_overlap_mentioned_p (operands[2], operands[3]))
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "or%.l %0,%2\;jbne %l1";
|
||||
else
|
||||
return "or%.l %0,%2\;jne %l1";
|
||||
}
|
||||
return "or%.l %0,%2\;jne %l1";
|
||||
else
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "or%.l %3,%2\;jbne %l1";
|
||||
else
|
||||
return "or%.l %3,%2\;jne %l1";
|
||||
}
|
||||
return "or%.l %3,%2\;jne %l1";
|
||||
}
|
||||
if (MOTOROLA)
|
||||
return "move%.l %0,%2\;or%.l %3,%2\;jbne %l1";
|
||||
else
|
||||
return "move%.l %0,%2\;or%.l %3,%2\;jne %l1";
|
||||
return "move%.l %0,%2\;or%.l %3,%2\;jne %l1";
|
||||
}
|
||||
if (TARGET_68020 || TARGET_COLDFIRE)
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "tst%.l %0\;jbne %l1\;tst%.l %3\;jbne %l1";
|
||||
else
|
||||
return "tst%.l %0\;jne %l1\;tst%.l %3\;jne %l1";
|
||||
}
|
||||
return "tst%.l %0\;jne %l1\;tst%.l %3\;jne %l1";
|
||||
else
|
||||
{
|
||||
if (MOTOROLA)
|
||||
return "cmp%.w #0,%0\;jbne %l1\;cmp%.w #0,%3\;jbne %l1";
|
||||
else
|
||||
return "cmp%.w #0,%0\;jne %l1\;cmp%.w #0,%3\;jne %l1";
|
||||
}
|
||||
return "cmp%.w #0,%0\;jne %l1\;cmp%.w #0,%3\;jne %l1";
|
||||
})
|
||||
|
||||
(define_insn "bge0_di"
|
||||
|
@ -6421,14 +6370,7 @@
|
|||
&& rtx_equal_p (cc_prev_status.value2, operands[0])))
|
||||
{
|
||||
cc_status = cc_prev_status;
|
||||
if (cc_status.flags & CC_REVERSED)
|
||||
{
|
||||
return MOTOROLA ? "jble %l1" : "jle %l1";
|
||||
}
|
||||
else
|
||||
{
|
||||
return MOTOROLA ? "jbpl %l1" : "jpl %l1";
|
||||
}
|
||||
return cc_status.flags & CC_REVERSED ? "jle %l1" : "jpl %l1";
|
||||
}
|
||||
CC_STATUS_INIT;
|
||||
if (TARGET_68020 || TARGET_COLDFIRE || ! ADDRESS_REG_P (operands[0]))
|
||||
|
@ -6438,7 +6380,7 @@
|
|||
/* On an address reg, cmpw may replace cmpl. */
|
||||
output_asm_insn("cmp%.w #0,%0", operands);
|
||||
}
|
||||
return MOTOROLA ? "jbpl %l1" : "jpl %l1";
|
||||
return "jpl %l1";
|
||||
})
|
||||
|
||||
(define_insn "blt0_di"
|
||||
|
@ -6455,14 +6397,7 @@
|
|||
&& rtx_equal_p (cc_prev_status.value2, operands[0])))
|
||||
{
|
||||
cc_status = cc_prev_status;
|
||||
if (cc_status.flags & CC_REVERSED)
|
||||
{
|
||||
return MOTOROLA ? "jbgt %l1" : "jgt %l1";
|
||||
}
|
||||
else
|
||||
{
|
||||
return MOTOROLA ? "jbmi %l1" : "jmi %l1";
|
||||
}
|
||||
return cc_status.flags & CC_REVERSED ? "jgt %l1" : "jmi %l1";
|
||||
}
|
||||
CC_STATUS_INIT;
|
||||
if (TARGET_68020 || TARGET_COLDFIRE || ! ADDRESS_REG_P (operands[0]))
|
||||
|
@ -6472,8 +6407,7 @@
|
|||
/* On an address reg, cmpw may replace cmpl. */
|
||||
output_asm_insn("cmp%.w #0,%0", operands);
|
||||
}
|
||||
|
||||
return MOTOROLA ? "jbmi %l1" : "jmi %l1";
|
||||
return "jmi %l1";
|
||||
})
|
||||
|
||||
(define_insn "beq"
|
||||
|
@ -6522,9 +6456,7 @@
|
|||
(label_ref (match_operand 0 "" ""))
|
||||
(pc)))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbhi %l0" : "jhi %l0";
|
||||
}
|
||||
"jhi %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "blt"
|
||||
|
@ -6547,9 +6479,7 @@
|
|||
(label_ref (match_operand 0 "" ""))
|
||||
(pc)))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbcs %l0" : "jcs %l0";
|
||||
}
|
||||
"jcs %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "bge"
|
||||
|
@ -6570,9 +6500,7 @@
|
|||
(label_ref (match_operand 0 "" ""))
|
||||
(pc)))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbcc %l0" : "jcc %l0";
|
||||
}
|
||||
"jcc %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "ble"
|
||||
|
@ -6594,9 +6522,7 @@
|
|||
(label_ref (match_operand 0 "" ""))
|
||||
(pc)))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbls %l0" : "jls %l0";
|
||||
}
|
||||
"jls %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "bordered"
|
||||
|
@ -6725,16 +6651,14 @@
|
|||
}
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*bgtu2"
|
||||
(define_insn "*bgtu_rev"
|
||||
[(set (pc)
|
||||
(if_then_else (gtu (cc0)
|
||||
(const_int 0))
|
||||
(pc)
|
||||
(label_ref (match_operand 0 "" ""))))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbls %l0" : "jls %l0";
|
||||
}
|
||||
"jls %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*blt_rev"
|
||||
|
@ -6749,16 +6673,14 @@
|
|||
}
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*bltu2"
|
||||
(define_insn "*bltu_rev"
|
||||
[(set (pc)
|
||||
(if_then_else (ltu (cc0)
|
||||
(const_int 0))
|
||||
(pc)
|
||||
(label_ref (match_operand 0 "" ""))))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbcc %l0" : "jcc %l0";
|
||||
}
|
||||
"jcc %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*bge_rev"
|
||||
|
@ -6773,16 +6695,14 @@
|
|||
}
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*bgeu2"
|
||||
(define_insn "*bgeu_rev"
|
||||
[(set (pc)
|
||||
(if_then_else (geu (cc0)
|
||||
(const_int 0))
|
||||
(pc)
|
||||
(label_ref (match_operand 0 "" ""))))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbcs %l0" : "jcs %l0";
|
||||
}
|
||||
"jcs %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*ble_rev"
|
||||
|
@ -6797,16 +6717,14 @@
|
|||
}
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*bleu2"
|
||||
(define_insn "*bleu_rev"
|
||||
[(set (pc)
|
||||
(if_then_else (leu (cc0)
|
||||
(const_int 0))
|
||||
(pc)
|
||||
(label_ref (match_operand 0 "" ""))))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbhi %l0" : "jhi %l0";
|
||||
}
|
||||
"jhi %l0"
|
||||
[(set_attr "type" "bcc")])
|
||||
|
||||
(define_insn "*bordered_rev"
|
||||
|
@ -6902,9 +6820,7 @@
|
|||
[(set (pc)
|
||||
(label_ref (match_operand 0 "" "")))]
|
||||
""
|
||||
{
|
||||
return MOTOROLA ? "jbra %l0" : "jra %l0";
|
||||
}
|
||||
"jra %l0"
|
||||
[(set_attr "type" "bra")])
|
||||
|
||||
(define_expand "tablejump"
|
||||
|
@ -6954,7 +6870,7 @@
|
|||
})
|
||||
|
||||
;; Decrement-and-branch insns.
|
||||
(define_insn ""
|
||||
(define_insn "*dbne_hi"
|
||||
[(set (pc)
|
||||
(if_then_else
|
||||
(ne (match_operand:HI 0 "nonimmediate_operand" "+d*g")
|
||||
|
@ -6970,15 +6886,11 @@
|
|||
if (DATA_REG_P (operands[0]))
|
||||
return "dbra %0,%l1";
|
||||
if (GET_CODE (operands[0]) == MEM)
|
||||
return MOTOROLA ?
|
||||
"subq%.w #1,%0\;jbcc %l1" :
|
||||
"subqw #1,%0\;jcc %l1";
|
||||
return MOTOROLA ?
|
||||
"subq%.w #1,%0\;cmp%.w #-1,%0\;jbne %l1" :
|
||||
"subqw #1,%0\;cmpw #-1,%0\;jne %l1";
|
||||
return "subq%.w #1,%0\;jcc %l1";
|
||||
return "subq%.w #1,%0\;cmp%.w #-1,%0\;jne %l1";
|
||||
})
|
||||
|
||||
(define_insn ""
|
||||
(define_insn "*dbne_si"
|
||||
[(set (pc)
|
||||
(if_then_else
|
||||
(ne (match_operand:SI 0 "nonimmediate_operand" "+d*g")
|
||||
|
@ -6992,21 +6904,15 @@
|
|||
{
|
||||
CC_STATUS_INIT;
|
||||
if (DATA_REG_P (operands[0]))
|
||||
return MOTOROLA ?
|
||||
"dbra %0,%l1\;clr%.w %0\;subq%.l #1,%0\;jbcc %l1" :
|
||||
"dbra %0,%l1\;clr%.w %0\;subq%.l #1,%0\;jcc %l1";
|
||||
return "dbra %0,%l1\;clr%.w %0\;subq%.l #1,%0\;jcc %l1";
|
||||
if (GET_CODE (operands[0]) == MEM)
|
||||
return MOTOROLA ?
|
||||
"subq%.l #1,%0\;jbcc %l1" :
|
||||
"subq%.l #1,%0\;jcc %l1";
|
||||
return MOTOROLA ?
|
||||
"subq.l #1,%0\;cmp.l #-1,%0\;jbne %l1" :
|
||||
"subql #1,%0\;cmpl #-1,%0\;jne %l1";
|
||||
return "subq%.l #1,%0\;jcc %l1";
|
||||
return "subq%.l #1,%0\;cmp%.l #-1,%0\;jne %l1";
|
||||
})
|
||||
|
||||
;; Two dbra patterns that use REG_NOTES info generated by strength_reduce.
|
||||
|
||||
(define_insn ""
|
||||
(define_insn "*dbge_hi"
|
||||
[(set (pc)
|
||||
(if_then_else
|
||||
(ge (plus:HI (match_operand:HI 0 "nonimmediate_operand" "+d*am")
|
||||
|
@ -7023,12 +6929,8 @@
|
|||
if (DATA_REG_P (operands[0]))
|
||||
return "dbra %0,%l1";
|
||||
if (GET_CODE (operands[0]) == MEM)
|
||||
return MOTOROLA ?
|
||||
"subq%.w #1,%0\;jbcc %l1" :
|
||||
"subq%.w #1,%0\;jcc %l1";
|
||||
return MOTOROLA ?
|
||||
"subq.w #1,%0\;cmp.w #-1,%0\;jbne %l1" :
|
||||
"subqw #1,%0\;cmpw #-1,%0\;jne %l1";
|
||||
return "subq%.w #1,%0\;jcc %l1";
|
||||
return "subq%.w #1,%0\;cmp%.w #-1,%0\;jne %l1";
|
||||
})
|
||||
|
||||
(define_expand "decrement_and_branch_until_zero"
|
||||
|
@ -7045,7 +6947,7 @@
|
|||
""
|
||||
"")
|
||||
|
||||
(define_insn ""
|
||||
(define_insn "*dbge_si"
|
||||
[(set (pc)
|
||||
(if_then_else
|
||||
(ge (plus:SI (match_operand:SI 0 "nonimmediate_operand" "+d*am")
|
||||
|
@ -7060,16 +6962,10 @@
|
|||
{
|
||||
CC_STATUS_INIT;
|
||||
if (DATA_REG_P (operands[0]))
|
||||
return MOTOROLA ?
|
||||
"dbra %0,%l1\;clr%.w %0\;subq%.l #1,%0\;jbcc %l1" :
|
||||
"dbra %0,%l1\;clr%.w %0\;subql #1,%0\;jcc %l1";
|
||||
return "dbra %0,%l1\;clr%.w %0\;subq%.l #1,%0\;jcc %l1";
|
||||
if (GET_CODE (operands[0]) == MEM)
|
||||
return MOTOROLA ?
|
||||
"subq%.l #1,%0\;jbcc %l1" :
|
||||
"subql #1,%0\;jcc %l1";
|
||||
return MOTOROLA ?
|
||||
"subq.l #1,%0\;cmp.l #-1,%0\;jbne %l1" :
|
||||
"subql #1,%0\;cmpl #-1,%0\;jne %l1";
|
||||
return "subq%.l #1,%0\;jcc %l1";
|
||||
return "subq%.l #1,%0\;cmp%.l #-1,%0\;jne %l1";
|
||||
})
|
||||
|
||||
(define_expand "sibcall"
|
||||
|
|
Loading…
Add table
Reference in a new issue