Mercurial > hg > truffle
diff src/share/vm/oops/oop.inline.hpp @ 3932:b0efc7ee3b31
7085860: JSR 292: implement CallSite.setTargetNormal and setTargetVolatile as native methods
Reviewed-by: jrose, never
author | twisti |
---|---|
date | Thu, 08 Sep 2011 05:11:31 -0700 |
parents | c7f3d0b4570f |
children | 04b9a2566eec da91efe96a93 |
line wrap: on
line diff
--- a/src/share/vm/oops/oop.inline.hpp Thu Sep 08 10:12:25 2011 +0200 +++ b/src/share/vm/oops/oop.inline.hpp Thu Sep 08 05:11:31 2011 -0700 @@ -321,15 +321,25 @@ load_decode_heap_oop(obj_field_addr<narrowOop>(offset)) : load_decode_heap_oop(obj_field_addr<oop>(offset)); } +inline volatile oop oopDesc::obj_field_volatile(int offset) const { + volatile oop value = obj_field(offset); + OrderAccess::acquire(); + return 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); } -inline void oopDesc::obj_field_raw_put(int offset, oop value) { +inline void oopDesc::obj_field_put_raw(int offset, oop value) { UseCompressedOops ? encode_store_heap_oop(obj_field_addr<narrowOop>(offset), value) : encode_store_heap_oop(obj_field_addr<oop>(offset), value); } +inline void oopDesc::obj_field_put_volatile(int offset, oop value) { + OrderAccess::release(); + obj_field_put(offset, value); + OrderAccess::fence(); +} inline jbyte oopDesc::byte_field(int offset) const { return (jbyte) *byte_field_addr(offset); } inline void oopDesc::byte_field_put(int offset, jbyte contents) { *byte_field_addr(offset) = (jint) contents; }