From 1ca950caf96bf812480298c217c05e4ab8c68cca Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Wed, 13 Jun 2007 17:41:07 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/config/bfin/bfin.h | 2 +- gcc/config/bfin/bfin.md | 13 +++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 411193fed04..411f28a08b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-06-13 Bernd Schmidt + + * 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 * config/i386/i386.c (ix86_init_mmx_sse_builtins) diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index b78ecb2c84a..b42a096fd7a 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 1fafa881f78..144df5af30c 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))] -- 2.30.2