This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PowerPC prologue and epilogue 3


On Tue, Apr 17, 2012 at 11:13 AM, Alan Modra <amodra@gmail.com> wrote:
> This continues the prologue and epilogue cleanup. ?Not many user
> visible changes here, except for:
> - a bugfix to the LR save RTL emitted by rs6000_emit_savres_rtx which
> ?may affect SPE,
> - a bugfix for SPE code emitted when using a static chain,
> - vector saves will be done using r1 for large frames just over 32k in
> ?size, and,
> - using r11 as a frame pointer whenever we need to set up r11 for
> ?out-of-line saves, and merging two pointer reg setup insns.
> The latter is a necessary prerequisite to enabling out-of-line
> save/restore for large frames, as I do in a later patch. ?Currently
> this will only affect abiv4 -Os when using out-of-line saves.
>
> eg. -m32 -Os -mno-multiple
> int f (double x)
> {
> ?char a[33];
> ?__asm __volatile ("#%0" : "=m" (a) : : "fr31", "r27", "r28");
> ?return (int) x;
> }
> ? ? ? ?old ? ? ? ? ? ? ? ? ? ? new
> ? ? ? ?stwu 1,-96(1) ? ? ? ? ? mflr 0
> ? ? ? ?mflr 0 ? ? ? ? ? ? ? ? ?addi 11,1,-8
> ? ? ? ?addi 11,1,88 ? ? ? ? ? ?stwu 1,-96(1)
> ? ? ? ?stw 0,100(1) ? ? ? ? ? ?stw 0,12(11)
> ? ? ? ?stfd 31,88(1) ? ? ? ? ? bl _savegpr_27
> ? ? ? ?bl _savegpr_27 ? ? ? ? ?stfd 31,0(11)
>
>
> ? ? ? ?* config/rs6000/rs6000.c (rs6000_emit_stack_reset): Delete forward
> ? ? ? ?decl. ?Move logic selecting update reg to callers. ?Update all callers.
> ? ? ? ?(rs6000_emit_allocate_stack): Add copy_off param.
> ? ? ? ?(emit_frame_save): Don't handle reg+reg addressing.
> ? ? ? ?(ptr_regno_for_savres): New function, extracted from..
> ? ? ? ?(rs6000_emit_savres_rtx): ..here. ?Add lr_offset param.
> ? ? ? ?(rs6000_emit_prologue): Generate frame_ptr_rtx as we need it.
> ? ? ? ?Set frame_reg_rtx to r11 whenever r11 is needed, and merge
> ? ? ? ?frame offset adjustment for out-of-line save with copy from sp.
> ? ? ? ?Simplify condition controlling whether cr is saved early or
> ? ? ? ?late. ?Use ptr_regno_for_savres to verify correct reg is set
> ? ? ? ?up for out-of-line saves. ?Pass the actual pointer reg used to
> ? ? ? ?rs6000_emit_savres_rtx so rtl matches insns in out-of-line
> ? ? ? ?function. ?Rearrange spe vars so code is similar to that
> ? ? ? ?elsewhere in this function. ?Don't update frame_off when spe
> ? ? ? ?save code will restore r11. ?Use emit_frame_save for spe and
> ? ? ? ?gpr saves. ?Consolidate darwin out-of-line gpr setup with that
> ? ? ? ?for other abis. ?Don't assume frame_offset is zero and frame
> ? ? ? ?reg is sp when setting up altivec reg saves, and calculate
> ? ? ? ?exact offset requirement.
> ? ? ? ?(rs6000_emit_epilogue): Use HOST_WIDE_INT for frame_off. ?Tidy
> ? ? ? ?spe restore code. ?Consolidate darwin out-of-line gpr setup
> ? ? ? ?with that for other abis.

This patch is okay.

Thanks, David


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]