Index: gcc/gcc/config/h8300/h8300.h |
diff --git a/gcc/gcc/config/h8300/h8300.h b/gcc/gcc/config/h8300/h8300.h |
index 701223e9c25f49e6ac06386e36321cfb205b2fe7..9757afc2de3c4a54c7d9b65d02099d4acb9f9199 100644 |
--- a/gcc/gcc/config/h8300/h8300.h |
+++ b/gcc/gcc/config/h8300/h8300.h |
@@ -1,7 +1,7 @@ |
/* Definitions of target machine for GNU compiler. |
Renesas H8/300 (generic) |
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1996, 1997, 1998, 1999, |
- 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 |
+ 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 |
Free Software Foundation, Inc. |
Contributed by Steve Chamberlain (sac@cygnus.com), |
Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). |
@@ -147,6 +147,17 @@ extern const char * const *h8_reg_names; |
/* Show we can debug even without a frame pointer. */ |
/* #define CAN_DEBUG_WITHOUT_FP */ |
+/* We want dwarf2 info available to gdb... */ |
+#define DWARF2_DEBUGGING_INFO 1 |
+/* ... but we don't actually support full dwarf2 EH. */ |
+#define MUST_USE_SJLJ_EXCEPTIONS 1 |
+ |
+/* The return address is pushed on the stack. */ |
+#define INCOMING_RETURN_ADDR_RTX gen_rtx_MEM (Pmode, gen_rtx_REG (Pmode, STACK_POINTER_REGNUM)) |
+#define INCOMING_FRAME_SP_OFFSET (POINTER_SIZE / 8) |
+ |
+#define DWARF_CIE_DATA_ALIGNMENT 2 |
+ |
/* Define this if addresses of constant functions |
shouldn't be put through pseudo regs where they can be cse'd. |
Desirable on machines where ordinary constants are expensive |
@@ -300,12 +311,6 @@ extern const char * const *h8_reg_names; |
/* Base register for access to local variables of the function. */ |
#define FRAME_POINTER_REGNUM FP_REG |
-/* Value should be nonzero if functions must have frame pointers. |
- Zero means the frame pointer need not be set up (and parms |
- may be accessed via the stack pointer) in functions that seem suitable. |
- This is computed in `reload', in reload1.c. */ |
-#define FRAME_POINTER_REQUIRED 0 |
- |
/* Base register for access to arguments of the function. */ |
#define ARG_POINTER_REGNUM AP_REG |
@@ -564,17 +569,6 @@ enum reg_class { |
{ FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ |
{ FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}} |
-/* Given FROM and TO register numbers, say whether this elimination is allowed. |
- Frame pointer elimination is automatically handled. |
- |
- For the h8300, if frame pointer elimination is being done, we would like to |
- convert ap and rp into sp, not fp. |
- |
- All other eliminations are valid. */ |
- |
-#define CAN_ELIMINATE(FROM, TO) \ |
- ((TO) == STACK_POINTER_REGNUM ? ! frame_pointer_needed : 1) |
- |
/* Define the offset between two registers, one to be eliminated, and the other |
its replacement, at the start of a routine. */ |
@@ -689,58 +683,9 @@ struct cum_arg |
#define EXIT_IGNORE_STACK 0 |
-/* We emit the entire trampoline with INITIALIZE_TRAMPOLINE. |
- Depending on the pointer size, we use a different trampoline. |
- |
- Pmode == HImode |
- vvvv context |
- 1 0000 7903xxxx mov.w #0x1234,r3 |
- 2 0004 5A00xxxx jmp @0x1234 |
- ^^^^ function |
- |
- Pmode == SImode |
- vvvvvvvv context |
- 2 0000 7A03xxxxxxxx mov.l #0x12345678,er3 |
- 3 0006 5Axxxxxx jmp @0x123456 |
- ^^^^^^ function |
-*/ |
- |
/* Length in units of the trampoline for entering a nested function. */ |
#define TRAMPOLINE_SIZE ((Pmode == HImode) ? 8 : 12) |
- |
-/* Emit RTL insns to build a trampoline. |
- FNADDR is an RTX for the address of the function's pure code. |
- CXT is an RTX for the static chain value for the function. */ |
- |
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ |
- do \ |
- { \ |
- if (Pmode == HImode) \ |
- { \ |
- emit_move_insn (gen_rtx_MEM (HImode, (TRAMP)), GEN_INT (0x7903)); \ |
- emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 2)), \ |
- (CXT)); \ |
- emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 4)), \ |
- GEN_INT (0x5a00)); \ |
- emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 6)), \ |
- (FNADDR)); \ |
- } \ |
- else \ |
- { \ |
- rtx tem = gen_reg_rtx (Pmode); \ |
- \ |
- emit_move_insn (gen_rtx_MEM (HImode, (TRAMP)), GEN_INT (0x7a03)); \ |
- emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 2)), \ |
- (CXT)); \ |
- emit_move_insn (tem, (FNADDR)); \ |
- emit_insn (gen_andsi3 (tem, tem, GEN_INT (0x00ffffff))); \ |
- emit_insn (gen_iorsi3 (tem, tem, GEN_INT (0x5a000000))); \ |
- emit_move_insn (gen_rtx_MEM (Pmode, plus_constant ((TRAMP), 6)), \ |
- tem); \ |
- } \ |
- } \ |
- while (0) |
/* Addressing modes, and classification of registers for them. */ |
@@ -927,24 +872,6 @@ struct cum_arg |
((C) == 'W') |
-#ifndef REG_OK_STRICT |
-#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ |
- do \ |
- { \ |
- if (h8300_legitimate_address_p ((MODE), (X), 0)) \ |
- goto ADDR; \ |
- } \ |
- while (0) |
-#else |
-#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ |
- do \ |
- { \ |
- if (h8300_legitimate_address_p ((MODE), (X), 1)) \ |
- goto ADDR; \ |
- } \ |
- while (0) |
-#endif |
- |
/* Go to LABEL if ADDR (a legitimate address expression) |
has an effect that depends on the machine mode it is used for. |