Initial revision
From-SVN: r11490
This commit is contained in:
parent
99561ab6ee
commit
9e9b00600b
261
gcc/config/pa/ee.asm
Normal file
261
gcc/config/pa/ee.asm
Normal file
@ -0,0 +1,261 @@
|
||||
; 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(0,%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(0,%r20)
|
||||
nop
|
||||
stws,ma %r17,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r16,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r15,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r14,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r13,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r12,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r11,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r10,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r9,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r8,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r7,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r6,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r5,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r4,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r3,4(0,%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(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr20,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr19,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr18,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr17,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr16,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr15,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr14,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr13,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr12,8(0,%r20)
|
||||
nop
|
||||
L$0001
|
||||
; Return
|
||||
bv,n 0(%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(0,%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(0,%r20),%r18
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r17
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r16
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r15
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r14
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r13
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r12
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r11
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r10
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r9
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r8
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r7
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r6
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r5
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r4
|
||||
nop
|
||||
ldws,ma 4(0,%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(0,%r20),%fr21
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr20
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr19
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr18
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr17
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr16
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr15
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr14
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr13
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr12
|
||||
nop
|
||||
L$0005
|
||||
; Return and deallocate our frame.
|
||||
bv 0(%r31)
|
||||
sub %r30,%r21,%r30
|
||||
.EXIT
|
||||
.PROCEND
|
274
gcc/config/pa/ee_fp.asm
Normal file
274
gcc/config/pa/ee_fp.asm
Normal file
@ -0,0 +1,274 @@
|
||||
; 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(0,%r30)
|
||||
|
||||
; Make our new frame.
|
||||
add %r21,%r30,%r30
|
||||
|
||||
; Save our old stack pointer.
|
||||
stw %r20,0(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(0,%r20)
|
||||
nop
|
||||
stws,ma %r17,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r16,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r15,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r14,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r13,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r12,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r11,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r10,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r9,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r8,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r7,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r6,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r5,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r4,4(0,%r20)
|
||||
nop
|
||||
stws,ma %r3,4(0,%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(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr20,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr19,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr18,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr17,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr16,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr15,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr14,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr13,8(0,%r20)
|
||||
nop
|
||||
fstws,ma %fr12,8(0,%r20)
|
||||
nop
|
||||
L$0003
|
||||
; Return, setting up a frame pointer in the delay slot
|
||||
bv 0(%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(0,%r20),%r2
|
||||
|
||||
; Load our old stack pointer, save it in %r21.
|
||||
ldw 0(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(0,%r20),%r18
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r17
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r16
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r15
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r14
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r13
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r12
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r11
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r10
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r9
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r8
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r7
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r6
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r5
|
||||
nop
|
||||
ldws,ma 4(0,%r20),%r4
|
||||
nop
|
||||
ldws,ma 4(0,%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(0,%r20),%fr21
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr20
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr19
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr18
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr17
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr16
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr15
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr14
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr13
|
||||
nop
|
||||
fldws,ma 8(0,%r20),%fr12
|
||||
nop
|
||||
L$0007
|
||||
; Return and deallocate our frame.
|
||||
bv 0(%r31)
|
||||
copy %r21,%r30
|
||||
.EXIT
|
||||
.PROCEND
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user