annotate src/os_cpu/solaris_x86/vm/solaris_x86_32.il @ 795:215f81b4d9b3

6841831: G1: assert(contains_reference(from),"We just added it!") fires Summary: During parallel rset updating we have to make sure that the worker ids of the refinement threads do not intersect with the worker ids that can be claimed by the mutator threads. Reviewed-by: tonyp
author iveresov
date Mon, 18 May 2009 11:52:46 -0700
parents 0fbdb4381b99
children 665be97e8704
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 //
579
0fbdb4381b99 6814575: Update copyright year
xdono
parents: 472
diff changeset
2 // Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
0
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
a61af66fc99e Initial load
duke
parents:
diff changeset
25
a61af66fc99e Initial load
duke
parents:
diff changeset
26 // Support for u8 os::setup_fpu()
a61af66fc99e Initial load
duke
parents:
diff changeset
27 .inline _solaris_raw_setup_fpu,1
a61af66fc99e Initial load
duke
parents:
diff changeset
28 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
29 fldcw (%eax)
a61af66fc99e Initial load
duke
parents:
diff changeset
30 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
31
a61af66fc99e Initial load
duke
parents:
diff changeset
32 // The argument size of each inline directive is ignored by the compiler
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // and is set to 0 for compatibility reason.
a61af66fc99e Initial load
duke
parents:
diff changeset
34
a61af66fc99e Initial load
duke
parents:
diff changeset
35 // Get the raw thread ID from %gs:0
a61af66fc99e Initial load
duke
parents:
diff changeset
36 .inline _raw_thread_id,0
a61af66fc99e Initial load
duke
parents:
diff changeset
37 movl %gs:0, %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
38 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
39
472
7b920868b475 6773838: There is no calling stack for Compiler thread in hs_err file on x86
coleenp
parents: 0
diff changeset
40 // Get current fp
7b920868b475 6773838: There is no calling stack for Compiler thread in hs_err file on x86
coleenp
parents: 0
diff changeset
41 .inline _get_current_fp,0
7b920868b475 6773838: There is no calling stack for Compiler thread in hs_err file on x86
coleenp
parents: 0
diff changeset
42 .volatile
0
a61af66fc99e Initial load
duke
parents:
diff changeset
43 movl %ebp, %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
44 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
45
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // Support for jint Atomic::add(jint inc, volatile jint* dest)
a61af66fc99e Initial load
duke
parents:
diff changeset
47 // An additional bool (os::is_MP()) is passed as the last argument.
a61af66fc99e Initial load
duke
parents:
diff changeset
48 .inline _Atomic_add,3
a61af66fc99e Initial load
duke
parents:
diff changeset
49 movl 0(%esp), %eax // inc
a61af66fc99e Initial load
duke
parents:
diff changeset
50 movl 4(%esp), %edx // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
51 movl %eax, %ecx
a61af66fc99e Initial load
duke
parents:
diff changeset
52 cmpl $0, 8(%esp) // MP test
a61af66fc99e Initial load
duke
parents:
diff changeset
53 je 1f
a61af66fc99e Initial load
duke
parents:
diff changeset
54 lock
a61af66fc99e Initial load
duke
parents:
diff changeset
55 1: xaddl %eax, (%edx)
a61af66fc99e Initial load
duke
parents:
diff changeset
56 addl %ecx, %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
57 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
58
a61af66fc99e Initial load
duke
parents:
diff changeset
59 // Support for jint Atomic::xchg(jint exchange_value, volatile jint* dest).
a61af66fc99e Initial load
duke
parents:
diff changeset
60 .inline _Atomic_xchg,2
a61af66fc99e Initial load
duke
parents:
diff changeset
61 movl 0(%esp), %eax // exchange_value
a61af66fc99e Initial load
duke
parents:
diff changeset
62 movl 4(%esp), %ecx // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
63 xchgl (%ecx), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
64 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
65
a61af66fc99e Initial load
duke
parents:
diff changeset
66 // Support for jint Atomic::cmpxchg(jint exchange_value,
a61af66fc99e Initial load
duke
parents:
diff changeset
67 // volatile jint *dest,
a61af66fc99e Initial load
duke
parents:
diff changeset
68 // jint compare_value)
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // An additional bool (os::is_MP()) is passed as the last argument.
a61af66fc99e Initial load
duke
parents:
diff changeset
70 .inline _Atomic_cmpxchg,4
a61af66fc99e Initial load
duke
parents:
diff changeset
71 movl 8(%esp), %eax // compare_value
a61af66fc99e Initial load
duke
parents:
diff changeset
72 movl 0(%esp), %ecx // exchange_value
a61af66fc99e Initial load
duke
parents:
diff changeset
73 movl 4(%esp), %edx // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
74 cmp $0, 12(%esp) // MP test
a61af66fc99e Initial load
duke
parents:
diff changeset
75 je 1f
a61af66fc99e Initial load
duke
parents:
diff changeset
76 lock
a61af66fc99e Initial load
duke
parents:
diff changeset
77 1: cmpxchgl %ecx, (%edx)
a61af66fc99e Initial load
duke
parents:
diff changeset
78 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
79
a61af66fc99e Initial load
duke
parents:
diff changeset
80 // Support for jlong Atomic::cmpxchg(jlong exchange_value,
a61af66fc99e Initial load
duke
parents:
diff changeset
81 // volatile jlong* dest,
a61af66fc99e Initial load
duke
parents:
diff changeset
82 // jlong compare_value)
a61af66fc99e Initial load
duke
parents:
diff changeset
83 // An additional bool (os::is_MP()) is passed as the last argument.
a61af66fc99e Initial load
duke
parents:
diff changeset
84 .inline _Atomic_cmpxchg_long,6
a61af66fc99e Initial load
duke
parents:
diff changeset
85 pushl %ebx
a61af66fc99e Initial load
duke
parents:
diff changeset
86 pushl %edi
a61af66fc99e Initial load
duke
parents:
diff changeset
87 movl 20(%esp), %eax // compare_value (low)
a61af66fc99e Initial load
duke
parents:
diff changeset
88 movl 24(%esp), %edx // compare_value (high)
a61af66fc99e Initial load
duke
parents:
diff changeset
89 movl 16(%esp), %edi // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
90 movl 8(%esp), %ebx // exchange_value (low)
a61af66fc99e Initial load
duke
parents:
diff changeset
91 movl 12(%esp), %ecx // exchange_high (high)
a61af66fc99e Initial load
duke
parents:
diff changeset
92 cmp $0, 28(%esp) // MP test
a61af66fc99e Initial load
duke
parents:
diff changeset
93 je 1f
a61af66fc99e Initial load
duke
parents:
diff changeset
94 lock
a61af66fc99e Initial load
duke
parents:
diff changeset
95 1: cmpxchg8b (%edi)
a61af66fc99e Initial load
duke
parents:
diff changeset
96 popl %edi
a61af66fc99e Initial load
duke
parents:
diff changeset
97 popl %ebx
a61af66fc99e Initial load
duke
parents:
diff changeset
98 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
99
a61af66fc99e Initial load
duke
parents:
diff changeset
100 // Support for OrderAccess::acquire()
a61af66fc99e Initial load
duke
parents:
diff changeset
101 .inline _OrderAccess_acquire,0
a61af66fc99e Initial load
duke
parents:
diff changeset
102 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
103 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105 // Support for OrderAccess::fence()
a61af66fc99e Initial load
duke
parents:
diff changeset
106 .inline _OrderAccess_fence,0
a61af66fc99e Initial load
duke
parents:
diff changeset
107 lock
a61af66fc99e Initial load
duke
parents:
diff changeset
108 addl $0, (%esp)
a61af66fc99e Initial load
duke
parents:
diff changeset
109 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
110
a61af66fc99e Initial load
duke
parents:
diff changeset
111 // Support for u2 Bytes::swap_u2(u2 x)
a61af66fc99e Initial load
duke
parents:
diff changeset
112 .inline _raw_swap_u2,1
a61af66fc99e Initial load
duke
parents:
diff changeset
113 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
114 xchgb %al, %ah
a61af66fc99e Initial load
duke
parents:
diff changeset
115 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
116
a61af66fc99e Initial load
duke
parents:
diff changeset
117 // Support for u4 Bytes::swap_u4(u4 x)
a61af66fc99e Initial load
duke
parents:
diff changeset
118 .inline _raw_swap_u4,1
a61af66fc99e Initial load
duke
parents:
diff changeset
119 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
120 bswap %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
121 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
122
a61af66fc99e Initial load
duke
parents:
diff changeset
123 // Support for u8 Bytes::swap_u8_base(u4 x, u4 y)
a61af66fc99e Initial load
duke
parents:
diff changeset
124 .inline _raw_swap_u8,2
a61af66fc99e Initial load
duke
parents:
diff changeset
125 movl 4(%esp), %eax // y
a61af66fc99e Initial load
duke
parents:
diff changeset
126 movl 0(%esp), %edx // x
a61af66fc99e Initial load
duke
parents:
diff changeset
127 bswap %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
128 bswap %edx
a61af66fc99e Initial load
duke
parents:
diff changeset
129 .end