src/cpu/x86/vm/interp_masm_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File vop Cdiff src/cpu/x86/vm/interp_masm_x86_64.cpp

src/cpu/x86/vm/interp_masm_x86_64.cpp

Print this page

        

*** 231,241 **** assert(Rsub_klass != r14, "r14 holds locals"); assert(Rsub_klass != r13, "r13 holds bcp"); assert(Rsub_klass != rcx, "rcx holds 2ndary super array length"); assert(Rsub_klass != rdi, "rdi holds 2ndary super array scan ptr"); ! Label not_subtype, loop; // Profile the not-null value's klass. profile_typecheck(rcx, Rsub_klass, rdi); // blows rcx, rdi // Load the super-klass's check offset into rcx --- 231,241 ---- assert(Rsub_klass != r14, "r14 holds locals"); assert(Rsub_klass != r13, "r13 holds bcp"); assert(Rsub_klass != rcx, "rcx holds 2ndary super array length"); assert(Rsub_klass != rdi, "rdi holds 2ndary super array scan ptr"); ! Label not_subtype, not_subtype_pop, loop; // Profile the not-null value's klass. profile_typecheck(rcx, Rsub_klass, rdi); // blows rcx, rdi // Load the super-klass's check offset into rcx
*** 270,297 **** // this part is kind tricky, as values in supers array could be 32 or 64 bit wide // and we store values in objArrays always encoded, thus we need to encode value // before repne if (UseCompressedOops) { encode_heap_oop(rax); repne_scanl(); // Not equal? ! jcc(Assembler::notEqual, not_subtype); ! // decode heap oop here for movq ! decode_heap_oop(rax); } else { repne_scanq(); jcc(Assembler::notEqual, not_subtype); } // Must be equal but missed in cache. Update cache. movq(Address(Rsub_klass, sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes()), rax); jmp(ok_is_subtype); bind(not_subtype); - // decode heap oop here for miss - if (UseCompressedOops) decode_heap_oop(rax); profile_typecheck_failed(rcx); // blows rcx } // Java Expression Stack --- 270,299 ---- // this part is kind tricky, as values in supers array could be 32 or 64 bit wide // and we store values in objArrays always encoded, thus we need to encode value // before repne if (UseCompressedOops) { + pushq(rax); encode_heap_oop(rax); repne_scanl(); // Not equal? ! jcc(Assembler::notEqual, not_subtype_pop); ! // restore heap oop here for movq ! popq(rax); } else { repne_scanq(); jcc(Assembler::notEqual, not_subtype); } // Must be equal but missed in cache. Update cache. movq(Address(Rsub_klass, sizeof(oopDesc) + Klass::secondary_super_cache_offset_in_bytes()), rax); jmp(ok_is_subtype); + bind(not_subtype_pop); + // restore heap oop here for miss + if (UseCompressedOops) popq(rax); bind(not_subtype); profile_typecheck_failed(rcx); // blows rcx } // Java Expression Stack
src/cpu/x86/vm/interp_masm_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File