From: Jeff Law Date: Fri, 21 Aug 1992 05:57:31 +0000 (-0600) Subject: pa.md (call_value+1): For non-dynamic calls... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3bf1c6b55c2ce09960809f20234828c591f3b300;p=gcc.git pa.md (call_value+1): For non-dynamic calls... * pa.md (call_value+1): For non-dynamic calls, use the "call" attribute, set length to 1, and fix output template to work properly with delay slots. * pa.md (address and use_call_clobbered attributes): Deleted, these attributes are useless. All references deleted. (call define delay): Use "in_branch_delay" as the condition since "call" delay slots and unconditional "branch" delay slots allow the same type of insns. (in_call_delay conditional): Deleted. (branch define delay): Do not define an annul-if-true delay slot. It is useless for an unconditional branch. (all delay branch conditionals): Make sure "call", "dyncall", "multi", and "milli" insns are explicitly disallowed in delay slots. From-SVN: r1920 --- diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index a34bebbb03e..65ffba3953c 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -30,16 +30,9 @@ ;; type "binary" insns have two input operands (1,2) and one output (0) (define_attr "type" - "move,unary,binary,compare,load,store,branch,cbranch,call,dyncall,address,fpload,fpstore,fpalu,fpcc,fpmul,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,misc,milli" + "move,unary,binary,compare,load,store,branch,cbranch,call,dyncall,fpload,fpstore,fpalu,fpcc,fpmul,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,misc,milli" (const_string "binary")) -;; Set true if insn uses call-clobbered intermediate register. -(define_attr "use_clobbered" "false,true" - (if_then_else (and (eq_attr "type" "address") - (match_operand 0 "clobbered_register" "")) - (const_string "true") - (const_string "false"))) - ;; Length (in # of insns). (define_attr "length" "" (cond [(eq_attr "type" "load,fpload") @@ -50,8 +43,6 @@ (if_then_else (match_operand 0 "symbolic_memory_operand" "") (const_int 2) (const_int 1)) - (eq_attr "type" "address") (const_int 2) - (eq_attr "type" "binary") (if_then_else (match_operand 2 "arith_operand" "") (const_int 1) (const_int 3)) @@ -68,47 +59,28 @@ ;; Attributes for instruction and branch scheduling -(define_attr "in_call_delay" "false,true" - (cond [(eq_attr "type" "branch,cbranch,call,dyncall,multi,milli") - (const_string "false") - - (eq_attr "type" "load,fpload,store,fpstore") - (if_then_else (eq_attr "length" "1") - (const_string "true") - (const_string "false")) - - (eq_attr "type" "address") - (if_then_else (eq_attr "use_clobbered" "false") - (const_string "true") - (const_string "false"))] - - (if_then_else (eq_attr "length" "1") - (const_string "true") - (const_string "false")))) +(define_delay (eq_attr "type" "call") + [(eq_attr "in_branch_delay" "true") (nil) (nil)]) + +(define_attr "in_branch_delay" "false,true" + (if_then_else (and (eq_attr "type" "!branch,cbranch,call,dyncall,multi,milli") + (eq_attr "length" "1")) + (const_string "true") + (const_string "false"))) (define_attr "in_milli_delay" "false,true" (cond [(eq_attr "length" "!1") (const_string "false") - (eq_attr "type" "branch,cbranch,call,dyncall,milli") + (eq_attr "type" "branch,cbranch,call,dyncall,multi,milli") (const_string "false") (ne (symbol_ref "use_milli_regs (insn)") (const_int 0)) (const_string "false")] (const_string "true"))) -(define_delay (eq_attr "type" "call") - [(eq_attr "in_call_delay" "true") (nil) (nil)]) - -(define_attr "in_branch_delay" "false,true" - (if_then_else (and (eq_attr "type" "!branch,cbranch,call,multi,milli") - (eq_attr "length" "1")) - (const_string "true") - (const_string "false"))) - (define_delay (eq_attr "type" "branch") - [(eq_attr "in_branch_delay" "true") - (eq_attr "in_branch_delay" "true") (nil)]) + [(eq_attr "in_branch_delay" "true") (nil) (nil)]) (define_delay (eq_attr "type" "cbranch") [(eq_attr "in_branch_delay" "true") (nil) (nil)]) @@ -2136,11 +2108,11 @@ else { output_arg_descriptor (insn); - return \"bl %1,2\;nop\"; + return \"bl %1,2%#\"; } }" - [(set_attr "type" "dyncall") - (set_attr "length" "3,2")]) + [(set_attr "type" "dyncall,call") + (set_attr "length" "3,1")]) (define_insn "nop" [(const_int 0)]