diff -r 5fe0781a8560 -r ec8c74742417 src/cpu/x86/vm/c1_LIRAssembler_x86.cpp --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Dec 07 11:00:02 2010 -0800 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Wed Dec 08 02:36:36 2010 -0800 @@ -1993,15 +1993,14 @@ 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 {