< prev index next >

src/hotspot/share/prims/unsafe.cpp

Print this page




 326 } UNSAFE_END
 327 
 328 UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
 329   oop x = JNIHandles::resolve(x_h);
 330   oop p = JNIHandles::resolve(obj);
 331   assert_field_offset_sane(p, offset);
 332   HeapAccess<ON_UNKNOWN_OOP_REF>::oop_store_at(p, offset, x);
 333 } UNSAFE_END
 334 
 335 UNSAFE_ENTRY(jboolean, Unsafe_IsFlattenedArray(JNIEnv *env, jobject unsafe, jclass c)) {
 336   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c));
 337   return k->is_valueArray_klass();
 338 } UNSAFE_END
 339 
 340 UNSAFE_ENTRY(jobject, Unsafe_GetValue(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jclass c)) {
 341   oop p = JNIHandles::resolve(obj);
 342   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c));
 343   ValueKlass* vk = ValueKlass::cast(k);
 344   assert_and_log_unsafe_value_type_access(p, offset, vk);
 345   Handle p_h(THREAD, p);
 346   bool in_heap;
 347   oop v = vk->allocate_buffered_or_heap_instance(&in_heap, CHECK_NULL); // allocate instance
 348   vk->initialize(CHECK_NULL); // If field is a default value, value class might not be initialized yet
 349   vk->value_store(((char*)(oopDesc*)p_h()) + offset,
 350                   vk->data_for_oop(v),
 351                   in_heap, true);                  
 352   return JNIHandles::make_local(env, v);
 353 } UNSAFE_END
 354 
 355 UNSAFE_ENTRY(void, Unsafe_PutValue(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jclass c, jobject value)) {
 356   oop v = JNIHandles::resolve(value);
 357   oop p = JNIHandles::resolve(obj);
 358   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c));
 359   ValueKlass* vk = ValueKlass::cast(k);
 360   assert_and_log_unsafe_value_type_access(p, offset, vk);
 361   vk->value_store(vk->data_for_oop(v),
 362                  ((char*)(oopDesc*)p) + offset, true, true);
 363 } UNSAFE_END
 364 
 365 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
 366   oop p = JNIHandles::resolve(obj);
 367   assert_field_offset_sane(p, offset);
 368   oop v = HeapAccess<MO_SEQ_CST | ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
 369   return JNIHandles::make_local(env, v);
 370 } UNSAFE_END
 371 




 326 } UNSAFE_END
 327 
 328 UNSAFE_ENTRY(void, Unsafe_PutObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
 329   oop x = JNIHandles::resolve(x_h);
 330   oop p = JNIHandles::resolve(obj);
 331   assert_field_offset_sane(p, offset);
 332   HeapAccess<ON_UNKNOWN_OOP_REF>::oop_store_at(p, offset, x);
 333 } UNSAFE_END
 334 
 335 UNSAFE_ENTRY(jboolean, Unsafe_IsFlattenedArray(JNIEnv *env, jobject unsafe, jclass c)) {
 336   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c));
 337   return k->is_valueArray_klass();
 338 } UNSAFE_END
 339 
 340 UNSAFE_ENTRY(jobject, Unsafe_GetValue(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jclass c)) {
 341   oop p = JNIHandles::resolve(obj);
 342   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c));
 343   ValueKlass* vk = ValueKlass::cast(k);
 344   assert_and_log_unsafe_value_type_access(p, offset, vk);
 345   Handle p_h(THREAD, p);
 346   oop v = vk->allocate_instance(CHECK_NULL); // allocate instance

 347   vk->initialize(CHECK_NULL); // If field is a default value, value class might not be initialized yet
 348   vk->value_store(((char*)(oopDesc*)p_h()) + offset,
 349                   vk->data_for_oop(v),
 350                   true, true);
 351   return JNIHandles::make_local(env, v);
 352 } UNSAFE_END
 353 
 354 UNSAFE_ENTRY(void, Unsafe_PutValue(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jclass c, jobject value)) {
 355   oop v = JNIHandles::resolve(value);
 356   oop p = JNIHandles::resolve(obj);
 357   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c));
 358   ValueKlass* vk = ValueKlass::cast(k);
 359   assert_and_log_unsafe_value_type_access(p, offset, vk);
 360   vk->value_store(vk->data_for_oop(v),
 361                  ((char*)(oopDesc*)p) + offset, true, true);
 362 } UNSAFE_END
 363 
 364 UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) {
 365   oop p = JNIHandles::resolve(obj);
 366   assert_field_offset_sane(p, offset);
 367   oop v = HeapAccess<MO_SEQ_CST | ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
 368   return JNIHandles::make_local(env, v);
 369 } UNSAFE_END
 370 


< prev index next >