(automata_option "time")
(automata_option "progress")
-;;----------------------------------------------------------------
-;; Microblaze delay slot description
-;;----------------------------------------------------------------
-(define_delay (eq_attr "type" "branch,call,jump")
- [(and (eq_attr "type" "!branch,call,jump,icmp,multi,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,darith")
- (ior (not (match_test "microblaze_no_unsafe_delay"))
- (eq_attr "type" "!fadd,frsub,fmul,fdiv,fcmp,store,load")
- ))
- (nil) (nil)])
-
-
;;----------------------------------------------------------------
;; Microblaze FPU
;;----------------------------------------------------------------
output_asm_insn ("addk\t%0,%1,r0", operands);
output_asm_insn ("addik\t%3,%3,-1", operands);
- output_asm_insn ("bneid\t%3,.-4", operands);
- return "addk\t%0,%0,%0";
+ output_asm_insn ("addk\t%0,%0,%0", operands);
+ return "bnei\t%3,.-8";
}
[(set_attr "type" "multi")
(set_attr "mode" "SI")
if (REGNO (operands[0]) != REGNO (operands[1]))
output_asm_insn ("addk\t%0,r0,%1", operands);
/* Exit the loop if zero shift. */
- output_asm_insn ("beqid\t%3,.+20", operands);
+ output_asm_insn ("beqi\t%3,.+20", operands);
/* Emit the loop. */
- output_asm_insn ("addk\t%0,%0,r0", operands);
output_asm_insn ("addik\t%3,%3,-1", operands);
- output_asm_insn ("bneid\t%3,.-4", operands);
- return "addk\t%0,%0,%0";
+ output_asm_insn ("addk\t%0,%0,%0", operands);
+ return "bnei\t%3,.-8";
}
[(set_attr "type" "multi")
(set_attr "mode" "SI")
if (REGNO (operands[0]) != REGNO (operands[1]))
output_asm_insn ("addk\t%0,r0,%1", operands);
/* Exit the loop if zero shift. */
- output_asm_insn ("beqid\t%3,.+20", operands);
+ output_asm_insn ("beqi\t%3,.+20", operands);
/* Emit the loop. */
- output_asm_insn ("addk\t%0,%0,r0", operands);
output_asm_insn ("addik\t%3,%3,-1", operands);
- output_asm_insn ("bneid\t%3,.-4", operands);
- return "sra\t%0,%0";
+ output_asm_insn ("sra\t%0,%0", operands);
+ return "bnei\t%3,.-8";
}
[(set_attr "type" "multi")
(set_attr "mode" "SI")
if (REGNO (operands[0]) != REGNO (operands[1]))
output_asm_insn ("addk\t%0,r0,%1", operands);
/* Exit the loop if zero shift. */
- output_asm_insn ("beqid\t%3,.+20", operands);
+ output_asm_insn ("beqi\t%3,.+20", operands);
/* Emit the loop. */
- output_asm_insn ("addk\t%0,%0,r0", operands);
output_asm_insn ("addik\t%3,%3,-1", operands);
- output_asm_insn ("bneid\t%3,.-4", operands);
- return "srl\t%0,%0";
+ output_asm_insn ("srl\t%0,%0", operands);
+ return "bnei\t%3,.-8";
}
[(set_attr "type" "multi")
(set_attr "mode" "SI")
""
{
if (operands[3] == pc_rtx)
- return "b%C0i%?\t%z1,%2";
+ return "b%C0i\t%z1,%2";
else
- return "b%N0i%?\t%z1,%3";
+ return "b%N0i\t%z1,%3";
}
[(set_attr "type" "branch")
(set_attr "mode" "none")
""
{
if (GET_CODE (operands[0]) == REG)
- return "br%?\t%0";
+ return "br\t%0";
else
- return "bri%?\t%l0";
+ return "bri\t%l0";
}
[(set_attr "type" "jump")
(set_attr "mode" "none")
(define_insn "indirect_jump_internal1"
[(set (pc) (match_operand:SI 0 "register_operand" "d"))]
""
- "bra%?\t%0"
+ "bra\t%0"
[(set_attr "type" "jump")
(set_attr "mode" "none")
(set_attr "length" "4")])
(match_operand:SI 0 "register_operand" "d"))
(use (label_ref (match_operand 1 "" "")))]
""
- "bra%?\t%0 "
+ "bra\t%0 "
[(set_attr "type" "jump")
(set_attr "mode" "none")
(set_attr "length" "4")])
&& flag_pic"
{
output_asm_insn ("addk\t%0,%0,r20",operands);
- return "bra%?\t%0";
+ return "bra\t%0";
}
[(set_attr "type" "jump")
(set_attr "mode" "none")
""
{
if (microblaze_is_interrupt_handler ())
- return "rtid\tr14, 0\;%#";
+ return "rti\tr14, 0";
else
- return "rtsd\tr15, 8\;%#";
+ return "rts\tr15, 4";
}
[(set_attr "type" "jump")
(set_attr "mode" "none")
""
{
if (microblaze_is_interrupt_handler ())
- return "rtid\tr14,0 \;%#";
+ return "rti\tr14,0";
else
- return "rtsd\tr15,8 \;%#";
+ return "rts\tr15,4";
}
[(set_attr "type" "jump")
(set_attr "mode" "none")
register rtx target2 = gen_rtx_REG (Pmode,
GP_REG_FIRST + MB_ABI_SUB_RETURN_ADDR_REGNUM);
gen_rtx_CLOBBER (VOIDmode, target2);
- return "brlid\tr15,%0\;%#";
+ return "brli\tr15,%0";
}
[(set_attr "type" "call")
(set_attr "mode" "none")
GP_REG_FIRST + MB_ABI_SUB_RETURN_ADDR_REGNUM);
if (GET_CODE (target) == SYMBOL_REF) {
gen_rtx_CLOBBER (VOIDmode, target2);
- return "brlid\tr15,%0\;%#";
+ return "brli\tr15,%0";
} else if (GET_CODE (target) == CONST_INT)
- return "la\t%@,r0,%0\;brald\tr15,%@\;%#";
+ return "la\t%@,r0,%0\;bral\tr15,%@";
else if (GET_CODE (target) == REG)
- return "brald\tr15,%0\;%#";
+ return "bral\tr15,%0";
else {
fprintf (stderr,"Unsupported call insn\n");
return NULL;
register rtx target2=gen_rtx_REG (Pmode,GP_REG_FIRST + MB_ABI_SUB_RETURN_ADDR_REGNUM);
gen_rtx_CLOBBER (VOIDmode,target2);
- return "brlid\tr15,%1\;%#";
+ return "brli\tr15,%1";
}
[(set_attr "type" "call")
(set_attr "mode" "none")
if (GET_CODE (target) == SYMBOL_REF){
gen_rtx_CLOBBER (VOIDmode,target2);
- return "brlid\tr15,%1\;%#";
+ return "brli\tr15,%1";
}
else if (GET_CODE (target) == CONST_INT)
- return "la\t%@,r0,%1\;brald\tr15,%@\;%#";
+ return "la\t%@,r0,%1\;bral\tr15,%@";
else if (GET_CODE (target) == REG)
- return "brald\tr15,%1\;%#";
+ return "bral\tr15,%1";
else
return "Unsupported call insn\n";
}