source: mainline/kernel/arch/sparc64/src/asm.S@ 32fffef0

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

Remove OpenFirmware calls from kernel/ entirely.

Switch the sparc64 port to use bootinfo.

Copy memcpy from boot/ to sparc64 kernel/ and
adjust it for memcpy_from/to_uspace.

  • 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/stack.h>
30#include <arch/regdef.h>
31
32.text
33
34.global memcpy
35.global memcpy_from_uspace
36.global memcpy_to_uspace
37.global memcpy_from_uspace_failover_address
38.global memcpy_to_uspace_failover_address
39.global memsetb
40
41
42memcpy:
43memcpy_from_uspace:
44memcpy_to_uspace:
45 .register %g2, #scratch
46 .register %g3, #scratch
47 add %o1, 7, %g1
48 and %g1, -8, %g1
49 cmp %o1, %g1
50 be,pn %xcc, 3f
51 add %o0, 7, %g1
52 mov 0, %g3
530:
54 brz,pn %o2, 2f
55 mov 0, %g2
561:
57 ldub [%g3 + %o1], %g1
58 add %g2, 1, %g2
59 cmp %o2, %g2
60 stb %g1, [%g3 + %o0]
61 bne,pt %xcc, 1b
62 mov %g2, %g3
632:
64 jmp %o7 + 8 ! exit point
65 mov %o1, %o0
663:
67 and %g1, -8, %g1
68 cmp %o0, %g1
69 bne,pt %xcc, 0b
70 mov 0, %g3
71 srlx %o2, 3, %g4
72 brz,pn %g4, 5f
73 mov 0, %g5
744:
75 sllx %g3, 3, %g2
76 add %g5, 1, %g3
77 ldx [%o1 + %g2], %g1
78 mov %g3, %g5
79 cmp %g4, %g3
80 bne,pt %xcc, 4b
81 stx %g1, [%o0 + %g2]
825:
83 and %o2, 7, %o2
84 brz,pn %o2, 2b
85 sllx %g4, 3, %g1
86 mov 0, %g2
87 add %g1, %o0, %o0
88 add %g1, %o1, %g4
89 mov 0, %g3
906:
91 ldub [%g2 + %g4], %g1
92 stb %g1, [%g2 + %o0]
93 add %g3, 1, %g2
94 cmp %o2, %g2
95 bne,pt %xcc, 6b
96 mov %g2, %g3
97
98 jmp %o7 + 8 ! exit point
99 mov %o1, %o0
100
101memcpy_from_uspace_failover_address:
102memcpy_to_uspace_failover_address:
103 jmp %o7 + 8 ! exit point
104 mov %g0, %o0 ! return 0 on failure
105
106memsetb:
107 b _memsetb
108 nop
Note: See TracBrowser for help on using the repository browser.