467 }
468
469 t->set_doing_unsafe_access(false);
470 } UNSAFE_END
471
472
473 UNSAFE_LEAF(jlong, Unsafe_GetNativeAddress(JNIEnv *env, jobject unsafe, jlong addr)) {
474 void* p = addr_from_java(addr);
475
476 return addr_to_java(*(void**)p);
477 } UNSAFE_END
478
479 UNSAFE_LEAF(void, Unsafe_SetNativeAddress(JNIEnv *env, jobject unsafe, jlong addr, jlong x)) {
480 void* p = addr_from_java(addr);
481 *(void**)p = addr_from_java(x);
482 } UNSAFE_END
483
484
485 ////// Allocation requests
486
487 UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) {
488 ThreadToNativeFromVM ttnfv(thread);
489 return env->AllocObject(cls);
490 } UNSAFE_END
491
492 UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory0(JNIEnv *env, jobject unsafe, jlong size)) {
493 size_t sz = (size_t)size;
494
495 sz = round_to(sz, HeapWordSize);
496 void* x = os::malloc(sz, mtInternal);
497
498 return addr_to_java(x);
499 } UNSAFE_END
500
501 UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory0(JNIEnv *env, jobject unsafe, jlong addr, jlong size)) {
502 void* p = addr_from_java(addr);
503 size_t sz = (size_t)size;
504 sz = round_to(sz, HeapWordSize);
505
506 void* x = os::realloc(p, sz, mtInternal);
507
1166 DECLARE_GETPUTNATIVE(Float, F),
1167 DECLARE_GETPUTNATIVE(Double, D),
1168
1169 {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)},
1170 {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)},
1171
1172 {CC "allocateMemory0", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory0)},
1173 {CC "reallocateMemory0", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory0)},
1174 {CC "freeMemory0", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory0)},
1175
1176 {CC "objectFieldOffset0", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset0)},
1177 {CC "staticFieldOffset0", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset0)},
1178 {CC "staticFieldBase0", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBase0)},
1179 {CC "ensureClassInitialized0", CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized0)},
1180 {CC "arrayBaseOffset0", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset0)},
1181 {CC "arrayIndexScale0", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale0)},
1182 {CC "addressSize0", CC "()I", FN_PTR(Unsafe_AddressSize0)},
1183 {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)},
1184
1185 {CC "defineClass0", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)},
1186 {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)},
1187 {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)},
1188 {CC "compareAndSwapObject", CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSwapObject)},
1189 {CC "compareAndSwapInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)},
1190 {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)},
1191 {CC "compareAndExchangeObjectVolatile", CC "(" OBJ "J" OBJ "" OBJ ")" OBJ, FN_PTR(Unsafe_CompareAndExchangeObject)},
1192 {CC "compareAndExchangeIntVolatile", CC "(" OBJ "J""I""I"")I", FN_PTR(Unsafe_CompareAndExchangeInt)},
1193 {CC "compareAndExchangeLongVolatile", CC "(" OBJ "J""J""J"")J", FN_PTR(Unsafe_CompareAndExchangeLong)},
1194
1195 {CC "park", CC "(ZJ)V", FN_PTR(Unsafe_Park)},
1196 {CC "unpark", CC "(" OBJ ")V", FN_PTR(Unsafe_Unpark)},
1197
1198 {CC "getLoadAverage0", CC "([DI)I", FN_PTR(Unsafe_GetLoadAverage0)},
1199
1200 {CC "copyMemory0", CC "(" OBJ "J" OBJ "JJ)V", FN_PTR(Unsafe_CopyMemory0)},
1201 {CC "copySwapMemory0", CC "(" OBJ "J" OBJ "JJJ)V", FN_PTR(Unsafe_CopySwapMemory0)},
1202 {CC "setMemory0", CC "(" OBJ "JJB)V", FN_PTR(Unsafe_SetMemory0)},
1203
1204 {CC "defineAnonymousClass0", CC "(" DAC_Args ")" CLS, FN_PTR(Unsafe_DefineAnonymousClass0)},
1205
1206 {CC "shouldBeInitialized0", CC "(" CLS ")Z", FN_PTR(Unsafe_ShouldBeInitialized0)},
|
467 }
468
469 t->set_doing_unsafe_access(false);
470 } UNSAFE_END
471
472
473 UNSAFE_LEAF(jlong, Unsafe_GetNativeAddress(JNIEnv *env, jobject unsafe, jlong addr)) {
474 void* p = addr_from_java(addr);
475
476 return addr_to_java(*(void**)p);
477 } UNSAFE_END
478
479 UNSAFE_LEAF(void, Unsafe_SetNativeAddress(JNIEnv *env, jobject unsafe, jlong addr, jlong x)) {
480 void* p = addr_from_java(addr);
481 *(void**)p = addr_from_java(x);
482 } UNSAFE_END
483
484
485 ////// Allocation requests
486
487 UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance0(JNIEnv *env, jobject unsafe, jclass cls)) {
488 ThreadToNativeFromVM ttnfv(thread);
489 return env->AllocObject(cls);
490 } UNSAFE_END
491
492 UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory0(JNIEnv *env, jobject unsafe, jlong size)) {
493 size_t sz = (size_t)size;
494
495 sz = round_to(sz, HeapWordSize);
496 void* x = os::malloc(sz, mtInternal);
497
498 return addr_to_java(x);
499 } UNSAFE_END
500
501 UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory0(JNIEnv *env, jobject unsafe, jlong addr, jlong size)) {
502 void* p = addr_from_java(addr);
503 size_t sz = (size_t)size;
504 sz = round_to(sz, HeapWordSize);
505
506 void* x = os::realloc(p, sz, mtInternal);
507
1166 DECLARE_GETPUTNATIVE(Float, F),
1167 DECLARE_GETPUTNATIVE(Double, D),
1168
1169 {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)},
1170 {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)},
1171
1172 {CC "allocateMemory0", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory0)},
1173 {CC "reallocateMemory0", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory0)},
1174 {CC "freeMemory0", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory0)},
1175
1176 {CC "objectFieldOffset0", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset0)},
1177 {CC "staticFieldOffset0", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset0)},
1178 {CC "staticFieldBase0", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBase0)},
1179 {CC "ensureClassInitialized0", CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized0)},
1180 {CC "arrayBaseOffset0", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset0)},
1181 {CC "arrayIndexScale0", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale0)},
1182 {CC "addressSize0", CC "()I", FN_PTR(Unsafe_AddressSize0)},
1183 {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)},
1184
1185 {CC "defineClass0", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)},
1186 {CC "allocateInstance0", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance0)},
1187 {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)},
1188 {CC "compareAndSwapObject", CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSwapObject)},
1189 {CC "compareAndSwapInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)},
1190 {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)},
1191 {CC "compareAndExchangeObjectVolatile", CC "(" OBJ "J" OBJ "" OBJ ")" OBJ, FN_PTR(Unsafe_CompareAndExchangeObject)},
1192 {CC "compareAndExchangeIntVolatile", CC "(" OBJ "J""I""I"")I", FN_PTR(Unsafe_CompareAndExchangeInt)},
1193 {CC "compareAndExchangeLongVolatile", CC "(" OBJ "J""J""J"")J", FN_PTR(Unsafe_CompareAndExchangeLong)},
1194
1195 {CC "park", CC "(ZJ)V", FN_PTR(Unsafe_Park)},
1196 {CC "unpark", CC "(" OBJ ")V", FN_PTR(Unsafe_Unpark)},
1197
1198 {CC "getLoadAverage0", CC "([DI)I", FN_PTR(Unsafe_GetLoadAverage0)},
1199
1200 {CC "copyMemory0", CC "(" OBJ "J" OBJ "JJ)V", FN_PTR(Unsafe_CopyMemory0)},
1201 {CC "copySwapMemory0", CC "(" OBJ "J" OBJ "JJJ)V", FN_PTR(Unsafe_CopySwapMemory0)},
1202 {CC "setMemory0", CC "(" OBJ "JJB)V", FN_PTR(Unsafe_SetMemory0)},
1203
1204 {CC "defineAnonymousClass0", CC "(" DAC_Args ")" CLS, FN_PTR(Unsafe_DefineAnonymousClass0)},
1205
1206 {CC "shouldBeInitialized0", CC "(" CLS ")Z", FN_PTR(Unsafe_ShouldBeInitialized0)},
|