mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-06 21:18:42 +00:00
Remove UseCCP for RiscV
This commit is contained in:
parent
bd5c185c9b
commit
ce3f37b0ae
@ -196,12 +196,9 @@ void LIR_Assembler::arraycopy_type_check(Register src, Register src_pos, Registe
|
||||
if (UseCompactObjectHeaders) {
|
||||
__ load_narrow_klass_compact(tmp, src);
|
||||
__ load_narrow_klass_compact(t0, dst);
|
||||
} else if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
} else {
|
||||
__ lwu(tmp, Address(src, oopDesc::klass_offset_in_bytes()));
|
||||
__ lwu(t0, Address(dst, oopDesc::klass_offset_in_bytes()));
|
||||
} else {
|
||||
__ ld(tmp, Address(src, oopDesc::klass_offset_in_bytes()));
|
||||
__ ld(t0, Address(dst, oopDesc::klass_offset_in_bytes()));
|
||||
}
|
||||
__ bne(tmp, t0, *stub->entry(), /* is_far */ true);
|
||||
} else {
|
||||
@ -257,9 +254,7 @@ void LIR_Assembler::arraycopy_assert(Register src, Register dst, Register tmp, c
|
||||
// but not necessarily exactly of type default_type.
|
||||
Label known_ok, halt;
|
||||
__ mov_metadata(tmp, default_type->constant_encoding());
|
||||
if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
__ encode_klass_not_null(tmp);
|
||||
}
|
||||
__ encode_klass_not_null(tmp);
|
||||
|
||||
if (basic_type != T_OBJECT) {
|
||||
__ cmp_klass_compressed(dst, tmp, t0, halt, false);
|
||||
|
||||
@ -1181,12 +1181,8 @@ void LIR_Assembler::emit_typecheck_helper(LIR_OpTypeCheck *op, Label* success, L
|
||||
} else if (obj == klass_RInfo) {
|
||||
klass_RInfo = dst;
|
||||
}
|
||||
if (k->is_loaded() && !USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
select_different_registers(obj, dst, k_RInfo, klass_RInfo);
|
||||
} else {
|
||||
Rtmp1 = op->tmp3()->as_register();
|
||||
select_different_registers(obj, dst, k_RInfo, klass_RInfo, Rtmp1);
|
||||
}
|
||||
Rtmp1 = op->tmp3()->as_register();
|
||||
select_different_registers(obj, dst, k_RInfo, klass_RInfo, Rtmp1);
|
||||
|
||||
assert_different_registers(obj, k_RInfo, klass_RInfo);
|
||||
|
||||
|
||||
@ -1073,9 +1073,7 @@ void LIRGenerator::do_CheckCast(CheckCast* x) {
|
||||
}
|
||||
LIR_Opr reg = rlock_result(x);
|
||||
LIR_Opr tmp3 = LIR_OprFact::illegalOpr;
|
||||
if (!x->klass()->is_loaded() || USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
tmp3 = new_register(objectType);
|
||||
}
|
||||
tmp3 = new_register(objectType);
|
||||
__ checkcast(reg, obj.result(), x->klass(),
|
||||
new_register(objectType), new_register(objectType), tmp3,
|
||||
x->direct_compare(), info_for_exception, patching_info, stub,
|
||||
@ -1094,9 +1092,7 @@ void LIRGenerator::do_InstanceOf(InstanceOf* x) {
|
||||
}
|
||||
obj.load_item();
|
||||
LIR_Opr tmp3 = LIR_OprFact::illegalOpr;
|
||||
if (!x->klass()->is_loaded() || USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
tmp3 = new_register(objectType);
|
||||
}
|
||||
tmp3 = new_register(objectType);
|
||||
__ instanceof(reg, obj.result(), x->klass(),
|
||||
new_register(objectType), new_register(objectType), tmp3,
|
||||
x->direct_compare(), patching_info, x->profiled_method(), x->profiled_bci());
|
||||
|
||||
@ -92,12 +92,8 @@ void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register
|
||||
// This assumes that all prototype bits fitr in an int32_t
|
||||
mv(tmp1, checked_cast<int32_t>(markWord::prototype().value()));
|
||||
sd(tmp1, Address(obj, oopDesc::mark_offset_in_bytes()));
|
||||
if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) { // Take care not to kill klass
|
||||
encode_klass_not_null(tmp1, klass, tmp2);
|
||||
sw(tmp1, Address(obj, oopDesc::klass_offset_in_bytes()));
|
||||
} else {
|
||||
sd(klass, Address(obj, oopDesc::klass_offset_in_bytes()));
|
||||
}
|
||||
encode_klass_not_null(tmp1, klass, tmp2);
|
||||
sw(tmp1, Address(obj, oopDesc::klass_offset_in_bytes()));
|
||||
}
|
||||
|
||||
if (len->is_valid()) {
|
||||
@ -108,7 +104,7 @@ void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register
|
||||
// Clear gap/first 4 bytes following the length field.
|
||||
sw(zr, Address(obj, base_offset));
|
||||
}
|
||||
} else if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE && !UseCompactObjectHeaders) {
|
||||
} else if (!UseCompactObjectHeaders) {
|
||||
store_klass_gap(obj, zr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1156,8 +1156,7 @@ void C2_MacroAssembler::string_compare_long_same_encoding(Register result, Regis
|
||||
Label TAIL_CHECK, TAIL, NEXT_WORD, DIFFERENCE;
|
||||
|
||||
const int base_offset = arrayOopDesc::base_offset_in_bytes(T_BYTE);
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
const int minCharsInWord = isLL ? wordSize : wordSize / 2;
|
||||
|
||||
@ -1250,8 +1249,7 @@ void C2_MacroAssembler::string_compare_long_different_encoding(Register result,
|
||||
Label TAIL, NEXT_WORD, DIFFERENCE;
|
||||
|
||||
const int base_offset = arrayOopDesc::base_offset_in_bytes(T_BYTE);
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
Register strL = isLU ? str1 : str2;
|
||||
Register strU = isLU ? str2 : str1;
|
||||
@ -1466,8 +1464,7 @@ void C2_MacroAssembler::arrays_equals(Register a1, Register a2,
|
||||
int length_offset = arrayOopDesc::length_offset_in_bytes();
|
||||
int base_offset = arrayOopDesc::base_offset_in_bytes(elem_size == 2 ? T_CHAR : T_BYTE);
|
||||
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
Register cnt1 = tmp3;
|
||||
Register cnt2 = tmp1; // cnt2 only used in array length compare
|
||||
@ -1592,8 +1589,7 @@ void C2_MacroAssembler::string_equals(Register a1, Register a2,
|
||||
|
||||
int base_offset = arrayOopDesc::base_offset_in_bytes(T_BYTE);
|
||||
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
BLOCK_COMMENT("string_equals {");
|
||||
|
||||
@ -2603,8 +2599,7 @@ void C2_MacroAssembler::arrays_equals_v(Register a1, Register a2, Register resul
|
||||
int length_offset = arrayOopDesc::length_offset_in_bytes();
|
||||
int base_offset = arrayOopDesc::base_offset_in_bytes(elem_size == 2 ? T_CHAR : T_BYTE);
|
||||
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
BLOCK_COMMENT("arrays_equals_v {");
|
||||
|
||||
|
||||
@ -3106,10 +3106,8 @@ void MacroAssembler::orptr(Address adr, RegisterOrConstant src, Register tmp1, R
|
||||
void MacroAssembler::cmp_klass_compressed(Register oop, Register trial_klass, Register tmp, Label &L, bool equal) {
|
||||
if (UseCompactObjectHeaders) {
|
||||
load_narrow_klass_compact(tmp, oop);
|
||||
} else if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
lwu(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
|
||||
} else {
|
||||
ld(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
|
||||
lwu(tmp, Address(oop, oopDesc::klass_offset_in_bytes()));
|
||||
}
|
||||
if (equal) {
|
||||
beq(trial_klass, tmp, L);
|
||||
@ -3333,11 +3331,9 @@ void MacroAssembler::load_klass(Register dst, Register src, Register tmp) {
|
||||
if (UseCompactObjectHeaders) {
|
||||
load_narrow_klass_compact(dst, src);
|
||||
decode_klass_not_null(dst, tmp);
|
||||
} else if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
} else {
|
||||
lwu(dst, Address(src, oopDesc::klass_offset_in_bytes()));
|
||||
decode_klass_not_null(dst, tmp);
|
||||
} else {
|
||||
ld(dst, Address(src, oopDesc::klass_offset_in_bytes()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -3345,20 +3341,15 @@ void MacroAssembler::store_klass(Register dst, Register src, Register tmp) {
|
||||
// FIXME: Should this be a store release? concurrent gcs assumes
|
||||
// klass length is valid if klass field is not null.
|
||||
assert(!UseCompactObjectHeaders, "not with compact headers");
|
||||
if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
encode_klass_not_null(src, tmp);
|
||||
sw(src, Address(dst, oopDesc::klass_offset_in_bytes()));
|
||||
} else {
|
||||
sd(src, Address(dst, oopDesc::klass_offset_in_bytes()));
|
||||
}
|
||||
encode_klass_not_null(src, tmp);
|
||||
sw(src, Address(dst, oopDesc::klass_offset_in_bytes()));
|
||||
|
||||
}
|
||||
|
||||
void MacroAssembler::store_klass_gap(Register dst, Register src) {
|
||||
assert(!UseCompactObjectHeaders, "not with compact headers");
|
||||
if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
// Store to klass gap in destination
|
||||
sw(src, Address(dst, oopDesc::klass_gap_offset_in_bytes()));
|
||||
}
|
||||
// Store to klass gap in destination
|
||||
sw(src, Address(dst, oopDesc::klass_gap_offset_in_bytes()));
|
||||
}
|
||||
|
||||
void MacroAssembler::decode_klass_not_null(Register r, Register tmp) {
|
||||
@ -3367,7 +3358,6 @@ void MacroAssembler::decode_klass_not_null(Register r, Register tmp) {
|
||||
}
|
||||
|
||||
void MacroAssembler::decode_klass_not_null(Register dst, Register src, Register tmp) {
|
||||
assert(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE, "should only be used for compressed headers");
|
||||
assert_different_registers(dst, tmp);
|
||||
assert_different_registers(src, tmp);
|
||||
|
||||
@ -3398,8 +3388,6 @@ void MacroAssembler::encode_klass_not_null(Register r, Register tmp) {
|
||||
}
|
||||
|
||||
void MacroAssembler::encode_klass_not_null(Register dst, Register src, Register tmp) {
|
||||
assert(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE, "should only be used for compressed headers");
|
||||
|
||||
if (CompressedKlassPointers::base() == nullptr) {
|
||||
if (CompressedKlassPointers::shift() != 0) {
|
||||
srli(dst, src, CompressedKlassPointers::shift());
|
||||
@ -4930,7 +4918,6 @@ void MacroAssembler::set_narrow_oop(Register dst, jobject obj) {
|
||||
}
|
||||
|
||||
void MacroAssembler::set_narrow_klass(Register dst, Klass* k) {
|
||||
assert (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE, "should only be used for compressed headers");
|
||||
assert (oop_recorder() != nullptr, "this assembler needs an OopRecorder");
|
||||
int index = oop_recorder()->find_index(k);
|
||||
assert(!Universe::heap()->is_in(k), "should not be an oop");
|
||||
@ -5011,12 +4998,9 @@ int MacroAssembler::ic_check(int end_alignment) {
|
||||
if (UseCompactObjectHeaders) {
|
||||
load_narrow_klass_compact(tmp1, receiver);
|
||||
lwu(tmp2, Address(data, CompiledICData::speculated_klass_offset()));
|
||||
} else if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
} else {
|
||||
lwu(tmp1, Address(receiver, oopDesc::klass_offset_in_bytes()));
|
||||
lwu(tmp2, Address(data, CompiledICData::speculated_klass_offset()));
|
||||
} else {
|
||||
ld(tmp1, Address(receiver, oopDesc::klass_offset_in_bytes()));
|
||||
ld(tmp2, Address(data, CompiledICData::speculated_klass_offset()));
|
||||
}
|
||||
|
||||
Label ic_hit;
|
||||
|
||||
@ -1801,13 +1801,8 @@ void MachUEPNode::format(PhaseRegAlloc* ra_, outputStream* st) const
|
||||
{
|
||||
assert_cond(st != nullptr);
|
||||
st->print_cr("# MachUEPNode");
|
||||
if (USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE) {
|
||||
st->print_cr("\tlwu t1, [j_rarg0 + oopDesc::klass_offset_in_bytes()]\t# compressed klass");
|
||||
st->print_cr("\tlwu t2, [t0 + CompiledICData::speculated_klass_offset()]\t# compressed klass");
|
||||
} else {
|
||||
st->print_cr("\tld t1, [j_rarg0 + oopDesc::klass_offset_in_bytes()]\t# compressed klass");
|
||||
st->print_cr("\tld t2, [t0 + CompiledICData::speculated_klass_offset()]\t# compressed klass");
|
||||
}
|
||||
st->print_cr("\tlwu t1, [j_rarg0 + oopDesc::klass_offset_in_bytes()]\t# compressed klass");
|
||||
st->print_cr("\tlwu t2, [t0 + CompiledICData::speculated_klass_offset()]\t# compressed klass");
|
||||
st->print_cr("\tbeq t1, t2, ic_hit");
|
||||
st->print_cr("\tj, SharedRuntime::_ic_miss_stub\t # Inline cache check");
|
||||
st->print_cr("\tic_hit:");
|
||||
|
||||
@ -2612,8 +2612,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||
const Register tmp = x30, tmpLval = x12;
|
||||
|
||||
int base_offset = arrayOopDesc::base_offset_in_bytes(T_BYTE);
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
#ifdef ASSERT
|
||||
if (AvoidUnalignedAccesses) {
|
||||
@ -2670,8 +2669,7 @@ class StubGenerator: public StubCodeGenerator {
|
||||
tmp1 = x28, tmp2 = x29, tmp3 = x30, tmp4 = x12;
|
||||
|
||||
int base_offset = arrayOopDesc::base_offset_in_bytes(T_BYTE);
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 :
|
||||
(USE_COMPRESSED_CLASS_POINTERS_ALWAYS_TRUE ? 8 : 4))) == 0, "Must be");
|
||||
assert((base_offset % (UseCompactObjectHeaders ? 4 : 8)) == 0, "Must be");
|
||||
|
||||
Register strU = isLU ? str2 : str1,
|
||||
strL = isLU ? str1 : str2,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user