mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 15:25:36 +08:00
alpha.md (force_movdi): New insn.
* config/alpha/alpha.md (force_movdi): New insn. * config/alpha/alpha.c (alpha_expand_prologue): Use it. Tweek FRP marking of VMS prologue insns. * config/alpha/vms.h (EPILOGUE_USES): New. From-SVN: r44594
This commit is contained in:
parent
62dcadeb4a
commit
54aaa4ea8d
@ -1,3 +1,10 @@
|
||||
2001-08-03 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/alpha/alpha.md (force_movdi): New insn.
|
||||
* config/alpha/alpha.c (alpha_expand_prologue): Use it.
|
||||
Tweek FRP marking of VMS prologue insns.
|
||||
* config/alpha/vms.h (EPILOGUE_USES): New.
|
||||
|
||||
2001-08-02 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* Makefile.in, mklibgcc.in: Revert mkinstalldirs change.
|
||||
|
@ -4855,13 +4855,14 @@ alpha_expand_prologue ()
|
||||
if (TARGET_ABI_OPEN_VMS)
|
||||
{
|
||||
if (!vms_is_stack_procedure)
|
||||
/* Register frame procedures fave the fp. */
|
||||
FRP (emit_move_insn (gen_rtx_REG (DImode, vms_save_fp_regno),
|
||||
hard_frame_pointer_rtx));
|
||||
/* Register frame procedures save the fp. */
|
||||
/* ??? Ought to have a dwarf2 save for this. */
|
||||
emit_move_insn (gen_rtx_REG (DImode, vms_save_fp_regno),
|
||||
hard_frame_pointer_rtx);
|
||||
|
||||
if (vms_base_regno != REG_PV)
|
||||
FRP (emit_move_insn (gen_rtx_REG (DImode, vms_base_regno),
|
||||
gen_rtx_REG (DImode, REG_PV)));
|
||||
emit_insn (gen_force_movdi (gen_rtx_REG (DImode, vms_base_regno),
|
||||
gen_rtx_REG (DImode, REG_PV)));
|
||||
|
||||
if (vms_unwind_regno == HARD_FRAME_POINTER_REGNUM)
|
||||
FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx));
|
||||
|
@ -47,6 +47,7 @@
|
||||
(UNSPECV_MCOUNT 8)
|
||||
(UNSPECV_LDGP1 9)
|
||||
(UNSPECV_LDGP2 10)
|
||||
(UNSPECV_FORCE_MOV 11)
|
||||
])
|
||||
|
||||
;; Processor type -- this attribute must exactly match the processor_type
|
||||
@ -4880,6 +4881,18 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi"
|
||||
itoft %1,%0"
|
||||
[(set_attr "type" "ilog,iadd,iadd,ldsym,ild,ist,fcpys,fld,fst,ftoi,itof")])
|
||||
|
||||
;; VMS needs to set up "vms_base_regno" for unwinding. This move
|
||||
;; often appears dead to the life analysis code, at which point we
|
||||
;; abort for emitting dead prologue instructions. Force this live.
|
||||
|
||||
(define_insn "force_movdi"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(unspec_volatile:DI [(match_operand:DI 1 "register_operand" "r")]
|
||||
UNSPECV_FORCE_MOV))]
|
||||
""
|
||||
"mov %1,%0"
|
||||
[(set_attr "type" "ilog")])
|
||||
|
||||
;; We do three major things here: handle mem->mem, put 64-bit constants in
|
||||
;; memory, and construct long 32-bit constants.
|
||||
|
||||
|
@ -111,6 +111,10 @@ Boston, MA 02111-1307, USA. */
|
||||
#undef HARD_FRAME_POINTER_REGNUM
|
||||
#define HARD_FRAME_POINTER_REGNUM 29
|
||||
|
||||
/* Define registers used by the epilogue and return instruction. */
|
||||
#undef EPILOGUE_USES
|
||||
#define EPILOGUE_USES(REGNO) ((REGNO) == 26 || (REGNO) == 29)
|
||||
|
||||
#undef CAN_ELIMINATE
|
||||
#define CAN_ELIMINATE(FROM, TO) \
|
||||
((TO) != STACK_POINTER_REGNUM || ! alpha_using_fp ())
|
||||
|
Loading…
Reference in New Issue
Block a user