This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RS6000] Fix -m32 -Os lossage
- From: Alan Modra <amodra at gmail dot com>
- To: David Edelsohn <dje dot gcc at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Segher Boessenkool <segher at kernel dot crashing dot org>
- Date: Fri, 13 Feb 2015 08:40:31 +1030
- Subject: Re: [RS6000] Fix -m32 -Os lossage
- Authentication-results: sourceware.org; auth=none
- References: <20150212123357 dot GO4274 at bubble dot grove dot modra dot org> <CAGWvny=6iDmcHmRY3S+MdmGx4TWj2U5H1viZukrLMhiYADDV4A at mail dot gmail dot com>
On Thu, Feb 12, 2015 at 10:04:45AM -0500, David Edelsohn wrote:
> On Thu, Feb 12, 2015 at 7:33 AM, Alan Modra <amodra@gmail.com> wrote:
> > * config/rs6000/rs6000.c (rs6000_emit_epilogue): Use addsi3_carry
> > or adddi3_carry when restoring frame_reg_rtx from r0 after restvr.
>
> Okay.
Committed revision 220665. I also intend to commit the following as
obvious when stage1 opens, to fix a bug in code I contributed. It's
not a regression nor is the generated code incorrect, but we have one
unnecessary instruction.
--- /tmp/savres.s 2015-02-12 22:29:05.598357377 +1030
+++ savres.s 2015-02-13 08:26:49.437565909 +1030
@@ -1916,11 +1916,10 @@
lwz 11,0(1)
addi 0,11,-48
bl _restvr_26
- addic 11,0,16
- lwz 12,-12(11)
- lwz 30,-8(11)
- lwz 31,-4(11)
- addi 11,11,32
+ addic 11,0,48
+ lwz 12,-44(11)
+ lwz 30,-40(11)
+ lwz 31,-36(11)
mtcrf 32,12
b _restfpr_28_x
.size b_cvfr,.-b_cvfr
@@ -1966,10 +1965,9 @@
lwz 11,0(1)
addi 0,11,-48
bl _restvr_26
- addic 11,0,16
- lwz 30,-8(11)
- lwz 31,-4(11)
- addi 11,11,32
+ addic 11,0,48
+ lwz 30,-40(11)
+ lwz 31,-36(11)
b _restfpr_28_x
.size b_vfr,.-b_vfr
.align 2
* config/rs6000/rs6000.c (rs6000_emit_epilogue): Fix typo in
code setting up r11 for out-of-line fp restore.
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c (revision 220665)
+++ gcc/config/rs6000/rs6000.c (working copy)
@@ -24966,7 +24966,7 @@ rs6000_emit_epilogue (int sibcall)
bool lr = !(strategy & REST_NOINLINE_FPRS_DOESNT_RESTORE_LR);
int sel = SAVRES_FPR | (lr ? SAVRES_LR : 0);
newptr_regno = ptr_regno_for_savres (sel);
- end_save = info->gp_save_offset + info->gp_size;
+ end_save = info->fp_save_offset + info->fp_size;
}
if (newptr_regno != 1 && REGNO (frame_reg_rtx) != newptr_regno)
--
Alan Modra
Australia Development Lab, IBM