< prev index next >

src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp

Print this page

        

*** 1928,1951 **** #ifdef _LP64 if (UseCompressedOops) { __ encode_heap_oop(cmpval); __ mov(rscratch1, newval); __ encode_heap_oop(rscratch1); ! if (os::is_MP()) { ! __ lock(); ! } // cmpval (rax) is implicitly used by this instruction __ cmpxchgl(rscratch1, Address(addr, 0)); } else #endif { ! if (os::is_MP()) { ! __ lock(); ! } __ cmpxchgptr(newval, Address(addr, 0)); } ! } else { assert(op->code() == lir_cas_int, "lir_cas_int expected"); if (os::is_MP()) { __ lock(); } __ cmpxchgl(newval, Address(addr, 0)); --- 1928,1947 ---- #ifdef _LP64 if (UseCompressedOops) { __ encode_heap_oop(cmpval); __ mov(rscratch1, newval); __ encode_heap_oop(rscratch1); ! __ lock(); // cmpval (rax) is implicitly used by this instruction __ cmpxchgl(rscratch1, Address(addr, 0)); } else #endif { ! __ lock(); __ cmpxchgptr(newval, Address(addr, 0)); } ! } else { assert(op->code() == lir_cas_int, "lir_cas_int expected"); if (os::is_MP()) { __ lock(); } __ cmpxchgl(newval, Address(addr, 0));
*** 3044,3053 **** --- 3040,3052 ---- Register src_pos = op->src_pos()->as_register(); Register dst_pos = op->dst_pos()->as_register(); Register length = op->length()->as_register(); Register tmp = op->tmp()->as_register(); + __ resolve_for_read(IN_HEAP, src); + __ resolve_for_write(IN_HEAP, dst); + CodeStub* stub = op->stub(); int flags = op->flags(); BasicType basic_type = default_type != NULL ? default_type->element_type()->basic_type() : T_ILLEGAL; if (basic_type == T_ARRAY) basic_type = T_OBJECT;
*** 3482,3491 **** --- 3481,3491 ---- Register scratch = noreg; if (UseBiasedLocking) { scratch = op->scratch_opr()->as_register(); } assert(BasicLock::displaced_header_offset_in_bytes() == 0, "lock_reg must point to the displaced header"); + __ resolve_for_write(IN_HEAP, obj); // add debug info for NullPointerException only if one is possible int null_check_offset = __ lock_object(hdr, obj, lock, scratch, *op->stub()->entry()); if (op->info() != NULL) { add_debug_info_for_null_check(null_check_offset, op->info()); }
< prev index next >