350 351 UNSAFE_LEAF(void, Unsafe_StoreFence(JNIEnv *env, jobject unsafe)) { 352 OrderAccess::release(); 353 } UNSAFE_END 354 355 UNSAFE_LEAF(void, Unsafe_FullFence(JNIEnv *env, jobject unsafe)) { 356 OrderAccess::fence(); 357 } UNSAFE_END 358 359 ////// Allocation requests 360 361 UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) { 362 ThreadToNativeFromVM ttnfv(thread); 363 return env->AllocObject(cls); 364 } UNSAFE_END 365 366 UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory0(JNIEnv *env, jobject unsafe, jlong size)) { 367 size_t sz = (size_t)size; 368 369 sz = align_up(sz, HeapWordSize); 370 void* x = os::malloc(sz, mtInternal); 371 372 return addr_to_java(x); 373 } UNSAFE_END 374 375 UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory0(JNIEnv *env, jobject unsafe, jlong addr, jlong size)) { 376 void* p = addr_from_java(addr); 377 size_t sz = (size_t)size; 378 sz = align_up(sz, HeapWordSize); 379 380 void* x = os::realloc(p, sz, mtInternal); 381 382 return addr_to_java(x); 383 } UNSAFE_END 384 385 UNSAFE_ENTRY(void, Unsafe_FreeMemory0(JNIEnv *env, jobject unsafe, jlong addr)) { 386 void* p = addr_from_java(addr); 387 388 os::free(p); 389 } UNSAFE_END 390 391 UNSAFE_ENTRY(void, Unsafe_SetMemory0(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong size, jbyte value)) { 392 size_t sz = (size_t)size; 393 394 oop base = JNIHandles::resolve(obj); 395 void* p = index_oop_from_field_offset_long(base, offset); 396 397 Copy::fill_to_memory_atomic(p, sz, value); 398 } UNSAFE_END 399 400 UNSAFE_ENTRY(void, Unsafe_CopyMemory0(JNIEnv *env, jobject unsafe, jobject srcObj, jlong srcOffset, jobject dstObj, jlong dstOffset, jlong size)) { | 350 351 UNSAFE_LEAF(void, Unsafe_StoreFence(JNIEnv *env, jobject unsafe)) { 352 OrderAccess::release(); 353 } UNSAFE_END 354 355 UNSAFE_LEAF(void, Unsafe_FullFence(JNIEnv *env, jobject unsafe)) { 356 OrderAccess::fence(); 357 } UNSAFE_END 358 359 ////// Allocation requests 360 361 UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) { 362 ThreadToNativeFromVM ttnfv(thread); 363 return env->AllocObject(cls); 364 } UNSAFE_END 365 366 UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory0(JNIEnv *env, jobject unsafe, jlong size)) { 367 size_t sz = (size_t)size; 368 369 sz = align_up(sz, HeapWordSize); 370 void* x = os::malloc(sz, mtOther); 371 372 return addr_to_java(x); 373 } UNSAFE_END 374 375 UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory0(JNIEnv *env, jobject unsafe, jlong addr, jlong size)) { 376 void* p = addr_from_java(addr); 377 size_t sz = (size_t)size; 378 sz = align_up(sz, HeapWordSize); 379 380 void* x = os::realloc(p, sz, mtOther); 381 382 return addr_to_java(x); 383 } UNSAFE_END 384 385 UNSAFE_ENTRY(void, Unsafe_FreeMemory0(JNIEnv *env, jobject unsafe, jlong addr)) { 386 void* p = addr_from_java(addr); 387 388 os::free(p); 389 } UNSAFE_END 390 391 UNSAFE_ENTRY(void, Unsafe_SetMemory0(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong size, jbyte value)) { 392 size_t sz = (size_t)size; 393 394 oop base = JNIHandles::resolve(obj); 395 void* p = index_oop_from_field_offset_long(base, offset); 396 397 Copy::fill_to_memory_atomic(p, sz, value); 398 } UNSAFE_END 399 400 UNSAFE_ENTRY(void, Unsafe_CopyMemory0(JNIEnv *env, jobject unsafe, jobject srcObj, jlong srcOffset, jobject dstObj, jlong dstOffset, jlong size)) { |