< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page

1190   if (PrintCodeCacheOnCompilation) {
1191     stringStream s;
1192     // Dump code cache into a buffer before locking the tty,
1193     {
1194       MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
1195       CodeCache::print_summary(&s, false);
1196     }
1197     ttyLocker ttyl;
1198     tty->print_raw_cr(s.freeze());
1199   }
1200 
1201   if (result != JVMCI::ok) {
1202     assert(cb == nullptr, "should be");
1203   } else {
1204     stats->on_install(cb);
1205     if (installed_code_handle.is_non_null()) {
1206       if (cb->is_nmethod()) {
1207         assert(JVMCIENV->isa_HotSpotNmethod(installed_code_handle), "wrong type");
1208         // Clear the link to an old nmethod first
1209         JVMCIObject nmethod_mirror = installed_code_handle;
1210         JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, true, nmethod::ChangeReason::JVMCI_replacing_with_new_code, JVMCI_CHECK_0);
1211       } else {
1212         assert(JVMCIENV->isa_InstalledCode(installed_code_handle), "wrong type");
1213       }
1214       // Initialize the link to the new code blob
1215       JVMCIENV->initialize_installed_code(installed_code_handle, cb, JVMCI_CHECK_0);
1216     }
1217   }
1218   return result;
1219 C2V_END
1220 








1221 C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv* env, jobject))
1222   JVMCICompiler* compiler = JVMCICompiler::instance(true, CHECK);
1223   CompilerStatistics* stats = compiler->stats();
1224   stats->_standard.reset();
1225   stats->_osr.reset();
1226 C2V_END
1227 
1228 C2V_VMENTRY_NULL(jobject, disassembleCodeBlob, (JNIEnv* env, jobject, jobject installedCode))
1229   HandleMark hm(THREAD);
1230 
1231   if (installedCode == nullptr) {
1232     JVMCI_THROW_MSG_NULL(NullPointerException, "installedCode is null");
1233   }
1234 
1235   JVMCIObject installedCodeObject = JVMCIENV->wrap(installedCode);
1236   CodeBlob* cb = JVMCIENV->get_code_blob(installedCodeObject);
1237   if (cb == nullptr) {
1238     return nullptr;
1239   }
1240 

1366   if (method_data == nullptr) {
1367     method->build_profiling_method_data(method, CHECK_NULL);
1368     method_data = method->method_data();
1369     if (method_data == nullptr) {
1370       THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "cannot allocate MethodData")
1371     }
1372   }
1373   return method_data;
1374 }
1375 
1376 C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, ARGUMENT_PAIR(method)))
1377   methodHandle method(THREAD, UNPACK_PAIR(Method, method));
1378   MethodCounters* mcs = method->method_counters();
1379   if (mcs != nullptr) {
1380     mcs->clear_counters();
1381   }
1382   NOT_PRODUCT(method->set_compiled_invocation_count(0));
1383 
1384   nmethod* code = method->code();
1385   if (code != nullptr) {
1386     code->make_not_entrant(nmethod::ChangeReason::JVMCI_reprofile);
1387   }
1388 
1389   MethodData* method_data = method->method_data();
1390   if (method_data == nullptr) {
1391     method_data = get_profiling_method_data(method, CHECK);
1392   } else {
1393     CompilerThreadCanCallJava canCallJava(THREAD, true);
1394     method_data->reinitialize();
1395   }
1396 C2V_END
1397 
1398 
1399 C2V_VMENTRY(void, invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize))





1400   JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
1401   JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, deoptimize, nmethod::ChangeReason::JVMCI_invalidate_nmethod, JVMCI_CHECK);
1402 C2V_END
1403 
1404 C2V_VMENTRY_NULL(jlongArray, collectCounters, (JNIEnv* env, jobject))
1405   // Returns a zero length array if counters aren't enabled
1406   JVMCIPrimitiveArray array = JVMCIENV->new_longArray(JVMCICounterSize, JVMCI_CHECK_NULL);
1407   if (JVMCICounterSize > 0) {
1408     jlong* temp_array = NEW_RESOURCE_ARRAY(jlong, JVMCICounterSize);
1409     JavaThread::collect_counters(temp_array, JVMCICounterSize);
1410     JVMCIENV->copy_longs_from(temp_array, array, 0, JVMCICounterSize);
1411   }
1412   return (jlongArray) JVMCIENV->get_jobject(array);
1413 C2V_END
1414 
1415 C2V_VMENTRY_0(jint, getCountersSize, (JNIEnv* env, jobject))
1416   return (jint) JVMCICounterSize;
1417 C2V_END
1418 
1419 C2V_VMENTRY_0(jboolean, setCountersSize, (JNIEnv* env, jobject, jint new_size))
1420   return JavaThread::resize_all_jvmci_counters(new_size);
1421 C2V_END

