diff options
author | merrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-12-09 22:31:23 +0000 |
---|---|---|
committer | merrill <merrill@138bc75d-0d04-0410-961f-82ee72b054a4> | 1996-12-09 22:31:23 +0000 |
commit | 6efd403b19c0f3ad3ecd12422e1cec66197eaba8 (patch) | |
tree | 85d261767b8a92bfcd79dacffefca2f442d5cf06 /gcc/config/mips | |
parent | 1ae4569e70ac01cd2ac48d59007f1ca5ac6f0c74 (diff) |
x
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13258 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/mips')
-rw-r--r-- | gcc/config/mips/mips.c | 67 | ||||
-rw-r--r-- | gcc/config/mips/t-iris6 | 1 |
2 files changed, 59 insertions, 9 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 10545bb5bd1..c3a3b2d8580 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -4940,7 +4940,7 @@ compute_frame_size (size) + gp_reg_rounded + fp_reg_size - fp_inc * UNITS_PER_FPREG); current_frame_info.fp_sp_offset = offset; - current_frame_info.fp_save_offset = offset - total_size + UNITS_PER_WORD; + current_frame_info.fp_save_offset = offset - total_size; } else { @@ -5066,7 +5066,25 @@ save_restore_insns (store_p, large_reg, large_offset, file) GEN_INT (gp_offset - base_offset))); if (store_p) - emit_move_insn (mem_rtx, reg_rtx); + { + rtx insn = emit_move_insn (mem_rtx, reg_rtx); + + if (write_symbols == DWARF2_DEBUG) + { + int offset = (gp_offset + - current_frame_info.total_size); + if (regno == GP_REG_FIRST + 31) + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_RETURN_SAVE, + GEN_INT (offset), REG_NOTES (insn)); + else + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_SAVE, + gen_rtx (EXPR_LIST, VOIDmode, reg_rtx, + GEN_INT (offset)), + REG_NOTES (insn)); + } + } else if (!TARGET_ABICALLS || mips_abi != ABI_32 || regno != (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST)) emit_move_insn (reg_rtx, mem_rtx); @@ -5179,7 +5197,20 @@ save_restore_insns (store_p, large_reg, large_offset, file) GEN_INT (fp_offset - base_offset))); if (store_p) - emit_move_insn (mem_rtx, reg_rtx); + { + rtx insn = emit_move_insn (mem_rtx, reg_rtx); + + if (write_symbols == DWARF2_DEBUG) + { + int offset = (gp_offset + - current_frame_info.total_size); + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_SAVE, + gen_rtx (EXPR_LIST, VOIDmode, reg_rtx, + GEN_INT (offset)), + REG_NOTES (insn)); + } + } else emit_move_insn (reg_rtx, mem_rtx); } @@ -5405,6 +5436,8 @@ mips_expand_prologue () /* If we are doing svr4-abi, sp move is done by function_prologue. */ if (!TARGET_ABICALLS || mips_abi != ABI_32) { + rtx insn; + if (tsize > 32767) { tmp_rtx = gen_rtx (REG, Pmode, MIPS_TEMP1_REGNUM); @@ -5413,21 +5446,37 @@ mips_expand_prologue () } if (TARGET_LONG64) - emit_insn (gen_subdi3 (stack_pointer_rtx, stack_pointer_rtx, - tsize_rtx)); + insn = emit_insn (gen_subdi3 (stack_pointer_rtx, stack_pointer_rtx, + tsize_rtx)); else - emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, - tsize_rtx)); + insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, + tsize_rtx)); + + if (write_symbols == DWARF2_DEBUG) + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_FRAME, + gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, + GEN_INT (tsize)), + REG_NOTES (insn)); } save_restore_insns (TRUE, tmp_rtx, tsize, (FILE *)0); if (frame_pointer_needed) { + rtx insn; + if (TARGET_64BIT) - emit_insn (gen_movdi (frame_pointer_rtx, stack_pointer_rtx)); + insn= emit_insn (gen_movdi (frame_pointer_rtx, stack_pointer_rtx)); else - emit_insn (gen_movsi (frame_pointer_rtx, stack_pointer_rtx)); + insn= emit_insn (gen_movsi (frame_pointer_rtx, stack_pointer_rtx)); + + if (write_symbols == DWARF2_DEBUG) + REG_NOTES (insn) + = gen_rtx (EXPR_LIST, REG_FRAME, + gen_rtx (PLUS, VOIDmode, frame_pointer_rtx, + GEN_INT (tsize)), + REG_NOTES (insn)); } if (TARGET_ABICALLS && mips_abi != ABI_32) diff --git a/gcc/config/mips/t-iris6 b/gcc/config/mips/t-iris6 index e8314592245..85a63f06e2e 100644 --- a/gcc/config/mips/t-iris6 +++ b/gcc/config/mips/t-iris6 @@ -17,3 +17,4 @@ INSTALL_LIBGCC = install-multilib # end labels to the .ctors and .dtors section when we link using gcc. EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o +CRTSTUFF_T_CFLAGS=-g1 |