Mercurial > hg > truffle
comparison src/cpu/x86/vm/interp_masm_x86_64.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | a61af66fc99e |
children | 6d172e3548cb 37f87013dfd8 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
265 movl(rcx, Address(rdi, arrayOopDesc::length_offset_in_bytes())); | 265 movl(rcx, Address(rdi, arrayOopDesc::length_offset_in_bytes())); |
266 // Skip to start of data; also clear Z flag incase rcx is zero | 266 // Skip to start of data; also clear Z flag incase rcx is zero |
267 addq(rdi, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); | 267 addq(rdi, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); |
268 // Scan rcx words at [rdi] for occurance of rax | 268 // Scan rcx words at [rdi] for occurance of rax |
269 // Set NZ/Z based on last compare | 269 // Set NZ/Z based on last compare |
270 repne_scan(); | 270 |
271 // Not equal? | 271 // this part is kind tricky, as values in supers array could be 32 or 64 bit wide |
272 jcc(Assembler::notEqual, not_subtype); | 272 // and we store values in objArrays always encoded, thus we need to encode value |
273 // before repne | |
274 if (UseCompressedOops) { | |
275 encode_heap_oop(rax); | |
276 repne_scanl(); | |
277 // Not equal? | |
278 jcc(Assembler::notEqual, not_subtype); | |
279 // decode heap oop here for movq | |
280 decode_heap_oop(rax); | |
281 } else { | |
282 repne_scanq(); | |
283 jcc(Assembler::notEqual, not_subtype); | |
284 } | |
273 // Must be equal but missed in cache. Update cache. | 285 // Must be equal but missed in cache. Update cache. |
274 movq(Address(Rsub_klass, sizeof(oopDesc) + | 286 movq(Address(Rsub_klass, sizeof(oopDesc) + |
275 Klass::secondary_super_cache_offset_in_bytes()), rax); | 287 Klass::secondary_super_cache_offset_in_bytes()), rax); |
276 jmp(ok_is_subtype); | 288 jmp(ok_is_subtype); |
277 | 289 |
278 bind(not_subtype); | 290 bind(not_subtype); |
291 // decode heap oop here for miss | |
292 if (UseCompressedOops) decode_heap_oop(rax); | |
279 profile_typecheck_failed(rcx); // blows rcx | 293 profile_typecheck_failed(rcx); // blows rcx |
280 } | 294 } |
281 | 295 |
282 | 296 |
283 // Java Expression Stack | 297 // Java Expression Stack |