1806   }
1807 
1808   requireInHotSpot("materializeVirtualObjects", JVMCI_CHECK);
1809 
1810   JVMCIENV->HotSpotStackFrameReference_initialize(JVMCI_CHECK);
1811 
1812   // look for the given stack frame
1813   StackFrameStream fst(thread, false /* update */, true /* process_frames */);
1814   intptr_t* stack_pointer = (intptr_t*) JVMCIENV->get_HotSpotStackFrameReference_stackPointer(hs_frame);
1815   while (fst.current()->id() != stack_pointer && !fst.is_done()) {
1816     fst.next();
1817   }
1818   if (fst.current()->id() != stack_pointer) {
1819     JVMCI_THROW_MSG(IllegalStateException, "stack frame not found");
1820   }
1821 
1822   if (invalidate) {
1823     if (!fst.current()->is_compiled_frame()) {
1824       JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1825     }
1826     fst.current()->cb()->as_nmethod()->make_not_entrant(nmethod::ChangeReason::JVMCI_materialize_virtual_object);
1827   }
1828   Deoptimization::deoptimize(thread, *fst.current(), Deoptimization::Reason_none);
1829   // look for the frame again as it has been updated by deopt (pc, deopt state...)
1830   StackFrameStream fstAfterDeopt(thread, true /* update */, true /* process_frames */);
1831   while (fstAfterDeopt.current()->id() != stack_pointer && !fstAfterDeopt.is_done()) {
1832     fstAfterDeopt.next();
1833   }
1834   if (fstAfterDeopt.current()->id() != stack_pointer) {
1835     JVMCI_THROW_MSG(IllegalStateException, "stack frame not found after deopt");
1836   }
1837 
1838   vframe* vf = vframe::new_vframe(fstAfterDeopt.current(), fstAfterDeopt.register_map(), thread);
1839   if (!vf->is_compiled_frame()) {
1840     JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1841   }
1842 
1843   GrowableArray<compiledVFrame*>* virtualFrames = new GrowableArray<compiledVFrame*>(10);
1844   while (true) {
1845     assert(vf->is_compiled_frame(), "Wrong frame type");
1846     virtualFrames->push(compiledVFrame::cast(vf));

3335   {CC "getUncachedStringInPool",                      CC "(" HS_CONSTANT_POOL2 "I)" JAVACONSTANT,                                           FN_PTR(getUncachedStringInPool)},
3336   {CC "resolveTypeInPool",                            CC "(" HS_CONSTANT_POOL2 "I)" HS_KLASS,                                               FN_PTR(resolveTypeInPool)},
3337   {CC "resolveFieldInPool",                           CC "(" HS_CONSTANT_POOL2 "I" HS_METHOD2 "B[I)" HS_KLASS,                              FN_PTR(resolveFieldInPool)},
3338   {CC "decodeFieldIndexToCPIndex",                    CC "(" HS_CONSTANT_POOL2 "I)I",                                                       FN_PTR(decodeFieldIndexToCPIndex)},
3339   {CC "decodeMethodIndexToCPIndex",                   CC "(" HS_CONSTANT_POOL2 "I)I",                                                       FN_PTR(decodeMethodIndexToCPIndex)},
3340   {CC "decodeIndyIndexToCPIndex",                     CC "(" HS_CONSTANT_POOL2 "IZ)I",                                                      FN_PTR(decodeIndyIndexToCPIndex)},
3341   {CC "resolveInvokeHandleInPool",                    CC "(" HS_CONSTANT_POOL2 "I)V",                                                       FN_PTR(resolveInvokeHandleInPool)},
3342   {CC "isResolvedInvokeHandleInPool",                 CC "(" HS_CONSTANT_POOL2 "II)I",                                                      FN_PTR(isResolvedInvokeHandleInPool)},
3343   {CC "resolveMethod",                                CC "(" HS_KLASS2 HS_METHOD2 HS_KLASS2 ")" HS_METHOD,                                  FN_PTR(resolveMethod)},
3344   {CC "getSignaturePolymorphicHolders",               CC "()[" STRING,                                                                      FN_PTR(getSignaturePolymorphicHolders)},
3345   {CC "getVtableIndexForInterfaceMethod",             CC "(" HS_KLASS2 HS_METHOD2 ")I",                                                     FN_PTR(getVtableIndexForInterfaceMethod)},
3346   {CC "getClassInitializer",                          CC "(" HS_KLASS2 ")" HS_METHOD,                                                       FN_PTR(getClassInitializer)},
3347   {CC "hasFinalizableSubclass",                       CC "(" HS_KLASS2 ")Z",                                                                FN_PTR(hasFinalizableSubclass)},
3348   {CC "getMaxCallTargetOffset",                       CC "(J)J",                                                                            FN_PTR(getMaxCallTargetOffset)},
3349   {CC "asResolvedJavaMethod",                         CC "(" EXECUTABLE ")" HS_METHOD,                                                      FN_PTR(asResolvedJavaMethod)},
3350   {CC "getResolvedJavaMethod",                        CC "(" OBJECTCONSTANT "J)" HS_METHOD,                                                 FN_PTR(getResolvedJavaMethod)},
3351   {CC "getConstantPool",                              CC "(" OBJECT "JZ)" HS_CONSTANT_POOL,                                                 FN_PTR(getConstantPool)},
3352   {CC "getResolvedJavaType0",                         CC "(Ljava/lang/Object;JZ)" HS_KLASS,                                                 FN_PTR(getResolvedJavaType0)},
3353   {CC "readConfiguration",                            CC "()[" OBJECT,                                                                      FN_PTR(readConfiguration)},
3354   {CC "installCode0",                                 CC "(JJZ" HS_COMPILED_CODE "[" OBJECT INSTALLED_CODE "J[B)I",                         FN_PTR(installCode0)},

3355   {CC "getInstallCodeFlags",                          CC "()I",                                                                             FN_PTR(getInstallCodeFlags)},
3356   {CC "resetCompilationStatistics",                   CC "()V",                                                                             FN_PTR(resetCompilationStatistics)},
3357   {CC "disassembleCodeBlob",                          CC "(" INSTALLED_CODE ")" STRING,                                                     FN_PTR(disassembleCodeBlob)},
3358   {CC "executeHotSpotNmethod",                        CC "([" OBJECT HS_NMETHOD ")" OBJECT,                                                 FN_PTR(executeHotSpotNmethod)},
3359   {CC "getLineNumberTable",                           CC "(" HS_METHOD2 ")[J",                                                              FN_PTR(getLineNumberTable)},
3360   {CC "getLocalVariableTableStart",                   CC "(" HS_METHOD2 ")J",                                                               FN_PTR(getLocalVariableTableStart)},
3361   {CC "getLocalVariableTableLength",                  CC "(" HS_METHOD2 ")I",                                                               FN_PTR(getLocalVariableTableLength)},
3362   {CC "reprofile",                                    CC "(" HS_METHOD2 ")V",                                                               FN_PTR(reprofile)},
3363   {CC "invalidateHotSpotNmethod",                     CC "(" HS_NMETHOD "Z)V",                                                              FN_PTR(invalidateHotSpotNmethod)},
3364   {CC "collectCounters",                              CC "()[J",                                                                            FN_PTR(collectCounters)},
3365   {CC "getCountersSize",                              CC "()I",                                                                             FN_PTR(getCountersSize)},
3366   {CC "setCountersSize",                              CC "(I)Z",                                                                            FN_PTR(setCountersSize)},
3367   {CC "allocateCompileId",                            CC "(" HS_METHOD2 "I)I",                                                              FN_PTR(allocateCompileId)},
3368   {CC "isMature",                                     CC "(J)Z",                                                                            FN_PTR(isMature)},
3369   {CC "hasCompiledCodeForOSR",                        CC "(" HS_METHOD2 "II)Z",                                                             FN_PTR(hasCompiledCodeForOSR)},
3370   {CC "getSymbol",                                    CC "(J)" STRING,                                                                      FN_PTR(getSymbol)},
3371   {CC "getSignatureName",                             CC "(J)" STRING,                                                                      FN_PTR(getSignatureName)},
3372   {CC "iterateFrames",                                CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT,   FN_PTR(iterateFrames)},
3373   {CC "materializeVirtualObjects",                    CC "(" HS_STACK_FRAME_REF "Z)V",                                                      FN_PTR(materializeVirtualObjects)},
3374   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
3375   {CC "writeDebugOutput",                             CC "(JIZ)V",                                                                          FN_PTR(writeDebugOutput)},
3376   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
3377   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
3378   {CC "methodDataExceptionSeen",                      CC "(JI)I",                                                                           FN_PTR(methodDataExceptionSeen)},
3379   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
3380   {CC "compileToBytecode",                            CC "(" OBJECTCONSTANT ")V",                                                           FN_PTR(compileToBytecode)},
3381   {CC "getFlagValue",                                 CC "(" STRING ")" OBJECT,                                                             FN_PTR(getFlagValue)},
3382   {CC "getInterfaces",                                CC "(" HS_KLASS2 ")[" HS_KLASS,                                                       FN_PTR(getInterfaces)},
3383   {CC "getComponentType",                             CC "(" HS_KLASS2 ")" HS_RESOLVED_TYPE,                                                FN_PTR(getComponentType)},

1190   if (PrintCodeCacheOnCompilation) {
1191     stringStream s;
1192     // Dump code cache into a buffer before locking the tty,
1193     {
1194       MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
1195       CodeCache::print_summary(&s, false);
1196     }
1197     ttyLocker ttyl;
1198     tty->print_raw_cr(s.freeze());
1199   }
1200 
1201   if (result != JVMCI::ok) {
1202     assert(cb == nullptr, "should be");
1203   } else {
1204     stats->on_install(cb);
1205     if (installed_code_handle.is_non_null()) {
1206       if (cb->is_nmethod()) {
1207         assert(JVMCIENV->isa_HotSpotNmethod(installed_code_handle), "wrong type");
1208         // Clear the link to an old nmethod first
1209         JVMCIObject nmethod_mirror = installed_code_handle;
1210         JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, true, nmethod::InvalidationReason::JVMCI_REPLACED_WITH_NEW_CODE, JVMCI_CHECK_0);
1211       } else {
1212         assert(JVMCIENV->isa_InstalledCode(installed_code_handle), "wrong type");
1213       }
1214       // Initialize the link to the new code blob
1215       JVMCIENV->initialize_installed_code(installed_code_handle, cb, JVMCI_CHECK_0);
1216     }
1217   }
1218   return result;
1219 C2V_END
1220 
1221 C2V_VMENTRY_0(jobject, getInvalidationReasonDescription, (JNIEnv *env, jobject, jint invalidation_reason))
1222   HandleMark hm(THREAD);
1223   JNIHandleMark jni_hm(thread);
1224   nmethod::InvalidationReason reason = static_cast<nmethod::InvalidationReason>(invalidation_reason);
1225   JVMCIObject desc = JVMCIENV->create_string(nmethod::invalidation_reason_to_string(reason), JVMCI_CHECK_NULL);
1226   return JVMCIENV->get_jobject(desc);
1227 C2V_END
1228 
1229 C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv* env, jobject))
1230   JVMCICompiler* compiler = JVMCICompiler::instance(true, CHECK);
1231   CompilerStatistics* stats = compiler->stats();
1232   stats->_standard.reset();
1233   stats->_osr.reset();
1234 C2V_END
1235 
1236 C2V_VMENTRY_NULL(jobject, disassembleCodeBlob, (JNIEnv* env, jobject, jobject installedCode))
1237   HandleMark hm(THREAD);
1238 
1239   if (installedCode == nullptr) {
1240     JVMCI_THROW_MSG_NULL(NullPointerException, "installedCode is null");
1241   }
1242 
1243   JVMCIObject installedCodeObject = JVMCIENV->wrap(installedCode);
1244   CodeBlob* cb = JVMCIENV->get_code_blob(installedCodeObject);
1245   if (cb == nullptr) {
1246     return nullptr;
1247   }
1248 

