aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2002-07-16 15:14:22 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2002-07-16 15:14:22 +0000
commit3894f59ee4d9556d92f0a4b06741a2219dc05a70 (patch)
tree564c27592a91d32900ed68feade093e1c0acefc8 /gcc
parent9406d60d5ea3a092d81e98a32330dd2158a09d38 (diff)
downloadgcc-3894f59ee4d9556d92f0a4b06741a2219dc05a70.zip
gcc-3894f59ee4d9556d92f0a4b06741a2219dc05a70.tar.gz
gcc-3894f59ee4d9556d92f0a4b06741a2219dc05a70.tar.bz2
arm.md (stack_tie): New insn.
* arm.md (stack_tie): New insn. Use an idiom that the alias code understands to be a memory clobber. * arm.c (arm_expand_prologue): Use it. From-SVN: r55486
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c11
-rw-r--r--gcc/config/arm/arm.md10
3 files changed, 18 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1005b8c..ea6617b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2002-07-16 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.md (stack_tie): New insn. Use an idiom that the alias code
+ understands to be a memory clobber.
+ * arm.c (arm_expand_prologue): Use it.
+
2002-07-16 Daniel Berlin <dberlin@dberlin.org>
* ra-rewrite.c: #include reload.h, insn-config.h
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 17d7750..0632397 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -8387,15 +8387,8 @@ arm_expand_prologue ()
will prevent the scheduler from moving stores to the frame
before the stack adjustment. */
if (frame_pointer_needed)
- {
- rtx unspec = gen_rtx_UNSPEC (SImode,
- gen_rtvec (2, stack_pointer_rtx,
- hard_frame_pointer_rtx),
- UNSPEC_PRLG_STK);
-
- insn = emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode, unspec)));
- }
+ insn = emit_insn (gen_stack_tie (stack_pointer_rtx,
+ hard_frame_pointer_rtx));
}
/* If we are profiling, make sure no instructions are scheduled before
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 8b45862..8e4b9c0 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -8883,6 +8883,16 @@
[(set_attr "type" "store4")]
)
+(define_insn "stack_tie"
+ [(set (mem:BLK (scratch))
+ (unspec:BLK [(match_operand:SI 0 "s_register_operand" "r")
+ (match_operand:SI 1 "s_register_operand" "r")]
+ UNSPEC_PRLG_STK))]
+ ""
+ ""
+ [(set_attr "length" "0")]
+)
+
;; Similarly for the floating point registers
(define_insn "*push_fp_multi"
[(match_parallel 2 "multi_register_push"