diff options
author | Jeff Law <law@gcc.gnu.org> | 1997-09-16 00:03:16 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-09-16 00:03:16 -0600 |
commit | 9302e6e54c6bdbe354924f249ce1edac6847b467 (patch) | |
tree | 7abad4a6a5c88574536d22b1e68e1c8ac8f56cb1 /gcc/config/v850/v850.md | |
parent | 07f7a41accaa355bda5ce5cf5e90a16a0c6607a6 (diff) | |
download | gcc-9302e6e54c6bdbe354924f249ce1edac6847b467.tar.gz |
More formatting fixes.
From-SVN: r15476
Diffstat (limited to 'gcc/config/v850/v850.md')
-rw-r--r-- | gcc/config/v850/v850.md | 735 |
1 files changed, 40 insertions, 695 deletions
diff --git a/gcc/config/v850/v850.md b/gcc/config/v850/v850.md index c71210854b5..4107661a99c 100644 --- a/gcc/config/v850/v850.md +++ b/gcc/config/v850/v850.md @@ -341,6 +341,8 @@ (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 @@ -1083,356 +1085,25 @@ ;; 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" @@ -1446,6 +1117,7 @@ [(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 @@ -1460,356 +1132,28 @@ [(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" @@ -1848,3 +1192,4 @@ "jarl __save_r6_r9,r10" [(set_attr "length" "4") (set_attr "cc" "clobber")]) + |