Commit 30d1e848 by Jeffrey A Law Committed by Jeff Law

pa.md (post_store, pre_load): New expanders.

        * pa.md (post_store, pre_load): New expanders.
        (post_stwm, pre_ldwm): Renamed to post_stw and pre_ldw respectively.
        (post_ldwm, pre_stwm): Make these unnamed patterns since we never
        need to directly generate RTL for them.
        * pa.c (hppa_expand_prologue, hppa_expand_epilogue): Corresponding
        changes.

From-SVN: r28307
parent adec3b83
Tue Jul 27 23:20:21 1999 Jeffrey A Law (law@cygnus.com)
* pa.md (post_store, pre_load): New expanders.
(post_stwm, pre_ldwm): Renamed to post_stw and pre_ldw respectively.
(post_ldwm, pre_stwm): Make these unnamed patterns since we never
need to directly generate RTL for them.
* pa.c (hppa_expand_prologue, hppa_expand_epilogue): Corresponding
changes.
Tue Jul 27 16:05:52 1999 David Edelsohn <edelsohn@gnu.org> Tue Jul 27 16:05:52 1999 David Edelsohn <edelsohn@gnu.org>
* aix43.h (ASM_CPU_SPEC, CPP_CPU_SPEC): Add rs64a and PPC630. * aix43.h (ASM_CPU_SPEC, CPP_CPU_SPEC): Add rs64a and PPC630.
......
...@@ -2688,7 +2688,7 @@ hppa_expand_prologue() ...@@ -2688,7 +2688,7 @@ hppa_expand_prologue()
emit_move_insn (tmpreg, frame_pointer_rtx); emit_move_insn (tmpreg, frame_pointer_rtx);
emit_move_insn (frame_pointer_rtx, stack_pointer_rtx); emit_move_insn (frame_pointer_rtx, stack_pointer_rtx);
if (VAL_14_BITS_P (actual_fsize)) if (VAL_14_BITS_P (actual_fsize))
emit_insn (gen_post_stwm (stack_pointer_rtx, tmpreg, size_rtx)); emit_insn (gen_post_store (stack_pointer_rtx, tmpreg, size_rtx));
else else
{ {
/* It is incorrect to store the saved frame pointer at *sp, /* It is incorrect to store the saved frame pointer at *sp,
...@@ -2697,7 +2697,8 @@ hppa_expand_prologue() ...@@ -2697,7 +2697,8 @@ hppa_expand_prologue()
So instead use stwm to store at *sp and post-increment the So instead use stwm to store at *sp and post-increment the
stack pointer as an atomic operation. Then increment sp to stack pointer as an atomic operation. Then increment sp to
finish allocating the new frame. */ finish allocating the new frame. */
emit_insn (gen_post_stwm (stack_pointer_rtx, tmpreg, GEN_INT (64))); emit_insn (gen_post_store (stack_pointer_rtx, tmpreg,
GEN_INT (64)));
set_reg_plus_d (STACK_POINTER_REGNUM, set_reg_plus_d (STACK_POINTER_REGNUM,
STACK_POINTER_REGNUM, STACK_POINTER_REGNUM,
actual_fsize - 64); actual_fsize - 64);
...@@ -2820,9 +2821,9 @@ hppa_expand_prologue() ...@@ -2820,9 +2821,9 @@ hppa_expand_prologue()
if (merge_sp_adjust_with_store) if (merge_sp_adjust_with_store)
{ {
merge_sp_adjust_with_store = 0; merge_sp_adjust_with_store = 0;
emit_insn (gen_post_stwm (stack_pointer_rtx, emit_insn (gen_post_store (stack_pointer_rtx,
gen_rtx_REG (word_mode, i), gen_rtx_REG (word_mode, i),
GEN_INT (-offset))); GEN_INT (-offset)));
} }
else else
store_reg (i, offset, STACK_POINTER_REGNUM); store_reg (i, offset, STACK_POINTER_REGNUM);
...@@ -3032,13 +3033,13 @@ hppa_expand_epilogue () ...@@ -3032,13 +3033,13 @@ hppa_expand_epilogue ()
else if (frame_pointer_needed) else if (frame_pointer_needed)
{ {
set_reg_plus_d (STACK_POINTER_REGNUM, FRAME_POINTER_REGNUM, 64); set_reg_plus_d (STACK_POINTER_REGNUM, FRAME_POINTER_REGNUM, 64);
emit_insn (gen_pre_ldwm (frame_pointer_rtx, emit_insn (gen_pre_load (frame_pointer_rtx,
stack_pointer_rtx, stack_pointer_rtx,
GEN_INT (-64))); GEN_INT (-64)));
} }
/* If we were deferring a callee register restore, do it now. */ /* If we were deferring a callee register restore, do it now. */
else if (! frame_pointer_needed && merge_sp_adjust_with_load) else if (! frame_pointer_needed && merge_sp_adjust_with_load)
emit_insn (gen_pre_ldwm (gen_rtx_REG (word_mode, merge_sp_adjust_with_load), emit_insn (gen_pre_load (gen_rtx_REG (word_mode, merge_sp_adjust_with_load),
stack_pointer_rtx, stack_pointer_rtx,
GEN_INT (- actual_fsize))); GEN_INT (- actual_fsize)));
else if (actual_fsize != 0) else if (actual_fsize != 0)
......
...@@ -1478,7 +1478,20 @@ ...@@ -1478,7 +1478,20 @@
;; Load or store with base-register modification. ;; Load or store with base-register modification.
(define_insn "pre_ldwm" (define_expand "pre_load"
[(parallel [(set (match_operand:SI 0 "register_operand" "")
(mem (plus (match_operand 1 "register_operand" "")
(match_operand 2 "pre_cint_operand" ""))))
(set (match_dup 1)
(plus (match_dup 1) (match_dup 2)))])]
""
"
{
emit_insn (gen_pre_ldw (operands[0], operands[1], operands[2]));
DONE;
}")
(define_insn "pre_ldw"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
(mem:SI (plus:SI (match_operand:SI 1 "register_operand" "+r") (mem:SI (plus:SI (match_operand:SI 1 "register_operand" "+r")
(match_operand:SI 2 "pre_cint_operand" "")))) (match_operand:SI 2 "pre_cint_operand" ""))))
...@@ -1494,7 +1507,7 @@ ...@@ -1494,7 +1507,7 @@
[(set_attr "type" "load") [(set_attr "type" "load")
(set_attr "length" "4")]) (set_attr "length" "4")])
(define_insn "pre_stwm" (define_insn ""
[(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "+r") [(set (mem:SI (plus:SI (match_operand:SI 0 "register_operand" "+r")
(match_operand:SI 1 "pre_cint_operand" ""))) (match_operand:SI 1 "pre_cint_operand" "")))
(match_operand:SI 2 "reg_or_0_operand" "rM")) (match_operand:SI 2 "reg_or_0_operand" "rM"))
...@@ -1510,7 +1523,7 @@ ...@@ -1510,7 +1523,7 @@
[(set_attr "type" "store") [(set_attr "type" "store")
(set_attr "length" "4")]) (set_attr "length" "4")])
(define_insn "post_ldwm" (define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
(mem:SI (match_operand:SI 1 "register_operand" "+r"))) (mem:SI (match_operand:SI 1 "register_operand" "+r")))
(set (match_dup 1) (set (match_dup 1)
...@@ -1526,7 +1539,20 @@ ...@@ -1526,7 +1539,20 @@
[(set_attr "type" "load") [(set_attr "type" "load")
(set_attr "length" "4")]) (set_attr "length" "4")])
(define_insn "post_stwm" (define_expand "post_store"
[(parallel [(set (mem (match_operand 0 "register_operand" ""))
(match_operand 1 "reg_or_0_operand" ""))
(set (match_dup 0)
(plus (match_dup 0)
(match_operand 2 "post_cint_operand" "")))])]
""
"
{
emit_insn (gen_post_stw (operands[0], operands[1], operands[2]));
DONE;
}")
(define_insn "post_stw"
[(set (mem:SI (match_operand:SI 0 "register_operand" "+r")) [(set (mem:SI (match_operand:SI 0 "register_operand" "+r"))
(match_operand:SI 1 "reg_or_0_operand" "rM")) (match_operand:SI 1 "reg_or_0_operand" "rM"))
(set (match_dup 0) (set (match_dup 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment