Commit e9cfad81 by Jeff Law

pa.md (non-[cf]branch define_delay): Use a single delay description for the…

pa.md (non-[cf]branch define_delay): Use a single delay description for the delay slots in "branch"...

	* pa.md	(non-[cf]branch define_delay): Use a single delay description
	for the delay slots in "branch", "call", and "milli" insns.
	(fbranch define_delay): fbranches have a single delay slot which
	may be nullified when the branch is taken (regardless of direction
	or distance to the target.)
	(in_branch_delay attribute): Disallow fbranch insns explicitly.
	(floating point branches): Use "fbranch" attribute for these insns.
	Update output template to properly handle nullification.

From-SVN: r2107
parent 17651386
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
;; type "binary" insns have two input operands (1,2) and one output (0) ;; type "binary" insns have two input operands (1,2) and one output (0)
(define_attr "type" (define_attr "type"
"move,unary,binary,compare,load,store,branch,cbranch,call,dyncall,fpload,fpstore,fpalu,fpcc,fpmul,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,misc,milli" "move,unary,binary,compare,load,store,branch,cbranch,fbranch,call,dyncall,fpload,fpstore,fpalu,fpcc,fpmul,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,misc,milli"
(const_string "binary")) (const_string "binary"))
;; Length (in # of insns). ;; Length (in # of insns).
...@@ -59,22 +59,24 @@ ...@@ -59,22 +59,24 @@
;; Attributes for instruction and branch scheduling ;; Attributes for instruction and branch scheduling
(define_delay (eq_attr "type" "call")
[(eq_attr "in_branch_delay" "true") (nil) (nil)])
(define_attr "in_branch_delay" "false,true" (define_attr "in_branch_delay" "false,true"
(if_then_else (and (eq_attr "type" "!branch,cbranch,call,dyncall,multi,milli") (if_then_else (and (eq_attr "type" "!branch,cbranch,fbranch,call,dyncall,multi,milli")
(eq_attr "length" "1")) (eq_attr "length" "1"))
(const_string "true") (const_string "true")
(const_string "false"))) (const_string "false")))
(define_delay (eq_attr "type" "branch") ;; Unconditional branch, call, and millicode call delay slot description.
(define_delay (eq_attr "type" "branch,call,milli")
[(eq_attr "in_branch_delay" "true") (nil) (nil)]) [(eq_attr "in_branch_delay" "true") (nil) (nil)])
(define_delay (eq_attr "type" "cbranch") ;; Floating point conditional branch delay slot description.
[(eq_attr "in_branch_delay" "true") (nil) (nil)]) (define_delay (eq_attr "type" "fbranch")
[(eq_attr "in_branch_delay" "true")
(eq_attr "in_branch_delay" "true")
(nil)])
(define_delay (eq_attr "type" "milli") ;; Integer conditional branch delay slot description.
(define_delay (eq_attr "type" "cbranch")
[(eq_attr "in_branch_delay" "true") (nil) (nil)]) [(eq_attr "in_branch_delay" "true") (nil) (nil)])
;; Function units of the HPPA. The following data is for the "Snake" ;; Function units of the HPPA. The following data is for the "Snake"
...@@ -627,8 +629,14 @@ ...@@ -627,8 +629,14 @@
(label_ref (match_operand 0 "" "")) (label_ref (match_operand 0 "" ""))
(pc)))] (pc)))]
"" ""
"ftest\;bl%* %0,0" "*
[(set_attr "type" "cbranch") {
if (INSN_ANNULLED_BRANCH_P (insn))
return \"ftest\;bl,n %0,0\";
else
return \"ftest\;bl%* %0,0\";
}"
[(set_attr "type" "fbranch")
(set_attr "length" "2")]) (set_attr "length" "2")])
(define_insn "" (define_insn ""
...@@ -636,8 +644,14 @@ ...@@ -636,8 +644,14 @@
(pc) (pc)
(label_ref (match_operand 0 "" ""))))] (label_ref (match_operand 0 "" ""))))]
"" ""
"ftest\;add,tr 0,0,0\;bl%* %0,0" "*
[(set_attr "type" "cbranch") {
if (INSN_ANNULLED_BRANCH_P (insn))
return \"ftest\;add,tr 0,0,0\;bl,n %0,0\";
else
return \"ftest\;add,tr 0,0,0\;bl%* %0,0\";
}"
[(set_attr "type" "fbranch")
(set_attr "length" "3")]) (set_attr "length" "3")])
;; Move instructions ;; Move instructions
......
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