fstws %1,-16(30)\;ldw -16(30),%0
stw %1,-16(30)\;fldws -16(30),%0
fcpy,sgl %1,%0"
- [(set_attr "type" "move,load,store,move,move,fpalu")
+ [(set_attr "type" "move,load,store,load,fpload,fpalu")
(set_attr "length" "1,1,1,2,2,1")])
;; For pic
fstws %1,-16(30)\;ldw -16(30),%0
stw %1,-16(30)\;fldws -16(30),%0
fcpy,sgl %1,%0"
- [(set_attr "type" "move,load,store,move,move,fpalu")
+ [(set_attr "type" "move,load,store,load,fpload,fpalu")
(set_attr "length" "1,1,1,2,2,1")])
(define_insn ""
fstws %1,-16(30)\;ldw -16(30),%0
stw %1,-16(30)\;fldws -16(30),%0
fcpy,sgl %1,%0"
- [(set_attr "type" "move,load,store,move,move,fpalu")
+ [(set_attr "type" "move,load,store,load,fpload,fpalu")
(set_attr "length" "1,1,1,2,2,1")])
(define_insn ""
(match_operand:SI 2 "register_operand" "r"))))]
""
"ldwx,s %1(0,%2),%0"
- [(set_attr "type" "move")
+ [(set_attr "type" "load")
(set_attr "length" "1")])
; this will never match
; (match_dup 1)))]
; ""
; "ldwx,sm %2(0,%1),%0"
-; [(set_attr "type" "move")
+; [(set_attr "type" "load")
; (set_attr "length" "1")])
(define_insn ""
(match_operand:SI 1 "register_operand" "r"))))]
""
"ldhx,s %2(0,%1),%0"
- [(set_attr "type" "move")
+ [(set_attr "type" "load")
(set_attr "length" "1")])
; this will never match
; (match_dup 1)))]
; ""
; "ldhx,sm %2(0,%1),%0"
-; [(set_attr "type" "move")
+; [(set_attr "type" "load")
; (set_attr "length" "1")])
;; The definition of this insn does not really explain what it does,
return output_fp_move_double (operands);
return output_move_double (operands);
}"
- [(set_attr "type" "fpalu,move,fpstore,store,fpload,load,multi,multi")
+ [(set_attr "type" "fpalu,move,fpstore,store,fpload,load,fpload,load")
(set_attr "length" "1,2,1,2,1,2,3,3")])
(define_expand "movdi"
return output_fp_move_double (operands);
return output_move_double (operands);
}"
- [(set_attr "type" "move,store,load,misc,multi,fpalu,multi")
- (set_attr "length" "2,3,3,3,3,2,3")])
+;; Use move in the last type.. This case happens often with xmpyu
+;; and in nearly all cases we only access the data from the first
+;; of the two loads generated, and that can't stall on a data conflict
+;; be cause of the second load.
+ [(set_attr "type" "move,store,load,misc,fpload,fpalu,move")
+ (set_attr "length" "2,3,3,3,3,1,3")])
(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r,r")
ldw%M1 %1,%0
fstws%F0 %r1,%0
stw%M0 %r1,%0"
- [(set_attr "type" "fpalu,move,multi,multi,fpload,load,fpstore,store")
+ [(set_attr "type" "fpalu,move,load,fpload,fpload,load,fpstore,store")
(set_attr "length" "1,1,2,2,1,1,1,1")])
\f