1374   if (method_data == nullptr) {
1375     method->build_profiling_method_data(method, CHECK_NULL);
1376     method_data = method->method_data();
1377     if (method_data == nullptr) {
1378       THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "cannot allocate MethodData")
1379     }
1380   }
1381   return method_data;
1382 }
1383 
1384 C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, ARGUMENT_PAIR(method)))
1385   methodHandle method(THREAD, UNPACK_PAIR(Method, method));
1386   MethodCounters* mcs = method->method_counters();
1387   if (mcs != nullptr) {
1388     mcs->clear_counters();
1389   }
1390   NOT_PRODUCT(method->set_compiled_invocation_count(0));
1391 
1392   nmethod* code = method->code();
1393   if (code != nullptr) {
1394     code->make_not_entrant(nmethod::InvalidationReason::JVMCI_REPROFILE);
1395   }
1396 
1397   MethodData* method_data = method->method_data();
1398   if (method_data == nullptr) {
1399     method_data = get_profiling_method_data(method, CHECK);
1400   } else {
1401     CompilerThreadCanCallJava canCallJava(THREAD, true);
1402     method_data->reinitialize();
1403   }
1404 C2V_END
1405 
1406 
1407 C2V_VMENTRY(void, invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize, jint invalidation_reason))
1408   int first = static_cast<int>(nmethod::InvalidationReason::C1_CODEPATCH);
1409   int last = static_cast<int>(nmethod::InvalidationReason::INVALIDATION_REASONS_COUNT);
1410   if (invalidation_reason < first || invalidation_reason >= last) {
1411     JVMCI_THROW_MSG(IllegalArgumentException, err_msg("Invalid invalidation_reason: %d", invalidation_reason));
1412   }
1413   JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
1414   JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, deoptimize, static_cast<nmethod::InvalidationReason>(invalidation_reason), JVMCI_CHECK);
1415 C2V_END
1416 
1417 C2V_VMENTRY_NULL(jlongArray, collectCounters, (JNIEnv* env, jobject))
1418   // Returns a zero length array if counters aren't enabled
1419   JVMCIPrimitiveArray array = JVMCIENV->new_longArray(JVMCICounterSize, JVMCI_CHECK_NULL);
1420   if (JVMCICounterSize > 0) {
1421     jlong* temp_array = NEW_RESOURCE_ARRAY(jlong, JVMCICounterSize);
1422     JavaThread::collect_counters(temp_array, JVMCICounterSize);
1423     JVMCIENV->copy_longs_from(temp_array, array, 0, JVMCICounterSize);
1424   }
1425   return (jlongArray) JVMCIENV->get_jobject(array);
1426 C2V_END
1427 
1428 C2V_VMENTRY_0(jint, getCountersSize, (JNIEnv* env, jobject))
1429   return (jint) JVMCICounterSize;
1430 C2V_END
1431 
1432 C2V_VMENTRY_0(jboolean, setCountersSize, (JNIEnv* env, jobject, jint new_size))
1433   return JavaThread::resize_all_jvmci_counters(new_size);
1434 C2V_END

