annotate src/os_cpu/solaris_sparc/vm/solaris_sparc.s @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children ba764ed4b6f2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
2 !! Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
a61af66fc99e Initial load
duke
parents:
diff changeset
3 !! DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
5 !! This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 !! under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 !! published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
9 !! This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 !! ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 !! FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 !! version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 !! accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
15 !! You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 !! 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 !! Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
19 !! Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
a61af66fc99e Initial load
duke
parents:
diff changeset
20 !! CA 95054 USA or visit www.sun.com if you need additional information or
a61af66fc99e Initial load
duke
parents:
diff changeset
21 !! have any questions.
a61af66fc99e Initial load
duke
parents:
diff changeset
22 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
23
a61af66fc99e Initial load
duke
parents:
diff changeset
24 !! Prototype: int SafeFetch32 (int * adr, int ErrValue)
a61af66fc99e Initial load
duke
parents:
diff changeset
25 !! The "ld" at Fetch32 is potentially faulting instruction.
a61af66fc99e Initial load
duke
parents:
diff changeset
26 !! If the instruction traps the trap handler will arrange
a61af66fc99e Initial load
duke
parents:
diff changeset
27 !! for control to resume at Fetch32Resume.
a61af66fc99e Initial load
duke
parents:
diff changeset
28 !! By convention with the trap handler we ensure there is a non-CTI
a61af66fc99e Initial load
duke
parents:
diff changeset
29 !! instruction in the trap shadow.
a61af66fc99e Initial load
duke
parents:
diff changeset
30 !!
a61af66fc99e Initial load
duke
parents:
diff changeset
31 !! The reader might be tempted to move this service to .il.
a61af66fc99e Initial load
duke
parents:
diff changeset
32 !! Don't. Sun's CC back-end reads and optimize code emitted
a61af66fc99e Initial load
duke
parents:
diff changeset
33 !! by the .il "call", in some cases optimizing the code, completely eliding it,
a61af66fc99e Initial load
duke
parents:
diff changeset
34 !! or by moving the code from the "call site".
a61af66fc99e Initial load
duke
parents:
diff changeset
35
a61af66fc99e Initial load
duke
parents:
diff changeset
36
a61af66fc99e Initial load
duke
parents:
diff changeset
37 .globl SafeFetch32
a61af66fc99e Initial load
duke
parents:
diff changeset
38 .align 32
a61af66fc99e Initial load
duke
parents:
diff changeset
39 .global Fetch32PFI, Fetch32Resume
a61af66fc99e Initial load
duke
parents:
diff changeset
40 SafeFetch32:
a61af66fc99e Initial load
duke
parents:
diff changeset
41 mov %o0, %g1
a61af66fc99e Initial load
duke
parents:
diff changeset
42 mov %o1, %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
43 Fetch32PFI:
a61af66fc99e Initial load
duke
parents:
diff changeset
44 ld [%g1], %o0 !! <-- Potentially faulting instruction
a61af66fc99e Initial load
duke
parents:
diff changeset
45 Fetch32Resume:
a61af66fc99e Initial load
duke
parents:
diff changeset
46 nop
a61af66fc99e Initial load
duke
parents:
diff changeset
47 retl
a61af66fc99e Initial load
duke
parents:
diff changeset
48 nop
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 .globl SafeFetchN
a61af66fc99e Initial load
duke
parents:
diff changeset
51 .align 32
a61af66fc99e Initial load
duke
parents:
diff changeset
52 .globl FetchNPFI, FetchNResume
a61af66fc99e Initial load
duke
parents:
diff changeset
53 SafeFetchN:
a61af66fc99e Initial load
duke
parents:
diff changeset
54 mov %o0, %g1
a61af66fc99e Initial load
duke
parents:
diff changeset
55 mov %o1, %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
56 FetchNPFI:
a61af66fc99e Initial load
duke
parents:
diff changeset
57 ldn [%g1], %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
58 FetchNResume:
a61af66fc99e Initial load
duke
parents:
diff changeset
59 nop
a61af66fc99e Initial load
duke
parents:
diff changeset
60 retl
a61af66fc99e Initial load
duke
parents:
diff changeset
61 nop
a61af66fc99e Initial load
duke
parents:
diff changeset
62
a61af66fc99e Initial load
duke
parents:
diff changeset
63 !! Possibilities:
a61af66fc99e Initial load
duke
parents:
diff changeset
64 !! -- membar
a61af66fc99e Initial load
duke
parents:
diff changeset
65 !! -- CAS (SP + BIAS, G0, G0)
a61af66fc99e Initial load
duke
parents:
diff changeset
66 !! -- wr %g0, %asi
a61af66fc99e Initial load
duke
parents:
diff changeset
67
a61af66fc99e Initial load
duke
parents:
diff changeset
68 .global SpinPause
a61af66fc99e Initial load
duke
parents:
diff changeset
69 .align 32
a61af66fc99e Initial load
duke
parents:
diff changeset
70 SpinPause:
a61af66fc99e Initial load
duke
parents:
diff changeset
71 retl
a61af66fc99e Initial load
duke
parents:
diff changeset
72 mov %g0, %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
73
a61af66fc99e Initial load
duke
parents:
diff changeset
74
a61af66fc99e Initial load
duke
parents:
diff changeset
75
a61af66fc99e Initial load
duke
parents:
diff changeset
76 .globl _Copy_conjoint_jlongs_atomic
a61af66fc99e Initial load
duke
parents:
diff changeset
77 .align 32
a61af66fc99e Initial load
duke
parents:
diff changeset
78 .global _Copy_conjoint_jlongs_atomic
a61af66fc99e Initial load
duke
parents:
diff changeset
79 _Copy_conjoint_jlongs_atomic:
a61af66fc99e Initial load
duke
parents:
diff changeset
80 cmp %o0, %o1
a61af66fc99e Initial load
duke
parents:
diff changeset
81 bleu 4f
a61af66fc99e Initial load
duke
parents:
diff changeset
82 sll %o2, 3, %o4
a61af66fc99e Initial load
duke
parents:
diff changeset
83 ba 2f
a61af66fc99e Initial load
duke
parents:
diff changeset
84 1:
a61af66fc99e Initial load
duke
parents:
diff changeset
85 subcc %o4, 8, %o4
a61af66fc99e Initial load
duke
parents:
diff changeset
86 std %o2, [%o1]
a61af66fc99e Initial load
duke
parents:
diff changeset
87 add %o0, 8, %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
88 add %o1, 8, %o1
a61af66fc99e Initial load
duke
parents:
diff changeset
89 2:
a61af66fc99e Initial load
duke
parents:
diff changeset
90 bge,a 1b
a61af66fc99e Initial load
duke
parents:
diff changeset
91 ldd [%o0], %o2
a61af66fc99e Initial load
duke
parents:
diff changeset
92 ba 5f
a61af66fc99e Initial load
duke
parents:
diff changeset
93 nop
a61af66fc99e Initial load
duke
parents:
diff changeset
94 3:
a61af66fc99e Initial load
duke
parents:
diff changeset
95 std %o2, [%o1+%o4]
a61af66fc99e Initial load
duke
parents:
diff changeset
96 4:
a61af66fc99e Initial load
duke
parents:
diff changeset
97 subcc %o4, 8, %o4
a61af66fc99e Initial load
duke
parents:
diff changeset
98 bge,a 3b
a61af66fc99e Initial load
duke
parents:
diff changeset
99 ldd [%o0+%o4], %o2
a61af66fc99e Initial load
duke
parents:
diff changeset
100 5:
a61af66fc99e Initial load
duke
parents:
diff changeset
101 retl
a61af66fc99e Initial load
duke
parents:
diff changeset
102 nop
a61af66fc99e Initial load
duke
parents:
diff changeset
103
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105
a61af66fc99e Initial load
duke
parents:
diff changeset
106 .globl _raw_thread_id
a61af66fc99e Initial load
duke
parents:
diff changeset
107 .align 32
a61af66fc99e Initial load
duke
parents:
diff changeset
108 _raw_thread_id:
a61af66fc99e Initial load
duke
parents:
diff changeset
109 retl
a61af66fc99e Initial load
duke
parents:
diff changeset
110 mov %g7, %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
111
a61af66fc99e Initial load
duke
parents:
diff changeset
112
a61af66fc99e Initial load
duke
parents:
diff changeset
113 .globl _flush_reg_windows
a61af66fc99e Initial load
duke
parents:
diff changeset
114 .align 32
a61af66fc99e Initial load
duke
parents:
diff changeset
115 _flush_reg_windows:
a61af66fc99e Initial load
duke
parents:
diff changeset
116 ta 0x03
a61af66fc99e Initial load
duke
parents:
diff changeset
117 retl
a61af66fc99e Initial load
duke
parents:
diff changeset
118 mov %fp, %o0
a61af66fc99e Initial load
duke
parents:
diff changeset
119
a61af66fc99e Initial load
duke
parents:
diff changeset
120