26ec2ed496605c9753d4d731ea9e47d0b9477eac
[platform/upstream/glibc.git] / sysdeps / am33 / setjmp.S
1 /* setjmp for am33.
2    Copyright (C) 2001, 2004 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #include <sysdep.h>
21 #define _ASM
22 #define _SETJMP_H
23 #include <bits/setjmp.h>
24 #include <asm-syntax.h>
25
26
27 ENTRY (__sigsetjmp)
28 .Lsigsetjmp:
29         /* Save registers.  */
30         mov d0,a0
31         mov d2,(0,a0)
32         mov d3,(4,a0)
33         mov mdr,d0
34         mov d0,(8,a0)
35         /* Restore d0 for __sigjmp_save.  */
36         mov a0,d0
37         mov a2,(12,a0)
38         mov a3,(16,a0)
39         mov sp,a1
40         mov a1,(20,a0)
41         add 24,a0
42         mov r4,(a0+)
43         mov r5,(a0+)
44         mov r6,(a0+)
45         mov r7,(a0+)
46 #ifdef __AM33_2__
47         fmov fs4,(a0+)
48         fmov fs5,(a0+)
49         fmov fs6,(a0+)
50         fmov fs7,(a0+)
51         fmov fs8,(a0+)
52         fmov fs9,(a0+)
53         fmov fs10,(a0+)
54         fmov fs11,(a0+)
55         fmov fs12,(a0+)
56         fmov fs13,(a0+)
57         fmov fs14,(a0+)
58         fmov fs15,(a0+)
59         fmov fs16,(a0+)
60         fmov fs17,(a0+)
61         fmov fs18,(a0+)
62         fmov fs19,(a0+)
63 #endif
64         /* Make a tail call to __sigjmp_save; it takes the same args.  */
65         jmp __sigjmp_save
66 END (__sigsetjmp)
67
68 /* BSD `_setjmp' entry point to `sigsetjmp (..., 1)'.  */
69 ENTRY (setjmp)
70         /* Tail-call setsetjmp with savesigs==1.  */
71         mov 1,d1
72         bra .Lsigsetjmp
73 END (setjmp)
74
75 /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.  */
76 ENTRY (_setjmp)
77         /* Tail-call setsetjmp with savesigs==0.  */
78         clr d1
79         bra .Lsigsetjmp
80 END (_setjmp)