]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
More formatting fixes.
authorJeff Law <law@gcc.gnu.org>
Tue, 16 Sep 1997 06:03:16 +0000 (00:03 -0600)
committerJeff Law <law@gcc.gnu.org>
Tue, 16 Sep 1997 06:03:16 +0000 (00:03 -0600)
From-SVN: r15476

gcc/config/v850/v850.md

index c71210854b5cdf055871f66414f4fb35905d7748..4107661a99c3d2149d9ca7db306dbdd916b62d70 100644 (file)
    (set_attr "cc" "none_0hit")
    (set_attr "type" "mult")])
 
+;; ??? Sign extending constants isn't valid.  Fix?
+
 (define_insn "*mulhisi3_internal2"
   [(set (match_operand:SI 0 "register_operand" "=r,r")
        (mult:SI
 ;; HELPER INSTRUCTIONS for saving the prologue and epilog registers
 ;; ----------------------------------------------------------------------
 
-;; Save r2, r20-r29, r31, and create 16 byte register call area
-(define_insn "save_r2_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -64)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 2))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 20))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 21))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -52))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -56))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -60))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r2_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r20-r29, r31, and create 16 byte register call area
-(define_insn "save_r20_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -60)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 20))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 21))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -52))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -56))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r20_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r21-r29, r31, and create 16 byte register call area
-(define_insn "save_r21_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -56)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 21))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -52))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r21_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r22-r29, r31, and create 16 byte register call area
-(define_insn "save_r22_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -52)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -48))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r22_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r23-r29, r31, and create 16 byte register call area
-(define_insn "save_r23_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -48)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -44))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r23_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r24-r29, r31, and create 16 byte register call area
-(define_insn "save_r24_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -44)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r24_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r25-r29, r31, and create 16 byte register call area
-(define_insn "save_r25_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -40)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r25_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r26-r29, r31, and create 16 byte register call area
-(define_insn "save_r26_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -36)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r26_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r27-r29, r31, and create 16 byte register call area
-(define_insn "save_r27_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -32)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r27_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r28-r29, r31, and create 16 byte register call area
-(define_insn "save_r28_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -28)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r28_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r29, r31, and create 16 byte register call area
-(define_insn "save_r29_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -24)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 29))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r29_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r31, and create 16 byte register call area
-(define_insn "save_r31"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -20)))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 31))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r31,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r2, r20-r29
-(define_insn "save_r2_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -44)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 2))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 20))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 21))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -40))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r2_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
+;; This pattern will match a stack adjust RTX followed by any number of push
+;; RTXs.  These RTXs will then be turned into a suitable call to a worker
+;; function.
+
+(define_insn ""
+ [(match_parallel 0 "pattern_is_ok_for_prologue"
+   [(set (reg:SI 3)
+        (plus:SI (reg:SI 3) (match_operand:SI 1 "immediate_operand" "i")))
+    (set (mem:SI
+          (plus:SI (reg:SI 3) (match_operand:SI 2 "immediate_operand" "i")))
+        (match_operand:SI 3 "register_is_ok_for_epilogue" "r"))])]
+ "TARGET_PROLOG_FUNCTION"
+ "* return construct_save_jarl (operands[0]);
+ "
+ [(set_attr "length" "4")
+  (set_attr "cc"     "clobber")
+ ]
+)
 
-;; Save r20-r29
-(define_insn "save_r20_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -40)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 20))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 21))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -36))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r20_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r21-r29
-(define_insn "save_r21_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -36)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 21))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -32))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r21_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r22-r29
-(define_insn "save_r22_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -32)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 22))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -28))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r22_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r23-r29
-(define_insn "save_r23_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -28)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 23))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -24))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r23_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r24-r29
-(define_insn "save_r24_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -24)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 24))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -20))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r24_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r25-r29
-(define_insn "save_r25_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -20)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 25))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -16))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r25_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r26-r29
-(define_insn "save_r26_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -16)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 26))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -12))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r26_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r27-r29
-(define_insn "save_r27_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -12)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 27))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -8))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r27_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r28-r29
-(define_insn "save_r28_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -8)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 28))
-   (set (mem:SI (plus:SI (reg:SI 3) (const_int -4))) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r28_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Save r29
-(define_insn "save_r29"
-  [(set (reg:SI 3) (plus:SI (reg:SI 3) (const_int -4)))
-   (set (mem:SI (reg:SI 3)) (reg:SI 29))
-   (clobber (reg:SI 10))]
-  "TARGET_PROLOG_FUNCTION"
-  "jarl __save_r29,r10"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
 
 ;; Initialize an interrupt function.  Do not depend on TARGET_PROLOG_FUNCTION.
 (define_insn "save_interrupt"
   [(set_attr "length" "12")
    (set_attr "cc" "clobber")])
 
+
 ;; Save all registers except for the registers saved in save_interrupt when
 ;; an interrupt function makes a call.
 ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
   [(set_attr "length" "4")
    (set_attr "cc" "clobber")])
 
-;; Restore r2, r20-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r2_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 64)))
-   (set (reg:SI 2) (mem:SI (plus:SI (reg:SI 3) (const_int 60))))
-   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 56))))
-   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 52))))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r2_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r20-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r20_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 60)))
-   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 56))))
-   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 52))))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r20_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r21-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r21_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 56)))
-   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 52))))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r21_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r22-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r22_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 52)))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 48))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r22_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r23-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r23_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 48)))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r23_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r24-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r24_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 44)))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r24_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r25-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r25_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 40)))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r25_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r26-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r26_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 36)))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r26_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r27-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r27_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 32)))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r27_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r28-r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r28_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 28)))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r28_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r29, r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r29_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 24)))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r29_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r31, eliminate 16 byte register call area, and return to user
-(define_insn "restore_r31"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 20)))
-   (set (reg:SI 31) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r31"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
 
-;; Restore r2, r20-r29, and return to user
-(define_insn "restore_r2_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 48)))
-   (set (reg:SI 2) (mem:SI (plus:SI (reg:SI 3) (const_int 44))))
-   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r2_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
 
-;; Restore r20-r29, and return to user
-(define_insn "restore_r20_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 44)))
-   (set (reg:SI 20) (mem:SI (plus:SI (reg:SI 3) (const_int 40))))
-   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r20_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
 
-;; Restore r21-r29, and return to user
-(define_insn "restore_r21_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 40)))
-   (set (reg:SI 21) (mem:SI (plus:SI (reg:SI 3) (const_int 36))))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r21_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
+;; This pattern will match a return RTX followed by any number of pop RTXs
+;; and possible a stack adjustment as well.  These RTXs will be turned into
+;; a suitable call to a worker function.
 
-;; Restore r22-r29, and return to user
-(define_insn "restore_r22_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 36)))
-   (set (reg:SI 22) (mem:SI (plus:SI (reg:SI 3) (const_int 32))))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r22_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r23-r29, and return to user
-(define_insn "restore_r23_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 32)))
-   (set (reg:SI 23) (mem:SI (plus:SI (reg:SI 3) (const_int 28))))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r23_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r24-r29, and return to user
-(define_insn "restore_r24_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 28)))
-   (set (reg:SI 24) (mem:SI (plus:SI (reg:SI 3) (const_int 24))))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r24_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r25-r29, and return to user
-(define_insn "restore_r25_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 24)))
-   (set (reg:SI 25) (mem:SI (plus:SI (reg:SI 3) (const_int 20))))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r25_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r26-r29, and return to user
-(define_insn "restore_r26_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 20)))
-   (set (reg:SI 26) (mem:SI (plus:SI (reg:SI 3) (const_int 16))))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r26_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r27-r29, and return to user
-(define_insn "restore_r27_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 16)))
-   (set (reg:SI 27) (mem:SI (plus:SI (reg:SI 3) (const_int 12))))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r27_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r28-r29, and return to user
-(define_insn "restore_r28_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 12)))
-   (set (reg:SI 28) (mem:SI (plus:SI (reg:SI 3) (const_int 8))))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r28_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
-
-;; Restore r29, and return to user
-(define_insn "restore_r29"
-  [(return)
-   (set (reg:SI 3) (plus:SI (reg:SI 3) (const_int 8)))
-   (set (reg:SI 29) (mem:SI (plus:SI (reg:SI 3) (const_int 4))))]
-  "TARGET_PROLOG_FUNCTION"
-  "jr __return_r29"
-  [(set_attr "length" "4")
-   (set_attr "cc" "clobber")])
+(define_insn ""
+[(match_parallel 0 "pattern_is_ok_for_epilogue"
+   [(return)
+    (set (reg:SI 3)
+        (plus:SI (reg:SI 3) (match_operand:SI 1 "immediate_operand" "i")))
+    (set (match_operand:SI 2 "register_is_ok_for_epilogue" "r")
+        (mem:SI (plus:SI (reg:SI 3)
+                         (match_operand:SI 3 "immediate_operand" "i"))))])]
+ "TARGET_PROLOG_FUNCTION && TARGET_V850"
+ "* return construct_restore_jr (operands[0]);
+ "
+ [(set_attr "length" "4")
+  (set_attr "cc"     "clobber")
+ ]
+)
 
 ;; Restore r1, r5, r10, and return from the interrupt
 (define_insn "restore_interrupt"
   "jarl __save_r6_r9,r10"
   [(set_attr "length" "4")
    (set_attr "cc" "clobber")])
+