mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
7023639: JSR 292 method handle invocation needs a fast path for compiled code
6984705: JSR 292 method handle creation should not go through JNI Remove assembly code for JDK 7 chained method handles Co-authored-by: John Rose <john.r.rose@oracle.com> Co-authored-by: Michael Haupt <michael.haupt@oracle.com> Reviewed-by: jrose, twisti, kvn, mhaupt
This commit is contained in:
parent
893817c28d
commit
12901d0e5b
181 changed files with 5760 additions and 14402 deletions
|
@ -761,16 +761,33 @@ UNSAFE_ENTRY(jobject, Unsafe_StaticFieldBaseFromClass(JNIEnv *env, jobject unsaf
|
|||
return JNIHandles::make_local(env, JNIHandles::resolve_non_null(clazz));
|
||||
UNSAFE_END
|
||||
|
||||
UNSAFE_ENTRY(void, Unsafe_EnsureClassInitialized(JNIEnv *env, jobject unsafe, jobject clazz))
|
||||
UNSAFE_ENTRY(void, Unsafe_EnsureClassInitialized(JNIEnv *env, jobject unsafe, jobject clazz)) {
|
||||
UnsafeWrapper("Unsafe_EnsureClassInitialized");
|
||||
if (clazz == NULL) {
|
||||
THROW(vmSymbols::java_lang_NullPointerException());
|
||||
}
|
||||
oop mirror = JNIHandles::resolve_non_null(clazz);
|
||||
instanceKlass* k = instanceKlass::cast(java_lang_Class::as_klassOop(mirror));
|
||||
if (k != NULL) {
|
||||
|
||||
klassOop klass = java_lang_Class::as_klassOop(mirror);
|
||||
if (klass != NULL && Klass::cast(klass)->should_be_initialized()) {
|
||||
instanceKlass* k = instanceKlass::cast(klass);
|
||||
k->initialize(CHECK);
|
||||
}
|
||||
}
|
||||
UNSAFE_END
|
||||
|
||||
UNSAFE_ENTRY(jboolean, Unsafe_ShouldBeInitialized(JNIEnv *env, jobject unsafe, jobject clazz)) {
|
||||
UnsafeWrapper("Unsafe_ShouldBeInitialized");
|
||||
if (clazz == NULL) {
|
||||
THROW_(vmSymbols::java_lang_NullPointerException(), false);
|
||||
}
|
||||
oop mirror = JNIHandles::resolve_non_null(clazz);
|
||||
klassOop klass = java_lang_Class::as_klassOop(mirror);
|
||||
if (klass != NULL && Klass::cast(klass)->should_be_initialized()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
UNSAFE_END
|
||||
|
||||
static void getBaseAndScale(int& base, int& scale, jclass acls, TRAPS) {
|
||||
|
@ -1566,6 +1583,10 @@ JNINativeMethod anonk_methods[] = {
|
|||
{CC"defineAnonymousClass", CC"("DAC_Args")"CLS, FN_PTR(Unsafe_DefineAnonymousClass)},
|
||||
};
|
||||
|
||||
JNINativeMethod lform_methods[] = {
|
||||
{CC"shouldBeInitialized",CC"("CLS")Z", FN_PTR(Unsafe_ShouldBeInitialized)},
|
||||
};
|
||||
|
||||
#undef CC
|
||||
#undef FN_PTR
|
||||
|
||||
|
@ -1636,6 +1657,15 @@ JVM_ENTRY(void, JVM_RegisterUnsafeMethods(JNIEnv *env, jclass unsafecls))
|
|||
env->ExceptionClear();
|
||||
}
|
||||
}
|
||||
if (EnableInvokeDynamic) {
|
||||
env->RegisterNatives(unsafecls, lform_methods, sizeof(lform_methods)/sizeof(JNINativeMethod));
|
||||
if (env->ExceptionOccurred()) {
|
||||
if (PrintMiscellaneous && (Verbose || WizardMode)) {
|
||||
tty->print_cr("Warning: SDK 1.7 LambdaForm support in Unsafe not found.");
|
||||
}
|
||||
env->ExceptionClear();
|
||||
}
|
||||
}
|
||||
int status = env->RegisterNatives(unsafecls, methods, sizeof(methods)/sizeof(JNINativeMethod));
|
||||
if (env->ExceptionOccurred()) {
|
||||
if (PrintMiscellaneous && (Verbose || WizardMode)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue