(c) versus (C)
[helenos.git] / kernel / arch / mips32 / src / context.S
bloba3d52557bc9c81ee40f65f43b9278d09bd6534f0
2 # Copyright (c) 2003-2004 Jakub Jermar
3 # All rights reserved.
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
9 # - Redistributions of source code must retain the above copyright
10 #   notice, this list of conditions and the following disclaimer.
11 # - Redistributions in binary form must reproduce the above copyright
12 #   notice, this list of conditions and the following disclaimer in the
13 #   documentation and/or other materials provided with the distribution.
14 # - The name of the author may not be used to endorse or promote products
15 #   derived from this software without specific prior written permission.
17 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <arch/asm/regname.h>
30 #include <arch/context_offset.h>
31         
32 .text   
34 .set noat
35 .set noreorder
36 .set nomacro
38 .global context_save_arch
39 .global context_restore_arch
41 .macro CONTEXT_STORE r
42         sw $s0,OFFSET_S0(\r)
43         sw $s1,OFFSET_S1(\r)
44         sw $s2,OFFSET_S2(\r)
45         sw $s3,OFFSET_S3(\r)
46         sw $s4,OFFSET_S4(\r)
47         sw $s5,OFFSET_S5(\r)
48         sw $s6,OFFSET_S6(\r)
49         sw $s7,OFFSET_S7(\r)
50         sw $s8,OFFSET_S8(\r)
51         sw $gp,OFFSET_GP(\r)
52         
53         sw $ra,OFFSET_PC(\r)
54         sw $sp,OFFSET_SP(\r)
55 .endm
57 .macro CONTEXT_LOAD r
58         lw $s0,OFFSET_S0(\r)
59         lw $s1,OFFSET_S1(\r)
60         lw $s2,OFFSET_S2(\r)
61         lw $s3,OFFSET_S3(\r)
62         lw $s4,OFFSET_S4(\r)
63         lw $s5,OFFSET_S5(\r)
64         lw $s6,OFFSET_S6(\r)
65         lw $s7,OFFSET_S7(\r)
66         lw $s8,OFFSET_S8(\r)
67         lw $gp,OFFSET_GP(\r)
68         
69         lw $ra,OFFSET_PC(\r)
70         lw $sp,OFFSET_SP(\r)
71 .endm
73         
74 context_save_arch:
75         CONTEXT_STORE $a0
77         # context_save returns 1
78         j $31
79         li $2, 1        
80         
81 context_restore_arch:
82         CONTEXT_LOAD $a0
84         # context_restore returns 0
85         j $31
86         xor $2, $2