annotate src/os_cpu/solaris_x86/vm/solaris_x86_32.il @ 4558:3706975946e4

Make graph dumping a bit more robust when there is no method, enable debug in the startCompiler method, add context and scope for snippets installation Made IGV display graphs even if some edges are problematic When schedule failed don't use it
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 10 Feb 2012 02:22:23 +0100
parents bb8e3b66bde6
children 7ab5f6318694
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 //
2114
4fc084dac61e 7009756: volatile variables could be broken throw reflection API
kvn
parents: 1552
diff changeset
2 // Copyright (c) 2003, 2011, Oracle and/or its affiliates. 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 //
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1547
diff changeset
19 // Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1547
diff changeset
20 // or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1547
diff changeset
21 // questions.
0
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
1547
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
53 jne 1f
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
54 xaddl %eax, (%edx)
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
55 jmp 2f
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
56 1: lock
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
57 xaddl %eax, (%edx)
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
58 2: addl %ecx, %eax
0
a61af66fc99e Initial load
duke
parents:
diff changeset
59 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
60
a61af66fc99e Initial load
duke
parents:
diff changeset
61 // Support for jint Atomic::xchg(jint exchange_value, volatile jint* dest).
a61af66fc99e Initial load
duke
parents:
diff changeset
62 .inline _Atomic_xchg,2
a61af66fc99e Initial load
duke
parents:
diff changeset
63 movl 0(%esp), %eax // exchange_value
a61af66fc99e Initial load
duke
parents:
diff changeset
64 movl 4(%esp), %ecx // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
65 xchgl (%ecx), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
66 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
67
a61af66fc99e Initial load
duke
parents:
diff changeset
68 // Support for jint Atomic::cmpxchg(jint exchange_value,
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // volatile jint *dest,
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // jint compare_value)
a61af66fc99e Initial load
duke
parents:
diff changeset
71 // An additional bool (os::is_MP()) is passed as the last argument.
a61af66fc99e Initial load
duke
parents:
diff changeset
72 .inline _Atomic_cmpxchg,4
a61af66fc99e Initial load
duke
parents:
diff changeset
73 movl 8(%esp), %eax // compare_value
a61af66fc99e Initial load
duke
parents:
diff changeset
74 movl 0(%esp), %ecx // exchange_value
a61af66fc99e Initial load
duke
parents:
diff changeset
75 movl 4(%esp), %edx // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
76 cmp $0, 12(%esp) // MP test
1547
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
77 jne 1f
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
78 cmpxchgl %ecx, (%edx)
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
79 jmp 2f
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
80 1: lock
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
81 cmpxchgl %ecx, (%edx)
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
82 2:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
83 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 // Support for jlong Atomic::cmpxchg(jlong exchange_value,
a61af66fc99e Initial load
duke
parents:
diff changeset
86 // volatile jlong* dest,
a61af66fc99e Initial load
duke
parents:
diff changeset
87 // jlong compare_value)
a61af66fc99e Initial load
duke
parents:
diff changeset
88 // An additional bool (os::is_MP()) is passed as the last argument.
a61af66fc99e Initial load
duke
parents:
diff changeset
89 .inline _Atomic_cmpxchg_long,6
a61af66fc99e Initial load
duke
parents:
diff changeset
90 pushl %ebx
a61af66fc99e Initial load
duke
parents:
diff changeset
91 pushl %edi
a61af66fc99e Initial load
duke
parents:
diff changeset
92 movl 20(%esp), %eax // compare_value (low)
a61af66fc99e Initial load
duke
parents:
diff changeset
93 movl 24(%esp), %edx // compare_value (high)
a61af66fc99e Initial load
duke
parents:
diff changeset
94 movl 16(%esp), %edi // dest
a61af66fc99e Initial load
duke
parents:
diff changeset
95 movl 8(%esp), %ebx // exchange_value (low)
a61af66fc99e Initial load
duke
parents:
diff changeset
96 movl 12(%esp), %ecx // exchange_high (high)
a61af66fc99e Initial load
duke
parents:
diff changeset
97 cmp $0, 28(%esp) // MP test
1547
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
98 jne 1f
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
99 cmpxchg8b (%edi)
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
100 jmp 2f
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
101 1: lock
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
102 cmpxchg8b (%edi)
fb1a39993f69 6951319: enable solaris builds using Sun Studio 12 update 1
jcoomes
parents: 894
diff changeset
103 2: popl %edi
0
a61af66fc99e Initial load
duke
parents:
diff changeset
104 popl %ebx
a61af66fc99e Initial load
duke
parents:
diff changeset
105 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
106
2114
4fc084dac61e 7009756: volatile variables could be broken throw reflection API
kvn
parents: 1552
diff changeset
107 // Support for jlong Atomic::load and Atomic::store.
4fc084dac61e 7009756: volatile variables could be broken throw reflection API
kvn
parents: 1552
diff changeset
108 // void _Atomic_move_long(volatile jlong* src, volatile jlong* dst)
4fc084dac61e 7009756: volatile variables could be broken throw reflection API
kvn
parents: 1552
diff changeset
109 .inline _Atomic_move_long,2
894
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
110 movl 0(%esp), %eax // src
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
111 fildll (%eax)
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
112 movl 4(%esp), %eax // dest
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
113 fistpll (%eax)
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
114 .end
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
115
665be97e8704 6863420: os::javaTimeNanos() go backward on Solaris x86
kvn
parents: 579
diff changeset
116
0
a61af66fc99e Initial load
duke
parents:
diff changeset
117 // Support for OrderAccess::acquire()
a61af66fc99e Initial load
duke
parents:
diff changeset
118 .inline _OrderAccess_acquire,0
a61af66fc99e Initial load
duke
parents:
diff changeset
119 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
120 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
121
a61af66fc99e Initial load
duke
parents:
diff changeset
122 // Support for OrderAccess::fence()
a61af66fc99e Initial load
duke
parents:
diff changeset
123 .inline _OrderAccess_fence,0
a61af66fc99e Initial load
duke
parents:
diff changeset
124 lock
a61af66fc99e Initial load
duke
parents:
diff changeset
125 addl $0, (%esp)
a61af66fc99e Initial load
duke
parents:
diff changeset
126 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 // Support for u2 Bytes::swap_u2(u2 x)
a61af66fc99e Initial load
duke
parents:
diff changeset
129 .inline _raw_swap_u2,1
a61af66fc99e Initial load
duke
parents:
diff changeset
130 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
131 xchgb %al, %ah
a61af66fc99e Initial load
duke
parents:
diff changeset
132 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
133
a61af66fc99e Initial load
duke
parents:
diff changeset
134 // Support for u4 Bytes::swap_u4(u4 x)
a61af66fc99e Initial load
duke
parents:
diff changeset
135 .inline _raw_swap_u4,1
a61af66fc99e Initial load
duke
parents:
diff changeset
136 movl 0(%esp), %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
137 bswap %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
138 .end
a61af66fc99e Initial load
duke
parents:
diff changeset
139
a61af66fc99e Initial load
duke
parents:
diff changeset
140 // Support for u8 Bytes::swap_u8_base(u4 x, u4 y)
a61af66fc99e Initial load
duke
parents:
diff changeset
141 .inline _raw_swap_u8,2
a61af66fc99e Initial load
duke
parents:
diff changeset
142 movl 4(%esp), %eax // y
a61af66fc99e Initial load
duke
parents:
diff changeset
143 movl 0(%esp), %edx // x
a61af66fc99e Initial load
duke
parents:
diff changeset
144 bswap %eax
a61af66fc99e Initial load
duke
parents:
diff changeset
145 bswap %edx
a61af66fc99e Initial load
duke
parents:
diff changeset
146 .end