OSDN Git Service

First pass attempt at an alpha port
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / alpha / setjmp.S
1 /* Copyright (C) 1992, 1994, 1996, 1997 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 #include <features.h>
20 #define _ASM
21 #define _SETJMP_H
22 #define __ASSEMBLY__
23 #include <bits/setjmp.h>
24
25 #define a0  $16
26
27        .ent __sigsetjmp
28        .global __sigsetjmp
29 __sigsetjmp:
30        ldgp    $29, 0($27)
31
32 $sigsetjmp_local:
33        subq    $30, 16, $30
34        .frame  $26, 16, $26, 0
35        stq     $26, 0($30)
36        .mask   0x04000000, -16
37 #ifdef PROF
38         .set noat
39         lda     AT, _mcount
40         jsr     AT, (AT), _mcount
41         .set at
42 #endif
43         .prologue 1
44
45         stq     $9, JB_S0*8(a0)
46         stq     $10, JB_S1*8(a0)
47         stq     $11, JB_S2*8(a0)
48         stq     $12, JB_S3*8(a0)
49         stq     $13, JB_S4*8(a0)
50         stq     $14, JB_S5*8(a0)
51         stq     $26, JB_PC*8(a0)
52         addq    $30, 16, $1
53         stq     $15, JB_FP*8(a0)
54         stq     $1, JB_SP*8(a0)
55         stt     $f2, JB_F2*8(a0)
56         stt     $f3, JB_F3*8(a0)
57         stt     $f4, JB_F4*8(a0)
58         stt     $f5, JB_F5*8(a0)
59         stt     $f6, JB_F6*8(a0)
60         stt     $f7, JB_F7*8(a0)
61         stt     $f8, JB_F8*8(a0)
62         stt     $f9, JB_F9*8(a0)
63
64         /* Call to C to (potentially) save our signal mask.  */
65         jsr     $26, __sigjmp_save
66
67         ldq     $26, 0($30)
68         addq    $30, 16, $30
69         ret
70
71 .end __sigsetjmp
72
73 /* Put these traditional entry points in the same file so that we can
74    elide much of the nonsense in trying to jmp to the real function.  */
75
76 .globl  _setjmp;
77 .align 3;
78 .ent  _setjmp , 0;
79 _setjmp:
80         .frame $30 , 0, $26
81         ldgp    $29, 0($27)
82         mov     0, $17
83         br      $sigsetjmp_local
84 .end _setjmp
85
86 .globl  setjmp;
87 .align 3;
88 .ent  setjmp , 0;
89 setjmp:
90         .frame $30 , 0, $26
91         ldgp    $29, 0($27)
92         mov     1, $17
93         br      $sigsetjmp_local
94 .end setjmp
95
96 .weak   _setjmp
97 .weak   setjmp