src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7118863 Cdiff src/cpu/x86/vm/assembler_x86.cpp

src/cpu/x86/vm/assembler_x86.cpp

Print this page

        

*** 4630,4640 **** xorl(swap_reg, tmp_reg); if (swap_reg_contains_mark) { null_check_offset = offset(); } movl(tmp_reg, klass_addr); ! xorl(swap_reg, Address(tmp_reg, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); andl(swap_reg, ~((int) markOopDesc::age_mask_in_place)); if (need_tmp_reg) { pop(tmp_reg); } if (counters != NULL) { --- 4630,4640 ---- xorl(swap_reg, tmp_reg); if (swap_reg_contains_mark) { null_check_offset = offset(); } movl(tmp_reg, klass_addr); ! xorl(swap_reg, Address(tmp_reg, Klass::prototype_header_offset())); andl(swap_reg, ~((int) markOopDesc::age_mask_in_place)); if (need_tmp_reg) { pop(tmp_reg); } if (counters != NULL) {
*** 4717,4727 **** if (need_tmp_reg) { push(tmp_reg); } get_thread(tmp_reg); movl(swap_reg, klass_addr); ! orl(tmp_reg, Address(swap_reg, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); movl(swap_reg, saved_mark_addr); if (os::is_MP()) { lock(); } cmpxchgptr(tmp_reg, Address(obj_reg, 0)); --- 4717,4727 ---- if (need_tmp_reg) { push(tmp_reg); } get_thread(tmp_reg); movl(swap_reg, klass_addr); ! orl(tmp_reg, Address(swap_reg, Klass::prototype_header_offset())); movl(swap_reg, saved_mark_addr); if (os::is_MP()) { lock(); } cmpxchgptr(tmp_reg, Address(obj_reg, 0));
*** 4755,4765 **** movl(swap_reg, saved_mark_addr); if (need_tmp_reg) { push(tmp_reg); } movl(tmp_reg, klass_addr); ! movl(tmp_reg, Address(tmp_reg, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); if (os::is_MP()) { lock(); } cmpxchgptr(tmp_reg, Address(obj_reg, 0)); if (need_tmp_reg) { --- 4755,4765 ---- movl(swap_reg, saved_mark_addr); if (need_tmp_reg) { push(tmp_reg); } movl(tmp_reg, klass_addr); ! movl(tmp_reg, Address(tmp_reg, Klass::prototype_header_offset())); if (os::is_MP()) { lock(); } cmpxchgptr(tmp_reg, Address(obj_reg, 0)); if (need_tmp_reg) {
*** 7681,7694 **** if (L_success == NULL) { L_success = &L_fallthrough; label_nulls++; } if (L_failure == NULL) { L_failure = &L_fallthrough; label_nulls++; } if (L_slow_path == NULL) { L_slow_path = &L_fallthrough; label_nulls++; } assert(label_nulls <= 1, "at most one NULL in the batch"); ! int sc_offset = (klassOopDesc::header_size() * HeapWordSize + ! Klass::secondary_super_cache_offset_in_bytes()); ! int sco_offset = (klassOopDesc::header_size() * HeapWordSize + ! Klass::super_check_offset_offset_in_bytes()); Address super_check_offset_addr(super_klass, sco_offset); // Hacked jcc, which "knows" that L_fallthrough, at least, is in // range of a jccb. If this routine grows larger, reconsider at // least some of these. --- 7681,7692 ---- if (L_success == NULL) { L_success = &L_fallthrough; label_nulls++; } if (L_failure == NULL) { L_failure = &L_fallthrough; label_nulls++; } if (L_slow_path == NULL) { L_slow_path = &L_fallthrough; label_nulls++; } assert(label_nulls <= 1, "at most one NULL in the batch"); ! int sc_offset = in_bytes(Klass::secondary_super_cache_offset()); ! int sco_offset = in_bytes(Klass::super_check_offset_offset()); Address super_check_offset_addr(super_klass, sco_offset); // Hacked jcc, which "knows" that L_fallthrough, at least, is in // range of a jccb. If this routine grows larger, reconsider at // least some of these.
*** 7782,7795 **** if (L_success == NULL) { L_success = &L_fallthrough; label_nulls++; } if (L_failure == NULL) { L_failure = &L_fallthrough; label_nulls++; } assert(label_nulls <= 1, "at most one NULL in the batch"); // a couple of useful fields in sub_klass: ! int ss_offset = (klassOopDesc::header_size() * HeapWordSize + ! Klass::secondary_supers_offset_in_bytes()); ! int sc_offset = (klassOopDesc::header_size() * HeapWordSize + ! Klass::secondary_super_cache_offset_in_bytes()); Address secondary_supers_addr(sub_klass, ss_offset); Address super_cache_addr( sub_klass, sc_offset); // Do a linear scan of the secondary super-klass chain. // This code is rarely used, so simplicity is a virtue here. --- 7780,7791 ---- if (L_success == NULL) { L_success = &L_fallthrough; label_nulls++; } if (L_failure == NULL) { L_failure = &L_fallthrough; label_nulls++; } assert(label_nulls <= 1, "at most one NULL in the batch"); // a couple of useful fields in sub_klass: ! int ss_offset = in_bytes(Klass::secondary_supers_offset()); ! int sc_offset = in_bytes(Klass::secondary_super_cache_offset()); Address secondary_supers_addr(sub_klass, ss_offset); Address super_cache_addr( sub_klass, sc_offset); // Do a linear scan of the secondary super-klass chain. // This code is rarely used, so simplicity is a virtue here.
*** 8483,8506 **** assert (Universe::heap() != NULL, "java heap should be initialized"); movl(dst, Address(src, oopDesc::klass_offset_in_bytes())); if (Universe::narrow_oop_shift() != 0) { assert(LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); if (LogMinObjAlignmentInBytes == Address::times_8) { ! movq(dst, Address(r12_heapbase, dst, Address::times_8, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); } else { // OK to use shift since we don't need to preserve flags. shlq(dst, LogMinObjAlignmentInBytes); ! movq(dst, Address(r12_heapbase, dst, Address::times_1, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); } } else { ! movq(dst, Address(dst, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); } } else #endif { movptr(dst, Address(src, oopDesc::klass_offset_in_bytes())); ! movptr(dst, Address(dst, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); } } void MacroAssembler::store_klass(Register dst, Register src) { #ifdef _LP64 --- 8479,8502 ---- assert (Universe::heap() != NULL, "java heap should be initialized"); movl(dst, Address(src, oopDesc::klass_offset_in_bytes())); if (Universe::narrow_oop_shift() != 0) { assert(LogMinObjAlignmentInBytes == Universe::narrow_oop_shift(), "decode alg wrong"); if (LogMinObjAlignmentInBytes == Address::times_8) { ! movq(dst, Address(r12_heapbase, dst, Address::times_8, Klass::prototype_header_offset())); } else { // OK to use shift since we don't need to preserve flags. shlq(dst, LogMinObjAlignmentInBytes); ! movq(dst, Address(r12_heapbase, dst, Address::times_1, Klass::prototype_header_offset())); } } else { ! movq(dst, Address(dst, Klass::prototype_header_offset())); } } else #endif { movptr(dst, Address(src, oopDesc::klass_offset_in_bytes())); ! movptr(dst, Address(dst, Klass::prototype_header_offset())); } } void MacroAssembler::store_klass(Register dst, Register src) { #ifdef _LP64
src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File