src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Dec 7 17:33:22 2010
--- new/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Dec 7 17:33:21 2010
*** 1991,2009 ****
--- 1991,2008 ----
assert(newval != addr, "new value and addr must be in different registers");
if ( op->code() == lir_cas_obj) {
#ifdef _LP64
if (UseCompressedOops) {
__ mov(rscratch1, cmpval);
__ encode_heap_oop(cmpval);
! __ mov(rscratch2, newval);
! __ encode_heap_oop(rscratch2);
! __ mov(rscratch1, newval);
! __ encode_heap_oop(rscratch1);
if (os::is_MP()) {
__ lock();
}
__ cmpxchgl(rscratch2, Address(addr, 0));
! __ mov(cmpval, rscratch1);
+ // cmpval (rax) is implicitly used by this instruction
! __ cmpxchgl(rscratch1, Address(addr, 0));
} else
#endif
{
if (os::is_MP()) {
__ lock();
src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File