comparison src/share/vm/prims/unsafe.cpp @ 6224:56c4f88474b3

7087357: JSR 292: remove obsolete code after 7085860 Reviewed-by: kvn, never
author twisti
date Mon, 16 Jul 2012 11:14:41 -0700
parents 12d38ffcba2a
children 9c9fb30d2b3b
comparison
equal deleted inserted replaced
6223:ed21db7b3fda 6224:56c4f88474b3
176 v = oopDesc::decode_heap_oop(n); \ 176 v = oopDesc::decode_heap_oop(n); \
177 } else { \ 177 } else { \
178 v = *(oop*)index_oop_from_field_offset_long(p, offset); \ 178 v = *(oop*)index_oop_from_field_offset_long(p, offset); \
179 } 179 }
180 180
181 #define GET_OOP_FIELD_VOLATILE(obj, offset, v) \
182 oop p = JNIHandles::resolve(obj); \
183 volatile oop v; \
184 if (UseCompressedOops) { \
185 volatile narrowOop n = *(volatile narrowOop*)index_oop_from_field_offset_long(p, offset); \
186 v = oopDesc::decode_heap_oop(n); \
187 } else { \
188 v = *(volatile oop*)index_oop_from_field_offset_long(p, offset); \
189 } \
190 OrderAccess::acquire();
191
192 181
193 // Get/SetObject must be special-cased, since it works with handles. 182 // Get/SetObject must be special-cased, since it works with handles.
194 183
195 // The xxx140 variants for backward compatibility do not allow a full-width offset. 184 // The xxx140 variants for backward compatibility do not allow a full-width offset.
196 UNSAFE_ENTRY(jobject, Unsafe_GetObject140(JNIEnv *env, jobject unsafe, jobject obj, jint offset)) 185 UNSAFE_ENTRY(jobject, Unsafe_GetObject140(JNIEnv *env, jobject unsafe, jobject obj, jint offset))
294 } 283 }
295 UNSAFE_END 284 UNSAFE_END
296 285
297 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) 286 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset))
298 UnsafeWrapper("Unsafe_GetObjectVolatile"); 287 UnsafeWrapper("Unsafe_GetObjectVolatile");
299 GET_OOP_FIELD_VOLATILE(obj, offset, v) 288 oop p = JNIHandles::resolve(obj);
289 void* addr = index_oop_from_field_offset_long(p, offset);
290 volatile oop v;
291 if (UseCompressedOops) {
292 volatile narrowOop n = *(volatile narrowOop*) addr;
293 v = oopDesc::decode_heap_oop(n);
294 } else {
295 v = *(volatile oop*) addr;
296 }
297 OrderAccess::acquire();
300 return JNIHandles::make_local(env, v); 298 return JNIHandles::make_local(env, v);
301 UNSAFE_END 299 UNSAFE_END
302 300
303 UNSAFE_ENTRY(void, Unsafe_SetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) 301 UNSAFE_ENTRY(void, Unsafe_SetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h))
304 UnsafeWrapper("Unsafe_SetObjectVolatile"); 302 UnsafeWrapper("Unsafe_SetObjectVolatile");
305 {
306 // Catch VolatileCallSite.target stores (via
307 // CallSite.setTargetVolatile) and check call site dependencies.
308 oop p = JNIHandles::resolve(obj);
309 if ((offset == java_lang_invoke_CallSite::target_offset_in_bytes()) && p->is_a(SystemDictionary::CallSite_klass())) {
310 Handle call_site (THREAD, p);
311 Handle method_handle(THREAD, JNIHandles::resolve(x_h));
312 assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be");
313 assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be");
314 {
315 // Walk all nmethods depending on this call site.
316 MutexLocker mu(Compile_lock, thread);
317 Universe::flush_dependents_on(call_site(), method_handle());
318 }
319 }
320 }
321 oop x = JNIHandles::resolve(x_h); 303 oop x = JNIHandles::resolve(x_h);
322 oop p = JNIHandles::resolve(obj); 304 oop p = JNIHandles::resolve(obj);
323 void* addr = index_oop_from_field_offset_long(p, offset); 305 void* addr = index_oop_from_field_offset_long(p, offset);
324 OrderAccess::release(); 306 OrderAccess::release();
325 if (UseCompressedOops) { 307 if (UseCompressedOops) {