--- old/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp 2018-05-14 21:06:17.342417524 +0200 +++ new/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp 2018-05-14 21:06:17.011421531 +0200 @@ -1879,7 +1879,7 @@ // cpu register - cpu register Register reg2 = opr2->as_register(); if (opr1->type() == T_OBJECT || opr1->type() == T_ARRAY) { - __ cmp(reg1, reg2); + __ cmpoop(reg1, reg2); } else { assert(opr2->type() != T_OBJECT && opr2->type() != T_ARRAY, "cmp int, oop?"); __ cmpw(reg1, reg2); @@ -1910,8 +1910,9 @@ break; case T_OBJECT: case T_ARRAY: - imm = jlong(opr2->as_constant_ptr()->as_jobject()); - break; + jobject2reg(opr2->as_constant_ptr()->as_jobject(), rscratch1); + __ cmpoop(reg1, rscratch1); + return; default: ShouldNotReachHere(); imm = 0; // unreachable