Mercurial > hg > truffle
comparison src/share/vm/oops/oop.inline.hpp @ 6848:8e47bac5643a
7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Tue, 09 Oct 2012 10:11:38 +0200 |
parents | 22b8d3d181d9 |
children | e522a00b91aa 10d5f25a7c67 db9981fd3124 |
comparison
equal
deleted
inserted
replaced
6847:65d07d9ee446 | 6848:8e47bac5643a |
---|---|
183 // in inner GC loops so these are separated. | 183 // in inner GC loops so these are separated. |
184 | 184 |
185 inline bool check_obj_alignment(oop obj) { | 185 inline bool check_obj_alignment(oop obj) { |
186 return (intptr_t)obj % MinObjAlignmentInBytes == 0; | 186 return (intptr_t)obj % MinObjAlignmentInBytes == 0; |
187 } | 187 } |
188 inline bool check_obj_alignment(Klass* obj) { | 188 inline bool check_klass_alignment(Klass* obj) { |
189 return (intptr_t)obj % MinObjAlignmentInBytes == 0; | 189 return (intptr_t)obj % KlassAlignmentInBytes == 0; |
190 } | 190 } |
191 | 191 |
192 inline narrowOop oopDesc::encode_heap_oop_not_null(oop v) { | 192 inline narrowOop oopDesc::encode_heap_oop_not_null(oop v) { |
193 assert(!is_null(v), "oop value can never be zero"); | 193 assert(!is_null(v), "oop value can never be zero"); |
194 assert(check_obj_alignment(v), "Address not aligned"); | 194 assert(check_obj_alignment(v), "Address not aligned"); |
226 // Encoding and decoding for klass field. It is copied code, but someday | 226 // Encoding and decoding for klass field. It is copied code, but someday |
227 // might not be the same as oop. | 227 // might not be the same as oop. |
228 | 228 |
229 inline narrowOop oopDesc::encode_klass_not_null(Klass* v) { | 229 inline narrowOop oopDesc::encode_klass_not_null(Klass* v) { |
230 assert(!is_null(v), "oop value can never be zero"); | 230 assert(!is_null(v), "oop value can never be zero"); |
231 assert(check_obj_alignment(v), "Address not aligned"); | 231 assert(check_klass_alignment(v), "Address not aligned"); |
232 address base = Universe::narrow_oop_base(); | 232 address base = Universe::narrow_klass_base(); |
233 int shift = Universe::narrow_oop_shift(); | 233 int shift = Universe::narrow_klass_shift(); |
234 uint64_t pd = (uint64_t)(pointer_delta((void*)v, (void*)base, 1)); | 234 uint64_t pd = (uint64_t)(pointer_delta((void*)v, (void*)base, 1)); |
235 assert(OopEncodingHeapMax > pd, "change encoding max if new encoding"); | 235 assert(OopEncodingHeapMax > pd, "change encoding max if new encoding"); |
236 uint64_t result = pd >> shift; | 236 uint64_t result = pd >> shift; |
237 assert((result & CONST64(0xffffffff00000000)) == 0, "narrow klass pointer overflow"); | 237 assert((result & CONST64(0xffffffff00000000)) == 0, "narrow klass pointer overflow"); |
238 assert(decode_klass(result) == v, "reversibility"); | 238 assert(decode_klass(result) == v, "reversibility"); |
243 return (is_null(v)) ? (narrowOop)0 : encode_klass_not_null(v); | 243 return (is_null(v)) ? (narrowOop)0 : encode_klass_not_null(v); |
244 } | 244 } |
245 | 245 |
246 inline Klass* oopDesc::decode_klass_not_null(narrowOop v) { | 246 inline Klass* oopDesc::decode_klass_not_null(narrowOop v) { |
247 assert(!is_null(v), "narrow oop value can never be zero"); | 247 assert(!is_null(v), "narrow oop value can never be zero"); |
248 address base = Universe::narrow_oop_base(); | 248 address base = Universe::narrow_klass_base(); |
249 int shift = Universe::narrow_oop_shift(); | 249 int shift = Universe::narrow_klass_shift(); |
250 Klass* result = (Klass*)(void*)((uintptr_t)base + ((uintptr_t)v << shift)); | 250 Klass* result = (Klass*)(void*)((uintptr_t)base + ((uintptr_t)v << shift)); |
251 assert(check_obj_alignment(result), err_msg("address not aligned: " PTR_FORMAT, (void*) result)); | 251 assert(check_klass_alignment(result), err_msg("address not aligned: " PTR_FORMAT, (void*) result)); |
252 return result; | 252 return result; |
253 } | 253 } |
254 | 254 |
255 inline Klass* oopDesc::decode_klass(narrowOop v) { | 255 inline Klass* oopDesc::decode_klass(narrowOop v) { |
256 return is_null(v) ? (Klass*)NULL : decode_klass_not_null(v); | 256 return is_null(v) ? (Klass*)NULL : decode_klass_not_null(v); |