source: mainline/arch/sparc64/src/context.S@ d6e8529

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since d6e8529 was 75e1db0, checked in by Jakub Jermar <jakub@…>, 20 years ago

sparc64 work.
Implement interrupt_disable(), interrupt_enable(), interrupt_restore() and interrupt_read() functions.
Fix context save/restore to save/restore register %i7.

  • Property mode set to 100644
File size: 2.7 KB
Line 
1#
2# Copyright (C) 2005 Jakub Jermar
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
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.
16#
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.
27#
28
29#include <arch/context_offset.h>
30#include <arch/stack.h>
31
32/**
33 * Both context_save_arch() and context_restore_arch() are
34 * leaf-optimized procedures. This kind of optimization
35 * is very important and prevents any implicit window
36 * spill/fill/clean traps in these very core kernel
37 * functions.
38 */
39
40.text
41
42.global context_save_arch
43.global context_restore_arch
44
45.macro CONTEXT_STORE r
46 stx %o1, [\r + OFFSET_O1]
47 stx %o2, [\r + OFFSET_O2]
48 stx %o3, [\r + OFFSET_O3]
49 stx %o4, [\r + OFFSET_O4]
50 stx %o5, [\r + OFFSET_O5]
51 stx %o7, [\r + OFFSET_PC]
52 stx %sp, [\r + OFFSET_SP]
53 stx %fp, [\r + OFFSET_FP]
54 stx %i7, [\r + OFFSET_I7]
55.endm
56
57.macro CONTEXT_LOAD r
58 ldx [\r + OFFSET_O1], %o1
59 ldx [\r + OFFSET_O2], %o2
60 ldx [\r + OFFSET_O3], %o3
61 ldx [\r + OFFSET_O4], %o4
62 ldx [\r + OFFSET_O5], %o5
63 ldx [\r + OFFSET_PC], %o7
64 ldx [\r + OFFSET_SP], %sp
65 ldx [\r + OFFSET_FP], %fp
66 ldx [\r + OFFSET_I7], %i7
67.endm
68
69context_save_arch:
70 CONTEXT_STORE %o0
71 retl
72 mov 1, %o0 ! context_save_arch returns 1
73
74context_restore_arch:
75 #
76 # Flush all active windows.
77 # This is essential, because CONTEXT_LOAD overwrites
78 # %sp of CWP - 1 with the value written to %fp of CWP.
79 # Flushing all active windows mitigates this problem
80 # as CWP - 1 becomes the overlap window.
81 #
82 flushw
83
84 CONTEXT_LOAD %o0
85 retl
86 xor %o0, %o0, %o0 ! context_restore_arch returns 0
Note: See TracBrowser for help on using the repository browser.