From: Martin Meloun Date: Mon, 23 Sep 2013 12:55:48 +0000 (+0200) Subject: MBTumbl: Fixes for mbtumbl in gcc - no delay bit X-Git-Url: http://rtime.felk.cvut.cz/gitweb/fpga/lx-cpu1/gcc-tumbl.git/commitdiff_plain/22a37977c01486babc1fec078a7b8a4084017d55 MBTumbl: Fixes for mbtumbl in gcc - no delay bit Signed-off-by: Martin Meloun --- diff --git a/gcc/config/mbtumbl/mbtumbl.md b/gcc/config/mbtumbl/mbtumbl.md index a4c341f66b3..3b60c5d5e4e 100644 --- a/gcc/config/mbtumbl/mbtumbl.md +++ b/gcc/config/mbtumbl/mbtumbl.md @@ -353,17 +353,6 @@ (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 ;;---------------------------------------------------------------- @@ -1401,8 +1390,8 @@ 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") @@ -1464,12 +1453,11 @@ 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") @@ -1553,12 +1541,11 @@ 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") @@ -1642,12 +1629,11 @@ 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") @@ -1778,9 +1764,9 @@ "" { 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") @@ -1796,9 +1782,9 @@ "" { 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") @@ -1822,7 +1808,7 @@ (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")]) @@ -1848,7 +1834,7 @@ (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")]) @@ -1874,7 +1860,7 @@ && 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") @@ -1960,9 +1946,9 @@ "" { 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") @@ -1977,9 +1963,9 @@ "" { 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") @@ -2065,7 +2051,7 @@ 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") @@ -2082,11 +2068,11 @@ 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; @@ -2167,7 +2153,7 @@ 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") @@ -2185,12 +2171,12 @@ 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"; } diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c index 2fd55a26b2c..d5993019cdb 100644 --- a/gcc/config/microblaze/microblaze.c +++ b/gcc/config/microblaze/microblaze.c @@ -1370,8 +1370,10 @@ microblaze_option_override (void) real_maxval (&sfhigh, 0, SFmode); real_maxval (&sflow, 1, SFmode); +#ifndef ARCH_mbtumbl microblaze_print_operand_punct['?'] = 1; microblaze_print_operand_punct['#'] = 1; +#endif microblaze_print_operand_punct['&'] = 1; microblaze_print_operand_punct['!'] = 1; microblaze_print_operand_punct['*'] = 1; @@ -1697,12 +1699,12 @@ microblaze_initial_elimination_offset (int from, int to) 'm' Print 1<