comparison src/share/vm/graal/graalCompilerToVM.cpp @ 9338:0266549ff6e0

added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81) replaced NewArraySlowStubCall with NewArrayRuntimeCall using this support
author Doug Simon <doug.simon@oracle.com>
date Fri, 26 Apr 2013 18:36:41 +0200
parents bb2447c64055
children d4684b468e93
comparison
equal deleted inserted replaced
9337:e1200d5141fa 9338:0266549ff6e0
618 C2V_ENTRY(void, initializeConfiguration, (JNIEnv *env, jobject, jobject config)) 618 C2V_ENTRY(void, initializeConfiguration, (JNIEnv *env, jobject, jobject config))
619 619
620 #define set_boolean(name, value) do { env->SetBooleanField(config, getFieldID(env, config, name, "Z"), value); } while (0) 620 #define set_boolean(name, value) do { env->SetBooleanField(config, getFieldID(env, config, name, "Z"), value); } while (0)
621 #define set_int(name, value) do { env->SetIntField(config, getFieldID(env, config, name, "I"), value); } while (0) 621 #define set_int(name, value) do { env->SetIntField(config, getFieldID(env, config, name, "I"), value); } while (0)
622 #define set_long(name, value) do { env->SetLongField(config, getFieldID(env, config, name, "J"), value); } while (0) 622 #define set_long(name, value) do { env->SetLongField(config, getFieldID(env, config, name, "J"), value); } while (0)
623 #define set_stub(name, value) do { set_long(name, (jlong) value); } while (0) 623 #define set_address(name, value) do { set_long(name, (jlong) value); } while (0)
624 #define set_object(name, value) do { env->SetObjectField(config, getFieldID(env, config, name, "Ljava/lang/Object;"), value); } while (0) 624 #define set_object(name, value) do { env->SetObjectField(config, getFieldID(env, config, name, "Ljava/lang/Object;"), value); } while (0)
625 #define set_int_array(name, value) do { env->SetObjectField(config, getFieldID(env, config, name, "[I"), value); } while (0) 625 #define set_int_array(name, value) do { env->SetObjectField(config, getFieldID(env, config, name, "[I"), value); } while (0)
626 626
627 guarantee(HeapWordSize == sizeof(char*), "Graal assumption that HeadWordSize == machine word size is wrong"); 627 guarantee(HeapWordSize == sizeof(char*), "Graal assumption that HeadWordSize == machine word size is wrong");
628 #ifdef _WIN64 628 #ifdef _WIN64
697 set_int("arrayKlassLayoutHelperIdentifier", 0x80000000); 697 set_int("arrayKlassLayoutHelperIdentifier", 0x80000000);
698 assert((Klass::_lh_array_tag_obj_value & Klass::_lh_array_tag_type_value & 0x80000000) != 0, "obj_array and type_array must have first bit set"); 698 assert((Klass::_lh_array_tag_obj_value & Klass::_lh_array_tag_type_value & 0x80000000) != 0, "obj_array and type_array must have first bit set");
699 set_int("arrayKlassComponentMirrorOffset", in_bytes(ArrayKlass::component_mirror_offset())); 699 set_int("arrayKlassComponentMirrorOffset", in_bytes(ArrayKlass::component_mirror_offset()));
700 700
701 701
702 set_int("pendingExceptionOffset", in_bytes(ThreadShadow::pending_exception_offset()));
702 set_int("pendingDeoptimizationOffset", in_bytes(ThreadShadow::pending_deoptimization_offset())); 703 set_int("pendingDeoptimizationOffset", in_bytes(ThreadShadow::pending_deoptimization_offset()));
703 704
704 set_int("metaspaceArrayLengthOffset", Array<Klass*>::length_offset_in_bytes()); 705 set_int("metaspaceArrayLengthOffset", Array<Klass*>::length_offset_in_bytes());
705 set_int("metaspaceArrayBaseOffset", Array<Klass*>::base_offset_in_bytes()); 706 set_int("metaspaceArrayBaseOffset", Array<Klass*>::base_offset_in_bytes());
706 set_int("methodDataOopDataOffset", in_bytes(MethodData::data_offset())); 707 set_int("methodDataOopDataOffset", in_bytes(MethodData::data_offset()));
719 set_long("heapTopAddress", (jlong)(address) Universe::heap()->top_addr()); 720 set_long("heapTopAddress", (jlong)(address) Universe::heap()->top_addr());
720 set_long("heapEndAddress", (jlong)(address) Universe::heap()->end_addr()); 721 set_long("heapEndAddress", (jlong)(address) Universe::heap()->end_addr());
721 set_int("threadTlabStartOffset", in_bytes(JavaThread::tlab_start_offset())); 722 set_int("threadTlabStartOffset", in_bytes(JavaThread::tlab_start_offset()));
722 set_int("threadTlabSizeOffset", in_bytes(JavaThread::tlab_size_offset())); 723 set_int("threadTlabSizeOffset", in_bytes(JavaThread::tlab_size_offset()));
723 set_int("threadAllocatedBytesOffset", in_bytes(JavaThread::allocated_bytes_offset())); 724 set_int("threadAllocatedBytesOffset", in_bytes(JavaThread::allocated_bytes_offset()));
725 set_int("threadLastJavaSpOffset", in_bytes(JavaThread::last_Java_sp_offset()));
726 set_int("threadLastJavaFpOffset", in_bytes(JavaThread::last_Java_fp_offset()));
727 set_int("threadLastJavaPcOffset", in_bytes(JavaThread::last_Java_pc_offset()));
728 set_int("threadObjectResultOffset", in_bytes(JavaThread::vm_result_offset()));
724 set_int("tlabSlowAllocationsOffset", in_bytes(JavaThread::tlab_slow_allocations_offset())); 729 set_int("tlabSlowAllocationsOffset", in_bytes(JavaThread::tlab_slow_allocations_offset()));
725 set_int("tlabFastRefillWasteOffset", in_bytes(JavaThread::tlab_fast_refill_waste_offset())); 730 set_int("tlabFastRefillWasteOffset", in_bytes(JavaThread::tlab_fast_refill_waste_offset()));
726 set_int("tlabNumberOfRefillsOffset", in_bytes(JavaThread::tlab_number_of_refills_offset())); 731 set_int("tlabNumberOfRefillsOffset", in_bytes(JavaThread::tlab_number_of_refills_offset()));
727 set_int("tlabRefillWasteLimitOffset", in_bytes(JavaThread::tlab_refill_waste_limit_offset())); 732 set_int("tlabRefillWasteLimitOffset", in_bytes(JavaThread::tlab_refill_waste_limit_offset()));
728 set_int("tlabRefillWasteIncrement", (int32_t) ThreadLocalAllocBuffer::refill_waste_limit_increment()); 733 set_int("tlabRefillWasteIncrement", (int32_t) ThreadLocalAllocBuffer::refill_waste_limit_increment());
740 set_int("layoutHelperHeaderSizeShift", Klass::_lh_header_size_shift); 745 set_int("layoutHelperHeaderSizeShift", Klass::_lh_header_size_shift);
741 set_int("layoutHelperHeaderSizeMask", Klass::_lh_header_size_mask); 746 set_int("layoutHelperHeaderSizeMask", Klass::_lh_header_size_mask);
742 set_int("layoutHelperOffset", in_bytes(Klass::layout_helper_offset())); 747 set_int("layoutHelperOffset", in_bytes(Klass::layout_helper_offset()));
743 748
744 749
745 set_stub("wbPreCallStub", GraalRuntime::entry_for(GraalRuntime::wb_pre_call_id)); 750 set_address("wbPreCallStub", GraalRuntime::entry_for(GraalRuntime::wb_pre_call_id));
746 set_stub("wbPostCallStub", GraalRuntime::entry_for(GraalRuntime::wb_post_call_id)); 751 set_address("wbPostCallStub", GraalRuntime::entry_for(GraalRuntime::wb_post_call_id));
747 752
748 set_stub("newInstanceStub", GraalRuntime::entry_for(GraalRuntime::new_instance_id)); 753 set_address("newInstanceStub", GraalRuntime::entry_for(GraalRuntime::new_instance_id));
749 set_stub("newArrayStub", GraalRuntime::entry_for(GraalRuntime::new_array_id)); 754 set_address("newArrayStub", GraalRuntime::entry_for(GraalRuntime::new_array_id));
750 set_stub("newMultiArrayStub", GraalRuntime::entry_for(GraalRuntime::new_multi_array_id)); 755 set_address("newMultiArrayStub", GraalRuntime::entry_for(GraalRuntime::new_multi_array_id));
751 set_stub("identityHashCodeStub", GraalRuntime::entry_for(GraalRuntime::identity_hash_code_id)); 756 set_address("identityHashCodeStub", GraalRuntime::entry_for(GraalRuntime::identity_hash_code_id));
752 set_stub("threadIsInterruptedStub", GraalRuntime::entry_for(GraalRuntime::thread_is_interrupted_id)); 757 set_address("threadIsInterruptedStub", GraalRuntime::entry_for(GraalRuntime::thread_is_interrupted_id));
753 set_stub("inlineCacheMissStub", SharedRuntime::get_ic_miss_stub()); 758 set_address("inlineCacheMissStub", SharedRuntime::get_ic_miss_stub());
754 set_stub("handleExceptionStub", GraalRuntime::entry_for(GraalRuntime::handle_exception_nofpu_id)); 759 set_address("handleExceptionStub", GraalRuntime::entry_for(GraalRuntime::handle_exception_nofpu_id));
755 set_stub("handleDeoptStub", SharedRuntime::deopt_blob()->unpack()); 760 set_address("handleDeoptStub", SharedRuntime::deopt_blob()->unpack());
756 set_stub("monitorEnterStub", GraalRuntime::entry_for(GraalRuntime::monitorenter_id)); 761 set_address("monitorEnterStub", GraalRuntime::entry_for(GraalRuntime::monitorenter_id));
757 set_stub("monitorExitStub", GraalRuntime::entry_for(GraalRuntime::monitorexit_id)); 762 set_address("monitorExitStub", GraalRuntime::entry_for(GraalRuntime::monitorexit_id));
758 set_stub("verifyOopStub", GraalRuntime::entry_for(GraalRuntime::verify_oop_id)); 763 set_address("verifyOopStub", GraalRuntime::entry_for(GraalRuntime::verify_oop_id));
759 set_stub("vmErrorStub", GraalRuntime::entry_for(GraalRuntime::vm_error_id)); 764 set_address("vmErrorStub", GraalRuntime::entry_for(GraalRuntime::vm_error_id));
760 set_stub("deoptimizeStub", SharedRuntime::deopt_blob()->uncommon_trap()); 765 set_address("deoptimizeStub", SharedRuntime::deopt_blob()->uncommon_trap());
761 set_stub("unwindExceptionStub", GraalRuntime::entry_for(GraalRuntime::unwind_exception_call_id)); 766 set_address("unwindExceptionStub", GraalRuntime::entry_for(GraalRuntime::unwind_exception_call_id));
762 set_stub("osrMigrationEndStub", GraalRuntime::entry_for(GraalRuntime::OSR_migration_end_id)); 767 set_address("osrMigrationEndStub", GraalRuntime::entry_for(GraalRuntime::OSR_migration_end_id));
763 set_stub("registerFinalizerStub", GraalRuntime::entry_for(GraalRuntime::register_finalizer_id)); 768 set_address("registerFinalizerStub", GraalRuntime::entry_for(GraalRuntime::register_finalizer_id));
764 set_stub("createNullPointerExceptionStub", GraalRuntime::entry_for(GraalRuntime::create_null_pointer_exception_id)); 769 set_address("createNullPointerExceptionStub", GraalRuntime::entry_for(GraalRuntime::create_null_pointer_exception_id));
765 set_stub("createOutOfBoundsExceptionStub", GraalRuntime::entry_for(GraalRuntime::create_out_of_bounds_exception_id)); 770 set_address("createOutOfBoundsExceptionStub", GraalRuntime::entry_for(GraalRuntime::create_out_of_bounds_exception_id));
766 set_stub("javaTimeMillisStub", CAST_FROM_FN_PTR(address, os::javaTimeMillis)); 771 set_address("javaTimeMillisStub", CAST_FROM_FN_PTR(address, os::javaTimeMillis));
767 set_stub("javaTimeNanosStub", CAST_FROM_FN_PTR(address, os::javaTimeNanos)); 772 set_address("javaTimeNanosStub", CAST_FROM_FN_PTR(address, os::javaTimeNanos));
768 set_stub("arithmeticFremStub", GraalRuntime::entry_for(GraalRuntime::arithmetic_frem_id)); 773 set_address("arithmeticFremStub", GraalRuntime::entry_for(GraalRuntime::arithmetic_frem_id));
769 set_stub("arithmeticDremStub", GraalRuntime::entry_for(GraalRuntime::arithmetic_drem_id)); 774 set_address("arithmeticDremStub", GraalRuntime::entry_for(GraalRuntime::arithmetic_drem_id));
770 set_stub("arithmeticSinStub", CAST_FROM_FN_PTR(address, SharedRuntime::dsin)); 775 set_address("arithmeticSinStub", CAST_FROM_FN_PTR(address, SharedRuntime::dsin));
771 set_stub("arithmeticCosStub", CAST_FROM_FN_PTR(address, SharedRuntime::dcos)); 776 set_address("arithmeticCosStub", CAST_FROM_FN_PTR(address, SharedRuntime::dcos));
772 set_stub("arithmeticTanStub", CAST_FROM_FN_PTR(address, SharedRuntime::dtan)); 777 set_address("arithmeticTanStub", CAST_FROM_FN_PTR(address, SharedRuntime::dtan));
773 set_stub("logPrimitiveStub", GraalRuntime::entry_for(GraalRuntime::log_primitive_id)); 778 set_address("logPrimitiveStub", GraalRuntime::entry_for(GraalRuntime::log_primitive_id));
774 set_stub("logObjectStub", GraalRuntime::entry_for(GraalRuntime::log_object_id)); 779 set_address("logObjectStub", GraalRuntime::entry_for(GraalRuntime::log_object_id));
775 set_stub("logPrintfStub", GraalRuntime::entry_for(GraalRuntime::log_printf_id)); 780 set_address("logPrintfStub", GraalRuntime::entry_for(GraalRuntime::log_printf_id));
776 set_stub("stubPrintfStub", GraalRuntime::entry_for(GraalRuntime::stub_printf_id)); 781 set_address("stubPrintfStub", GraalRuntime::entry_for(GraalRuntime::stub_printf_id));
777 set_stub("aescryptEncryptBlockStub", StubRoutines::aescrypt_encryptBlock()); 782 set_address("aescryptEncryptBlockStub", StubRoutines::aescrypt_encryptBlock());
778 set_stub("aescryptDecryptBlockStub", StubRoutines::aescrypt_decryptBlock()); 783 set_address("aescryptDecryptBlockStub", StubRoutines::aescrypt_decryptBlock());
779 set_stub("cipherBlockChainingEncryptAESCryptStub", StubRoutines::cipherBlockChaining_encryptAESCrypt()); 784 set_address("cipherBlockChainingEncryptAESCryptStub", StubRoutines::cipherBlockChaining_encryptAESCrypt());
780 set_stub("cipherBlockChainingDecryptAESCryptStub", StubRoutines::cipherBlockChaining_decryptAESCrypt()); 785 set_address("cipherBlockChainingDecryptAESCryptStub", StubRoutines::cipherBlockChaining_decryptAESCrypt());
786
787 set_address("newArrayAddress", GraalRuntime::new_array);
781 788
782 set_int("deoptReasonNone", Deoptimization::Reason_none); 789 set_int("deoptReasonNone", Deoptimization::Reason_none);
783 set_int("deoptReasonNullCheck", Deoptimization::Reason_null_check); 790 set_int("deoptReasonNullCheck", Deoptimization::Reason_null_check);
784 set_int("deoptReasonRangeCheck", Deoptimization::Reason_range_check); 791 set_int("deoptReasonRangeCheck", Deoptimization::Reason_range_check);
785 set_int("deoptReasonClassCheck", Deoptimization::Reason_class_check); 792 set_int("deoptReasonClassCheck", Deoptimization::Reason_class_check);
847 854
848 C2V_VMENTRY(jint, installCode0, (JNIEnv *jniEnv, jobject, jobject compResult, jobject installed_code, jobject triggered_deoptimizations)) 855 C2V_VMENTRY(jint, installCode0, (JNIEnv *jniEnv, jobject, jobject compResult, jobject installed_code, jobject triggered_deoptimizations))
849 ResourceMark rm; 856 ResourceMark rm;
850 HandleMark hm; 857 HandleMark hm;
851 Handle compResultHandle = JNIHandles::resolve(compResult); 858 Handle compResultHandle = JNIHandles::resolve(compResult);
852 nmethod* nm = NULL; 859 CodeBlob* cb = NULL;
853 methodHandle method = getMethodFromHotSpotMethod(HotSpotCompilationResult::method(compResult)); 860 methodHandle method = getMethodFromHotSpotMethod(HotSpotCompilationResult::method(compResult));
854 Handle installed_code_handle = JNIHandles::resolve(installed_code); 861 Handle installed_code_handle = JNIHandles::resolve(installed_code);
855 Handle triggered_deoptimizations_handle = JNIHandles::resolve(triggered_deoptimizations); 862 Handle triggered_deoptimizations_handle = JNIHandles::resolve(triggered_deoptimizations);
856 GraalEnv::CodeInstallResult result; 863 GraalEnv::CodeInstallResult result;
857 CodeInstaller installer(compResultHandle, method, result, nm, installed_code_handle, triggered_deoptimizations_handle); 864
865 CodeInstaller installer(compResultHandle, method, result, cb, installed_code_handle, triggered_deoptimizations_handle);
858 866
859 if (PrintCodeCacheOnCompilation) { 867 if (PrintCodeCacheOnCompilation) {
860 stringStream s; 868 stringStream s;
861 // Dump code cache into a buffer before locking the tty, 869 // Dump code cache into a buffer before locking the tty,
862 { 870 {
866 ttyLocker ttyl; 874 ttyLocker ttyl;
867 tty->print_cr(s.as_string()); 875 tty->print_cr(s.as_string());
868 } 876 }
869 877
870 if (result != GraalEnv::ok) { 878 if (result != GraalEnv::ok) {
871 assert(nm == NULL, "should be"); 879 assert(cb == NULL, "should be");
872 } else { 880 } else {
873 if (!installed_code_handle.is_null()) { 881 if (!installed_code_handle.is_null()) {
874 assert(installed_code_handle->is_a(HotSpotInstalledCode::klass()), "wrong type"); 882 assert(installed_code_handle->is_a(HotSpotInstalledCode::klass()), "wrong type");
875 HotSpotInstalledCode::set_nmethod(installed_code_handle, (jlong) nm); 883 HotSpotInstalledCode::set_codeBlob(installed_code_handle, (jlong) cb);
876 HotSpotInstalledCode::set_method(installed_code_handle, HotSpotCompilationResult::method(compResult)); 884 HotSpotInstalledCode::set_method(installed_code_handle, HotSpotCompilationResult::method(compResult));
877 HotSpotInstalledCode::set_start(installed_code_handle, (jlong) nm->code_begin()); 885 HotSpotInstalledCode::set_start(installed_code_handle, (jlong) cb->code_begin());
886 HotSpotInstalledCode::set_isNmethod(installed_code_handle, cb->is_nmethod());
887 nmethod* nm = cb->as_nmethod_or_null();
878 assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable"); 888 assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable");
879 } 889 }
880 } 890 }
881 return result; 891 return result;
882 C2V_END 892 C2V_END
884 C2V_VMENTRY(void, clearQueuedForCompilation, (JNIEnv *jniEnv, jobject, jobject resolvedMethod)) 894 C2V_VMENTRY(void, clearQueuedForCompilation, (JNIEnv *jniEnv, jobject, jobject resolvedMethod))
885 methodHandle method = getMethodFromHotSpotMethod(JNIHandles::resolve(resolvedMethod)); 895 methodHandle method = getMethodFromHotSpotMethod(JNIHandles::resolve(resolvedMethod));
886 method->clear_queued_for_compilation(); 896 method->clear_queued_for_compilation();
887 C2V_END 897 C2V_END
888 898
889 C2V_VMENTRY(jobject, getCode, (JNIEnv *jniEnv, jobject, jlong metaspace_nmethod)) 899 C2V_VMENTRY(jobject, getCode, (JNIEnv *jniEnv, jobject, jlong codeBlob))
890 ResourceMark rm; 900 ResourceMark rm;
891 HandleMark hm; 901 HandleMark hm;
892 902
893 nmethod* nm = (nmethod*) (address) metaspace_nmethod; 903 CodeBlob* cb = (CodeBlob*) (address) codeBlob;
894 if (nm == NULL || !nm->is_alive()) { 904 if (cb == NULL) {
895 return NULL; 905 return NULL;
896 } 906 }
897 int length = nm->code_size(); 907 if (cb->is_nmethod()) {
908 nmethod* nm = (nmethod*) cb;
909 if (!nm->is_alive()) {
910 return NULL;
911 }
912 }
913 int length = cb->code_size();
898 arrayOop codeCopy = oopFactory::new_byteArray(length, CHECK_0); 914 arrayOop codeCopy = oopFactory::new_byteArray(length, CHECK_0);
899 memcpy(codeCopy->base(T_BYTE), nm->code_begin(), length); 915 memcpy(codeCopy->base(T_BYTE), cb->code_begin(), length);
900 return JNIHandles::make_local(codeCopy); 916 return JNIHandles::make_local(codeCopy);
901 C2V_END 917 C2V_END
902 918
903 C2V_VMENTRY(jobject, disassembleNMethod, (JNIEnv *jniEnv, jobject, jlong metaspace_nmethod)) 919 C2V_VMENTRY(jobject, disassembleCodeBlob, (JNIEnv *jniEnv, jobject, jlong codeBlob))
904 ResourceMark rm; 920 ResourceMark rm;
905 HandleMark hm; 921 HandleMark hm;
906 922
907 nmethod* nm = (nmethod*) (address) metaspace_nmethod; 923 CodeBlob* cb = (CodeBlob*) (address) codeBlob;
908 if (nm == NULL || !nm->is_alive()) { 924 if (cb == NULL) {
909 return NULL; 925 return NULL;
910 } 926 }
911 stringStream(st); 927
912 Disassembler::decode(nm, &st); 928 // We don't want the stringStream buffer to resize during disassembly as it
929 // uses scoped resource memory. If a nested function called during disassembly uses
930 // a ResourceMark and the buffer expands within the scope of the mark,
931 // the buffer becomes garbage when that scope is exited. Experience shows that
932 // the disassembled code is typically about 10x the code size so a fixed buffer
933 // sized to 20x code size should be sufficient.
934 int bufferSize = cb->code_size() * 20;
935 char* buffer = NEW_RESOURCE_ARRAY(char, bufferSize);
936 stringStream st(buffer, bufferSize);
937 if (cb->is_nmethod()) {
938 nmethod* nm = (nmethod*) cb;
939 if (!nm->is_alive()) {
940 return NULL;
941 }
942 Disassembler::decode(nm, &st);
943 } else {
944 Disassembler::decode(cb, &st);
945 }
913 946
914 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); 947 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL);
915 return JNIHandles::make_local(result()); 948 return JNIHandles::make_local(result());
916 C2V_END 949 C2V_END
917 950
922 methodHandle method = asMethod(metaspace_method); 955 methodHandle method = asMethod(metaspace_method);
923 oop element = java_lang_StackTraceElement::create(method, bci, CHECK_NULL); 956 oop element = java_lang_StackTraceElement::create(method, bci, CHECK_NULL);
924 return JNIHandles::make_local(element); 957 return JNIHandles::make_local(element);
925 C2V_END 958 C2V_END
926 959
927 C2V_VMENTRY(jobject, executeCompiledMethodVarargs, (JNIEnv *env, jobject, jobject args, jlong nativeMethod)) 960 C2V_VMENTRY(jobject, executeCompiledMethodVarargs, (JNIEnv *env, jobject, jobject args, jlong nmethodValue))
928 ResourceMark rm; 961 ResourceMark rm;
929 HandleMark hm; 962 HandleMark hm;
930 963
931 nmethod* nm = (nmethod*) (address) nativeMethod; 964 nmethod* nm = (nmethod*) (address) nmethodValue;
932 methodHandle mh = nm->method(); 965 methodHandle mh = nm->method();
933 Symbol* signature = mh->signature(); 966 Symbol* signature = mh->signature();
934 JavaCallArguments jca(mh->size_of_parameters()); 967 JavaCallArguments jca(mh->size_of_parameters());
935 968
936 JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static()); 969 JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static());
1148 {CC"getMetaspaceConstructor", CC"("REFLECT_CONSTRUCTOR"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceConstructor)}, 1181 {CC"getMetaspaceConstructor", CC"("REFLECT_CONSTRUCTOR"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getMetaspaceConstructor)},
1149 {CC"getJavaField", CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD, FN_PTR(getJavaField)}, 1182 {CC"getJavaField", CC"("REFLECT_FIELD")"HS_RESOLVED_FIELD, FN_PTR(getJavaField)},
1150 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, 1183 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)},
1151 {CC"installCode0", CC"("HS_COMP_RESULT HS_INSTALLED_CODE"[Z)I", FN_PTR(installCode0)}, 1184 {CC"installCode0", CC"("HS_COMP_RESULT HS_INSTALLED_CODE"[Z)I", FN_PTR(installCode0)},
1152 {CC"getCode", CC"(J)[B", FN_PTR(getCode)}, 1185 {CC"getCode", CC"(J)[B", FN_PTR(getCode)},
1153 {CC"disassembleNMethod", CC"(J)"STRING, FN_PTR(disassembleNMethod)}, 1186 {CC"disassembleCodeBlob", CC"(J)"STRING, FN_PTR(disassembleCodeBlob)},
1154 {CC"executeCompiledMethodVarargs", CC"(["OBJECT NMETHOD")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, 1187 {CC"executeCompiledMethodVarargs", CC"(["OBJECT NMETHOD")"OBJECT, FN_PTR(executeCompiledMethodVarargs)},
1155 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)}, 1188 {CC"getDeoptedLeafGraphIds", CC"()[J", FN_PTR(getDeoptedLeafGraphIds)},
1156 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)}, 1189 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)},
1157 {CC"getLocalVariableTable", CC"("HS_RESOLVED_METHOD")["LOCAL, FN_PTR(getLocalVariableTable)}, 1190 {CC"getLocalVariableTable", CC"("HS_RESOLVED_METHOD")["LOCAL, FN_PTR(getLocalVariableTable)},
1158 {CC"getFileName", CC"("HS_RESOLVED_JAVA_TYPE")"STRING, FN_PTR(getFileName)}, 1191 {CC"getFileName", CC"("HS_RESOLVED_JAVA_TYPE")"STRING, FN_PTR(getFileName)},