1819   }
1820 
1821   requireInHotSpot("materializeVirtualObjects", JVMCI_CHECK);
1822 
1823   JVMCIENV->HotSpotStackFrameReference_initialize(JVMCI_CHECK);
1824 
1825   // look for the given stack frame
1826   StackFrameStream fst(thread, false /* update */, true /* process_frames */);
1827   intptr_t* stack_pointer = (intptr_t*) JVMCIENV->get_HotSpotStackFrameReference_stackPointer(hs_frame);
1828   while (fst.current()->id() != stack_pointer && !fst.is_done()) {
1829     fst.next();
1830   }
1831   if (fst.current()->id() != stack_pointer) {
1832     JVMCI_THROW_MSG(IllegalStateException, "stack frame not found");
1833   }
1834 
1835   if (invalidate) {
1836     if (!fst.current()->is_compiled_frame()) {
1837       JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1838     }
1839     fst.current()->cb()->as_nmethod()->make_not_entrant(nmethod::InvalidationReason::JVMCI_MATERIALIZE_VIRTUAL_OBJECT);
1840   }
1841   Deoptimization::deoptimize(thread, *fst.current(), Deoptimization::Reason_none);
1842   // look for the frame again as it has been updated by deopt (pc, deopt state...)
1843   StackFrameStream fstAfterDeopt(thread, true /* update */, true /* process_frames */);
1844   while (fstAfterDeopt.current()->id() != stack_pointer && !fstAfterDeopt.is_done()) {
1845     fstAfterDeopt.next();
1846   }
1847   if (fstAfterDeopt.current()->id() != stack_pointer) {
1848     JVMCI_THROW_MSG(IllegalStateException, "stack frame not found after deopt");
1849   }
1850 
1851   vframe* vf = vframe::new_vframe(fstAfterDeopt.current(), fstAfterDeopt.register_map(), thread);
1852   if (!vf->is_compiled_frame()) {
1853     JVMCI_THROW_MSG(IllegalStateException, "compiled stack frame expected");
1854   }
1855 
1856   GrowableArray<compiledVFrame*>* virtualFrames = new GrowableArray<compiledVFrame*>(10);
1857   while (true) {
1858     assert(vf->is_compiled_frame(), "Wrong frame type");
1859     virtualFrames->push(compiledVFrame::cast(vf));

3348   {CC "getUncachedStringInPool",                      CC "(" HS_CONSTANT_POOL2 "I)" JAVACONSTANT,                                           FN_PTR(getUncachedStringInPool)},
3349   {CC "resolveTypeInPool",                            CC "(" HS_CONSTANT_POOL2 "I)" HS_KLASS,                                               FN_PTR(resolveTypeInPool)},
3350   {CC "resolveFieldInPool",                           CC "(" HS_CONSTANT_POOL2 "I" HS_METHOD2 "B[I)" HS_KLASS,                              FN_PTR(resolveFieldInPool)},
3351   {CC "decodeFieldIndexToCPIndex",                    CC "(" HS_CONSTANT_POOL2 "I)I",                                                       FN_PTR(decodeFieldIndexToCPIndex)},
3352   {CC "decodeMethodIndexToCPIndex",                   CC "(" HS_CONSTANT_POOL2 "I)I",                                                       FN_PTR(decodeMethodIndexToCPIndex)},
3353   {CC "decodeIndyIndexToCPIndex",                     CC "(" HS_CONSTANT_POOL2 "IZ)I",                                                      FN_PTR(decodeIndyIndexToCPIndex)},
3354   {CC "resolveInvokeHandleInPool",                    CC "(" HS_CONSTANT_POOL2 "I)V",                                                       FN_PTR(resolveInvokeHandleInPool)},
3355   {CC "isResolvedInvokeHandleInPool",                 CC "(" HS_CONSTANT_POOL2 "II)I",                                                      FN_PTR(isResolvedInvokeHandleInPool)},
3356   {CC "resolveMethod",                                CC "(" HS_KLASS2 HS_METHOD2 HS_KLASS2 ")" HS_METHOD,                                  FN_PTR(resolveMethod)},
3357   {CC "getSignaturePolymorphicHolders",               CC "()[" STRING,                                                                      FN_PTR(getSignaturePolymorphicHolders)},
3358   {CC "getVtableIndexForInterfaceMethod",             CC "(" HS_KLASS2 HS_METHOD2 ")I",                                                     FN_PTR(getVtableIndexForInterfaceMethod)},
3359   {CC "getClassInitializer",                          CC "(" HS_KLASS2 ")" HS_METHOD,                                                       FN_PTR(getClassInitializer)},
3360   {CC "hasFinalizableSubclass",                       CC "(" HS_KLASS2 ")Z",                                                                FN_PTR(hasFinalizableSubclass)},
3361   {CC "getMaxCallTargetOffset",                       CC "(J)J",                                                                            FN_PTR(getMaxCallTargetOffset)},
3362   {CC "asResolvedJavaMethod",                         CC "(" EXECUTABLE ")" HS_METHOD,                                                      FN_PTR(asResolvedJavaMethod)},
3363   {CC "getResolvedJavaMethod",                        CC "(" OBJECTCONSTANT "J)" HS_METHOD,                                                 FN_PTR(getResolvedJavaMethod)},
3364   {CC "getConstantPool",                              CC "(" OBJECT "JZ)" HS_CONSTANT_POOL,                                                 FN_PTR(getConstantPool)},
3365   {CC "getResolvedJavaType0",                         CC "(Ljava/lang/Object;JZ)" HS_KLASS,                                                 FN_PTR(getResolvedJavaType0)},
3366   {CC "readConfiguration",                            CC "()[" OBJECT,                                                                      FN_PTR(readConfiguration)},
3367   {CC "installCode0",                                 CC "(JJZ" HS_COMPILED_CODE "[" OBJECT INSTALLED_CODE "J[B)I",                         FN_PTR(installCode0)},
3368   {CC "getInvalidationReasonDescription",             CC "(I)" STRING,                                                                      FN_PTR(getInvalidationReasonDescription)},
3369   {CC "getInstallCodeFlags",                          CC "()I",                                                                             FN_PTR(getInstallCodeFlags)},
3370   {CC "resetCompilationStatistics",                   CC "()V",                                                                             FN_PTR(resetCompilationStatistics)},
3371   {CC "disassembleCodeBlob",                          CC "(" INSTALLED_CODE ")" STRING,                                                     FN_PTR(disassembleCodeBlob)},
3372   {CC "executeHotSpotNmethod",                        CC "([" OBJECT HS_NMETHOD ")" OBJECT,                                                 FN_PTR(executeHotSpotNmethod)},
3373   {CC "getLineNumberTable",                           CC "(" HS_METHOD2 ")[J",                                                              FN_PTR(getLineNumberTable)},
3374   {CC "getLocalVariableTableStart",                   CC "(" HS_METHOD2 ")J",                                                               FN_PTR(getLocalVariableTableStart)},
3375   {CC "getLocalVariableTableLength",                  CC "(" HS_METHOD2 ")I",                                                               FN_PTR(getLocalVariableTableLength)},
3376   {CC "reprofile",                                    CC "(" HS_METHOD2 ")V",                                                               FN_PTR(reprofile)},
3377   {CC "invalidateHotSpotNmethod",                     CC "(" HS_NMETHOD "ZI)V",                                                             FN_PTR(invalidateHotSpotNmethod)},
3378   {CC "collectCounters",                              CC "()[J",                                                                            FN_PTR(collectCounters)},
3379   {CC "getCountersSize",                              CC "()I",                                                                             FN_PTR(getCountersSize)},
3380   {CC "setCountersSize",                              CC "(I)Z",                                                                            FN_PTR(setCountersSize)},
3381   {CC "allocateCompileId",                            CC "(" HS_METHOD2 "I)I",                                                              FN_PTR(allocateCompileId)},
3382   {CC "isMature",                                     CC "(J)Z",                                                                            FN_PTR(isMature)},
3383   {CC "hasCompiledCodeForOSR",                        CC "(" HS_METHOD2 "II)Z",                                                             FN_PTR(hasCompiledCodeForOSR)},
3384   {CC "getSymbol",                                    CC "(J)" STRING,                                                                      FN_PTR(getSymbol)},
3385   {CC "getSignatureName",                             CC "(J)" STRING,                                                                      FN_PTR(getSignatureName)},
3386   {CC "iterateFrames",                                CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT,   FN_PTR(iterateFrames)},
3387   {CC "materializeVirtualObjects",                    CC "(" HS_STACK_FRAME_REF "Z)V",                                                      FN_PTR(materializeVirtualObjects)},
3388   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
3389   {CC "writeDebugOutput",                             CC "(JIZ)V",                                                                          FN_PTR(writeDebugOutput)},
3390   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
3391   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
3392   {CC "methodDataExceptionSeen",                      CC "(JI)I",                                                                           FN_PTR(methodDataExceptionSeen)},
3393   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
3394   {CC "compileToBytecode",                            CC "(" OBJECTCONSTANT ")V",                                                           FN_PTR(compileToBytecode)},
3395   {CC "getFlagValue",                                 CC "(" STRING ")" OBJECT,                                                             FN_PTR(getFlagValue)},
3396   {CC "getInterfaces",                                CC "(" HS_KLASS2 ")[" HS_KLASS,                                                       FN_PTR(getInterfaces)},
3397   {CC "getComponentType",                             CC "(" HS_KLASS2 ")" HS_RESOLVED_TYPE,                                                FN_PTR(getComponentType)},
< prev index next >