diff options
author | Richard Sandiford <richard@codesourcery.com> | 2007-02-05 10:38:46 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2007-02-05 10:38:46 +0000 |
commit | 5cd0f9153d5ae7d646006fc21bb967de4e262d8d (patch) | |
tree | 0564697bf3a64211ba6d737dea5a615ec299e0f2 /gcc/dwarf2out.c | |
parent | 4fe70b3151497166c316c45e5eec842f9de3a3f2 (diff) | |
download | gcc-5cd0f9153d5ae7d646006fc21bb967de4e262d8d.zip gcc-5cd0f9153d5ae7d646006fc21bb967de4e262d8d.tar.gz gcc-5cd0f9153d5ae7d646006fc21bb967de4e262d8d.tar.bz2 |
tm.texi (DWARF_ALT_FRAME_RETURN_COLUMN): Do not require DWARF_FRAME_RETURN_COLUMN to be a general register.
gcc/
* doc/tm.texi (DWARF_ALT_FRAME_RETURN_COLUMN): Do not require
DWARF_FRAME_RETURN_COLUMN to be a general register.
* dwarf2out.c (init_return_column_size): New function, split from...
(expand_builtin_init_dwarf_reg_sizes): ...here. Allow both
DWARF_FRAME_RETURN_COLUMN and DWARF_ALT_FRAME_RETURN_COLUMN
to be nongeneral registers.
* config/m68k/m68k.h (DWARF_FRAME_REGNUM): Only map FP and
integer registers.
(DWARF_FRAME_REGISTERS, DWARF_FRAME_RETURN_COLUMN): Define.
(DWARF_ALT_FRAME_RETURN_COLUMN): Define.
From-SVN: r121593
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 861ede5..6cbf9d3 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -443,6 +443,17 @@ stripattributes (const char *s) return stripped; } +/* MEM is a memory reference for the register size table, each element of + which has mode MODE. Initialize column C as a return address column. */ + +static void +init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c) +{ + HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode); + HOST_WIDE_INT size = GET_MODE_SIZE (Pmode); + emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size)); +} + /* Generate code to initialize the register size table. */ void @@ -481,21 +492,12 @@ expand_builtin_init_dwarf_reg_sizes (tree address) } } + if (!wrote_return_column) + init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN); + #ifdef DWARF_ALT_FRAME_RETURN_COLUMN - gcc_assert (wrote_return_column); - i = DWARF_ALT_FRAME_RETURN_COLUMN; - wrote_return_column = false; -#else - i = DWARF_FRAME_RETURN_COLUMN; + init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN); #endif - - if (! wrote_return_column) - { - enum machine_mode save_mode = Pmode; - HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode); - HOST_WIDE_INT size = GET_MODE_SIZE (save_mode); - emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size)); - } } /* Convert a DWARF call frame info. operation to its string name */ |