annotate src/os_cpu/bsd_x86/vm/orderAccess_bsd_x86.inline.hpp @ 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 f08d439fab8c
children 63e54c37ac64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
1 /*
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
2 * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
4 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
7 * published by the Free Software Foundation.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
8 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
13 * accompanied this code).
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
14 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
18 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
21 * questions.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
22 *
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
23 */
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
24
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
25 #ifndef OS_CPU_BSD_X86_VM_ORDERACCESS_BSD_X86_INLINE_HPP
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
26 #define OS_CPU_BSD_X86_VM_ORDERACCESS_BSD_X86_INLINE_HPP
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
27
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
28 #include "runtime/atomic.hpp"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
29 #include "runtime/orderAccess.hpp"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
30 #include "vm_version_x86.hpp"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
31
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
32 // Implementation of class OrderAccess.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
33
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
34 inline void OrderAccess::loadload() { acquire(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
35 inline void OrderAccess::storestore() { release(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
36 inline void OrderAccess::loadstore() { acquire(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
37 inline void OrderAccess::storeload() { fence(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
38
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
39 inline void OrderAccess::acquire() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
40 volatile intptr_t local_dummy;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
41 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
42 __asm__ volatile ("movq 0(%%rsp), %0" : "=r" (local_dummy) : : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
43 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
44 __asm__ volatile ("movl 0(%%esp),%0" : "=r" (local_dummy) : : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
45 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
46 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
47
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
48 inline void OrderAccess::release() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
49 // Avoid hitting the same cache-line from
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
50 // different threads.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
51 volatile jint local_dummy = 0;
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
52 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
53
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
54 inline void OrderAccess::fence() {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
55 if (os::is_MP()) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
56 // always use locked addl since mfence is sometimes expensive
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
57 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
58 __asm__ volatile ("lock; addl $0,0(%%rsp)" : : : "cc", "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
59 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
60 __asm__ volatile ("lock; addl $0,0(%%esp)" : : : "cc", "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
61 #endif
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
62 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
63 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
65 inline jbyte OrderAccess::load_acquire(volatile jbyte* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
66 inline jshort OrderAccess::load_acquire(volatile jshort* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
67 inline jint OrderAccess::load_acquire(volatile jint* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
68 inline jlong OrderAccess::load_acquire(volatile jlong* p) { return Atomic::load(p); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
69 inline jubyte OrderAccess::load_acquire(volatile jubyte* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
70 inline jushort OrderAccess::load_acquire(volatile jushort* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
71 inline juint OrderAccess::load_acquire(volatile juint* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
72 inline julong OrderAccess::load_acquire(volatile julong* p) { return Atomic::load((volatile jlong*)p); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
73 inline jfloat OrderAccess::load_acquire(volatile jfloat* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
74 inline jdouble OrderAccess::load_acquire(volatile jdouble* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
75
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
76 inline intptr_t OrderAccess::load_ptr_acquire(volatile intptr_t* p) { return *p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
77 inline void* OrderAccess::load_ptr_acquire(volatile void* p) { return *(void* volatile *)p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
78 inline void* OrderAccess::load_ptr_acquire(const volatile void* p) { return *(void* const volatile *)p; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
79
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
80 inline void OrderAccess::release_store(volatile jbyte* p, jbyte v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
81 inline void OrderAccess::release_store(volatile jshort* p, jshort v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
82 inline void OrderAccess::release_store(volatile jint* p, jint v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
83 inline void OrderAccess::release_store(volatile jlong* p, jlong v) { Atomic::store(v, p); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
84 inline void OrderAccess::release_store(volatile jubyte* p, jubyte v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
85 inline void OrderAccess::release_store(volatile jushort* p, jushort v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
86 inline void OrderAccess::release_store(volatile juint* p, juint v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
87 inline void OrderAccess::release_store(volatile julong* p, julong v) { Atomic::store((jlong)v, (volatile jlong*)p); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
88 inline void OrderAccess::release_store(volatile jfloat* p, jfloat v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
89 inline void OrderAccess::release_store(volatile jdouble* p, jdouble v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
90
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
91 inline void OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { *p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
92 inline void OrderAccess::release_store_ptr(volatile void* p, void* v) { *(void* volatile *)p = v; }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
93
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
94 inline void OrderAccess::store_fence(jbyte* p, jbyte v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
95 __asm__ volatile ( "xchgb (%2),%0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
96 : "=q" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
97 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
98 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
99 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
100 inline void OrderAccess::store_fence(jshort* p, jshort v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
101 __asm__ volatile ( "xchgw (%2),%0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
102 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
103 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
104 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
105 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
106 inline void OrderAccess::store_fence(jint* p, jint v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
107 __asm__ volatile ( "xchgl (%2),%0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
108 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
109 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
110 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
111 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
112
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
113 inline void OrderAccess::store_fence(jlong* p, jlong v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
114 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
115 __asm__ __volatile__ ("xchgq (%2), %0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
116 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
117 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
118 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
119 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
120 *p = v; fence();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
121 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
122 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
123
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
124 // AMD64 copied the bodies for the the signed version. 32bit did this. As long as the
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
125 // compiler does the inlining this is simpler.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
126 inline void OrderAccess::store_fence(jubyte* p, jubyte v) { store_fence((jbyte*)p, (jbyte)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
127 inline void OrderAccess::store_fence(jushort* p, jushort v) { store_fence((jshort*)p, (jshort)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
128 inline void OrderAccess::store_fence(juint* p, juint v) { store_fence((jint*)p, (jint)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
129 inline void OrderAccess::store_fence(julong* p, julong v) { store_fence((jlong*)p, (jlong)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
130 inline void OrderAccess::store_fence(jfloat* p, jfloat v) { *p = v; fence(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
131 inline void OrderAccess::store_fence(jdouble* p, jdouble v) { *p = v; fence(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
132
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
133 inline void OrderAccess::store_ptr_fence(intptr_t* p, intptr_t v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
134 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
135 __asm__ __volatile__ ("xchgq (%2), %0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
136 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
137 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
138 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
139 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
140 store_fence((jint*)p, (jint)v);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
141 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
142 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
143
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
144 inline void OrderAccess::store_ptr_fence(void** p, void* v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
145 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
146 __asm__ __volatile__ ("xchgq (%2), %0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
147 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
148 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
149 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
150 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
151 store_fence((jint*)p, (jint)v);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
152 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
153 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
154
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
155 // Must duplicate definitions instead of calling store_fence because we don't want to cast away volatile.
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
156 inline void OrderAccess::release_store_fence(volatile jbyte* p, jbyte v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
157 __asm__ volatile ( "xchgb (%2),%0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
158 : "=q" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
159 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
160 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
161 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
162 inline void OrderAccess::release_store_fence(volatile jshort* p, jshort v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
163 __asm__ volatile ( "xchgw (%2),%0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
164 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
165 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
166 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
167 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
168 inline void OrderAccess::release_store_fence(volatile jint* p, jint v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
169 __asm__ volatile ( "xchgl (%2),%0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
170 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
171 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
172 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
173 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
174
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
175 inline void OrderAccess::release_store_fence(volatile jlong* p, jlong v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
176 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
177 __asm__ __volatile__ ( "xchgq (%2), %0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
178 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
179 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
180 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
181 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
182 release_store(p, v); fence();
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
183 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
184 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
185
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
186 inline void OrderAccess::release_store_fence(volatile jubyte* p, jubyte v) { release_store_fence((volatile jbyte*)p, (jbyte)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
187 inline void OrderAccess::release_store_fence(volatile jushort* p, jushort v) { release_store_fence((volatile jshort*)p, (jshort)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
188 inline void OrderAccess::release_store_fence(volatile juint* p, juint v) { release_store_fence((volatile jint*)p, (jint)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
189 inline void OrderAccess::release_store_fence(volatile julong* p, julong v) { release_store_fence((volatile jlong*)p, (jlong)v); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
190
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
191 inline void OrderAccess::release_store_fence(volatile jfloat* p, jfloat v) { *p = v; fence(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
192 inline void OrderAccess::release_store_fence(volatile jdouble* p, jdouble v) { *p = v; fence(); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
193
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
194 inline void OrderAccess::release_store_ptr_fence(volatile intptr_t* p, intptr_t v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
195 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
196 __asm__ __volatile__ ( "xchgq (%2), %0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
197 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
198 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
199 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
200 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
201 release_store_fence((volatile jint*)p, (jint)v);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
202 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
203 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
204 inline void OrderAccess::release_store_ptr_fence(volatile void* p, void* v) {
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
205 #ifdef AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
206 __asm__ __volatile__ ( "xchgq (%2), %0"
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
207 : "=r" (v)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
208 : "0" (v), "r" (p)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
209 : "memory");
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
210 #else
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
211 release_store_fence((volatile jint*)p, (jint)v);
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
212 #endif // AMD64
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
213 }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
214
f08d439fab8c 7089790: integrate bsd-port changes
never
parents:
diff changeset
215 #endif // OS_CPU_BSD_X86_VM_ORDERACCESS_BSD_X86_INLINE_HPP