]> gcc.gnu.org Git - gcc.git/commitdiff
pa.md (call_value+1): For non-dynamic calls...
authorJeff Law <law@gcc.gnu.org>
Fri, 21 Aug 1992 05:57:31 +0000 (23:57 -0600)
committerJeff Law <law@gcc.gnu.org>
Fri, 21 Aug 1992 05:57:31 +0000 (23:57 -0600)
* 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

gcc/config/pa/pa.md

index a34bebbb03ecf2a3be2c45b212bbe4f34f37abaa..65ffba3953c985def1651cb2ef82335d7b588518 100644 (file)
 ;; 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))
 
 ;; 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)])
   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)]
This page took 0.082221 seconds and 5 git commands to generate.