示例#1
0
} 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);
  } else {
    oop_store((oop*)index_oop_from_field_offset_long(p, offset), x);
  }
} UNSAFE_END
示例#2
0
} 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();

  if (UseCompressedOops) {
    oop_store((narrowOop*)addr, x);
  } else {
    oop_store((oop*)addr, x);
  }

  OrderAccess::fence();
} UNSAFE_END
示例#3
0
template <class T> inline void oop_store(T* p, oop v) {
  if (always_do_update_barrier) {
    oop_store((volatile T*)p, v);
  } else {
    update_barrier_set_pre(p, v);
    oopDesc::encode_store_heap_oop(p, v);
    update_barrier_set(p, v);
  }
}
示例#4
0
inline void oop_store_without_check(oop* p, oop v) {
  // XXX YSR FIX ME!!!
  if (always_do_update_barrier) {
   oop_store(p, v);
  } else {
    assert(!Universe::heap()->barrier_set()->write_ref_needs_barrier(p, v),
           "oop store without store check failed");
    *p = v;
  }
}
示例#5
0
// When it absolutely has to get there.
template <class T> inline void oop_store_without_check(volatile T* p, oop v) {
  // XXX YSR FIX ME!!!
  if (always_do_update_barrier) {
    oop_store(p, v);
  } else {
    assert(!Universe::heap()->barrier_set()->write_ref_needs_barrier((T*)p, v),
           "oop store without store check failed");
    oopDesc::release_encode_store_heap_oop(p, v);
  }
}
示例#6
0
// When it absolutely has to get there.
inline void oop_store_without_check(volatile oop* p, oop v) {
  // XXX YSR FIX ME!!!
  if (always_do_update_barrier) {
    oop_store(p, v);
  } else {
    assert(!Universe::heap()->barrier_set()->
                      write_ref_needs_barrier((oop *)p, v),
           "oop store without store check failed");
    OrderAccess::release_store_ptr(p, v);
  }
}
template <class T> void oop_store(T* p, oop v) {
  if (always_do_update_barrier) {
    oop_store((volatile T*)p, v);
  } else {
    update_barrier_set_pre(p, v);
    oopDesc::encode_store_heap_oop(p, v);
    // always_do_update_barrier == false =>
    // Either we are at a safepoint (in GC) or CMS is not used. In both
    // cases it's unnecessary to mark the card as dirty with release sematics.
    update_barrier_set((void*)p, v, false /* release */);  // cast away type
  }
}
示例#8
0
 void set_f1(oop f1)                            {
   oop existing_f1 = _f1; // read once
   assert(existing_f1 == NULL || existing_f1 == f1, "illegal field change");
   oop_store(&_f1, f1);
 }
示例#9
0
inline void oopDesc::release_obj_field_put(int offset, oop value)           { oop_store((volatile oop*)obj_field_addr(offset), value);           }
示例#10
0
inline void oopDesc::obj_field_put(int offset, oop value)           { oop_store(obj_field_addr(offset), value);   }
示例#11
0
 void set_component_mirror(oop m)      { oop_store((oop*) &_component_mirror, m); }
示例#12
0
 void obj_at_put(int index, oop value) { oop_store(obj_at_addr(index), value); }
inline void oopDesc::release_obj_field_put(int offset, oop value) {
  UseCompressedOops ?
    oop_store((volatile narrowOop*)obj_field_addr<narrowOop>(offset), value) :
    oop_store((volatile oop*)      obj_field_addr<oop>(offset),       value);
}
inline void oopDesc::obj_field_put(int offset, oop value) {
  UseCompressedOops ? oop_store(obj_field_addr<narrowOop>(offset), value) :
                      oop_store(obj_field_addr<oop>(offset),       value);
}
示例#15
0
 void set_f1(oop f1)                            {
   assert(_f1 == NULL || _f1 == f1, "illegal field change");
   oop_store(&_f1, f1);
 }