hotspot/src/share/vm/prims/unsafe.cpp
changeset 36827 53d2d43551d2
parent 36551 77f29c57ed2e
child 37267 ad8c0e8de29f
equal deleted inserted replaced
36825:6ebe5519b753 36827:53d2d43551d2
   376 DEFINE_GETSETOOP_VOLATILE(jlong, Long);
   376 DEFINE_GETSETOOP_VOLATILE(jlong, Long);
   377 #endif
   377 #endif
   378 
   378 
   379 #undef DEFINE_GETSETOOP_VOLATILE
   379 #undef DEFINE_GETSETOOP_VOLATILE
   380 
   380 
   381 // The non-intrinsified versions of setOrdered just use setVolatile
       
   382 
       
   383 UNSAFE_ENTRY(void, Unsafe_SetOrderedInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint x)) {
       
   384   SET_FIELD_VOLATILE(obj, offset, jint, x);
       
   385 } UNSAFE_END
       
   386 
       
   387 UNSAFE_ENTRY(void, Unsafe_SetOrderedObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
       
   388   oop x = JNIHandles::resolve(x_h);
       
   389   oop p = JNIHandles::resolve(obj);
       
   390   void* addr = index_oop_from_field_offset_long(p, offset);
       
   391   OrderAccess::release();
       
   392 
       
   393   if (UseCompressedOops) {
       
   394     oop_store((narrowOop*)addr, x);
       
   395   } else {
       
   396     oop_store((oop*)addr, x);
       
   397   }
       
   398 
       
   399   OrderAccess::fence();
       
   400 } UNSAFE_END
       
   401 
       
   402 UNSAFE_ENTRY(void, Unsafe_SetOrderedLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong x)) {
       
   403 #ifdef SUPPORTS_NATIVE_CX8
       
   404   SET_FIELD_VOLATILE(obj, offset, jlong, x);
       
   405 #else
       
   406 
       
   407   // Keep old code for platforms which may not have atomic long (8 bytes) instructions
       
   408   if (VM_Version::supports_cx8()) {
       
   409     SET_FIELD_VOLATILE(obj, offset, jlong, x);
       
   410   } else {
       
   411     Handle p(THREAD, JNIHandles::resolve(obj));
       
   412     jlong* addr = (jlong*)(index_oop_from_field_offset_long(p(), offset));
       
   413     MutexLockerEx mu(UnsafeJlong_lock, Mutex::_no_safepoint_check_flag);
       
   414     Atomic::store(x, addr);
       
   415   }
       
   416 #endif
       
   417 } UNSAFE_END
       
   418 
       
   419 UNSAFE_LEAF(void, Unsafe_LoadFence(JNIEnv *env, jobject unsafe)) {
   381 UNSAFE_LEAF(void, Unsafe_LoadFence(JNIEnv *env, jobject unsafe)) {
   420   OrderAccess::acquire();
   382   OrderAccess::acquire();
   421 } UNSAFE_END
   383 } UNSAFE_END
   422 
   384 
   423 UNSAFE_LEAF(void, Unsafe_StoreFence(JNIEnv *env, jobject unsafe)) {
   385 UNSAFE_LEAF(void, Unsafe_StoreFence(JNIEnv *env, jobject unsafe)) {
  1228     {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z",  FN_PTR(Unsafe_CompareAndSwapLong)},
  1190     {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z",  FN_PTR(Unsafe_CompareAndSwapLong)},
  1229     {CC "compareAndExchangeObjectVolatile", CC "(" OBJ "J" OBJ "" OBJ ")" OBJ, FN_PTR(Unsafe_CompareAndExchangeObject)},
  1191     {CC "compareAndExchangeObjectVolatile", CC "(" OBJ "J" OBJ "" OBJ ")" OBJ, FN_PTR(Unsafe_CompareAndExchangeObject)},
  1230     {CC "compareAndExchangeIntVolatile",  CC "(" OBJ "J""I""I"")I", FN_PTR(Unsafe_CompareAndExchangeInt)},
  1192     {CC "compareAndExchangeIntVolatile",  CC "(" OBJ "J""I""I"")I", FN_PTR(Unsafe_CompareAndExchangeInt)},
  1231     {CC "compareAndExchangeLongVolatile", CC "(" OBJ "J""J""J"")J", FN_PTR(Unsafe_CompareAndExchangeLong)},
  1193     {CC "compareAndExchangeLongVolatile", CC "(" OBJ "J""J""J"")J", FN_PTR(Unsafe_CompareAndExchangeLong)},
  1232 
  1194 
  1233     {CC "putOrderedObject",   CC "(" OBJ "J" OBJ ")V",   FN_PTR(Unsafe_SetOrderedObject)},
       
  1234     {CC "putOrderedInt",      CC "(" OBJ "JI)V",         FN_PTR(Unsafe_SetOrderedInt)},
       
  1235     {CC "putOrderedLong",     CC "(" OBJ "JJ)V",         FN_PTR(Unsafe_SetOrderedLong)},
       
  1236     {CC "park",               CC "(ZJ)V",                FN_PTR(Unsafe_Park)},
  1195     {CC "park",               CC "(ZJ)V",                FN_PTR(Unsafe_Park)},
  1237     {CC "unpark",             CC "(" OBJ ")V",           FN_PTR(Unsafe_Unpark)},
  1196     {CC "unpark",             CC "(" OBJ ")V",           FN_PTR(Unsafe_Unpark)},
  1238 
  1197 
  1239     {CC "getLoadAverage0",    CC "([DI)I",               FN_PTR(Unsafe_GetLoadAverage0)},
  1198     {CC "getLoadAverage0",    CC "([DI)I",               FN_PTR(Unsafe_GetLoadAverage0)},
  1240 
  1199