307 return ret;
308 } UNSAFE_END
309
310 UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
311 oop x = JNIHandles::resolve(x_h);
312 oop p = JNIHandles::resolve(obj);
313
314 if (UseCompressedOops) {
315 oop_store((narrowOop*)index_oop_from_field_offset_long(p, offset), x);
316 } else {
317 oop_store((oop*)index_oop_from_field_offset_long(p, offset), x);
318 }
319 } UNSAFE_END
320
321 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
322 oop p = JNIHandles::resolve(obj);
323 void* addr = index_oop_from_field_offset_long(p, offset);
324
325 volatile oop v;
326
327 if (UseCompressedOops) {
328 volatile narrowOop n = *(volatile narrowOop*) addr;
329 (void)const_cast<oop&>(v = oopDesc::decode_heap_oop(n));
330 } else {
331 (void)const_cast<oop&>(v = *(volatile oop*) addr);
332 }
333
334 OrderAccess::acquire();
335 return JNIHandles::make_local(env, v);
336 } UNSAFE_END
337
338 UNSAFE_ENTRY(void, Unsafe_PutObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
339 oop x = JNIHandles::resolve(x_h);
340 oop p = JNIHandles::resolve(obj);
341 void* addr = index_oop_from_field_offset_long(p, offset);
342 OrderAccess::release();
343
344 if (UseCompressedOops) {
345 oop_store((narrowOop*)addr, x);
346 } else {
|
307 return ret;
308 } UNSAFE_END
309
310 UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
311 oop x = JNIHandles::resolve(x_h);
312 oop p = JNIHandles::resolve(obj);
313
314 if (UseCompressedOops) {
315 oop_store((narrowOop*)index_oop_from_field_offset_long(p, offset), x);
316 } else {
317 oop_store((oop*)index_oop_from_field_offset_long(p, offset), x);
318 }
319 } UNSAFE_END
320
321 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
322 oop p = JNIHandles::resolve(obj);
323 void* addr = index_oop_from_field_offset_long(p, offset);
324
325 volatile oop v;
326
327 if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
328 OrderAccess::fence();
329 }
330
331 if (UseCompressedOops) {
332 volatile narrowOop n = *(volatile narrowOop*) addr;
333 (void)const_cast<oop&>(v = oopDesc::decode_heap_oop(n));
334 } else {
335 (void)const_cast<oop&>(v = *(volatile oop*) addr);
336 }
337
338 OrderAccess::acquire();
339 return JNIHandles::make_local(env, v);
340 } UNSAFE_END
341
342 UNSAFE_ENTRY(void, Unsafe_PutObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
343 oop x = JNIHandles::resolve(x_h);
344 oop p = JNIHandles::resolve(obj);
345 void* addr = index_oop_from_field_offset_long(p, offset);
346 OrderAccess::release();
347
348 if (UseCompressedOops) {
349 oop_store((narrowOop*)addr, x);
350 } else {
|