Skip to content
Permalink
Browse files
8257423: [PPC64] Support -XX:-UseInlineCaches
Reviewed-by: stuefe, rrich
  • Loading branch information
TheRealMDoerr committed Dec 4, 2020
1 parent feabdde commit 1d2d9815d0f3ba6d42ac1a12b3af77876878bf01
Showing 2 changed files with 24 additions and 16 deletions.
@@ -3153,10 +3153,25 @@ void MacroAssembler::store_klass_gap(Register dst_oop, Register val) {
}

int MacroAssembler::instr_size_for_decode_klass_not_null() {
if (!UseCompressedClassPointers) return 0;
int num_instrs = 1; // shift or move
if (CompressedKlassPointers::base() != 0) num_instrs = 7; // shift + load const + add
return num_instrs * BytesPerInstWord;
static int computed_size = -1;

// Not yet computed?
if (computed_size == -1) {

if (!UseCompressedClassPointers) {
computed_size = 0;
} else {
// Determine by scratch emit.
ResourceMark rm;
int code_size = 8 * BytesPerInstWord;
CodeBuffer cb("decode_klass_not_null scratch buffer", code_size, 0);
MacroAssembler* a = new MacroAssembler(&cb);
a->decode_klass_not_null(R11_scratch1);
computed_size = a->offset();
}
}

return computed_size;
}

void MacroAssembler::decode_klass_not_null(Register dst, Register src) {
@@ -1100,17 +1100,15 @@ int MachCallStaticJavaNode::ret_addr_offset() {
int MachCallDynamicJavaNode::ret_addr_offset() {
// Offset is 4 with postalloc expanded calls (bl is one instruction). We use
// postalloc expanded calls if we use inline caches and do not update method data.
if (UseInlineCaches)
return 4;
if (UseInlineCaches) return 4;

int vtable_index = this->_vtable_index;
if (vtable_index < 0) {
// Must be invalid_vtable_index, not nonvirtual_vtable_index.
assert(vtable_index == Method::invalid_vtable_index, "correct sentinel value");
return 12;
} else {
assert(!UseInlineCaches, "expect vtable calls only if not using ICs");
return 24;
return 24 + MacroAssembler::instr_size_for_decode_klass_not_null();
}
}

@@ -3635,7 +3633,7 @@ encode %{
int start_offset = __ offset();

Register Rtoc = (ra_) ? $constanttablebase : R2_TOC;
#if 0

int vtable_index = this->_vtable_index;
if (_vtable_index < 0) {
// Must be invalid_vtable_index, not nonvirtual_vtable_index.
@@ -3656,7 +3654,7 @@ encode %{
__ relocate(virtual_call_Relocation::spec(virtual_call_meta_addr));
emit_call_with_trampoline_stub(_masm, (address)$meth$$method, relocInfo::none);
assert(((MachCallDynamicJavaNode*)this)->ret_addr_offset() == __ offset() - start_offset,
"Fix constant in ret_addr_offset()");
"Fix constant in ret_addr_offset(), expected %d", __ offset() - start_offset);
} else {
assert(!UseInlineCaches, "expect vtable calls only if not using ICs");
// Go thru the vtable. Get receiver klass. Receiver already
@@ -3676,14 +3674,9 @@ encode %{
// Call target. Either compiled code or C2I adapter.
__ mtctr(R11_scratch1);
__ bctrl();
if (((MachCallDynamicJavaNode*)this)->ret_addr_offset() != __ offset() - start_offset) {
tty->print(" %d, %d\n", ((MachCallDynamicJavaNode*)this)->ret_addr_offset(),__ offset() - start_offset);
}
assert(((MachCallDynamicJavaNode*)this)->ret_addr_offset() == __ offset() - start_offset,
"Fix constant in ret_addr_offset()");
"Fix constant in ret_addr_offset(), expected %d", __ offset() - start_offset);
}
#endif
Unimplemented(); // ret_addr_offset not yet fixed. Depends on compressed oops (load klass!).
%}

// a runtime call

1 comment on commit 1d2d981

@openjdk-notifier
Copy link

@openjdk-notifier openjdk-notifier bot commented on 1d2d981 Dec 4, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.