From 7333171fe96ae0487a6a92cd953beb853b30a277 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Thu, 25 Sep 2003 21:38:43 +0000 Subject: [PATCH] s390.c (s390_emit_prologue): Simplify accesses to FPR slots in the save area. * config/s390/s390.c (s390_emit_prologue): Simplify accesses to FPR slots in the save area. (s390_emit_epilogue): Likewise. From-SVN: r71799 --- gcc/ChangeLog | 6 ++++ gcc/config/s390/s390.c | 62 ++++++++++++------------------------------ 2 files changed, 24 insertions(+), 44 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aeb10ca7727..903c128d14c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-09-25 Ulrich Weigand + + * config/s390/s390.c (s390_emit_prologue): Simplify accesses to + FPR slots in the save area. + (s390_emit_epilogue): Likewise. + 2003-09-25 Richard Sandiford * cgraph.h (cgraph_remove_edge): Declare. diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 7086d5b6932..cf68a521027 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -5493,37 +5493,18 @@ s390_emit_prologue (void) /* Save fprs for variable args. */ if (current_function_stdarg) - { - /* Save fpr 0 and 2. */ - - save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 32, 16); - save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 24, 17); - - if (TARGET_64BIT) - { - /* Save fpr 4 and 6. */ - - save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 16, 18); - save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 8, 19); - } - } + for (i = 16; i < (TARGET_64BIT ? 20 : 18); i++) + save_fpr (stack_pointer_rtx, 16*UNITS_PER_WORD + 8*(i-16), i); /* Save fprs 4 and 6 if used (31 bit ABI). */ if (!TARGET_64BIT) - { - /* Save fpr 4 and 6. */ - if (regs_ever_live[18] && !global_regs[18]) - { - insn = save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 16, 18); - RTX_FRAME_RELATED_P (insn) = 1; - } - if (regs_ever_live[19] && !global_regs[19]) + for (i = 18; i < 20; i++) + if (regs_ever_live[i] && !global_regs[i]) { - insn = save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 8, 19); + insn = save_fpr (stack_pointer_rtx, 16*UNITS_PER_WORD + 8*(i-16), i); RTX_FRAME_RELATED_P (insn) = 1; } - } /* Decrement stack pointer. */ @@ -5650,6 +5631,7 @@ s390_emit_epilogue (void) rtx frame_pointer, return_reg; int area_bottom, area_top, offset = 0; rtvec p; + int i; if (TARGET_TPF) { @@ -5705,20 +5687,14 @@ s390_emit_epilogue (void) } else { - if (regs_ever_live[18] && !global_regs[18]) - { - if (area_bottom > STACK_POINTER_OFFSET - 16) - area_bottom = STACK_POINTER_OFFSET - 16; - if (area_top < STACK_POINTER_OFFSET - 8) - area_top = STACK_POINTER_OFFSET - 8; - } - if (regs_ever_live[19] && !global_regs[19]) - { - if (area_bottom > STACK_POINTER_OFFSET - 8) - area_bottom = STACK_POINTER_OFFSET - 8; - if (area_top < STACK_POINTER_OFFSET) - area_top = STACK_POINTER_OFFSET; - } + for (i = 18; i < 20; i++) + if (regs_ever_live[i] && !global_regs[i]) + { + if (area_bottom > 16*UNITS_PER_WORD + 8*(i-16)) + area_bottom = 16*UNITS_PER_WORD + 8*(i-16); + if (area_top < 16*UNITS_PER_WORD + 8*(i-16) + 8) + area_top = 16*UNITS_PER_WORD + 8*(i-16) + 8; + } } /* Check whether we can access the register save area. @@ -5760,8 +5736,6 @@ s390_emit_epilogue (void) if (TARGET_64BIT) { - int i; - if (cfun->machine->save_fprs_p) for (i = 24; i < 32; i++) if (regs_ever_live[i] && !global_regs[i]) @@ -5770,10 +5744,10 @@ s390_emit_epilogue (void) } else { - if (regs_ever_live[18] && !global_regs[18]) - restore_fpr (frame_pointer, offset + STACK_POINTER_OFFSET - 16, 18); - if (regs_ever_live[19] && !global_regs[19]) - restore_fpr (frame_pointer, offset + STACK_POINTER_OFFSET - 8, 19); + for (i = 18; i < 20; i++) + if (regs_ever_live[i] && !global_regs[i]) + restore_fpr (frame_pointer, + offset + 16*UNITS_PER_WORD + 8*(i-16), i); } /* Return register. */ -- 2.30.2