comparison 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
comparison
equal deleted inserted replaced
9886:d14b65dac937 9887:4d5872186e76
172 #define SET_FIELD_VOLATILE(obj, offset, type_name, x) \ 172 #define SET_FIELD_VOLATILE(obj, offset, type_name, x) \
173 oop p = JNIHandles::resolve(obj); \ 173 oop p = JNIHandles::resolve(obj); \
174 OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), x); 174 OrderAccess::release_store_fence((volatile type_name*)index_oop_from_field_offset_long(p, offset), x);
175 175
176 // Macros for oops that check UseCompressedOops 176 // Macros for oops that check UseCompressedOops
177 177 #ifndef GRAAL
178 #define GET_OOP_FIELD(obj, offset, v) \ 178 #define GET_OOP_FIELD(obj, offset, v) \
179 oop p = JNIHandles::resolve(obj); \ 179 oop p = JNIHandles::resolve(obj); \
180 oop v; \ 180 oop v; \
181 if (UseCompressedOops) { \ 181 if (UseCompressedOops) { \
182 narrowOop n = *(narrowOop*)index_oop_from_field_offset_long(p, offset); \ 182 narrowOop n = *(narrowOop*)index_oop_from_field_offset_long(p, offset); \
183 v = oopDesc::decode_heap_oop(n); \ 183 v = oopDesc::decode_heap_oop(n); \
184 } else { \ 184 } else { \
185 v = *(oop*)index_oop_from_field_offset_long(p, offset); \ 185 v = *(oop*)index_oop_from_field_offset_long(p, offset); \
186 } 186 }
187 187 #else
188 #define GET_OOP_FIELD(obj, offset, v) \
189 oop p = JNIHandles::resolve(obj); \
190 oop v; \
191 if (UseCompressedOops && p!=NULL && offset>=oopDesc::header_size()) { \
192 narrowOop n = *(narrowOop*)index_oop_from_field_offset_long(p, offset); \
193 v = oopDesc::decode_heap_oop(n); \
194 } else { \
195 v = *(oop*)index_oop_from_field_offset_long(p, offset); \
196 }
197 #endif
188 198
189 // Get/SetObject must be special-cased, since it works with handles. 199 // Get/SetObject must be special-cased, since it works with handles.
190 200
191 // The xxx140 variants for backward compatibility do not allow a full-width offset. 201 // The xxx140 variants for backward compatibility do not allow a full-width offset.
192 UNSAFE_ENTRY(jobject, Unsafe_GetObject140(JNIEnv *env, jobject unsafe, jobject obj, jint offset)) 202 UNSAFE_ENTRY(jobject, Unsafe_GetObject140(JNIEnv *env, jobject unsafe, jobject obj, jint offset))