Mercurial > hg > truffle
diff src/share/vm/prims/unsafe.cpp @ 9887:4d5872186e76
Add compressed oops support in Graal/Hotspot site
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Tue, 04 Jun 2013 19:36:16 +0200 |
parents | 6194aefabf1a |
children | 01dd93600d02 |
line wrap: on
line diff
--- a/src/share/vm/prims/unsafe.cpp Tue Jun 04 18:52:22 2013 +0200 +++ b/src/share/vm/prims/unsafe.cpp Tue Jun 04 19:36:16 2013 +0200 @@ -174,17 +174,27 @@ OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), x); // Macros for oops that check UseCompressedOops - +#ifndef GRAAL #define GET_OOP_FIELD(obj, offset, v) \ - oop p = JNIHandles::resolve(obj); \ - oop v; \ - if (UseCompressedOops) { \ + oop p = JNIHandles::resolve(obj); \ + oop v; \ + if (UseCompressedOops) { \ narrowOop n = *(narrowOop*)index_oop_from_field_offset_long(p, offset); \ - v = oopDesc::decode_heap_oop(n); \ - } else { \ - v = *(oop*)index_oop_from_field_offset_long(p, offset); \ + v = oopDesc::decode_heap_oop(n); \ + } else { \ + v = *(oop*)index_oop_from_field_offset_long(p, offset); \ } - +#else +#define GET_OOP_FIELD(obj, offset, v) \ + oop p = JNIHandles::resolve(obj); \ + oop v; \ + if (UseCompressedOops && p!=NULL && offset>=oopDesc::header_size()) { \ + narrowOop n = *(narrowOop*)index_oop_from_field_offset_long(p, offset); \ + v = oopDesc::decode_heap_oop(n); \ + } else { \ + v = *(oop*)index_oop_from_field_offset_long(p, offset); \ + } +#endif // Get/SetObject must be special-cased, since it works with handles.