140 lines
3.3 KiB
ArmAsm
140 lines
3.3 KiB
ArmAsm
/* Copyright (c) 1995 Cygnus Support.
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms are permitted
|
|
provided that the above copyright notice and this paragraph are
|
|
duplicated in all such forms and that any documentation,
|
|
advertising materials, and other materials related to such
|
|
distribution and use acknowledge that the software was developed
|
|
at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to
|
|
endorse or promote products derived from this software without
|
|
specific prior written permission.
|
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */
|
|
|
|
/* Note I don't know an easy way to get the FP version into the
|
|
traditional C library and the non-FP version into the soft-float
|
|
library. Maybe we'll have to have -msoft-float trigger something
|
|
like -DSOFT_FLOAT if this issue ever arises. */
|
|
|
|
.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
|
|
.IMPORT $global$,DATA
|
|
.IMPORT $$dyncall,MILLICODE
|
|
; gcc_compiled.:
|
|
.SPACE $TEXT$
|
|
.SUBSPA $CODE$
|
|
|
|
.align 4
|
|
.EXPORT setjmp,ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR
|
|
setjmp
|
|
.PROC
|
|
.CALLINFO FRAME=64,NO_CALLS,SAVE_SP,ENTRY_GR=3
|
|
.ENTRY
|
|
stwm %r30,4(%r26)
|
|
stwm %r2,4(%r26)
|
|
stwm %r3,4(%r26)
|
|
stwm %r4,4(%r26)
|
|
stwm %r5,4(%r26)
|
|
stwm %r6,4(%r26)
|
|
stwm %r7,4(%r26)
|
|
stwm %r8,4(%r26)
|
|
stwm %r9,4(%r26)
|
|
stwm %r10,4(%r26)
|
|
stwm %r11,4(%r26)
|
|
stwm %r12,4(%r26)
|
|
stwm %r13,4(%r26)
|
|
stwm %r14,4(%r26)
|
|
stwm %r15,4(%r26)
|
|
stwm %r16,4(%r26)
|
|
stwm %r17,4(%r26)
|
|
stwm %r18,4(%r26)
|
|
stwm %r27,4(%r26)
|
|
#ifdef FP
|
|
; jmp_buf may only have a 4 byte alignment, so handle FP stores
|
|
; very carefully.
|
|
fstds %fr12,-16(%r30)
|
|
ldw -16(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
ldw -12(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
fstds %fr13,-16(%r30)
|
|
ldw -16(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
ldw -12(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
fstds %fr14,-16(%r30)
|
|
ldw -16(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
ldw -12(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
fstds %fr15,-16(%r30)
|
|
ldw -16(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
ldw -12(%r30),%r28
|
|
stwm %r28,4(%r26)
|
|
#endif
|
|
|
|
bv 0(%r2)
|
|
copy %r0,%r28
|
|
.EXIT
|
|
.PROCEND
|
|
.align 4
|
|
.EXPORT longjmp,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,RTNVAL=GR
|
|
longjmp
|
|
.PROC
|
|
.CALLINFO FRAME=64,NO_CALLS,SAVE_SP,ENTRY_GR=3
|
|
.ENTRY
|
|
ldwm 4(%r26),%r30
|
|
ldwm 4(%r26),%r2
|
|
ldwm 4(%r26),%r3
|
|
ldwm 4(%r26),%r4
|
|
ldwm 4(%r26),%r5
|
|
ldwm 4(%r26),%r6
|
|
ldwm 4(%r26),%r7
|
|
ldwm 4(%r26),%r8
|
|
ldwm 4(%r26),%r9
|
|
ldwm 4(%r26),%r10
|
|
ldwm 4(%r26),%r11
|
|
ldwm 4(%r26),%r12
|
|
ldwm 4(%r26),%r13
|
|
ldwm 4(%r26),%r14
|
|
ldwm 4(%r26),%r15
|
|
ldwm 4(%r26),%r16
|
|
ldwm 4(%r26),%r17
|
|
ldwm 4(%r26),%r18
|
|
ldwm 4(%r26),%r27
|
|
#ifdef FP
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-16(%r30)
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-12(%r30)
|
|
fldds -16(%r30),%fr12
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-16(%r30)
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-12(%r30)
|
|
fldds -16(%r30),%fr13
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-16(%r30)
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-12(%r30)
|
|
fldds -16(%r30),%fr14
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-16(%r30)
|
|
ldwm 4(%r26),%r28
|
|
stw %r28,-12(%r30)
|
|
fldds -16(%r30),%fr15
|
|
#endif
|
|
comclr,<> %r0,%r25,%r0
|
|
ldi 1,%r25
|
|
bv 0(%r2)
|
|
copy %r25,%r28
|
|
.EXIT
|
|
.PROCEND
|