OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib-1.10.0/] [newlib/] [libc/] [machine/] [mips/] [setjmp.S] - Blame information for rev 1773

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1008 ivang
/* This is a simple version of setjmp and longjmp for MIPS 32 and 64.
2
 
3
   The MIPS 32 version does NOT save the floating point register, which is
4
   wrong, but I don't know how to cleanly handle machines without a
5
   floating point coprocessor.
6
 
7
   Ian Lance Taylor, Cygnus Support, 13 May 1993.
8
 
9
   The MIPS 64 version saves registers fp20 to fp31.  23 registers
10
   are saved in all.  */
11
 
12
#ifdef __mips16
13
/* This file contains 32 bit assembly code.  */
14
        .set nomips16
15
#endif
16
 
17
/* int setjmp (jmp_buf);  */
18
        .globl  setjmp
19
        .ent    setjmp
20
setjmp:
21
        .frame  $sp,0,$31
22
 
23
#ifdef __mips64
24
 
25
        sd      $16, 000($4)    /* s0 */
26
        sd      $17, 010($4)    /* s1 */
27
        sd      $18, 020($4)    /* s2 */
28
        sd      $19, 030($4)    /* s3 */
29
        sd      $20, 040($4)    /* s4 */
30
        sd      $21, 050($4)    /* s5 */
31
        sd      $22, 060($4)    /* s6 */
32
        sd      $23, 070($4)    /* s7 */
33
 
34
        sdc1    $f20, 0100($4)
35
        sdc1    $f21, 0110($4)
36
        sdc1    $f22, 0120($4)
37
        sdc1    $f23, 0130($4)
38
        sdc1    $f24, 0140($4)
39
        sdc1    $f25, 0150($4)
40
        sdc1    $f26, 0160($4)
41
        sdc1    $f27, 0170($4)
42
        sdc1    $f28, 0200($4)
43
        sdc1    $f29, 0210($4)
44
        sdc1    $f30, 0220($4)
45
        sdc1    $f31, 0230($4)
46
 
47
        sd      $29, 0240($4)   /* sp */
48
        sd      $30, 0250($4)   /* fp */
49
        sd      $31, 0260($4)   /* ra */
50
 
51
#else /* not __mips64 */
52
 
53
        sw      $16,0($4)       /* $s0 */
54
        sw      $17,4($4)       /* $s1 */
55
        sw      $18,8($4)       /* $s2 */
56
        sw      $19,12($4)      /* $s3 */
57
        sw      $20,16($4)      /* $s4 */
58
        sw      $21,20($4)      /* $s5 */
59
        sw      $22,24($4)      /* $s6 */
60
        sw      $23,28($4)      /* $s7 */
61
        sw      $30,32($4)      /* $s8 */
62
 
63
        sw      $sp,36($4)
64
        sw      $31,40($4)
65
 
66
#endif /* not __mips64 */
67
 
68
        move    $2,$0
69
 
70
        j       $31
71
 
72
        .end    setjmp
73
 
74
/* volatile void longjmp (jmp_buf, int);  */
75
        .globl  longjmp
76
        .ent    longjmp
77
longjmp:
78
        .frame  $sp,0,$31
79
 
80
#ifdef __mips64
81
 
82
        ld      $16, 000($4)    /* s0 */
83
        ld      $17, 010($4)    /* s1 */
84
        ld      $18, 020($4)    /* s2 */
85
        ld      $19, 030($4)    /* s3 */
86
        ld      $20, 040($4)    /* s4 */
87
        ld      $21, 050($4)    /* s5 */
88
        ld      $22, 060($4)    /* s6 */
89
        ld      $23, 070($4)    /* s7 */
90
 
91
        ldc1    $f20, 0100($4)
92
        ldc1    $f21, 0110($4)
93
        ldc1    $f22, 0120($4)
94
        ldc1    $f23, 0130($4)
95
        ldc1    $f24, 0140($4)
96
        ldc1    $f25, 0150($4)
97
        ldc1    $f26, 0160($4)
98
        ldc1    $f27, 0170($4)
99
        ldc1    $f28, 0200($4)
100
        ldc1    $f29, 0210($4)
101
        ldc1    $f30, 0220($4)
102
        ldc1    $f31, 0230($4)
103
 
104
        ld      $29, 0240($4)   /* sp */
105
        ld      $30, 0250($4)   /* fp */
106
        ld      $31, 0260($4)   /* ra */
107
 
108
#else /* not __mips64 */
109
 
110
        lw      $16,0($4)       /* $s0 */
111
        lw      $17,4($4)       /* $s1 */
112
        lw      $18,8($4)       /* $s2 */
113
        lw      $19,12($4)      /* $s3 */
114
        lw      $20,16($4)      /* $s4 */
115
        lw      $21,20($4)      /* $s5 */
116
        lw      $22,24($4)      /* $s6 */
117
        lw      $23,28($4)      /* $s7 */
118
        lw      $30,32($4)      /* $s8 */
119
 
120
        lw      $sp,36($4)
121
        lw      $31,40($4)
122
 
123
#endif /* not __mips64 */
124
 
125
        bne     $5,$0,1f
126
        li      $5,1
127
1:
128
        move    $2,$5
129
 
130
        j       $31
131
 
132
        .end longjmp

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.