--- old/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2017-04-25 16:43:49.727176770 +0200 +++ new/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2017-04-25 16:43:49.583176775 +0200 @@ -1862,12 +1862,13 @@ void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { + LIR_Address* address = op->addr()->as_address_ptr(); if (LP64_ONLY(false &&) op->code() == lir_cas_long && VM_Version::supports_cx8()) { assert(op->cmp_value()->as_register_lo() == rax, "wrong register"); assert(op->cmp_value()->as_register_hi() == rdx, "wrong register"); assert(op->new_value()->as_register_lo() == rbx, "wrong register"); assert(op->new_value()->as_register_hi() == rcx, "wrong register"); - Register addr = op->addr()->as_register(); + Register addr = address->base()->as_pointer_register(); if (os::is_MP()) { __ lock(); } @@ -1875,7 +1876,7 @@ } else if (op->code() == lir_cas_int || op->code() == lir_cas_obj ) { NOT_LP64(assert(op->addr()->is_single_cpu(), "must be single");) - Register addr = (op->addr()->is_single_cpu() ? op->addr()->as_register() : op->addr()->as_register_lo()); + Register addr = address->base()->as_pointer_register(); Register newval = op->new_value()->as_register(); Register cmpval = op->cmp_value()->as_register(); assert(cmpval == rax, "wrong register"); @@ -1912,7 +1913,7 @@ } #ifdef _LP64 } else if (op->code() == lir_cas_long) { - Register addr = (op->addr()->is_single_cpu() ? op->addr()->as_register() : op->addr()->as_register_lo()); + Register addr = address->base()->as_pointer_register(); Register newval = op->new_value()->as_register_lo(); Register cmpval = op->cmp_value()->as_register_lo(); assert(cmpval == rax, "wrong register");