Mercurial > hg > truffle
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)) |