8184914: Use MacroAssembler::cmpoop() consistently when comparing heap objects
Reviewed-by: coleenp
This commit is contained in:
parent
6787fc889f
commit
c496c05376
@ -2571,7 +2571,7 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
|
||||
if (opr2->is_single_cpu()) {
|
||||
// cpu register - cpu register
|
||||
if (opr1->type() == T_OBJECT || opr1->type() == T_ARRAY) {
|
||||
__ cmpptr(reg1, opr2->as_register());
|
||||
__ cmpoop(reg1, opr2->as_register());
|
||||
} else {
|
||||
assert(opr2->type() != T_OBJECT && opr2->type() != T_ARRAY, "cmp int, oop?");
|
||||
__ cmpl(reg1, opr2->as_register());
|
||||
@ -2579,7 +2579,7 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
|
||||
} else if (opr2->is_stack()) {
|
||||
// cpu register - stack
|
||||
if (opr1->type() == T_OBJECT || opr1->type() == T_ARRAY) {
|
||||
__ cmpptr(reg1, frame_map()->address_for_slot(opr2->single_stack_ix()));
|
||||
__ cmpoop(reg1, frame_map()->address_for_slot(opr2->single_stack_ix()));
|
||||
} else {
|
||||
__ cmpl(reg1, frame_map()->address_for_slot(opr2->single_stack_ix()));
|
||||
}
|
||||
@ -2594,12 +2594,7 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
|
||||
if (o == NULL) {
|
||||
__ cmpptr(reg1, (int32_t)NULL_WORD);
|
||||
} else {
|
||||
#ifdef _LP64
|
||||
__ movoop(rscratch1, o);
|
||||
__ cmpptr(reg1, rscratch1);
|
||||
#else
|
||||
__ cmpoop(reg1, c->as_jobject());
|
||||
#endif // _LP64
|
||||
__ cmpoop(reg1, o);
|
||||
}
|
||||
} else {
|
||||
fatal("unexpected type: %s", basictype_to_str(c->type()));
|
||||
@ -2709,7 +2704,7 @@ void LIR_Assembler::comp_op(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2,
|
||||
#ifdef _LP64
|
||||
// %%% Make this explode if addr isn't reachable until we figure out a
|
||||
// better strategy by giving noreg as the temp for as_Address
|
||||
__ cmpptr(rscratch1, as_Address(addr, noreg));
|
||||
__ cmpoop(rscratch1, as_Address(addr, noreg));
|
||||
#else
|
||||
__ cmpoop(as_Address(addr), c->as_jobject());
|
||||
#endif // _LP64
|
||||
|
@ -2783,6 +2783,21 @@ void MacroAssembler::cmpptr(Address src1, AddressLiteral src2) {
|
||||
#endif // _LP64
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpoop(Register src1, Register src2) {
|
||||
cmpptr(src1, src2);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpoop(Register src1, Address src2) {
|
||||
cmpptr(src1, src2);
|
||||
}
|
||||
|
||||
#ifdef _LP64
|
||||
void MacroAssembler::cmpoop(Register src1, jobject src2) {
|
||||
movoop(rscratch1, src2);
|
||||
cmpptr(src1, rscratch1);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MacroAssembler::locked_cmpxchgptr(Register reg, AddressLiteral adr) {
|
||||
if (reachable(adr)) {
|
||||
if (os::is_MP())
|
||||
@ -8399,7 +8414,7 @@ void MacroAssembler::arrays_equals(bool is_array_equ, Register ary1, Register ar
|
||||
|
||||
if (is_array_equ) {
|
||||
// Check the input args
|
||||
cmpptr(ary1, ary2);
|
||||
cmpoop(ary1, ary2);
|
||||
jcc(Assembler::equal, TRUE_LABEL);
|
||||
|
||||
// Need additional checks for arrays_equals.
|
||||
|
@ -750,9 +750,12 @@ class MacroAssembler: public Assembler {
|
||||
void cmpklass(Address dst, Metadata* obj);
|
||||
void cmpklass(Register dst, Metadata* obj);
|
||||
void cmpoop(Address dst, jobject obj);
|
||||
void cmpoop(Register dst, jobject obj);
|
||||
#endif // _LP64
|
||||
|
||||
void cmpoop(Register src1, Register src2);
|
||||
void cmpoop(Register src1, Address src2);
|
||||
void cmpoop(Register dst, jobject obj);
|
||||
|
||||
// NOTE src2 must be the lval. This is NOT an mem-mem compare
|
||||
void cmpptr(Address src1, AddressLiteral src2);
|
||||
|
||||
|
@ -182,7 +182,7 @@ void MethodHandles::jump_to_lambda_form(MacroAssembler* _masm,
|
||||
sizeof(u2), /*is_signed*/ false);
|
||||
// assert(sizeof(u2) == sizeof(Method::_size_of_parameters), "");
|
||||
Label L;
|
||||
__ cmpptr(recv, __ argument_address(temp2, -1));
|
||||
__ cmpoop(recv, __ argument_address(temp2, -1));
|
||||
__ jcc(Assembler::equal, L);
|
||||
__ movptr(rax, __ argument_address(temp2, -1));
|
||||
__ STOP("receiver not on stack");
|
||||
|
@ -2315,7 +2315,7 @@ void TemplateTable::if_acmp(Condition cc) {
|
||||
// assume branch is more often taken than not (loops use backward branches)
|
||||
Label not_taken;
|
||||
__ pop_ptr(rdx);
|
||||
__ cmpptr(rdx, rax);
|
||||
__ cmpoop(rdx, rax);
|
||||
__ jcc(j_not(cc), not_taken);
|
||||
branch(false, false);
|
||||
__ bind(not_taken);
|
||||
|
Loading…
Reference in New Issue
Block a user