aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2007-06-13 17:41:07 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2007-06-13 17:41:07 +0000
commit1ca950caf96bf812480298c217c05e4ab8c68cca (patch)
tree1fd39ca08ed531ffce8f08996fcf7143ee74743f
parent8d3641040cfe5100d576e35eb40fec9f3f9db25f (diff)
downloadgcc-1ca950caf96bf812480298c217c05e4ab8c68cca.zip
gcc-1ca950caf96bf812480298c217c05e4ab8c68cca.tar.gz
gcc-1ca950caf96bf812480298c217c05e4ab8c68cca.tar.bz2
bfin.h (EH_RETURN_HANDLER_RTX): Use gen_frame_mem.
* config/bfin/bfin.h (EH_RETURN_HANDLER_RTX): Use gen_frame_mem. * config/bfin/bfin.md (UNSPEC_VOLATILE_STORE_EH_HANDLER): New constant. (eh_store_handler): New pattern. (eh_return): Emit it instead of a plain move. From-SVN: r125681
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/bfin/bfin.h2
-rw-r--r--gcc/config/bfin/bfin.md13
3 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 411193f..411f28a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2007-06-13 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/bfin.h (EH_RETURN_HANDLER_RTX): Use gen_frame_mem.
+ * config/bfin/bfin.md (UNSPEC_VOLATILE_STORE_EH_HANDLER): New constant.
+ (eh_store_handler): New pattern.
+ (eh_return): Emit it instead of a plain move.
+
2007-06-13 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.c (ix86_init_mmx_sse_builtins)
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h
index b78ecb2..b42a096 100644
--- a/gcc/config/bfin/bfin.h
+++ b/gcc/config/bfin/bfin.h
@@ -813,7 +813,7 @@ typedef struct {
#define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) : INVALID_REGNUM)
#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, REG_P2)
#define EH_RETURN_HANDLER_RTX \
- gen_rtx_MEM (Pmode, plus_constant (frame_pointer_rtx, UNITS_PER_WORD))
+ gen_frame_mem (Pmode, plus_constant (frame_pointer_rtx, UNITS_PER_WORD))
/* Addressing Modes */
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md
index 1fafa88..144df5a 100644
--- a/gcc/config/bfin/bfin.md
+++ b/gcc/config/bfin/bfin.md
@@ -144,7 +144,8 @@
[(UNSPEC_VOLATILE_EH_RETURN 0)
(UNSPEC_VOLATILE_CSYNC 1)
(UNSPEC_VOLATILE_SSYNC 2)
- (UNSPEC_VOLATILE_LOAD_FUNCDESC 3)])
+ (UNSPEC_VOLATILE_LOAD_FUNCDESC 3)
+ (UNSPEC_VOLATILE_STORE_EH_HANDLER 4)])
(define_constants
[(MACFLAG_NONE 0)
@@ -2687,12 +2688,20 @@
UNSPEC_VOLATILE_EH_RETURN)]
""
{
- emit_move_insn (EH_RETURN_HANDLER_RTX, operands[0]);
+ emit_insn (gen_eh_store_handler (EH_RETURN_HANDLER_RTX, operands[0]));
emit_jump_insn (gen_eh_return_internal ());
emit_barrier ();
DONE;
})
+(define_insn "eh_store_handler"
+ [(unspec_volatile [(match_operand:SI 1 "register_operand" "da")]
+ UNSPEC_VOLATILE_STORE_EH_HANDLER)
+ (clobber (match_operand:SI 0 "memory_operand" "=m"))]
+ ""
+ "%0 = %1%!"
+ [(set_attr "type" "mcst")])
+
(define_insn_and_split "eh_return_internal"
[(set (pc)
(unspec_volatile [(reg:SI REG_P2)] UNSPEC_VOLATILE_EH_RETURN))]