summaryrefslogtreecommitdiff
path: root/newlib/libc/machine/hppa/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/hppa/setjmp.S')
-rw-r--r--newlib/libc/machine/hppa/setjmp.S139
1 files changed, 139 insertions, 0 deletions
diff --git a/newlib/libc/machine/hppa/setjmp.S b/newlib/libc/machine/hppa/setjmp.S
new file mode 100644
index 00000000000..6f3668e9245
--- /dev/null
+++ b/newlib/libc/machine/hppa/setjmp.S
@@ -0,0 +1,139 @@
+/* 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