source: trunk/libs/newlib/src/newlib/libc/machine/msp430/setjmp.S @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 2.3 KB
Line 
1/* Copyright (c) 2013  Red Hat, Inc. All rights reserved.
2
3   This copyrighted material is made available to anyone wishing to use,
4   modify, copy, or redistribute it subject to the terms and conditions
5   of the BSD License.   This program is distributed in the hope that
6   it will be useful, but WITHOUT ANY WARRANTY expressed or implied,
7   including the implied warranties of MERCHANTABILITY or FITNESS FOR
8   A PARTICULAR PURPOSE.  A copy of this license is available at
9   http://www.opensource.org/licenses. Any Red Hat trademarks that are
10   incorporated in the source code or documentation are not subject to
11   the BSD License and may only be used or replicated with the express
12   permission of Red Hat, Inc.
13*/
14
15# setjmp/longjmp for msp430.  The jmpbuf looks like this:
16#
17# Register      Jmpbuf offset
18#               small   large   
19# r0 (pc)       0x00     0x00
20# r1 (sp)       0x02     0x04   
21# r4            0x04     0x08
22# r5            0x06     0x0c
23# r6            0x08     0x10
24# r7            0x0a     0x14
25# r8            0x0c     0x18
26# r9            0x0e     0x1c
27# r10           0x10     0x20
28
29        .text
30        .global setjmp
31setjmp:
32        ; Upon entry r12 points to the jump buffer.
33        ; Returns 0 to caller.
34       
35#if   defined __MSP430X_LARGE__
36        mova   @r1, r13
37        mova    r13, 0(r12)
38        mova    r1,  4(r12)
39        mova    r4,  8(r12)
40        mova    r5,  12(r12)
41        mova    r6,  16(r12)
42        mova    r7,  20(r12)
43        mova    r8,  24(r12)
44        mova    r9,  28(r12)
45        mova    r10, 32(r12)
46        clr     r12
47        reta
48#else
49        ;; Get the return address off the stack
50        mov.w  @r1,  r13
51        mov.w   r13, 0(r12)
52        mov.w   r1,  2(r12)
53        mov.w   r4,  4(r12)
54        mov.w   r5,  6(r12)
55        mov.w   r6,  8(r12)
56        mov.w   r7,  10(r12)
57        mov.w   r8,  12(r12)
58        mov.w   r9,  14(r12)
59        mov.w   r10, 16(r12)
60        clr     r12
61        ret
62#endif 
63        .size setjmp , . - setjmp
64
65       
66        .global longjmp
67longjmp:
68        ; Upon entry r12 points to the jump buffer and
69        ; r13 contains the value to be returned by setjmp.
70
71#if   defined __MSP430X_LARGE__
72        mova    @r12+, r14
73        mova    @r12+, r1
74        mova    @r12+, r4
75        mova    @r12+, r5
76        mova    @r12+, r6
77        mova    @r12+, r7
78        mova    @r12+, r8
79        mova    @r12+, r9
80        mova    @r12+, r10
81#else
82        mov.w   @r12+, r14
83        mov.w   @r12+, r1
84        mov.w   @r12+, r4
85        mov.w   @r12+, r5
86        mov.w   @r12+, r6
87        mov.w   @r12+, r7
88        mov.w   @r12+, r8
89        mov.w   @r12+, r9
90        mov.w   @r12+, r10
91#endif
92        ; If caller attempts to return 0, return 1 instead.
93        cmp.w   #0, r13
94        jne     .Lnot_zero
95        mov.w   #1, r13
96.Lnot_zero:
97        mov.w   r13, r12
98
99#if   defined __MSP430X_LARGE__
100        adda     #4, r1
101        mova    r14, r0
102#else
103        add.w    #2, r1
104        mov.w   r14, r0
105#endif
106        .size longjmp , . - longjmp
107
Note: See TracBrowser for help on using the repository browser.