src/share/vm/prims/unsafe.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/prims/unsafe.cpp

src/share/vm/prims/unsafe.cpp

Print this page
rev 11111 : imported patch 8150921_unsafegetset2reg
rev 11112 : [mq]: 8150921_unsafegetset2reg.02

*** 129,170 **** jlong Unsafe_field_offset_from_byte_offset(jlong byte_offset) { return byte_offset; } ! ///// Data in the Java heap. ! #define truncate_jboolean(x) ((x) & 1) ! #define truncate_jbyte(x) (x) ! #define truncate_jshort(x) (x) ! #define truncate_jchar(x) (x) ! #define truncate_jint(x) (x) ! #define truncate_jlong(x) (x) ! #define truncate_jfloat(x) (x) ! #define truncate_jdouble(x) (x) ! ! #define GET_FIELD(obj, offset, type_name, v) \ ! oop p = JNIHandles::resolve(obj); \ ! type_name v = *(type_name*)index_oop_from_field_offset_long(p, offset) ! ! #define SET_FIELD(obj, offset, type_name, x) \ ! oop p = JNIHandles::resolve(obj); \ ! *(type_name*)index_oop_from_field_offset_long(p, offset) = truncate_##type_name(x) ! ! #define GET_FIELD_VOLATILE(obj, offset, type_name, v) \ ! oop p = JNIHandles::resolve(obj); \ ! if (support_IRIW_for_not_multiple_copy_atomic_cpu) { \ ! OrderAccess::fence(); \ ! } \ ! volatile type_name v = OrderAccess::load_acquire((volatile type_name*)index_oop_from_field_offset_long(p, offset)); ! ! #define SET_FIELD_VOLATILE(obj, offset, type_name, x) \ ! oop p = JNIHandles::resolve(obj); \ ! OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), truncate_##type_name(x)); ! // Get/SetObject must be special-cased, since it works with handles. // These functions allow a null base pointer with an arbitrary address. // But if the base pointer is non-null, the offset should make some sense. // That is, it should be in the range [0, MAX_OBJECT_SIZE]. UNSAFE_ENTRY(jobject, Unsafe_GetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { --- 129,272 ---- jlong Unsafe_field_offset_from_byte_offset(jlong byte_offset) { return byte_offset; } ! ///// Data read/writes on the Java heap and in native (off-heap) memory ! /** ! * Helper class for accessing memory. ! * ! * Normalizes values and wraps accesses in ! * JavaThread::doing_unsafe_access() if needed. ! */ ! class MemoryAccess : StackObj { ! JavaThread* _thread; ! jobject _obj; ! jlong _offset; ! ! // Resolves and returns the address of the memory access ! void* addr() { ! return index_oop_from_field_offset_long(JNIHandles::resolve(_obj), _offset); ! } ! ! template <typename T> ! T normalize(T x) { ! return x; ! } ! ! jboolean normalize(jboolean x) { ! return x & 1; ! } ! ! /** ! * Helper class to wrap memory accesses in JavaThread::doing_unsafe_access() ! */ ! class GuardUnsafeAccess { ! JavaThread* _thread; ! bool _active; ! ! public: ! GuardUnsafeAccess(JavaThread* thread, jobject _obj) : _thread(thread) { ! if (JNIHandles::resolve(_obj) == NULL) { ! // native/off-heap access which may raise SIGBUS if accessing ! // memory mapped file data in a region of the file which has ! // been truncated and is now invalid ! _thread->set_doing_unsafe_access(true); ! _active = true; ! } else { ! _active = false; ! } ! } ! ! ~GuardUnsafeAccess() { ! if (_active) { ! _thread->set_doing_unsafe_access(false); ! } ! } ! }; ! ! public: ! MemoryAccess(JavaThread* thread, jobject obj, jlong offset) ! : _thread(thread), _obj(obj), _offset(offset) { ! } ! ! template <typename T> ! T get() { ! GuardUnsafeAccess guard(_thread, _obj); ! ! T* p = (T*)addr(); ! ! T x = *p; ! ! return x; ! } ! ! template <typename T> ! void put(T x) { ! GuardUnsafeAccess guard(_thread, _obj); ! ! T* p = (T*)addr(); ! ! *p = normalize(x); ! } ! ! ! template <typename T> ! T get_volatile() { ! GuardUnsafeAccess guard(_thread, _obj); ! ! T* p = (T*)addr(); ! ! if (support_IRIW_for_not_multiple_copy_atomic_cpu) { ! OrderAccess::fence(); ! } ! ! T x = OrderAccess::load_acquire((volatile T*)p); ! ! return x; ! } ! ! template <typename T> ! void put_volatile(T x) { ! GuardUnsafeAccess guard(_thread, _obj); ! ! T* p = (T*)addr(); ! ! OrderAccess::release_store_fence((volatile T*)p, normalize(x)); ! } ! ! ! #ifndef SUPPORTS_NATIVE_CX8 ! // ! template <typename T> ! T get_mutex() { ! GuardUnsafeAccess guard(_thread, _obj); ! ! MutexLockerEx mu(UnsafeJlong_lock, Mutex::_no_safepoint_check_flag); ! ! T* p = (T*)addr(); ! ! T x = Atomic::load(p); ! ! return x; ! } + template <typename T> + void put_mutex(T x) { + GuardUnsafeAccess guard(_thread, _obj); ! MutexLockerEx mu(UnsafeJlong_lock, Mutex::_no_safepoint_check_flag); ! ! T* p = (T*)addr(); ! ! Atomic::store(normalize(x), p); ! } ! #endif ! }; ! ! // Get/PutObject must be special-cased, since it works with handles. // These functions allow a null base pointer with an arbitrary address. // But if the base pointer is non-null, the offset should make some sense. // That is, it should be in the range [0, MAX_OBJECT_SIZE]. UNSAFE_ENTRY(jobject, Unsafe_GetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
*** 206,216 **** #endif // INCLUDE_ALL_GCS return ret; } UNSAFE_END ! UNSAFE_ENTRY(void, Unsafe_SetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) { oop x = JNIHandles::resolve(x_h); oop p = JNIHandles::resolve(obj); if (UseCompressedOops) { oop_store((narrowOop*)index_oop_from_field_offset_long(p, offset), x); --- 308,318 ---- #endif // INCLUDE_ALL_GCS return ret; } UNSAFE_END ! UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) { oop x = JNIHandles::resolve(x_h); oop p = JNIHandles::resolve(obj); if (UseCompressedOops) { oop_store((narrowOop*)index_oop_from_field_offset_long(p, offset), x);
*** 234,244 **** OrderAccess::acquire(); return JNIHandles::make_local(env, v); } UNSAFE_END ! UNSAFE_ENTRY(void, Unsafe_SetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) { oop x = JNIHandles::resolve(x_h); oop p = JNIHandles::resolve(obj); void* addr = index_oop_from_field_offset_long(p, offset); OrderAccess::release(); --- 336,346 ---- OrderAccess::acquire(); return JNIHandles::make_local(env, v); } UNSAFE_END ! UNSAFE_ENTRY(void, Unsafe_PutObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) { oop x = JNIHandles::resolve(x_h); oop p = JNIHandles::resolve(obj); void* addr = index_oop_from_field_offset_long(p, offset); OrderAccess::release();
*** 299,327 **** // the address of the field _after_ we have acquired the lock, else the object may have // been moved by the GC UNSAFE_ENTRY(jlong, Unsafe_GetLongVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { if (VM_Version::supports_cx8()) { ! GET_FIELD_VOLATILE(obj, offset, jlong, v); ! return v; } else { ! Handle p (THREAD, JNIHandles::resolve(obj)); ! jlong* addr = (jlong*)(index_oop_from_field_offset_long(p(), offset)); ! MutexLockerEx mu(UnsafeJlong_lock, Mutex::_no_safepoint_check_flag); ! jlong value = Atomic::load(addr); ! return value; } } UNSAFE_END ! UNSAFE_ENTRY(void, Unsafe_SetLongVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong x)) { if (VM_Version::supports_cx8()) { ! SET_FIELD_VOLATILE(obj, offset, jlong, x); } else { ! Handle p (THREAD, JNIHandles::resolve(obj)); ! jlong* addr = (jlong*)(index_oop_from_field_offset_long(p(), offset)); ! MutexLockerEx mu(UnsafeJlong_lock, Mutex::_no_safepoint_check_flag); ! Atomic::store(x, addr); } } UNSAFE_END #endif // not SUPPORTS_NATIVE_CX8 --- 401,421 ---- // the address of the field _after_ we have acquired the lock, else the object may have // been moved by the GC UNSAFE_ENTRY(jlong, Unsafe_GetLongVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { if (VM_Version::supports_cx8()) { ! return MemoryAccess(thread, obj, offset).get_volatile<jlong>(); } else { ! return MemoryAccess(thread, obj, offset).get_mutex<jlong>(); } } UNSAFE_END ! UNSAFE_ENTRY(void, Unsafe_PutLongVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong x)) { if (VM_Version::supports_cx8()) { ! MemoryAccess(thread, obj, offset).put_volatile<jlong>(x); } else { ! MemoryAccess(thread, obj, offset).put_mutex<jlong>(x); } } UNSAFE_END #endif // not SUPPORTS_NATIVE_CX8
*** 338,353 **** } UNSAFE_END #define DEFINE_GETSETOOP(java_type, Type) \ \ UNSAFE_ENTRY(java_type, Unsafe_Get##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ ! GET_FIELD(obj, offset, java_type, v); \ ! return v; \ } UNSAFE_END \ \ ! UNSAFE_ENTRY(void, Unsafe_Set##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ ! SET_FIELD(obj, offset, java_type, x); \ } UNSAFE_END \ \ // END DEFINE_GETSETOOP. DEFINE_GETSETOOP(jboolean, Boolean) --- 432,446 ---- } UNSAFE_END #define DEFINE_GETSETOOP(java_type, Type) \ \ UNSAFE_ENTRY(java_type, Unsafe_Get##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ ! return MemoryAccess(thread, obj, offset).get<java_type>(); \ } UNSAFE_END \ \ ! UNSAFE_ENTRY(void, Unsafe_Put##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ ! MemoryAccess(thread, obj, offset).put<java_type>(x); \ } UNSAFE_END \ \ // END DEFINE_GETSETOOP. DEFINE_GETSETOOP(jboolean, Boolean)
*** 362,377 **** #undef DEFINE_GETSETOOP #define DEFINE_GETSETOOP_VOLATILE(java_type, Type) \ \ UNSAFE_ENTRY(java_type, Unsafe_Get##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ ! GET_FIELD_VOLATILE(obj, offset, java_type, v); \ ! return v; \ } UNSAFE_END \ \ ! UNSAFE_ENTRY(void, Unsafe_Set##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ ! SET_FIELD_VOLATILE(obj, offset, java_type, x); \ } UNSAFE_END \ \ // END DEFINE_GETSETOOP_VOLATILE. DEFINE_GETSETOOP_VOLATILE(jboolean, Boolean) --- 455,469 ---- #undef DEFINE_GETSETOOP #define DEFINE_GETSETOOP_VOLATILE(java_type, Type) \ \ UNSAFE_ENTRY(java_type, Unsafe_Get##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ ! return MemoryAccess(thread, obj, offset).get_volatile<java_type>(); \ } UNSAFE_END \ \ ! UNSAFE_ENTRY(void, Unsafe_Put##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ ! MemoryAccess(thread, obj, offset).put_volatile<java_type>(x); \ } UNSAFE_END \ \ // END DEFINE_GETSETOOP_VOLATILE. DEFINE_GETSETOOP_VOLATILE(jboolean, Boolean)
*** 398,499 **** UNSAFE_LEAF(void, Unsafe_FullFence(JNIEnv *env, jobject unsafe)) { OrderAccess::fence(); } UNSAFE_END - ////// Data in the C heap. - - // Note: These do not throw NullPointerException for bad pointers. - // They just crash. Only a oop base pointer can generate a NullPointerException. - // - #define DEFINE_GETSETNATIVE(java_type, Type, native_type) \ - \ - UNSAFE_ENTRY(java_type, Unsafe_GetNative##Type(JNIEnv *env, jobject unsafe, jlong addr)) { \ - void* p = addr_from_java(addr); \ - JavaThread* t = JavaThread::current(); \ - t->set_doing_unsafe_access(true); \ - java_type x = *(volatile native_type*)p; \ - t->set_doing_unsafe_access(false); \ - return x; \ - } UNSAFE_END \ - \ - UNSAFE_ENTRY(void, Unsafe_SetNative##Type(JNIEnv *env, jobject unsafe, jlong addr, java_type x)) { \ - JavaThread* t = JavaThread::current(); \ - t->set_doing_unsafe_access(true); \ - void* p = addr_from_java(addr); \ - *(volatile native_type*)p = x; \ - t->set_doing_unsafe_access(false); \ - } UNSAFE_END \ - \ - // END DEFINE_GETSETNATIVE. - - DEFINE_GETSETNATIVE(jbyte, Byte, signed char) - DEFINE_GETSETNATIVE(jshort, Short, signed short); - DEFINE_GETSETNATIVE(jchar, Char, unsigned short); - DEFINE_GETSETNATIVE(jint, Int, jint); - // no long -- handled specially - DEFINE_GETSETNATIVE(jfloat, Float, float); - DEFINE_GETSETNATIVE(jdouble, Double, double); - - #undef DEFINE_GETSETNATIVE - - UNSAFE_ENTRY(jlong, Unsafe_GetNativeLong(JNIEnv *env, jobject unsafe, jlong addr)) { - JavaThread* t = JavaThread::current(); - // We do it this way to avoid problems with access to heap using 64 - // bit loads, as jlong in heap could be not 64-bit aligned, and on - // some CPUs (SPARC) it leads to SIGBUS. - t->set_doing_unsafe_access(true); - void* p = addr_from_java(addr); - jlong x; - - if (is_ptr_aligned(p, sizeof(jlong)) == 0) { - // jlong is aligned, do a volatile access - x = *(volatile jlong*)p; - } else { - jlong_accessor acc; - acc.words[0] = ((volatile jint*)p)[0]; - acc.words[1] = ((volatile jint*)p)[1]; - x = acc.long_value; - } - - t->set_doing_unsafe_access(false); - - return x; - } UNSAFE_END - - UNSAFE_ENTRY(void, Unsafe_SetNativeLong(JNIEnv *env, jobject unsafe, jlong addr, jlong x)) { - JavaThread* t = JavaThread::current(); - // see comment for Unsafe_GetNativeLong - t->set_doing_unsafe_access(true); - void* p = addr_from_java(addr); - - if (is_ptr_aligned(p, sizeof(jlong))) { - // jlong is aligned, do a volatile access - *(volatile jlong*)p = x; - } else { - jlong_accessor acc; - acc.long_value = x; - ((volatile jint*)p)[0] = acc.words[0]; - ((volatile jint*)p)[1] = acc.words[1]; - } - - t->set_doing_unsafe_access(false); - } UNSAFE_END - - - UNSAFE_LEAF(jlong, Unsafe_GetNativeAddress(JNIEnv *env, jobject unsafe, jlong addr)) { - void* p = addr_from_java(addr); - - return addr_to_java(*(void**)p); - } UNSAFE_END - - UNSAFE_LEAF(void, Unsafe_SetNativeAddress(JNIEnv *env, jobject unsafe, jlong addr, jlong x)) { - void* p = addr_from_java(addr); - *(void**)p = addr_from_java(x); - } UNSAFE_END - - ////// Allocation requests UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) { ThreadToNativeFromVM ttnfv(thread); return env->AllocObject(cls); --- 490,499 ----
*** 978,989 **** return (jint)(Atomic::cmpxchg(x, addr, e)); } UNSAFE_END UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { ! Handle p (THREAD, JNIHandles::resolve(obj)); ! jlong* addr = (jlong*)(index_oop_from_field_offset_long(p(), offset)); #ifdef SUPPORTS_NATIVE_CX8 return (jlong)(Atomic::cmpxchg(x, addr, e)); #else if (VM_Version::supports_cx8()) { --- 978,989 ---- return (jint)(Atomic::cmpxchg(x, addr, e)); } UNSAFE_END UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { ! Handle p(THREAD, JNIHandles::resolve(obj)); ! jlong* addr = (jlong*)index_oop_from_field_offset_long(p(), offset); #ifdef SUPPORTS_NATIVE_CX8 return (jlong)(Atomic::cmpxchg(x, addr, e)); #else if (VM_Version::supports_cx8()) {
*** 1015,1025 **** return true; } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); ! jint* addr = (jint *) index_oop_from_field_offset_long(p, offset); return (jint)(Atomic::cmpxchg(x, addr, e)) == e; } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { --- 1015,1025 ---- return true; } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); ! jint* addr = (jint *)index_oop_from_field_offset_long(p, offset); return (jint)(Atomic::cmpxchg(x, addr, e)) == e; } UNSAFE_END UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSwapLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
*** 1141,1164 **** #define CC (char*) /*cast a literal from (const char*)*/ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) #define DECLARE_GETPUTOOP(Type, Desc) \ {CC "get" #Type, CC "(" OBJ "J)" #Desc, FN_PTR(Unsafe_Get##Type)}, \ ! {CC "put" #Type, CC "(" OBJ "J" #Desc ")V", FN_PTR(Unsafe_Set##Type)}, \ {CC "get" #Type "Volatile", CC "(" OBJ "J)" #Desc, FN_PTR(Unsafe_Get##Type##Volatile)}, \ ! {CC "put" #Type "Volatile", CC "(" OBJ "J" #Desc ")V", FN_PTR(Unsafe_Set##Type##Volatile)} - #define DECLARE_GETPUTNATIVE(Byte, B) \ - {CC "get" #Byte, CC "(" ADR ")" #B, FN_PTR(Unsafe_GetNative##Byte)}, \ - {CC "put" #Byte, CC "(" ADR#B ")V", FN_PTR(Unsafe_SetNative##Byte)} - static JNINativeMethod jdk_internal_misc_Unsafe_methods[] = { {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, ! {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, ! {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, {CC "getUncompressedObject", CC "(" ADR ")" OBJ, FN_PTR(Unsafe_GetUncompressedObject)}, {CC "getJavaMirror", CC "(" ADR ")" CLS, FN_PTR(Unsafe_GetJavaMirror)}, {CC "getKlassPointer", CC "(" OBJ ")" ADR, FN_PTR(Unsafe_GetKlassPointer)}, --- 1141,1160 ---- #define CC (char*) /*cast a literal from (const char*)*/ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) #define DECLARE_GETPUTOOP(Type, Desc) \ {CC "get" #Type, CC "(" OBJ "J)" #Desc, FN_PTR(Unsafe_Get##Type)}, \ ! {CC "put" #Type, CC "(" OBJ "J" #Desc ")V", FN_PTR(Unsafe_Put##Type)}, \ {CC "get" #Type "Volatile", CC "(" OBJ "J)" #Desc, FN_PTR(Unsafe_Get##Type##Volatile)}, \ ! {CC "put" #Type "Volatile", CC "(" OBJ "J" #Desc ")V", FN_PTR(Unsafe_Put##Type##Volatile)} static JNINativeMethod jdk_internal_misc_Unsafe_methods[] = { {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, ! {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutObject)}, {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, ! {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_PutObjectVolatile)}, {CC "getUncompressedObject", CC "(" ADR ")" OBJ, FN_PTR(Unsafe_GetUncompressedObject)}, {CC "getJavaMirror", CC "(" ADR ")" CLS, FN_PTR(Unsafe_GetJavaMirror)}, {CC "getKlassPointer", CC "(" OBJ ")" ADR, FN_PTR(Unsafe_GetKlassPointer)},
*** 1169,1189 **** DECLARE_GETPUTOOP(Int, I), DECLARE_GETPUTOOP(Long, J), DECLARE_GETPUTOOP(Float, F), DECLARE_GETPUTOOP(Double, D), - DECLARE_GETPUTNATIVE(Byte, B), - DECLARE_GETPUTNATIVE(Short, S), - DECLARE_GETPUTNATIVE(Char, C), - DECLARE_GETPUTNATIVE(Int, I), - DECLARE_GETPUTNATIVE(Long, J), - DECLARE_GETPUTNATIVE(Float, F), - DECLARE_GETPUTNATIVE(Double, D), - - {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, - {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, - {CC "allocateMemory0", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory0)}, {CC "reallocateMemory0", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory0)}, {CC "freeMemory0", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory0)}, {CC "objectFieldOffset0", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset0)}, --- 1165,1174 ----
*** 1237,1247 **** #undef THR #undef DC_Args #undef DAC_Args #undef DECLARE_GETPUTOOP - #undef DECLARE_GETPUTNATIVE // This function is exported, used by NativeLookup. // The Unsafe_xxx functions above are called only from the interpreter. // The optimizer looks at names and signatures to recognize --- 1222,1231 ----
src/share/vm/prims/unsafe.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File