Commit 6d518002 by Michael Meissner

*** empty log message ***

From-SVN: r564
parent 7d4d4d22
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
;; # instructions (4 bytes each) ;; # instructions (4 bytes each)
(define_attr "length" "" (const_int 1)) (define_attr "length" "" (const_int 1))
;; whether or not an instruction has a mandiatory delay slot ;; whether or not an instruction has a mandatory delay slot
(define_attr "dslot" "no,yes" (define_attr "dslot" "no,yes"
(if_then_else (eq_attr "type" "branch,jump,call,load,xfer,hilo,fcmp") (if_then_else (eq_attr "type" "branch,jump,call,load,xfer,hilo,fcmp")
(const_string "yes") (const_string "yes")
...@@ -71,21 +71,21 @@ ...@@ -71,21 +71,21 @@
;; Attribute describing the processor ;; Attribute describing the processor
(define_attr "cpu" "default,r3000,r4000,r6000" (define_attr "cpu" "default,r3000,r4000,r6000"
; (const (const
(cond [(eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_DEFAULT")) (const_string "default") (cond [(eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_DEFAULT")) (const_string "default")
(eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R3000")) (const_string "r3000") (eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R3000")) (const_string "r3000")
(eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R4000")) (const_string "r4000") (eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R4000")) (const_string "r4000")
(eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R6000")) (const_string "r6000")] (eq (symbol_ref "mips_cpu") (symbol_ref "PROCESSOR_R6000")) (const_string "r6000")]
(const_string "default"))) (const_string "default"))))
;; Attribute defining whether or not we can use the branch-likely instructions ;; Attribute defining whether or not we can use the branch-likely instructions
;; (MIPS ISA level 2) ;; (MIPS ISA level 2)
(define_attr "branch_likely" "no,yes" (define_attr "branch_likely" "no,yes"
; (const (const
(if_then_else (ge (symbol_ref "mips_isa") (const_int 2)) (if_then_else (ge (symbol_ref "mips_isa") (const_int 2))
(const_string "yes") (const_string "yes")
(const_string "no"))) (const_string "no"))))
;; Describe a user's asm statement. ;; Describe a user's asm statement.
...@@ -491,8 +491,8 @@ ...@@ -491,8 +491,8 @@
&& GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))" && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
[(set (match_dup 3) [(set (match_dup 3)
(lt:CC (subreg:SI (match_dup 1) 0) (ltu:CC (subreg:SI (match_dup 1) 0)
(subreg:SI (match_dup 2) 0))) (subreg:SI (match_dup 2) 0)))
(set (subreg:SI (match_dup 0) 0) (set (subreg:SI (match_dup 0) 0)
(minus:SI (subreg:SI (match_dup 1) 0) (minus:SI (subreg:SI (match_dup 1) 0)
...@@ -518,8 +518,8 @@ ...@@ -518,8 +518,8 @@
&& GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))" && GET_CODE (operands[2]) == REG && GP_REG_P (REGNO (operands[2]))"
[(set (match_dup 3) [(set (match_dup 3)
(lt:CC (subreg:SI (match_dup 1) 1) (ltu:CC (subreg:SI (match_dup 1) 1)
(subreg:SI (match_dup 2) 1))) (subreg:SI (match_dup 2) 1)))
(set (subreg:SI (match_dup 0) 1) (set (subreg:SI (match_dup 0) 1)
(minus:SI (subreg:SI (match_dup 1) 1) (minus:SI (subreg:SI (match_dup 1) 1)
...@@ -1617,14 +1617,10 @@ move\\t%0,%z4\\n\\ ...@@ -1617,14 +1617,10 @@ move\\t%0,%z4\\n\\
;; .................... ;; ....................
;; unaligned word moves generated by the block moves. ;; unaligned word moves generated by the block moves.
;; We use (use (reg:SI 0)) to select this pattern rather than the
;; normal movsi. Make these before the normal move patterns so they
;; match first.
(define_expand "movsi_unaligned" (define_expand "movsi_unaligned"
[(parallel [(set (match_operand:SI 0 "general_operand" "") [(set (match_operand:SI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" "")) (unspec [(match_operand:SI 1 "general_operand" "")] 0))]
(use (reg:SI 0))])]
"" ""
" "
{ {
...@@ -1653,15 +1649,14 @@ move\\t%0,%z4\\n\\ ...@@ -1653,15 +1649,14 @@ move\\t%0,%z4\\n\\
(define_insn "movsi_ulw" (define_insn "movsi_ulw"
[(set (match_operand:SI 0 "register_operand" "=&d,&d,d,d") [(set (match_operand:SI 0 "register_operand" "=&d,&d,d,d")
(match_operand:SI 1 "general_operand" "R,o,dIKL,M")) (unspec [(match_operand:SI 1 "general_operand" "R,o,dIKL,M")] 0))]
(use (reg:SI 0))]
"" ""
"* "*
{ {
extern rtx eliminate_constant_term (); extern rtx eliminate_constant_term ();
enum rtx_code code; enum rtx_code code;
char *ret; char *ret;
int offset; rtx offset;
rtx addr; rtx addr;
rtx mem_addr; rtx mem_addr;
...@@ -1674,11 +1669,11 @@ move\\t%0,%z4\\n\\ ...@@ -1674,11 +1669,11 @@ move\\t%0,%z4\\n\\
/* The stack/frame pointers are always aligned, so we can convert /* The stack/frame pointers are always aligned, so we can convert
to the faster lw if we are referencing an aligned stack location. */ to the faster lw if we are referencing an aligned stack location. */
offset = 0; offset = const0_rtx;
addr = XEXP (operands[1], 0); addr = XEXP (operands[1], 0);
mem_addr = eliminate_constant_term (addr, &offset); mem_addr = eliminate_constant_term (addr, &offset);
if ((offset & (UNITS_PER_WORD-1)) == 0 if ((INTVAL (offset) & (UNITS_PER_WORD-1)) == 0
&& (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx)) && (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx))
ret = \"lw\\t%0,%1\"; ret = \"lw\\t%0,%1\";
...@@ -1705,13 +1700,12 @@ move\\t%0,%z4\\n\\ ...@@ -1705,13 +1700,12 @@ move\\t%0,%z4\\n\\
(define_insn "movsi_usw" (define_insn "movsi_usw"
[(set (match_operand:SI 0 "memory_operand" "=R,o") [(set (match_operand:SI 0 "memory_operand" "=R,o")
(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")) (unspec [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 0))]
(use (reg:SI 0))]
"" ""
"* "*
{ {
extern rtx eliminate_constant_term (); extern rtx eliminate_constant_term ();
int offset = 0; rtx offset = const0_rtx;
rtx addr = XEXP (operands[0], 0); rtx addr = XEXP (operands[0], 0);
rtx mem_addr = eliminate_constant_term (addr, &offset); rtx mem_addr = eliminate_constant_term (addr, &offset);
...@@ -1721,7 +1715,7 @@ move\\t%0,%z4\\n\\ ...@@ -1721,7 +1715,7 @@ move\\t%0,%z4\\n\\
/* The stack/frame pointers are always aligned, so we can convert /* The stack/frame pointers are always aligned, so we can convert
to the faster sw if we are referencing an aligned stack location. */ to the faster sw if we are referencing an aligned stack location. */
if ((offset & (UNITS_PER_WORD-1)) == 0 if ((INTVAL (offset) & (UNITS_PER_WORD-1)) == 0
&& (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx)) && (mem_addr == stack_pointer_rtx || mem_addr == frame_pointer_rtx))
return \"sw\\t%1,%0\"; return \"sw\\t%1,%0\";
...@@ -1750,13 +1744,13 @@ move\\t%0,%z4\\n\\ ...@@ -1750,13 +1744,13 @@ move\\t%0,%z4\\n\\
;; the compiler, have memoized the insn number already. ;; the compiler, have memoized the insn number already.
(define_insn "movdi" (define_insn "movdi"
[(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,R,o,*d,*f,*f,*f,*f,*R,*o,*d,*x") [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,d,d,R,o,*d,*x")
(match_operand:DI 1 "general_operand" "d,iF,R,o,d,d,*f,*d,*f,*R,*o,*f,*f,*x,*d"))] (match_operand:DI 1 "general_operand" "d,iF,R,o,d,d,*x,*d"))]
"" ""
"* return mips_move_2words (operands, insn); " "* return mips_move_2words (operands, insn); "
[(set_attr "type" "move,arith,load,load,store,store,xfer,xfer,move,load,load,store,store,hilo,hilo") [(set_attr "type" "move,arith,load,load,store,store,hilo,hilo")
(set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI,DI,DI,DI,DI,DI,DI,DI") (set_attr "mode" "DI,DI,DI,DI,DI,DI,DI,DI")
(set_attr "length" "2,4,2,4,2,4,2,2,1,2,4,2,4,2,2")]) (set_attr "length" "2,4,2,4,2,4,2,2")])
(define_split (define_split
[(set (match_operand:DI 0 "register_operand" "") [(set (match_operand:DI 0 "register_operand" "")
...@@ -2818,6 +2812,8 @@ move\\t%0,%z4\\n\\ ...@@ -2818,6 +2812,8 @@ move\\t%0,%z4\\n\\
case NE: return \"%*bne%?\\t%z2,%.,%1\"; case NE: return \"%*bne%?\\t%z2,%.,%1\";
case GTU: return \"%*bne%?\\t%z2,%.,%1\"; case GTU: return \"%*bne%?\\t%z2,%.,%1\";
case LEU: return \"%*beq%?\\t%z2,%.,%1\"; case LEU: return \"%*beq%?\\t%z2,%.,%1\";
case GEU: return \"%*j\\t%1\";
case LTU: return \"#%*bltuz\\t%z2,%1\";
} }
return \"%*b%C0z%?\\t%z2,%1\"; return \"%*b%C0z%?\\t%z2,%1\";
...@@ -2842,6 +2838,8 @@ move\\t%0,%z4\\n\\ ...@@ -2842,6 +2838,8 @@ move\\t%0,%z4\\n\\
case NE: return \"%*beq%?\\t%z2,%.,%1\"; case NE: return \"%*beq%?\\t%z2,%.,%1\";
case GTU: return \"%*beq%?\\t%z2,%.,%1\"; case GTU: return \"%*beq%?\\t%z2,%.,%1\";
case LEU: return \"%*bne\\t%z2,%.,%1\"; case LEU: return \"%*bne\\t%z2,%.,%1\";
case GEU: return \"#%*bgeuz\\t%z2,%1\";
case LTU: return \"%*j\\t%1\";
} }
return \"%*b%N0z%?\\t%z2,%1\"; return \"%*b%N0z%?\\t%z2,%1\";
......
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