source: mainline/boot/arch/sparc64/loader/asm.S@ b3e8c90

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

Switch to identically mapped stack during boot.
Put stack related and register related macros to dedicated
header files.

  • Property mode set to 100644
File size: 2.7 KB
Line 
1#
2# Copyright (C) 2006 Martin Decky
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 <stack.h>
30#include <register.h>
31
32.text
33
34.global halt
35.global memcpy
36.global jump_to_kernel
37
38halt:
39 b halt
40 nop
41
42memcpy:
43 .register %g2, #scratch
44 .register %g3, #scratch
45 add %o1, 7, %g1
46 and %g1, -8, %g1
47 cmp %o1, %g1
48 be,pn %xcc, 3f
49 add %o0, 7, %g1
50 mov 0, %g3
510:
52 brz,pn %o2, 2f
53 mov 0, %g2
541:
55 ldub [%g3 + %o1], %g1
56 add %g2, 1, %g2
57 cmp %o2, %g2
58 stb %g1, [%g3 + %o0]
59 bne,pt %xcc, 1b
60 mov %g2, %g3
612:
62 jmp %o7 + 8 ! exit point
63 mov %o1, %o0
643:
65 and %g1, -8, %g1
66 cmp %o0, %g1
67 bne,pt %xcc, 0b
68 mov 0, %g3
69 srlx %o2, 3, %g4
70 brz,pn %g4, 5f
71 mov 0, %g5
724:
73 sllx %g3, 3, %g2
74 add %g5, 1, %g3
75 ldx [%o1 + %g2], %g1
76 mov %g3, %g5
77 cmp %g4, %g3
78 bne,pt %xcc, 4b
79 stx %g1, [%o0 + %g2]
805:
81 and %o2, 7, %o2
82 brz,pn %o2, 2b
83 sllx %g4, 3, %g1
84 mov 0, %g2
85 add %g1, %o0, %o0
86 add %g1, %o1, %g4
87 mov 0, %g3
886:
89 ldub [%g2 + %g4], %g1
90 stb %g1, [%g2 + %o0]
91 add %g3, 1, %g2
92 cmp %o2, %g2
93 bne,pt %xcc, 6b
94 mov %g2, %g3
95
96 jmp %o7 + 8 ! exit point
97 mov %o1, %o0
98
99jump_to_kernel:
100 mov %o0, %l1
101 mov %o1, %o0
102 mov %o2, %o1
103 jmp %l1 ! jump to kernel
104 nop
105
106.global ofw
107ofw:
108 save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
109 set ofw_cif, %l0
110 ldx [%l0], %l0
111
112 rdpr %pstate, %l1
113 and %l1, ~PSTATE_AM_BIT, %l2
114 wrpr %l2, 0, %pstate
115
116 jmpl %l0, %o7
117 mov %i0, %o0
118
119 wrpr %l1, 0, %pstate
120
121 ret
122 restore %o0, 0, %o0
Note: See TracBrowser for help on using the repository browser.