OSDN Git Service

Sat Sep 4 16:56:28 1999 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
authorm.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Sep 1999 05:13:53 +0000 (05:13 +0000)
committerm.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Sep 1999 05:13:53 +0000 (05:13 +0000)
* config/c4x/c4x.md (rptb_init): Renamed from *rptb_init.
(doloop_begin):  Simplify pattern and use emit_jump_insn.
(doloop_end): Simplify pattern, switch operand order,
and use emit_jump_insn.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29098 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/c4x/c4x.md

index 4e7eb16..16b5aed 100644 (file)
@@ -1,3 +1,10 @@
+Sat Sep  4 16:56:28 1999  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+       * config/c4x/c4x.md (rptb_init): Renamed from *rptb_init.
+       (doloop_begin):  Simplify pattern and use emit_jump_insn.
+       (doloop_end): Simplify pattern, switch operand order,
+       and use emit_jump_insn.
+
 Fri Sep  3 19:02:38 1999  Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
 
        * function.h (struct function): Add new element LANGUAGE.
index 3504bd3..e4227e7 100644 (file)
 
 ; This pattern needs to be emitted at the start of the loop to
 ; say that RS and RE are loaded.
-(define_insn "*rptb_init"
+(define_insn "rptb_init"
   [(unspec[(match_operand:QI 0 "register_operand" "va")] 22)
-   (use (match_operand:QI 1 "const_int_operand" ""))
-   (use (match_operand:QI 2 "const_int_operand" ""))
-   (use (match_operand:QI 3 "const_int_operand" ""))
    (clobber (reg:QI 25))
    (clobber (reg:QI 26))]
   ""
   [(set_attr "type" "repeat")])
 
 
+; operand 0 is the loop count pseudo register
+; operand 1 is the number of loop iterations or 0 if it is unknown
+; operand 2 is the maximum number of loop iterations
+; operand 3 is the number of levels of enclosed loops
 (define_expand "doloop_begin"
-  [(parallel [(unspec[(match_operand:QI 0 "register_operand" "va")] 22)
-              (use (match_operand:QI 1 "const_int_operand" ""))
-              (use (match_operand:QI 2 "const_int_operand" ""))
-              (use (match_operand:QI 3 "const_int_operand" ""))
-              (clobber (reg:QI 25))
-              (clobber (reg:QI 26))])]
+  [(use (match_operand 0 "register_operand" ""))
+   (use (match_operand:QI 1 "const_int_operand" ""))
+   (use (match_operand:QI 2 "const_int_operand" ""))
+   (use (match_operand:QI 3 "const_int_operand" ""))]
   ""
   "if (INTVAL (operands[3]) > 1 || ! TARGET_RPTB)
-     FAIL;")
+     FAIL;
+   emit_jump_insn (gen_rptb_init (operands[0]));
+   DONE;
+  ")
 
 
 ; The RS (25) and RE (26) registers must be unviolate from the top of the loop
    (set (match_dup 0)
         (plus:QI (match_dup 0)
                  (const_int -1)))
-   (use (match_operand:QI 2 "const_int_operand" ""))
-   (use (match_operand:QI 3 "const_int_operand" ""))
-   (use (match_operand:QI 4 "const_int_operand" ""))
    (use (reg:QI 25))
    (use (reg:QI 26))
    (clobber (reg:CC_NOOV 21))]
   "
   [(set_attr "type" "repeat,db,jmpc,jmpc,jmpc")])
 
-; operand 0 is the loop count register
-; operand 1 is the label to jump to at the top of the loop
-; operand 2 is the number of loop iterations or 0 if it is unknown
-; operand 3 is the maximum number of loop iterations
-; operand 4 is the number of levels of enclosed loops
+; operand 0 is the loop count pseudo register
+; operand 1 is the number of loop iterations or 0 if it is unknown
+; operand 2 is the maximum number of loop iterations
+; operand 3 is the number of levels of enclosed loops
+; operand 4 is the label to jump to at the top of the loop
 (define_expand "doloop_end"
-  [(parallel [(set (pc)
-                   (if_then_else (ge (match_operand:QI 0 "register_operand" "")
-                                     (const_int 0))
-                                 (label_ref (match_operand 1 "" ""))
-                                 (pc)))
-              (set (match_dup 0)
-                  (plus:QI (match_dup 0)
-                           (const_int -1)))
-              (use (match_operand:QI 2 "const_int_operand" ""))
-              (use (match_operand:QI 3 "const_int_operand" ""))
-              (use (match_operand:QI 4 "const_int_operand" ""))
-              (use (reg:QI 25))
-              (use (reg:QI 26))
-              (clobber (reg:CC_NOOV 21))])]
+  [(use (match_operand 0 "register_operand" ""))
+   (use (match_operand:QI 1 "const_int_operand" ""))
+   (use (match_operand:QI 2 "const_int_operand" ""))
+   (use (match_operand:QI 3 "const_int_operand" ""))
+   (use (label_ref (match_operand 4 "" "")))]
   ""
   "if (! TARGET_LOOP_UNSIGNED 
-       && (unsigned HOST_WIDE_INT) INTVAL (operands[3]) > (1U << 31))
+       && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) > (1U << 31))
      FAIL;
-   if (INTVAL (operands[4]) > 1 || ! TARGET_RPTB)
+   if (INTVAL (operands[3]) > 1 || ! TARGET_RPTB)
      {
         /* The C30 maximum iteration count for DB is 2^24.  */
        if (! TARGET_DB)
           FAIL;
-        emit_insn (gen_decrement_and_branch_until_zero (operands[0],
-                                                        operands[1]));
+        emit_jump_insn (gen_decrement_and_branch_until_zero (operands[0],
+                                                             operands[4]));
        DONE;
-     }")
+     }
+    emit_jump_insn (gen_rptb_end (operands[0], operands[4]));
+    DONE;
+  ")
 
 ; The current low overhead looping code is naff and is not failsafe
 ; If you want RTPB instructions to be generated, apply the patches