diff options
author | Alan Modra <amodra@gmail.com> | 2012-04-20 21:16:58 +0930 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2012-04-20 21:16:58 +0930 |
commit | a51e5fa2c28e88b936ca246a74bf2cba30c5a40d (patch) | |
tree | 8d1c4217ebbd549b1765bbaad15845fd60e9f3f1 /gcc | |
parent | 4cbc836ed7d6a17696e1bebfeca37582b199ce41 (diff) | |
download | gcc-a51e5fa2c28e88b936ca246a74bf2cba30c5a40d.zip gcc-a51e5fa2c28e88b936ca246a74bf2cba30c5a40d.tar.gz gcc-a51e5fa2c28e88b936ca246a74bf2cba30c5a40d.tar.bz2 |
rs6000.c (rs6000_emit_savres_rtx): Formatting.
* config/rs6000/rs6000.c (rs6000_emit_savres_rtx): Formatting.
(rs6000_emit_prologue, rs6000_emit_epilogue): Likewise. Rename
sp_offset to frame_off. Move world save code earlier.
From-SVN: r186621
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 354 |
2 files changed, 183 insertions, 177 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f1d9799a..33ef4a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-04-20 Alan Modra <amodra@gmail.com> + + * config/rs6000/rs6000.c (rs6000_emit_savres_rtx): Formatting. + (rs6000_emit_prologue, rs6000_emit_epilogue): Likewise. Rename + sp_offset to frame_off. Move world save code earlier. + 2012-04-20 Richard Guenther <rguenther@suse.de> PR tree-optimization/53050 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d120534..29749d2 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -19213,9 +19213,9 @@ rs6000_emit_savres_rtx (rs6000_stack_t *info, sym = rs6000_savres_routine_sym (info, savep, gpr, lr); RTVEC_ELT (p, offset++) = gen_rtx_USE (VOIDmode, sym); - use_reg = DEFAULT_ABI == ABI_AIX ? (gpr && !lr ? 12 : 1) - : DEFAULT_ABI == ABI_DARWIN && !gpr ? 1 - : 11; + use_reg = (DEFAULT_ABI == ABI_AIX ? (gpr && !lr ? 12 : 1) + : DEFAULT_ABI == ABI_DARWIN && !gpr ? 1 + : 11); RTVEC_ELT (p, offset++) = gen_rtx_USE (VOIDmode, gen_rtx_REG (Pmode, use_reg)); @@ -19225,7 +19225,7 @@ rs6000_emit_savres_rtx (rs6000_stack_t *info, rtx addr, reg, mem; reg = gen_rtx_REG (reg_mode, start_reg + i); addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (save_area_offset + reg_size*i)); + GEN_INT (save_area_offset + reg_size * i)); mem = gen_frame_mem (reg_mode, addr); RTVEC_ELT (p, i + offset) = gen_rtx_SET (VOIDmode, @@ -19294,9 +19294,9 @@ rs6000_emit_prologue (void) int saving_GPRs_inline; int using_store_multiple; int using_static_chain_p = (cfun->static_chain_decl != NULL_TREE - && df_regs_ever_live_p (STATIC_CHAIN_REGNUM) + && df_regs_ever_live_p (STATIC_CHAIN_REGNUM) && call_used_regs[STATIC_CHAIN_REGNUM]); - HOST_WIDE_INT sp_offset = 0; + HOST_WIDE_INT frame_off = 0; if (flag_stack_usage_info) current_function_static_stack_size = info->total_size; @@ -19324,52 +19324,6 @@ rs6000_emit_prologue (void) reg_size = 8; } - strategy = info->savres_strategy; - using_store_multiple = strategy & SAVRES_MULTIPLE; - saving_FPRs_inline = strategy & SAVE_INLINE_FPRS; - saving_GPRs_inline = strategy & SAVE_INLINE_GPRS; - - /* For V.4, update stack before we do any saving and set back pointer. */ - if (! WORLD_SAVE_P (info) - && info->push_p - && (DEFAULT_ABI == ABI_V4 - || crtl->calls_eh_return)) - { - bool need_r11 = (TARGET_SPE - ? (!saving_GPRs_inline - && info->spe_64bit_regs_used == 0) - : (!saving_FPRs_inline || !saving_GPRs_inline)); - rtx copy_reg = need_r11 ? gen_rtx_REG (Pmode, 11) : NULL; - - if (info->total_size < 32767) - sp_offset = info->total_size; - else if (need_r11) - frame_reg_rtx = copy_reg; - else if (info->cr_save_p - || info->lr_save_p - || info->first_fp_reg_save < 64 - || info->first_gp_reg_save < 32 - || info->altivec_size != 0 - || info->vrsave_mask != 0 - || crtl->calls_eh_return) - { - copy_reg = frame_ptr_rtx; - frame_reg_rtx = copy_reg; - } - else - { - /* The prologue won't be saving any regs so there is no need - to set up a frame register to access any frame save area. - We also won't be using sp_offset anywhere below, but set - the correct value anyway to protect against future - changes to this function. */ - sp_offset = info->total_size; - } - rs6000_emit_allocate_stack (info->total_size, copy_reg); - if (frame_reg_rtx != sp_reg_rtx) - rs6000_emit_stack_tie (frame_reg_rtx, false); - } - /* Handle world saves specially here. */ if (WORLD_SAVE_P (info)) { @@ -19397,7 +19351,7 @@ rs6000_emit_prologue (void) && info->push_p && info->lr_save_p && (!crtl->calls_eh_return - || info->ehrd_offset == -432) + || info->ehrd_offset == -432) && info->vrsave_save_offset == -224 && info->altivec_save_offset == -416); @@ -19424,14 +19378,14 @@ rs6000_emit_prologue (void) properly. */ for (i = 0; i < 64 - info->first_fp_reg_save; i++) { - rtx reg = gen_rtx_REG (((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode), - info->first_fp_reg_save + i); + rtx reg = gen_rtx_REG ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), + info->first_fp_reg_save + i); rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->fp_save_offset - + sp_offset + 8 * i)); - rtx mem = gen_frame_mem (((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode), addr); + + frame_off + 8 * i)); + rtx mem = gen_frame_mem ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), addr); RTVEC_ELT (p, j++) = gen_rtx_SET (VOIDmode, mem, reg); } @@ -19440,7 +19394,7 @@ rs6000_emit_prologue (void) rtx reg = gen_rtx_REG (V4SImode, info->first_altivec_reg_save + i); rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->altivec_save_offset - + sp_offset + 16 * i)); + + frame_off + 16 * i)); rtx mem = gen_frame_mem (V4SImode, addr); RTVEC_ELT (p, j++) = gen_rtx_SET (VOIDmode, mem, reg); @@ -19450,7 +19404,7 @@ rs6000_emit_prologue (void) rtx reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i); rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->gp_save_offset - + sp_offset + reg_size * i)); + + frame_off + reg_size * i)); rtx mem = gen_frame_mem (reg_mode, addr); RTVEC_ELT (p, j++) = gen_rtx_SET (VOIDmode, mem, reg); @@ -19461,7 +19415,7 @@ rs6000_emit_prologue (void) rtx reg = gen_rtx_REG (reg_mode, CR2_REGNO); rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->cr_save_offset - + sp_offset)); + + frame_off)); rtx mem = gen_frame_mem (reg_mode, addr); RTVEC_ELT (p, j++) = gen_rtx_SET (VOIDmode, mem, reg); @@ -19471,7 +19425,7 @@ rs6000_emit_prologue (void) { rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->lr_save_offset - + sp_offset)); + + frame_off)); rtx mem = gen_frame_mem (reg_mode, addr); RTVEC_ELT (p, j++) = gen_rtx_SET (VOIDmode, mem, reg0); @@ -19485,7 +19439,53 @@ rs6000_emit_prologue (void) insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, p)); rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, treg, GEN_INT (-info->total_size)); - sp_offset = info->total_size; + frame_off = info->total_size; + } + + strategy = info->savres_strategy; + using_store_multiple = strategy & SAVRES_MULTIPLE; + saving_FPRs_inline = strategy & SAVE_INLINE_FPRS; + saving_GPRs_inline = strategy & SAVE_INLINE_GPRS; + + /* For V.4, update stack before we do any saving and set back pointer. */ + if (! WORLD_SAVE_P (info) + && info->push_p + && (DEFAULT_ABI == ABI_V4 + || crtl->calls_eh_return)) + { + bool need_r11 = (TARGET_SPE + ? (!saving_GPRs_inline + && info->spe_64bit_regs_used == 0) + : (!saving_FPRs_inline || !saving_GPRs_inline)); + rtx copy_reg = need_r11 ? gen_rtx_REG (Pmode, 11) : NULL; + + if (info->total_size < 32767) + frame_off = info->total_size; + else if (need_r11) + frame_reg_rtx = copy_reg; + else if (info->cr_save_p + || info->lr_save_p + || info->first_fp_reg_save < 64 + || info->first_gp_reg_save < 32 + || info->altivec_size != 0 + || info->vrsave_mask != 0 + || crtl->calls_eh_return) + { + copy_reg = frame_ptr_rtx; + frame_reg_rtx = copy_reg; + } + else + { + /* The prologue won't be saving any regs so there is no need + to set up a frame register to access any frame save area. + We also won't be using frame_off anywhere below, but set + the correct value anyway to protect against future + changes to this function. */ + frame_off = info->total_size; + } + rs6000_emit_allocate_stack (info->total_size, copy_reg); + if (frame_reg_rtx != sp_reg_rtx) + rs6000_emit_stack_tie (frame_reg_rtx, false); } /* If we use the link register, get it into r0. */ @@ -19501,7 +19501,7 @@ rs6000_emit_prologue (void) | SAVE_NOINLINE_FPRS_SAVES_LR))) { addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->lr_save_offset + sp_offset)); + GEN_INT (info->lr_save_offset + frame_off)); reg = gen_rtx_REG (Pmode, 0); mem = gen_rtx_MEM (Pmode, addr); /* This should not be of rs6000_sr_alias_set, because of @@ -19514,7 +19514,9 @@ rs6000_emit_prologue (void) } /* If we need to save CR, put it into r12 or r11. */ - if (!WORLD_SAVE_P (info) && info->cr_save_p && frame_reg_rtx != frame_ptr_rtx) + if (!WORLD_SAVE_P (info) + && info->cr_save_p + && frame_reg_rtx != frame_ptr_rtx) { rtx set; @@ -19540,19 +19542,19 @@ rs6000_emit_prologue (void) { int i; for (i = 0; i < 64 - info->first_fp_reg_save; i++) - if ((df_regs_ever_live_p (info->first_fp_reg_save+i) - && ! call_used_regs[info->first_fp_reg_save+i])) - emit_frame_save (frame_reg_rtx, frame_ptr_rtx, - (TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode, + if (df_regs_ever_live_p (info->first_fp_reg_save + i) + && ! call_used_regs[info->first_fp_reg_save + i]) + emit_frame_save (frame_reg_rtx, frame_ptr_rtx, + (TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), info->first_fp_reg_save + i, - info->fp_save_offset + sp_offset + 8 * i, + info->fp_save_offset + frame_off + 8 * i, info->total_size); } else if (!WORLD_SAVE_P (info) && info->first_fp_reg_save != 64) { insn = rs6000_emit_savres_rtx (info, frame_reg_rtx, - info->fp_save_offset + sp_offset, + info->fp_save_offset + frame_off, DFmode, /*savep=*/true, /*gpr=*/false, /*lr=*/((strategy @@ -19578,7 +19580,7 @@ rs6000_emit_prologue (void) to be saved with an offset from frame_reg_rtx that fits in the small const field for SPE memory instructions. */ int spe_regs_addressable - = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset + = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + frame_off + reg_size * (32 - info->first_gp_reg_save - 1)) && saving_GPRs_inline); int spe_offset; @@ -19586,8 +19588,8 @@ rs6000_emit_prologue (void) if (spe_regs_addressable) { spe_save_area_ptr = frame_reg_rtx; - save_ptr_to_sp = info->total_size - sp_offset; - spe_offset = info->spe_gp_save_offset + sp_offset; + save_ptr_to_sp = info->total_size - frame_off; + spe_offset = info->spe_gp_save_offset + frame_off; } else { @@ -19599,9 +19601,9 @@ rs6000_emit_prologue (void) if (!saving_GPRs_inline) ool_adjust = 8 * (info->first_gp_reg_save - (FIRST_SAVRES_REGISTER + 1)); - offset = info->spe_gp_save_offset + sp_offset - ool_adjust; + offset = info->spe_gp_save_offset + frame_off - ool_adjust; spe_save_area_ptr = gen_rtx_REG (Pmode, 11); - save_ptr_to_sp = info->total_size - sp_offset + offset; + save_ptr_to_sp = info->total_size - frame_off + offset; spe_offset = 0; if (using_static_chain_p) @@ -19614,7 +19616,7 @@ rs6000_emit_prologue (void) emit_insn (gen_addsi3 (spe_save_area_ptr, frame_reg_rtx, GEN_INT (offset))); if (REGNO (frame_reg_rtx) == 11) - sp_offset = -info->spe_gp_save_offset + ool_adjust; + frame_off = -info->spe_gp_save_offset + ool_adjust; } if (saving_GPRs_inline) @@ -19635,8 +19637,7 @@ rs6000_emit_prologue (void) insn = emit_move_insn (mem, reg); - rs6000_frame_related (insn, - spe_save_area_ptr, save_ptr_to_sp, + rs6000_frame_related (insn, spe_save_area_ptr, save_ptr_to_sp, NULL_RTX, NULL_RTX); } } @@ -19669,10 +19670,10 @@ rs6000_emit_prologue (void) else { int save_off = 8 * (64 - info->first_fp_reg_save); - rtx offset = GEN_INT (sp_offset - save_off); + rtx offset = GEN_INT (frame_off - save_off); if (REGNO (dest_reg) == REGNO (frame_reg_rtx)) - sp_offset = save_off; + frame_off = save_off; emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, offset)); } } @@ -19681,15 +19682,15 @@ rs6000_emit_prologue (void) { rtx dest_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11); int save_off = 8 * (64 - info->first_fp_reg_save); - rtx offset = GEN_INT (sp_offset - save_off); + rtx offset = GEN_INT (frame_off - save_off); if (REGNO (dest_reg) == REGNO (frame_reg_rtx)) - sp_offset = save_off; + frame_off = save_off; emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, offset)); } insn = rs6000_emit_savres_rtx (info, frame_reg_rtx, - info->gp_save_offset + sp_offset, + info->gp_save_offset + frame_off, reg_mode, /*savep=*/true, /*gpr=*/true, /*lr=*/((strategy @@ -19709,7 +19710,7 @@ rs6000_emit_prologue (void) reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i); addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->gp_save_offset - + sp_offset + + frame_off + reg_size * i)); mem = gen_frame_mem (reg_mode, addr); @@ -19724,20 +19725,20 @@ rs6000_emit_prologue (void) int i; for (i = 0; i < 32 - info->first_gp_reg_save; i++) if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i)) - { - rtx addr, reg, mem; - reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i); - - addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->gp_save_offset - + sp_offset - + reg_size * i)); - mem = gen_frame_mem (reg_mode, addr); - - insn = emit_move_insn (mem, reg); - rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, - NULL_RTX, NULL_RTX); - } + { + rtx addr, reg, mem; + reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i); + + addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, + GEN_INT (info->gp_save_offset + + frame_off + + reg_size * i)); + mem = gen_frame_mem (reg_mode, addr); + + insn = emit_move_insn (mem, reg); + rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, + NULL_RTX, NULL_RTX); + } } /* ??? There's no need to emit actual instructions here, but it's the @@ -19753,8 +19754,7 @@ rs6000_emit_prologue (void) break; emit_frame_save (frame_reg_rtx, frame_ptr_rtx, reg_mode, regno, - info->ehrd_offset + sp_offset - + reg_size * (int) i, + info->ehrd_offset + frame_off + reg_size * (int) i, info->total_size); } } @@ -19799,7 +19799,7 @@ rs6000_emit_prologue (void) LABEL_NUSES (toc_save_done) += 1; save_insn = emit_frame_save (frame_reg_rtx, frame_ptr_rtx, reg_mode, - TOC_REGNUM, sp_offset + 5 * reg_size, + TOC_REGNUM, frame_off + 5 * reg_size, info->total_size); emit_label (toc_save_done); @@ -19829,7 +19829,7 @@ rs6000_emit_prologue (void) if (!WORLD_SAVE_P (info) && info->cr_save_p) { rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->cr_save_offset + sp_offset)); + GEN_INT (info->cr_save_offset + frame_off)); rtx mem = gen_frame_mem (SImode, addr); /* See the large comment above about why CR2_REGNO is used. */ rtx magic_eh_cr_reg = gen_rtx_REG (SImode, CR2_REGNO); @@ -19860,7 +19860,7 @@ rs6000_emit_prologue (void) rtx copy_reg = NULL; if (info->total_size < 32767) - sp_offset = info->total_size; + frame_off = info->total_size; else if (info->altivec_size != 0 || info->vrsave_mask != 0) { @@ -19868,7 +19868,7 @@ rs6000_emit_prologue (void) frame_reg_rtx = copy_reg; } else - sp_offset = info->total_size; + frame_off = info->total_size; rs6000_emit_allocate_stack (info->total_size, copy_reg); if (frame_reg_rtx != sp_reg_rtx) rs6000_emit_stack_tie (frame_reg_rtx, false); @@ -19889,30 +19889,30 @@ rs6000_emit_prologue (void) int i; /* There should be a non inline version of this, for when we - are saving lots of vector registers. */ + are saving lots of vector registers. */ for (i = info->first_altivec_reg_save; i <= LAST_ALTIVEC_REGNO; ++i) - if (info->vrsave_mask & ALTIVEC_REG_BIT (i)) - { - rtx areg, savereg, mem; - int offset; + if (info->vrsave_mask & ALTIVEC_REG_BIT (i)) + { + rtx areg, savereg, mem; + int offset; - offset = info->altivec_save_offset + sp_offset - + 16 * (i - info->first_altivec_reg_save); + offset = (info->altivec_save_offset + frame_off + + 16 * (i - info->first_altivec_reg_save)); - savereg = gen_rtx_REG (V4SImode, i); + savereg = gen_rtx_REG (V4SImode, i); - areg = gen_rtx_REG (Pmode, 0); - emit_move_insn (areg, GEN_INT (offset)); + areg = gen_rtx_REG (Pmode, 0); + emit_move_insn (areg, GEN_INT (offset)); - /* AltiVec addressing mode is [reg+reg]. */ - mem = gen_frame_mem (V4SImode, - gen_rtx_PLUS (Pmode, frame_reg_rtx, areg)); + /* AltiVec addressing mode is [reg+reg]. */ + mem = gen_frame_mem (V4SImode, + gen_rtx_PLUS (Pmode, frame_reg_rtx, areg)); - insn = emit_move_insn (mem, savereg); + insn = emit_move_insn (mem, savereg); - rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, - areg, GEN_INT (offset)); - } + rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, + areg, GEN_INT (offset)); + } } /* VRSAVE is a bit vector representing which AltiVec registers @@ -19931,19 +19931,19 @@ rs6000_emit_prologue (void) int offset; /* Get VRSAVE onto a GPR. Note that ABI_V4 might be using r12 - as frame_reg_rtx and r11 as the static chain pointer for - nested functions. */ + as frame_reg_rtx and r11 as the static chain pointer for + nested functions. */ reg = gen_rtx_REG (SImode, 0); vrsave = gen_rtx_REG (SImode, VRSAVE_REGNO); if (TARGET_MACHO) - emit_insn (gen_get_vrsave_internal (reg)); + emit_insn (gen_get_vrsave_internal (reg)); else - emit_insn (gen_rtx_SET (VOIDmode, reg, vrsave)); + emit_insn (gen_rtx_SET (VOIDmode, reg, vrsave)); /* Save VRSAVE. */ - offset = info->vrsave_save_offset + sp_offset; + offset = info->vrsave_save_offset + frame_off; mem = gen_frame_mem (SImode, - gen_rtx_PLUS (Pmode, frame_reg_rtx, + gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (offset))); insn = emit_move_insn (mem, reg); @@ -20022,7 +20022,7 @@ rs6000_emit_prologue (void) both in terms of the size of DWARF info and the time taken in the unwinder to interpret it. R2 changes, apart from the calls_eh_return case earlier in this function, are handled by - linux-unwind.h frob_update_context. */ + linux-unwind.h frob_update_context. */ if (rs6000_save_toc_in_prologue_p ()) { rtx addr = gen_rtx_PLUS (Pmode, sp_reg_rtx, GEN_INT (5 * reg_size)); @@ -20170,7 +20170,7 @@ rs6000_emit_epilogue (int sibcall) int use_backchain_to_restore_sp; int restore_lr; int strategy; - int sp_offset = 0; + int frame_off = 0; rtx sp_reg_rtx = gen_rtx_REG (Pmode, 1); rtx frame_reg_rtx = sp_reg_rtx; rtx cfa_restores = NULL_RTX; @@ -20290,14 +20290,14 @@ rs6000_emit_epilogue (int sibcall) } for (i = 0; info->first_fp_reg_save + i <= 63; i++) { - rtx reg = gen_rtx_REG (((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode), - info->first_fp_reg_save + i); + rtx reg = gen_rtx_REG ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), + info->first_fp_reg_save + i); rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->fp_save_offset + 8 * i)); - rtx mem = gen_frame_mem (((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode), addr); + rtx mem = gen_frame_mem ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), addr); RTVEC_ELT (p, j++) = gen_rtx_SET (VOIDmode, reg, mem); if (flag_shrink_wrap) @@ -20324,9 +20324,9 @@ rs6000_emit_epilogue (int sibcall) return; } - /* frame_reg_rtx + sp_offset points to the top of this stack frame. */ + /* frame_reg_rtx + frame_off points to the top of this stack frame. */ if (info->push_p) - sp_offset = info->total_size; + frame_off = info->total_size; /* Restore AltiVec registers if we must do so before adjusting the stack. */ @@ -20343,7 +20343,7 @@ rs6000_emit_epilogue (int sibcall) frame_reg_rtx = gen_rtx_REG (Pmode, 11); emit_move_insn (frame_reg_rtx, gen_rtx_MEM (Pmode, sp_reg_rtx)); - sp_offset = 0; + frame_off = 0; } else if (frame_pointer_needed) frame_reg_rtx = hard_frame_pointer_rtx; @@ -20356,7 +20356,7 @@ rs6000_emit_epilogue (int sibcall) areg = gen_rtx_REG (Pmode, 0); emit_move_insn (areg, GEN_INT (info->altivec_save_offset - + sp_offset + + frame_off + 16 * (i - info->first_altivec_reg_save))); /* AltiVec addressing mode is [reg+reg]. */ @@ -20391,14 +20391,14 @@ rs6000_emit_epilogue (int sibcall) frame_reg_rtx = gen_rtx_REG (Pmode, 11); emit_move_insn (frame_reg_rtx, gen_rtx_MEM (Pmode, sp_reg_rtx)); - sp_offset = 0; + frame_off = 0; } else if (frame_pointer_needed) frame_reg_rtx = hard_frame_pointer_rtx; } addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->vrsave_save_offset + sp_offset)); + GEN_INT (info->vrsave_save_offset + frame_off)); mem = gen_frame_mem (SImode, addr); reg = gen_rtx_REG (SImode, 12); emit_move_insn (reg, mem); @@ -20420,7 +20420,7 @@ rs6000_emit_epilogue (int sibcall) insn = emit_move_insn (frame_reg_rtx, gen_rtx_MEM (Pmode, sp_reg_rtx)); - sp_offset = 0; + frame_off = 0; } else if (ALWAYS_RESTORE_ALTIVEC_BEFORE_POP && DEFAULT_ABI == ABI_V4) @@ -20446,7 +20446,7 @@ rs6000_emit_epilogue (int sibcall) insn = emit_insn (gen_add3_insn (frame_reg_rtx, hard_frame_pointer_rtx, GEN_INT (info->total_size))); - sp_offset = 0; + frame_off = 0; } else if (info->push_p && DEFAULT_ABI != ABI_V4 @@ -20458,7 +20458,7 @@ rs6000_emit_epilogue (int sibcall) rs6000_emit_stack_tie (frame_reg_rtx, false); insn = emit_insn (gen_add3_insn (sp_reg_rtx, sp_reg_rtx, GEN_INT (info->total_size))); - sp_offset = 0; + frame_off = 0; } if (insn && frame_reg_rtx == sp_reg_rtx) { @@ -20488,7 +20488,7 @@ rs6000_emit_epilogue (int sibcall) areg = gen_rtx_REG (Pmode, 0); emit_move_insn (areg, GEN_INT (info->altivec_save_offset - + sp_offset + + frame_off + 16 * (i - info->first_altivec_reg_save))); /* AltiVec addressing mode is [reg+reg]. */ @@ -20514,7 +20514,7 @@ rs6000_emit_epilogue (int sibcall) rtx addr, mem, reg; addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->vrsave_save_offset + sp_offset)); + GEN_INT (info->vrsave_save_offset + frame_off)); mem = gen_frame_mem (SImode, addr); reg = gen_rtx_REG (SImode, 12); emit_move_insn (reg, mem); @@ -20527,7 +20527,7 @@ rs6000_emit_epilogue (int sibcall) if (restore_lr && restoring_GPRs_inline) { rtx mem = gen_frame_mem_offset (Pmode, frame_reg_rtx, - info->lr_save_offset + sp_offset); + info->lr_save_offset + frame_off); emit_move_insn (gen_rtx_REG (Pmode, 0), mem); } @@ -20536,7 +20536,7 @@ rs6000_emit_epilogue (int sibcall) if (info->cr_save_p) { rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->cr_save_offset + sp_offset)); + GEN_INT (info->cr_save_offset + frame_off)); rtx mem = gen_frame_mem (SImode, addr); cr_save_reg = gen_rtx_REG (SImode, @@ -20560,7 +20560,7 @@ rs6000_emit_epilogue (int sibcall) if (TARGET_AIX) { rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (sp_offset + 5 * reg_size)); + GEN_INT (frame_off + 5 * reg_size)); rtx mem = gen_frame_mem (reg_mode, addr); emit_move_insn (gen_rtx_REG (reg_mode, 2), mem); @@ -20575,7 +20575,7 @@ rs6000_emit_epilogue (int sibcall) break; mem = gen_frame_mem_offset (reg_mode, frame_reg_rtx, - info->ehrd_offset + sp_offset + info->ehrd_offset + frame_off + reg_size * (int) i); emit_move_insn (gen_rtx_REG (reg_mode, regno), mem); @@ -20592,14 +20592,14 @@ rs6000_emit_epilogue (int sibcall) to be saved with an offset from frame_reg_rtx that fits in the small const field for SPE memory instructions. */ int spe_regs_addressable - = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset + = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + frame_off + reg_size * (32 - info->first_gp_reg_save - 1)) && restoring_GPRs_inline); int spe_offset; int ool_adjust = 0; if (spe_regs_addressable) - spe_offset = info->spe_gp_save_offset + sp_offset; + spe_offset = info->spe_gp_save_offset + frame_off; else { rtx old_frame_reg_rtx = frame_reg_rtx; @@ -20614,11 +20614,11 @@ rs6000_emit_epilogue (int sibcall) frame_reg_rtx = gen_rtx_REG (Pmode, 11); emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx, GEN_INT (info->spe_gp_save_offset - + sp_offset + + frame_off - ool_adjust))); - /* Keep the invariant that frame_reg_rtx + sp_offset points + /* Keep the invariant that frame_reg_rtx + frame_off points at the top of the stack frame. */ - sp_offset = -info->spe_gp_save_offset + ool_adjust; + frame_off = -info->spe_gp_save_offset + ool_adjust; spe_offset = 0; } @@ -20657,7 +20657,7 @@ rs6000_emit_epilogue (int sibcall) if (can_use_exit) { rs6000_emit_stack_reset (info, sp_reg_rtx, frame_reg_rtx, - sp_offset, can_use_exit); + frame_off, can_use_exit); if (DEFAULT_ABI == ABI_DARWIN) /* we only need a copy, no fprs were saved. */ emit_move_insn (gen_rtx_REG (Pmode, 11), frame_reg_rtx); @@ -20670,9 +20670,9 @@ rs6000_emit_epilogue (int sibcall) rtx src_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11); emit_insn (gen_add3_insn (src_reg, frame_reg_rtx, - GEN_INT (sp_offset - info->fp_size))); + GEN_INT (frame_off - info->fp_size))); if (REGNO (frame_reg_rtx) == REGNO (src_reg)) - sp_offset = info->fp_size; + frame_off = info->fp_size; } rs6000_emit_savres_rtx (info, frame_reg_rtx, @@ -20688,7 +20688,7 @@ rs6000_emit_epilogue (int sibcall) { rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->gp_save_offset - + sp_offset + + frame_off + reg_size * i)); rtx mem = gen_frame_mem (reg_mode, addr); rtx reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i); @@ -20700,17 +20700,17 @@ rs6000_emit_epilogue (int sibcall) else { for (i = 0; i < 32 - info->first_gp_reg_save; i++) - if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i)) + if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i)) { - rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->gp_save_offset - + sp_offset - + reg_size * i)); - rtx mem = gen_frame_mem (reg_mode, addr); + rtx addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, + GEN_INT (info->gp_save_offset + + frame_off + + reg_size * i)); + rtx mem = gen_frame_mem (reg_mode, addr); rtx reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i); emit_move_insn (reg, mem); - } + } } if (DEFAULT_ABI == ABI_V4 || flag_shrink_wrap) @@ -20725,7 +20725,7 @@ rs6000_emit_epilogue (int sibcall) { insn = get_last_insn (); add_reg_note (insn, REG_CFA_DEF_CFA, - plus_constant (frame_reg_rtx, sp_offset)); + plus_constant (frame_reg_rtx, frame_off)); RTX_FRAME_RELATED_P (insn) = 1; } @@ -20776,7 +20776,7 @@ rs6000_emit_epilogue (int sibcall) if (restore_lr && !restoring_GPRs_inline) { rtx mem = gen_frame_mem_offset (Pmode, frame_reg_rtx, - info->lr_save_offset + sp_offset); + info->lr_save_offset + frame_off); emit_move_insn (gen_rtx_REG (Pmode, 0), mem); emit_move_insn (gen_rtx_REG (Pmode, LR_REGNO), @@ -20792,15 +20792,15 @@ rs6000_emit_epilogue (int sibcall) rtx addr, mem, reg; addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, GEN_INT (info->fp_save_offset - + sp_offset + + frame_off + 8 * i)); - mem = gen_frame_mem (((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode), addr); - reg = gen_rtx_REG (((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT) - ? DFmode : SFmode), + mem = gen_frame_mem ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), addr); + reg = gen_rtx_REG ((TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT + ? DFmode : SFmode), info->first_fp_reg_save + i); - emit_move_insn (reg, mem); + emit_move_insn (reg, mem); if (DEFAULT_ABI == ABI_V4 || flag_shrink_wrap) cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores); } @@ -20812,7 +20812,7 @@ rs6000_emit_epilogue (int sibcall) /* If this is V.4, unwind the stack pointer after all of the loads have been done. */ insn = rs6000_emit_stack_reset (info, sp_reg_rtx, frame_reg_rtx, - sp_offset, !restoring_FPRs_inline); + frame_off, !restoring_FPRs_inline); if (insn) { if (cfa_restores) |