| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: swapcontext.S,v 1.4 2012/09/12 02:00:52 manu Exp $ */ | | 1 | /* $NetBSD: swapcontext.S,v 1.5 2014/08/13 15:41:21 joerg Exp $ */ |
2 | | | 2 | |
3 | /*- | | 3 | /*- |
4 | * Copyright (c) 2001 The NetBSD Foundation, Inc. | | 4 | * Copyright (c) 2001 The NetBSD Foundation, Inc. |
5 | * All rights reserved. | | 5 | * All rights reserved. |
6 | * | | 6 | * |
7 | * This code is derived from software contributed to The NetBSD Foundation | | 7 | * This code is derived from software contributed to The NetBSD Foundation |
8 | * by Klaus Klein. | | 8 | * by Klaus Klein. |
9 | * | | 9 | * |
10 | * Redistribution and use in source and binary forms, with or without | | 10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions | | 11 | * modification, are permitted provided that the following conditions |
12 | * are met: | | 12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright | | 13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. | | 14 | * notice, this list of conditions and the following disclaimer. |
| @@ -23,34 +23,34 @@ | | | @@ -23,34 +23,34 @@ |
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | | 23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | | 24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | | 25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | | 26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
29 | * POSSIBILITY OF SUCH DAMAGE. | | 29 | * POSSIBILITY OF SUCH DAMAGE. |
30 | */ | | 30 | */ |
31 | | | 31 | |
32 | #include "SYS.h" | | 32 | #include "SYS.h" |
33 | | | 33 | |
34 | #if defined(LIBC_SCCS) && !defined(lint) | | 34 | #if defined(LIBC_SCCS) && !defined(lint) |
35 | .text | | 35 | .text |
36 | .asciz "$NetBSD: swapcontext.S,v 1.4 2012/09/12 02:00:52 manu Exp $" | | 36 | .asciz "$NetBSD: swapcontext.S,v 1.5 2014/08/13 15:41:21 joerg Exp $" |
37 | #endif /* LIBC_SCCS && !lint */ | | 37 | #endif /* LIBC_SCCS && !lint */ |
38 | | | 38 | |
39 | ENTRY(swapcontext) | | 39 | ENTRY(swapcontext) |
40 | mc_off = 56 # offset of uc_mcontext | | 40 | mc_off = 56 # offset of uc_mcontext |
41 | stdu %r1,-SF_SZ(%r1) # set up new stack frame | | 41 | stdu %r1,-SF_SZ(%r1) # set up new stack frame |
42 | mflr %r0 | | 42 | mflr %r0 |
43 | std %r0,[SF_SZ+SF_LR](%r1) # save link register | | 43 | std %r0,(SF_SZ+SF_LR)(%r1) # save link register |
44 | std %r3,SF_PARAM(%r1) # must save oucp (was 8) | | 44 | std %r3,SF_PARAM(%r1) # must save oucp (was 8) |
45 | std %r4,SF_PARAM+8(%r1) # must save ucp (was 12) | | 45 | std %r4,SF_PARAM+8(%r1) # must save ucp (was 12) |
46 | bl ._getcontext # getcontext(oucp) | | 46 | bl ._getcontext # getcontext(oucp) |
47 | nop | | 47 | nop |
48 | cmpdi %r3,0 | | 48 | cmpdi %r3,0 |
49 | bne 1f | | 49 | bne 1f |
50 | ld %r11,SF_PARAM(%r1) # load oucp for adjustment | | 50 | ld %r11,SF_PARAM(%r1) # load oucp for adjustment |
51 | ld %r0,SF_SZ+SF_LR(%r1) # get LR back | | 51 | ld %r0,SF_SZ+SF_LR(%r1) # get LR back |
52 | std %r0,mc_off+34*8(%r11) # pc <- lr | | 52 | std %r0,mc_off+34*8(%r11) # pc <- lr |
53 | la %r0,16(%r1) | | 53 | la %r0,16(%r1) |
54 | std %r0,mc_off+1*8(%r11) # adjust sp | | 54 | std %r0,mc_off+1*8(%r11) # adjust sp |
55 | ld %r3,SF_PARAM+8(%r1) # load ucp | | 55 | ld %r3,SF_PARAM+8(%r1) # load ucp |
56 | bl PIC_PLT(_C_LABEL(setcontext)) # setcontext(ucp) | | 56 | bl PIC_PLT(_C_LABEL(setcontext)) # setcontext(ucp) |