Mercurial > hg > graal-jvmci-8
comparison src/share/vm/prims/unsafe.cpp @ 6266:1d7922586cf6
7023639: JSR 292 method handle invocation needs a fast path for compiled code
6984705: JSR 292 method handle creation should not go through JNI
Summary: remove assembly code for JDK 7 chained method handles
Reviewed-by: jrose, twisti, kvn, mhaupt
Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author | twisti |
---|---|
date | Tue, 24 Jul 2012 10:51:00 -0700 |
parents | 9c9fb30d2b3b |
children | da91efe96a93 |
comparison
equal
deleted
inserted
replaced
6241:aba91a731143 | 6266:1d7922586cf6 |
---|---|
759 THROW_0(vmSymbols::java_lang_NullPointerException()); | 759 THROW_0(vmSymbols::java_lang_NullPointerException()); |
760 } | 760 } |
761 return JNIHandles::make_local(env, JNIHandles::resolve_non_null(clazz)); | 761 return JNIHandles::make_local(env, JNIHandles::resolve_non_null(clazz)); |
762 UNSAFE_END | 762 UNSAFE_END |
763 | 763 |
764 UNSAFE_ENTRY(void, Unsafe_EnsureClassInitialized(JNIEnv *env, jobject unsafe, jobject clazz)) | 764 UNSAFE_ENTRY(void, Unsafe_EnsureClassInitialized(JNIEnv *env, jobject unsafe, jobject clazz)) { |
765 UnsafeWrapper("Unsafe_EnsureClassInitialized"); | 765 UnsafeWrapper("Unsafe_EnsureClassInitialized"); |
766 if (clazz == NULL) { | 766 if (clazz == NULL) { |
767 THROW(vmSymbols::java_lang_NullPointerException()); | 767 THROW(vmSymbols::java_lang_NullPointerException()); |
768 } | 768 } |
769 oop mirror = JNIHandles::resolve_non_null(clazz); | 769 oop mirror = JNIHandles::resolve_non_null(clazz); |
770 instanceKlass* k = instanceKlass::cast(java_lang_Class::as_klassOop(mirror)); | 770 |
771 if (k != NULL) { | 771 klassOop klass = java_lang_Class::as_klassOop(mirror); |
772 if (klass != NULL && Klass::cast(klass)->should_be_initialized()) { | |
773 instanceKlass* k = instanceKlass::cast(klass); | |
772 k->initialize(CHECK); | 774 k->initialize(CHECK); |
773 } | 775 } |
776 } | |
777 UNSAFE_END | |
778 | |
779 UNSAFE_ENTRY(jboolean, Unsafe_ShouldBeInitialized(JNIEnv *env, jobject unsafe, jobject clazz)) { | |
780 UnsafeWrapper("Unsafe_ShouldBeInitialized"); | |
781 if (clazz == NULL) { | |
782 THROW_(vmSymbols::java_lang_NullPointerException(), false); | |
783 } | |
784 oop mirror = JNIHandles::resolve_non_null(clazz); | |
785 klassOop klass = java_lang_Class::as_klassOop(mirror); | |
786 if (klass != NULL && Klass::cast(klass)->should_be_initialized()) { | |
787 return true; | |
788 } | |
789 return false; | |
790 } | |
774 UNSAFE_END | 791 UNSAFE_END |
775 | 792 |
776 static void getBaseAndScale(int& base, int& scale, jclass acls, TRAPS) { | 793 static void getBaseAndScale(int& base, int& scale, jclass acls, TRAPS) { |
777 if (acls == NULL) { | 794 if (acls == NULL) { |
778 THROW(vmSymbols::java_lang_NullPointerException()); | 795 THROW(vmSymbols::java_lang_NullPointerException()); |
1564 | 1581 |
1565 JNINativeMethod anonk_methods[] = { | 1582 JNINativeMethod anonk_methods[] = { |
1566 {CC"defineAnonymousClass", CC"("DAC_Args")"CLS, FN_PTR(Unsafe_DefineAnonymousClass)}, | 1583 {CC"defineAnonymousClass", CC"("DAC_Args")"CLS, FN_PTR(Unsafe_DefineAnonymousClass)}, |
1567 }; | 1584 }; |
1568 | 1585 |
1586 JNINativeMethod lform_methods[] = { | |
1587 {CC"shouldBeInitialized",CC"("CLS")Z", FN_PTR(Unsafe_ShouldBeInitialized)}, | |
1588 }; | |
1589 | |
1569 #undef CC | 1590 #undef CC |
1570 #undef FN_PTR | 1591 #undef FN_PTR |
1571 | 1592 |
1572 #undef ADR | 1593 #undef ADR |
1573 #undef LANG | 1594 #undef LANG |
1634 tty->print_cr("Warning: SDK 1.7 Unsafe.defineClass (anonymous version) not found."); | 1655 tty->print_cr("Warning: SDK 1.7 Unsafe.defineClass (anonymous version) not found."); |
1635 } | 1656 } |
1636 env->ExceptionClear(); | 1657 env->ExceptionClear(); |
1637 } | 1658 } |
1638 } | 1659 } |
1660 if (EnableInvokeDynamic) { | |
1661 env->RegisterNatives(unsafecls, lform_methods, sizeof(lform_methods)/sizeof(JNINativeMethod)); | |
1662 if (env->ExceptionOccurred()) { | |
1663 if (PrintMiscellaneous && (Verbose || WizardMode)) { | |
1664 tty->print_cr("Warning: SDK 1.7 LambdaForm support in Unsafe not found."); | |
1665 } | |
1666 env->ExceptionClear(); | |
1667 } | |
1668 } | |
1639 int status = env->RegisterNatives(unsafecls, methods, sizeof(methods)/sizeof(JNINativeMethod)); | 1669 int status = env->RegisterNatives(unsafecls, methods, sizeof(methods)/sizeof(JNINativeMethod)); |
1640 if (env->ExceptionOccurred()) { | 1670 if (env->ExceptionOccurred()) { |
1641 if (PrintMiscellaneous && (Verbose || WizardMode)) { | 1671 if (PrintMiscellaneous && (Verbose || WizardMode)) { |
1642 tty->print_cr("Warning: SDK 1.6 version of Unsafe not found."); | 1672 tty->print_cr("Warning: SDK 1.6 version of Unsafe not found."); |
1643 } | 1673 } |