mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 19:44:41 +02:00
6858164: invokedynamic code needs some cleanup (post-6655638)
Fix several crashers, remove needless paths for boxed-style bootstrap method call, refactor & simplify APIs for rewriter constantPoolOop, remove sun.dyn.CallSiteImpl Reviewed-by: kvn
This commit is contained in:
parent
e3b5580ecc
commit
903247cf85
30 changed files with 222 additions and 372 deletions
|
@ -28,21 +28,17 @@
|
|||
|
||||
// Implememtation of ConstantPoolCacheEntry
|
||||
|
||||
void ConstantPoolCacheEntry::set_initial_state(int index) {
|
||||
if (constantPoolCacheOopDesc::is_secondary_index(index)) {
|
||||
// Hack: The rewriter is trying to say that this entry itself
|
||||
// will be a secondary entry.
|
||||
int main_index = constantPoolCacheOopDesc::decode_secondary_index(index);
|
||||
assert(0 <= main_index && main_index < 0x10000, "sanity check");
|
||||
_indices = (main_index << 16);
|
||||
assert(main_entry_index() == main_index, "");
|
||||
return;
|
||||
}
|
||||
void ConstantPoolCacheEntry::initialize_entry(int index) {
|
||||
assert(0 < index && index < 0x10000, "sanity check");
|
||||
_indices = index;
|
||||
assert(constant_pool_index() == index, "");
|
||||
}
|
||||
|
||||
void ConstantPoolCacheEntry::initialize_secondary_entry(int main_index) {
|
||||
assert(0 <= main_index && main_index < 0x10000, "sanity check");
|
||||
_indices = (main_index << 16);
|
||||
assert(main_entry_index() == main_index, "");
|
||||
}
|
||||
|
||||
int ConstantPoolCacheEntry::as_flags(TosState state, bool is_final,
|
||||
bool is_vfinal, bool is_volatile,
|
||||
|
@ -223,10 +219,10 @@ void ConstantPoolCacheEntry::set_interface_call(methodHandle method, int index)
|
|||
|
||||
|
||||
void ConstantPoolCacheEntry::set_dynamic_call(Handle call_site, int extra_data) {
|
||||
methodOop method = (methodOop) sun_dyn_CallSiteImpl::vmmethod(call_site());
|
||||
methodOop method = (methodOop) java_dyn_CallSite::vmmethod(call_site());
|
||||
assert(method->is_method(), "must be initialized properly");
|
||||
int param_size = method->size_of_parameters();
|
||||
assert(param_size > 1, "method argument size must include MH.this & initial dynamic receiver");
|
||||
assert(param_size >= 1, "method argument size must include MH.this");
|
||||
param_size -= 1; // do not count MH.this; it is not stacked for invokedynamic
|
||||
if (Atomic::cmpxchg_ptr(call_site(), &_f1, NULL) == NULL) {
|
||||
// racing threads might be trying to install their own favorites
|
||||
|
@ -439,7 +435,18 @@ void ConstantPoolCacheEntry::verify(outputStream* st) const {
|
|||
|
||||
void constantPoolCacheOopDesc::initialize(intArray& inverse_index_map) {
|
||||
assert(inverse_index_map.length() == length(), "inverse index map must have same length as cache");
|
||||
for (int i = 0; i < length(); i++) entry_at(i)->set_initial_state(inverse_index_map[i]);
|
||||
for (int i = 0; i < length(); i++) {
|
||||
ConstantPoolCacheEntry* e = entry_at(i);
|
||||
int original_index = inverse_index_map[i];
|
||||
if ((original_index & Rewriter::_secondary_entry_tag) != 0) {
|
||||
int main_index = (original_index - Rewriter::_secondary_entry_tag);
|
||||
assert(!entry_at(main_index)->is_secondary_entry(), "valid main index");
|
||||
e->initialize_secondary_entry(main_index);
|
||||
} else {
|
||||
e->initialize_entry(original_index);
|
||||
}
|
||||
assert(entry_at(i) == e, "sanity");
|
||||
}
|
||||
}
|
||||
|
||||
// RedefineClasses() API support:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue