pa.c (out_of_line_prologue_epilogue): Delete.
* pa.c (out_of_line_prologue_epilogue): Delete. (override_options): Remove -mspace related code. (hppa_expand_prologue, hppa_expand_epilogue): Likewise. (compute_frame_size): Only allocate space for register that actually need to be saved. * pa.h (MASK_SPACE, TARGET_SPACE): Delete. (TARGET_SWITCHES): Remove -mspace, -mno-space * pa/t-pa (LIB2FUNCS_EXTRA): Remove ee.asm and ee_fp.asm * pa/t-pro (LIB2FUNCS_EXTRA): Likewise. Remove -mspace multilib. * pa/ee.asm, pa/ee_fp.asm: Delete. From-SVN: r28125
This commit is contained in:
parent
15c58c19b6
commit
7123b6ed1f
|
@ -1,5 +1,16 @@
|
|||
Fri Jul 16 13:48:09 1999 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* pa.c (out_of_line_prologue_epilogue): Delete.
|
||||
(override_options): Remove -mspace related code.
|
||||
(hppa_expand_prologue, hppa_expand_epilogue): Likewise.
|
||||
(compute_frame_size): Only allocate space for register that
|
||||
actually need to be saved.
|
||||
* pa.h (MASK_SPACE, TARGET_SPACE): Delete.
|
||||
(TARGET_SWITCHES): Remove -mspace, -mno-space
|
||||
* pa/t-pa (LIB2FUNCS_EXTRA): Remove ee.asm and ee_fp.asm
|
||||
* pa/t-pro (LIB2FUNCS_EXTRA): Likewise. Remove -mspace multilib.
|
||||
* pa/ee.asm, pa/ee_fp.asm: Delete.
|
||||
|
||||
* pa/elf.h (ASM_OUTPUT_DOUBLE_INT): Define.
|
||||
|
||||
* config/svr4.h (CONST_SECTION_ASM_OP): Do not emit assembler
|
||||
|
|
|
@ -1,261 +0,0 @@
|
|||
; Subroutines for out of line prologues and epilogues on for the HPPA
|
||||
; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
; This file is part of GNU CC.
|
||||
|
||||
; GNU CC is free software; you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation; either version 2, or (at your option)
|
||||
; any later version.
|
||||
|
||||
; GNU CC is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with GNU CC; see the file COPYING. If not, write to
|
||||
; the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
; Boston, MA 02111-1307, USA.
|
||||
|
||||
.SPACE $PRIVATE$
|
||||
.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
|
||||
.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
|
||||
.SPACE $TEXT$
|
||||
.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
|
||||
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
|
||||
.SUBSPA $MILLICODE$,QUAD=0,ALIGN=8,ACCESS=44,SORT=8
|
||||
|
||||
; This is an out-of-line prologue.
|
||||
;
|
||||
; It performs the following operations:
|
||||
;
|
||||
; * Saves the return pointer at sp - 20
|
||||
;
|
||||
; * Creates a new stack frame (sp'), size of the frame is passed in %r21
|
||||
;
|
||||
; * The old stack pointer is saved at sp (frame pointer version only).
|
||||
;
|
||||
; * Saves grs (passed in low 16 bits of %r22 into the stack frame
|
||||
; at sp' + local_fsize (passed in %r19).
|
||||
;
|
||||
; * Saves frs (passed in high 16 bits of %r22) into the stack
|
||||
; frame at sp' + local_fsize (passed in %r19).
|
||||
;
|
||||
; * Sets up a frame pointer (in %r3) (frame pointer version only).
|
||||
;
|
||||
; * Returns to the instruction _immediately_ after the call to
|
||||
; this function.
|
||||
|
||||
.SPACE $TEXT$
|
||||
.SUBSPA $MILLICODE$
|
||||
.EXPORT __outline_prologue,MILLICODE
|
||||
.align 32
|
||||
__outline_prologue
|
||||
.PROC
|
||||
.CALLINFO FRAME=0,NO_CALLS
|
||||
.ENTRY
|
||||
copy %r30,%r20
|
||||
|
||||
; Subtract 4 from our return pointer so that we return to
|
||||
; the right location.
|
||||
ldo -4(%r31),%r31
|
||||
|
||||
; Save off %r2
|
||||
stw %r2,-20(%r30)
|
||||
|
||||
; Make our new frame.
|
||||
add %r21,%r30,%r30
|
||||
|
||||
; Add in local_fsize to our frame pointer so we do register
|
||||
; saves into the right place
|
||||
add %r20,%r19,%r20
|
||||
|
||||
; %r22 tells us what registers we need to save. The upper half
|
||||
; is for fp registers, the lower half for integer registers.
|
||||
; We put the lower half in %r1 and the upper half into %r22
|
||||
; for later use.
|
||||
extru %r22,31,16,%r1
|
||||
extrs %r22,15,16,%r22
|
||||
|
||||
; %r1 now olds a value 0-18 which corresponds to the number
|
||||
; of grs we need to save. We need to reverse that value so
|
||||
; we can just into the table and straight-line execute to the
|
||||
; end of the gr saves.
|
||||
comb,= %r0,%r1,L$0000
|
||||
subi 18,%r1,%r1
|
||||
blr,n %r1,%r0
|
||||
b,n L$0000
|
||||
stws,ma %r18,4(%r20)
|
||||
nop
|
||||
stws,ma %r17,4(%r20)
|
||||
nop
|
||||
stws,ma %r16,4(%r20)
|
||||
nop
|
||||
stws,ma %r15,4(%r20)
|
||||
nop
|
||||
stws,ma %r14,4(%r20)
|
||||
nop
|
||||
stws,ma %r13,4(%r20)
|
||||
nop
|
||||
stws,ma %r12,4(%r20)
|
||||
nop
|
||||
stws,ma %r11,4(%r20)
|
||||
nop
|
||||
stws,ma %r10,4(%r20)
|
||||
nop
|
||||
stws,ma %r9,4(%r20)
|
||||
nop
|
||||
stws,ma %r8,4(%r20)
|
||||
nop
|
||||
stws,ma %r7,4(%r20)
|
||||
nop
|
||||
stws,ma %r6,4(%r20)
|
||||
nop
|
||||
stws,ma %r5,4(%r20)
|
||||
nop
|
||||
stws,ma %r4,4(%r20)
|
||||
nop
|
||||
stws,ma %r3,4(%r20)
|
||||
nop
|
||||
L$0000
|
||||
; All gr saves are done. Align the temporary frame pointer and
|
||||
; do the fr saves.
|
||||
ldo 7(%r20),%r20
|
||||
depi 0,31,3,%r20
|
||||
|
||||
comb,= %r0,%r22,L$0001
|
||||
subi 21,%r22,%r22
|
||||
blr,n %r22,%r0
|
||||
b,n L$0001
|
||||
fstws,ma %fr21,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr20,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr19,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr18,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr17,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr16,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr15,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr14,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr13,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr12,8(%r20)
|
||||
nop
|
||||
L$0001
|
||||
; Return
|
||||
bv,n %r0(%r31)
|
||||
.EXIT
|
||||
.PROCEND
|
||||
|
||||
|
||||
|
||||
.EXPORT __outline_epilogue,MILLICODE
|
||||
.align 32
|
||||
__outline_epilogue
|
||||
.PROC
|
||||
.CALLINFO FRAME=0,NO_CALLS
|
||||
.ENTRY
|
||||
; Get our original stack pointer and put it in %r20
|
||||
sub %r30,%r21,%r20
|
||||
|
||||
; Subtract 4 from our return pointer so that we return to
|
||||
; the right location.
|
||||
ldo -4(%r31),%r31
|
||||
|
||||
; Reload %r2
|
||||
ldw -20(%r20),%r2
|
||||
|
||||
; Add in local_fsize (%r19) to the frame pointer to find
|
||||
; the saved registers.
|
||||
add %r20,%r19,%r20
|
||||
|
||||
; %r22 tells us what registers we need to restore. The upper half
|
||||
; is for fp registers, the lower half for integer registers.
|
||||
; We put the lower half in %r1 and the upper half into %r22
|
||||
; for later use.
|
||||
extru %r22,31,16,%r1
|
||||
extrs %r22,15,16,%r22
|
||||
|
||||
; %r1 now olds a value 0-18 which corresponds to the number
|
||||
; of grs we need to restore. We need to reverse that value so
|
||||
; we can just into the table and straight-line execute to the
|
||||
; end of the gr restore.
|
||||
comb,= %r0,%r1,L$0004
|
||||
subi 18,%r1,%r1
|
||||
blr,n %r1,%r0
|
||||
b,n L$0004
|
||||
ldws,ma 4(%r20),%r18
|
||||
nop
|
||||
ldws,ma 4(%r20),%r17
|
||||
nop
|
||||
ldws,ma 4(%r20),%r16
|
||||
nop
|
||||
ldws,ma 4(%r20),%r15
|
||||
nop
|
||||
ldws,ma 4(%r20),%r14
|
||||
nop
|
||||
ldws,ma 4(%r20),%r13
|
||||
nop
|
||||
ldws,ma 4(%r20),%r12
|
||||
nop
|
||||
ldws,ma 4(%r20),%r11
|
||||
nop
|
||||
ldws,ma 4(%r20),%r10
|
||||
nop
|
||||
ldws,ma 4(%r20),%r9
|
||||
nop
|
||||
ldws,ma 4(%r20),%r8
|
||||
nop
|
||||
ldws,ma 4(%r20),%r7
|
||||
nop
|
||||
ldws,ma 4(%r20),%r6
|
||||
nop
|
||||
ldws,ma 4(%r20),%r5
|
||||
nop
|
||||
ldws,ma 4(%r20),%r4
|
||||
nop
|
||||
ldws,ma 4(%r20),%r3
|
||||
nop
|
||||
L$0004
|
||||
; All gr restore are done. Align the temporary frame pointer and
|
||||
; do the fr restore.
|
||||
ldo 7(%r20),%r20
|
||||
depi 0,31,3,%r20
|
||||
|
||||
comb,= %r0,%r22,L$0005
|
||||
subi 21,%r22,%r22
|
||||
blr,n %r22,%r0
|
||||
b,n L$0005
|
||||
fldws,ma 8(%r20),%fr21
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr20
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr19
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr18
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr17
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr16
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr15
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr14
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr13
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr12
|
||||
nop
|
||||
L$0005
|
||||
; Return and deallocate our frame.
|
||||
bv %r0(%r31)
|
||||
sub %r30,%r21,%r30
|
||||
.EXIT
|
||||
.PROCEND
|
|
@ -1,274 +0,0 @@
|
|||
; Subroutines for out of line prologues and epilogues on for the HPPA
|
||||
; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
; This file is part of GNU CC.
|
||||
|
||||
; GNU CC is free software; you can redistribute it and/or modify
|
||||
; it under the terms of the GNU General Public License as published by
|
||||
; the Free Software Foundation; either version 2, or (at your option)
|
||||
; any later version.
|
||||
|
||||
; GNU CC is distributed in the hope that it will be useful,
|
||||
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
; GNU General Public License for more details.
|
||||
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with GNU CC; see the file COPYING. If not, write to
|
||||
; the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
; Boston, MA 02111-1307, USA.
|
||||
|
||||
.SPACE $PRIVATE$
|
||||
.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
|
||||
.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
|
||||
.SPACE $TEXT$
|
||||
.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
|
||||
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
|
||||
.SUBSPA $MILLICODE$,QUAD=0,ALIGN=8,ACCESS=44,SORT=8
|
||||
|
||||
|
||||
; This is an out-of-line prologue.
|
||||
;
|
||||
; It performs the following operations:
|
||||
;
|
||||
; * Saves the return pointer at sp - 20
|
||||
;
|
||||
; * Creates a new stack frame (sp'), size of the frame is passed in %r21
|
||||
;
|
||||
; * The old stack pointer is saved at sp (frame pointer version only).
|
||||
;
|
||||
; * Saves grs (passed in low 16 bits of %r22 into the stack frame
|
||||
; at sp' + local_fsize (passed in %r19).
|
||||
;
|
||||
; * Saves frs (passed in high 16 bits of %r22) into the stack
|
||||
; frame at sp' + local_fsize (passed in %r19).
|
||||
;
|
||||
; * Sets up a frame pointer (in %r3) (frame pointer version only).
|
||||
;
|
||||
; * Returns to the instruction _immediately_ after the call to
|
||||
; this function.
|
||||
|
||||
.SPACE $TEXT$
|
||||
.SUBSPA $MILLICODE$
|
||||
.EXPORT __outline_prologue_fp,MILLICODE
|
||||
.align 32
|
||||
__outline_prologue_fp
|
||||
.PROC
|
||||
.CALLINFO FRAME=0,NO_CALLS
|
||||
.ENTRY
|
||||
copy %r30,%r20
|
||||
|
||||
; Subtract 4 from our return pointer so that we return to
|
||||
; the right location.
|
||||
ldo -4(%r31),%r31
|
||||
|
||||
; Save off %r2
|
||||
stw %r2,-20(%r30)
|
||||
|
||||
; Make our new frame.
|
||||
add %r21,%r30,%r30
|
||||
|
||||
; Save our old stack pointer.
|
||||
stw %r20,0(%r20)
|
||||
|
||||
; Add in local_fsize to our frame pointer so we do register
|
||||
; saves into the right place
|
||||
add %r20,%r19,%r20
|
||||
|
||||
; %r22 tells us what registers we need to save. The upper half
|
||||
; is for fp registers, the lower half for integer registers.
|
||||
; We put the lower half in %r1 and the upper half into %r22
|
||||
; for later use.
|
||||
extru %r22,31,16,%r1
|
||||
extrs %r22,15,16,%r22
|
||||
|
||||
; %r1 now olds a value 0-18 which corresponds to the number
|
||||
; of grs we need to save. We need to reverse that value so
|
||||
; we can just into the table and straight-line execute to the
|
||||
; end of the gr saves.
|
||||
comb,= %r0,%r1,L$0002
|
||||
subi 18,%r1,%r1
|
||||
blr,n %r1,%r0
|
||||
b,n L$0002
|
||||
stws,ma %r18,4(%r20)
|
||||
nop
|
||||
stws,ma %r17,4(%r20)
|
||||
nop
|
||||
stws,ma %r16,4(%r20)
|
||||
nop
|
||||
stws,ma %r15,4(%r20)
|
||||
nop
|
||||
stws,ma %r14,4(%r20)
|
||||
nop
|
||||
stws,ma %r13,4(%r20)
|
||||
nop
|
||||
stws,ma %r12,4(%r20)
|
||||
nop
|
||||
stws,ma %r11,4(%r20)
|
||||
nop
|
||||
stws,ma %r10,4(%r20)
|
||||
nop
|
||||
stws,ma %r9,4(%r20)
|
||||
nop
|
||||
stws,ma %r8,4(%r20)
|
||||
nop
|
||||
stws,ma %r7,4(%r20)
|
||||
nop
|
||||
stws,ma %r6,4(%r20)
|
||||
nop
|
||||
stws,ma %r5,4(%r20)
|
||||
nop
|
||||
stws,ma %r4,4(%r20)
|
||||
nop
|
||||
stws,ma %r3,4(%r20)
|
||||
nop
|
||||
L$0002
|
||||
; All gr saves are done. Align the temporary frame pointer and
|
||||
; do the fr saves.
|
||||
ldo 7(%r20),%r20
|
||||
depi 0,31,3,%r20
|
||||
|
||||
comb,= %r0,%r22,L$0003
|
||||
subi 21,%r22,%r22
|
||||
blr,n %r22,%r0
|
||||
b,n L$0003
|
||||
fstws,ma %fr21,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr20,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr19,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr18,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr17,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr16,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr15,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr14,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr13,8(%r20)
|
||||
nop
|
||||
fstws,ma %fr12,8(%r20)
|
||||
nop
|
||||
L$0003
|
||||
; Return, setting up a frame pointer in the delay slot
|
||||
bv %r0(%r31)
|
||||
sub %r30,%r21,%r3
|
||||
.EXIT
|
||||
.PROCEND
|
||||
|
||||
|
||||
; This is an out-of-line epilogue. It's operation is basically the reverse
|
||||
; of the out-of-line prologue.
|
||||
|
||||
.EXPORT __outline_epilogue_fp,MILLICODE
|
||||
.align 32
|
||||
__outline_epilogue_fp
|
||||
.PROC
|
||||
.CALLINFO FRAME=0,NO_CALLS
|
||||
.ENTRY
|
||||
; Make a copy of our frame pointer into %r20
|
||||
copy %r3,%r20
|
||||
|
||||
; Subtract 4 from our return pointer so that we return to
|
||||
; the right location.
|
||||
ldo -4(%r31),%r31
|
||||
|
||||
; Reload %r2
|
||||
; First save off %r2
|
||||
ldw -20(%r20),%r2
|
||||
|
||||
; Load our old stack pointer, save it in %r21.
|
||||
ldw 0(%r20),%r21
|
||||
|
||||
; Add in local_fsize (%r19) to the frame pointer to find
|
||||
; the saved registers.
|
||||
add %r20,%r19,%r20
|
||||
|
||||
; %r22 tells us what registers we need to restore. The upper half
|
||||
; is for fp registers, the lower half for integer registers.
|
||||
; We put the lower half in %r1 and the upper half into %r22
|
||||
; for later use.
|
||||
extru %r22,31,16,%r1
|
||||
extrs %r22,15,16,%r22
|
||||
|
||||
; %r1 now olds a value 0-18 which corresponds to the number
|
||||
; of grs we need to restore. We need to reverse that value so
|
||||
; we can just into the table and straight-line execute to the
|
||||
; end of the gr restore.
|
||||
comb,= %r0,%r1,L$0006
|
||||
subi 18,%r1,%r1
|
||||
blr,n %r1,%r0
|
||||
b,n L$0006
|
||||
ldws,ma 4(%r20),%r18
|
||||
nop
|
||||
ldws,ma 4(%r20),%r17
|
||||
nop
|
||||
ldws,ma 4(%r20),%r16
|
||||
nop
|
||||
ldws,ma 4(%r20),%r15
|
||||
nop
|
||||
ldws,ma 4(%r20),%r14
|
||||
nop
|
||||
ldws,ma 4(%r20),%r13
|
||||
nop
|
||||
ldws,ma 4(%r20),%r12
|
||||
nop
|
||||
ldws,ma 4(%r20),%r11
|
||||
nop
|
||||
ldws,ma 4(%r20),%r10
|
||||
nop
|
||||
ldws,ma 4(%r20),%r9
|
||||
nop
|
||||
ldws,ma 4(%r20),%r8
|
||||
nop
|
||||
ldws,ma 4(%r20),%r7
|
||||
nop
|
||||
ldws,ma 4(%r20),%r6
|
||||
nop
|
||||
ldws,ma 4(%r20),%r5
|
||||
nop
|
||||
ldws,ma 4(%r20),%r4
|
||||
nop
|
||||
ldws,ma 4(%r20),%r3
|
||||
nop
|
||||
L$0006
|
||||
; All gr restore are done. Align the temporary frame pointer and
|
||||
; do the fr restore.
|
||||
ldo 7(%r20),%r20
|
||||
depi 0,31,3,%r20
|
||||
|
||||
comb,= %r0,%r22,L$0007
|
||||
subi 21,%r22,%r22
|
||||
blr,n %r22,%r0
|
||||
b,n L$0007
|
||||
fldws,ma 8(%r20),%fr21
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr20
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr19
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr18
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr17
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr16
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr15
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr14
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr13
|
||||
nop
|
||||
fldws,ma 8(%r20),%fr12
|
||||
nop
|
||||
L$0007
|
||||
; Return and deallocate our frame.
|
||||
bv %r0(%r31)
|
||||
copy %r21,%r30
|
||||
.EXIT
|
||||
.PROCEND
|
||||
|
||||
|
|
@ -71,10 +71,6 @@ int hp_profile_labelno;
|
|||
registers which were saved by the current function's prologue. */
|
||||
static int gr_saved, fr_saved;
|
||||
|
||||
/* Whether or not the current function uses an out-of-line prologue
|
||||
and epilogue. */
|
||||
static int out_of_line_prologue_epilogue;
|
||||
|
||||
static rtx find_addr_reg ();
|
||||
|
||||
/* Keep track of the number of bytes we have output in the CODE subspaces
|
||||
|
@ -174,12 +170,6 @@ override_options ()
|
|||
warning ("PIC code generation is not compatible with profiling\n");
|
||||
}
|
||||
|
||||
if (TARGET_SPACE && (flag_pic || profile_flag))
|
||||
{
|
||||
warning ("Out of line entry/exit sequences are not compatible\n");
|
||||
warning ("with PIC or profiling\n");
|
||||
}
|
||||
|
||||
if (! TARGET_GAS && write_symbols != NO_DEBUG)
|
||||
{
|
||||
warning ("-g is only supported when using GAS on this processor,");
|
||||
|
@ -2566,31 +2556,23 @@ compute_frame_size (size, fregs_live)
|
|||
we need to add this in because of STARTING_FRAME_OFFSET. */
|
||||
fsize = size + (size || frame_pointer_needed ? 8 : 0);
|
||||
|
||||
/* We must leave enough space for all the callee saved registers
|
||||
from 3 .. highest used callee save register since we don't
|
||||
know if we're going to have an inline or out of line prologue
|
||||
and epilogue. */
|
||||
for (i = 18; i >= 3; i--)
|
||||
if (regs_ever_live[i])
|
||||
{
|
||||
fsize += 4 * (i - 2);
|
||||
fsize += 4;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Round the stack. */
|
||||
fsize = (fsize + 7) & ~7;
|
||||
|
||||
/* We must leave enough space for all the callee saved registers
|
||||
from 3 .. highest used callee save register since we don't
|
||||
know if we're going to have an inline or out of line prologue
|
||||
and epilogue. */
|
||||
for (i = 66; i >= 48; i -= 2)
|
||||
if (regs_ever_live[i] || regs_ever_live[i + 1])
|
||||
{
|
||||
if (fregs_live)
|
||||
*fregs_live = 1;
|
||||
|
||||
fsize += 4 * (i - 46);
|
||||
fsize += 4;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2691,91 +2673,6 @@ hppa_expand_prologue()
|
|||
tmpreg = gen_rtx_REG (SImode, 1);
|
||||
size_rtx = GEN_INT (actual_fsize);
|
||||
|
||||
/* Handle out of line prologues and epilogues. */
|
||||
if (TARGET_SPACE)
|
||||
{
|
||||
rtx operands[2];
|
||||
int saves = 0;
|
||||
int outline_insn_count = 0;
|
||||
int inline_insn_count = 0;
|
||||
|
||||
/* Count the number of insns for the inline and out of line
|
||||
variants so we can choose one appropriately.
|
||||
|
||||
No need to screw with counting actual_fsize operations -- they're
|
||||
done for both inline and out of line prologues. */
|
||||
if (regs_ever_live[2])
|
||||
inline_insn_count += 1;
|
||||
|
||||
if (! cint_ok_for_move (local_fsize))
|
||||
outline_insn_count += 2;
|
||||
else
|
||||
outline_insn_count += 1;
|
||||
|
||||
/* Put the register save info into %r22. */
|
||||
for (i = 18; i >= 3; i--)
|
||||
if (regs_ever_live[i] && ! call_used_regs[i])
|
||||
{
|
||||
/* -1 because the stack adjustment is normally done in
|
||||
the same insn as a register save. */
|
||||
inline_insn_count += (i - 2) - 1;
|
||||
saves = i;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 66; i >= 48; i -= 2)
|
||||
if (regs_ever_live[i] || regs_ever_live[i + 1])
|
||||
{
|
||||
/* +1 needed as we load %r1 with the start of the freg
|
||||
save area. */
|
||||
inline_insn_count += (i/2 - 23) + 1;
|
||||
saves |= ((i/2 - 12 ) << 16);
|
||||
break;
|
||||
}
|
||||
|
||||
if (frame_pointer_needed)
|
||||
inline_insn_count += 3;
|
||||
|
||||
if (! cint_ok_for_move (saves))
|
||||
outline_insn_count += 2;
|
||||
else
|
||||
outline_insn_count += 1;
|
||||
|
||||
if (TARGET_PORTABLE_RUNTIME)
|
||||
outline_insn_count += 2;
|
||||
else
|
||||
outline_insn_count += 1;
|
||||
|
||||
/* If there's a lot of insns in the prologue, then do it as
|
||||
an out-of-line sequence. */
|
||||
if (inline_insn_count > outline_insn_count)
|
||||
{
|
||||
/* Put the local_fisze into %r19. */
|
||||
operands[0] = gen_rtx_REG (SImode, 19);
|
||||
operands[1] = GEN_INT (local_fsize);
|
||||
emit_move_insn (operands[0], operands[1]);
|
||||
|
||||
/* Put the stack size into %r21. */
|
||||
operands[0] = gen_rtx_REG (SImode, 21);
|
||||
operands[1] = size_rtx;
|
||||
emit_move_insn (operands[0], operands[1]);
|
||||
|
||||
operands[0] = gen_rtx_REG (SImode, 22);
|
||||
operands[1] = GEN_INT (saves);
|
||||
emit_move_insn (operands[0], operands[1]);
|
||||
|
||||
/* Now call the out-of-line prologue. */
|
||||
emit_insn (gen_outline_prologue_call ());
|
||||
emit_insn (gen_blockage ());
|
||||
|
||||
/* Note that we're using an out-of-line prologue. */
|
||||
out_of_line_prologue_epilogue = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
out_of_line_prologue_epilogue = 0;
|
||||
|
||||
/* Save RP first. The calling conventions manual states RP will
|
||||
always be stored into the caller's frame at sp-20. */
|
||||
if (regs_ever_live[2] || profile_flag)
|
||||
|
@ -3038,48 +2935,6 @@ hppa_expand_epilogue ()
|
|||
int offset,i;
|
||||
int merge_sp_adjust_with_load = 0;
|
||||
|
||||
/* Handle out of line prologues and epilogues. */
|
||||
if (TARGET_SPACE && out_of_line_prologue_epilogue)
|
||||
{
|
||||
int saves = 0;
|
||||
rtx operands[2];
|
||||
|
||||
/* Put the register save info into %r22. */
|
||||
for (i = 18; i >= 3; i--)
|
||||
if (regs_ever_live[i] && ! call_used_regs[i])
|
||||
{
|
||||
saves = i;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 66; i >= 48; i -= 2)
|
||||
if (regs_ever_live[i] || regs_ever_live[i + 1])
|
||||
{
|
||||
saves |= ((i/2 - 12 ) << 16);
|
||||
break;
|
||||
}
|
||||
|
||||
emit_insn (gen_blockage ());
|
||||
|
||||
/* Put the local_fisze into %r19. */
|
||||
operands[0] = gen_rtx_REG (SImode, 19);
|
||||
operands[1] = GEN_INT (local_fsize);
|
||||
emit_move_insn (operands[0], operands[1]);
|
||||
|
||||
/* Put the stack size into %r21. */
|
||||
operands[0] = gen_rtx_REG (SImode, 21);
|
||||
operands[1] = GEN_INT (actual_fsize);
|
||||
emit_move_insn (operands[0], operands[1]);
|
||||
|
||||
operands[0] = gen_rtx_REG (SImode, 22);
|
||||
operands[1] = GEN_INT (saves);
|
||||
emit_move_insn (operands[0], operands[1]);
|
||||
|
||||
/* Now call the out-of-line epilogue. */
|
||||
emit_insn (gen_outline_epilogue_call ());
|
||||
return;
|
||||
}
|
||||
|
||||
/* We will use this often. */
|
||||
tmpreg = gen_rtx_REG (SImode, 1);
|
||||
|
||||
|
|
|
@ -108,11 +108,6 @@ extern int target_flags;
|
|||
#define MASK_JUMP_IN_DELAY 8
|
||||
#define TARGET_JUMP_IN_DELAY (target_flags & MASK_JUMP_IN_DELAY)
|
||||
|
||||
/* Optimize for space. Currently this only turns on out of line
|
||||
prologues and epilogues. */
|
||||
#define MASK_SPACE 16
|
||||
#define TARGET_SPACE (target_flags & MASK_SPACE)
|
||||
|
||||
/* Disable indexed addressing modes. */
|
||||
#define MASK_DISABLE_INDEXING 32
|
||||
#define TARGET_DISABLE_INDEXING (target_flags & MASK_DISABLE_INDEXING)
|
||||
|
@ -174,8 +169,6 @@ extern int target_flags;
|
|||
{"space-regs", -MASK_NO_SPACE_REGS, "Do not disable space regs"}, \
|
||||
{"jump-in-delay", MASK_JUMP_IN_DELAY, "Put jumps in call delay slots"},\
|
||||
{"no-jump-in-delay", -MASK_JUMP_IN_DELAY, "Do not put jumps in call delay slots"}, \
|
||||
{"space", MASK_SPACE, "Optimize for code space"}, \
|
||||
{"no-space", -MASK_SPACE, "Do not optimize for code space"}, \
|
||||
{"disable-indexing", MASK_DISABLE_INDEXING, "Disable indexed addressing"},\
|
||||
{"no-disable-indexing", -MASK_DISABLE_INDEXING, "Do not disable indexed addressing"},\
|
||||
{"portable-runtime", MASK_PORTABLE_RUNTIME, "Use portable calling conventions"}, \
|
||||
|
|
|
@ -1,18 +1,10 @@
|
|||
LIBGCC1=libgcc1.null
|
||||
CROSS_LIBGCC1=libgcc1.null
|
||||
ADA_CFLAGS=-mdisable-indexing
|
||||
LIB2FUNCS_EXTRA=lib2funcs.asm ee.asm ee_fp.asm
|
||||
LIB2FUNCS_EXTRA=lib2funcs.asm
|
||||
|
||||
lib2funcs.asm: $(srcdir)/config/pa/lib2funcs.asm
|
||||
rm -f lib2funcs.asm
|
||||
cp $(srcdir)/config/pa/lib2funcs.asm .
|
||||
|
||||
ee.asm: $(srcdir)/config/pa/ee.asm
|
||||
rm -f ee.asm
|
||||
cp $(srcdir)/config/pa/ee.asm .
|
||||
|
||||
ee_fp.asm: $(srcdir)/config/pa/ee_fp.asm
|
||||
rm -f ee_fp.asm
|
||||
cp $(srcdir)/config/pa/ee_fp.asm .
|
||||
|
||||
TARGET_LIBGCC2_CFLAGS = -fPIC
|
||||
|
|
|
@ -7,7 +7,7 @@ LIBGCC1_TEST =
|
|||
|
||||
ADA_CFLAGS=-mdisable-indexing
|
||||
|
||||
LIB2FUNCS_EXTRA=fp-bit.c dp-bit.c lib2funcs.asm ee.asm ee_fp.asm
|
||||
LIB2FUNCS_EXTRA=fp-bit.c dp-bit.c lib2funcs.asm
|
||||
|
||||
dp-bit.c: $(srcdir)/config/fp-bit.c
|
||||
cat $(srcdir)/config/fp-bit.c > dp-bit.c
|
||||
|
@ -19,20 +19,3 @@ fp-bit.c: $(srcdir)/config/fp-bit.c
|
|||
lib2funcs.asm: $(srcdir)/config/pa/lib2funcs.asm
|
||||
rm -f lib2funcs.asm
|
||||
cp $(srcdir)/config/pa/lib2funcs.asm .
|
||||
|
||||
ee.asm: $(srcdir)/config/pa/ee.asm
|
||||
rm -f ee.asm
|
||||
cp $(srcdir)/config/pa/ee.asm .
|
||||
|
||||
ee_fp.asm: $(srcdir)/config/pa/ee_fp.asm
|
||||
rm -f ee_fp.asm
|
||||
cp $(srcdir)/config/pa/ee_fp.asm .
|
||||
|
||||
# Build the libraries for both speed and space optimizations
|
||||
|
||||
MULTILIB_OPTIONS=mspace
|
||||
MULTILIB_DIRNAMES=space
|
||||
MULTILIB_MATCHES=
|
||||
|
||||
LIBGCC = stmp-multilib
|
||||
INSTALL_LIBGCC = install-multilib
|
||||
|
|
Loading…
Reference in New Issue