src/hotspot/share/jvmci/jvmciCompilerToVM.cpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File open Sdiff src/hotspot/share/jvmci

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page




1096   JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
1097   JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, JVMCI_CHECK);
1098 C2V_END
1099 
1100 C2V_VMENTRY_NULL(jobject, readUncompressedOop, (JNIEnv* env, jobject, jlong addr))
1101   oop ret = RawAccess<>::oop_load((oop*)(address)addr);
1102   return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(ret));
1103  C2V_END
1104 
1105 C2V_VMENTRY_NULL(jlongArray, collectCounters, (JNIEnv* env, jobject))
1106   // Returns a zero length array if counters aren't enabled
1107   JVMCIPrimitiveArray array = JVMCIENV->new_longArray(JVMCICounterSize, JVMCI_CHECK_NULL);
1108   if (JVMCICounterSize > 0) {
1109     jlong* temp_array = NEW_RESOURCE_ARRAY(jlong, JVMCICounterSize);
1110     JavaThread::collect_counters(temp_array, JVMCICounterSize);
1111     JVMCIENV->copy_longs_from(temp_array, array, 0, JVMCICounterSize);
1112   }
1113   return (jlongArray) JVMCIENV->get_jobject(array);
1114 C2V_END
1115 
1116 C2V_VMENTRY_0(int, allocateCompileId, (JNIEnv* env, jobject, jobject jvmci_method, int entry_bci))








1117   HandleMark hm;
1118   if (jvmci_method == NULL) {
1119     JVMCI_THROW_0(NullPointerException);
1120   }
1121   Method* method = JVMCIENV->asMethod(jvmci_method);
1122   if (entry_bci >= method->code_size() || entry_bci < -1) {
1123     JVMCI_THROW_MSG_0(IllegalArgumentException, err_msg("Unexpected bci %d", entry_bci));
1124   }
1125   return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci);
1126 C2V_END
1127 
1128 
1129 C2V_VMENTRY_0(jboolean, isMature, (JNIEnv* env, jobject, jlong metaspace_method_data))
1130   MethodData* mdo = JVMCIENV->asMethodData(metaspace_method_data);
1131   return mdo != NULL && mdo->is_mature();
1132 C2V_END
1133 
1134 C2V_VMENTRY_0(jboolean, hasCompiledCodeForOSR, (JNIEnv* env, jobject, jobject jvmci_method, int entry_bci, int comp_level))
1135   Method* method = JVMCIENV->asMethod(jvmci_method);
1136   return method->lookup_osr_nmethod_for(entry_bci, comp_level, true) != NULL;


1598     return -2;
1599   }
1600   jbyte buffer[O_BUFLEN];
1601   while (length > 0) {
1602     int copy_len = MIN2(length, (jint)O_BUFLEN);
1603     JVMCIENV->copy_bytes_to(array, buffer, offset, copy_len);
1604     tty->write((char*) buffer, copy_len);
1605     length -= O_BUFLEN;
1606     offset += O_BUFLEN;
1607   }
1608   if (flush) {
1609     tty->flush();
1610   }
1611   return 0;
1612 C2V_END
1613 
1614 C2V_VMENTRY(void, flushDebugOutput, (JNIEnv* env, jobject))
1615   tty->flush();
1616 C2V_END
1617 
1618 C2V_VMENTRY_0(int, methodDataProfileDataSize, (JNIEnv* env, jobject, jlong metaspace_method_data, jint position))
1619   MethodData* mdo = JVMCIENV->asMethodData(metaspace_method_data);
1620   ProfileData* profile_data = mdo->data_at(position);
1621   if (mdo->is_valid(profile_data)) {
1622     return profile_data->size_in_bytes();
1623   }
1624   DataLayout* data    = mdo->extra_data_base();
1625   DataLayout* end   = mdo->extra_data_limit();
1626   for (;; data = mdo->next_extra(data)) {
1627     assert(data < end, "moved past end of extra data");
1628     profile_data = data->data_in();
1629     if (mdo->dp_to_di(profile_data->dp()) == position) {
1630       return profile_data->size_in_bytes();
1631     }
1632   }
1633   JVMCI_THROW_MSG_0(IllegalArgumentException, err_msg("Invalid profile data position %d", position));
1634 C2V_END
1635 
1636 C2V_VMENTRY_0(jlong, getFingerprint, (JNIEnv* env, jobject, jlong metaspace_klass))
1637 #if INCLUDE_AOT
1638   Klass *k = (Klass*) (address) metaspace_klass;


1704     JVMCIObject result = JVMCIENV->get_jvmci_type(klass_handle, JVMCI_CHECK_NULL);
1705     return JVMCIENV->get_jobject(result);
1706   }
1707   BasicType type = java_lang_Class::primitive_type(component_mirror);
1708   JVMCIObject result = JVMCIENV->get_jvmci_primitive_type(type);
1709   return JVMCIENV->get_jobject(result);
1710 C2V_END
1711 
1712 C2V_VMENTRY(void, ensureInitialized, (JNIEnv* env, jobject, jobject jvmci_type))
1713   if (jvmci_type == NULL) {
1714     JVMCI_THROW(NullPointerException);
1715   }
1716 
1717   Klass* klass = JVMCIENV->asKlass(jvmci_type);
1718   if (klass != NULL && klass->should_be_initialized()) {
1719     InstanceKlass* k = InstanceKlass::cast(klass);
1720     k->initialize(CHECK);
1721   }
1722 C2V_END
1723 
1724 C2V_VMENTRY_0(int, interpreterFrameSize, (JNIEnv* env, jobject, jobject bytecode_frame_handle))
1725   if (bytecode_frame_handle == NULL) {
1726     JVMCI_THROW_0(NullPointerException);
1727   }
1728 
1729   JVMCIObject top_bytecode_frame = JVMCIENV->wrap(bytecode_frame_handle);
1730   JVMCIObject bytecode_frame = top_bytecode_frame;
1731   int size = 0;
1732   int callee_parameters = 0;
1733   int callee_locals = 0;
1734   Method* method = JVMCIENV->asMethod(JVMCIENV->get_BytecodePosition_method(bytecode_frame));
1735   int extra_args = method->max_stack() - JVMCIENV->get_BytecodeFrame_numStack(bytecode_frame);
1736 
1737   while (bytecode_frame.is_non_null()) {
1738     int locks = JVMCIENV->get_BytecodeFrame_numLocks(bytecode_frame);
1739     int temps = JVMCIENV->get_BytecodeFrame_numStack(bytecode_frame);
1740     bool is_top_frame = (JVMCIENV->equals(bytecode_frame, top_bytecode_frame));
1741     Method* method = JVMCIENV->asMethod(JVMCIENV->get_BytecodePosition_method(bytecode_frame));
1742 
1743     int frame_size = BytesPerWord * Interpreter::size_activation(method->max_stack(),
1744                                                                  temps + callee_parameters,


1752     callee_parameters = method->size_of_parameters();
1753     callee_locals = method->max_locals();
1754     extra_args = 0;
1755     bytecode_frame = JVMCIENV->get_BytecodePosition_caller(bytecode_frame);
1756   }
1757   return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
1758 C2V_END
1759 
1760 C2V_VMENTRY(void, compileToBytecode, (JNIEnv* env, jobject, jobject lambda_form_handle))
1761   Handle lambda_form = JVMCIENV->asConstant(JVMCIENV->wrap(lambda_form_handle), JVMCI_CHECK);
1762   if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) {
1763     TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode");
1764     JavaValue result(T_VOID);
1765     JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK);
1766   } else {
1767     JVMCI_THROW_MSG(IllegalArgumentException,
1768                     err_msg("Unexpected type: %s", lambda_form->klass()->external_name()))
1769   }
1770 C2V_END
1771 
1772 C2V_VMENTRY_0(int, getIdentityHashCode, (JNIEnv* env, jobject, jobject object))
1773   Handle obj = JVMCIENV->asConstant(JVMCIENV->wrap(object), JVMCI_CHECK_0);
1774   return obj->identity_hash();
1775 C2V_END
1776 
1777 C2V_VMENTRY_0(jboolean, isInternedString, (JNIEnv* env, jobject, jobject object))
1778   Handle str = JVMCIENV->asConstant(JVMCIENV->wrap(object), JVMCI_CHECK_0);
1779   if (!java_lang_String::is_instance(str())) {
1780     return false;
1781   }
1782   int len;
1783   jchar* name = java_lang_String::as_unicode_string(str(), len, CHECK_0);
1784   return (StringTable::lookup(name, len) != NULL);
1785 C2V_END
1786 
1787 
1788 C2V_VMENTRY_NULL(jobject, unboxPrimitive, (JNIEnv* env, jobject, jobject object))
1789   if (object == NULL) {
1790     JVMCI_THROW_0(NullPointerException);
1791   }
1792   Handle box = JVMCIENV->asConstant(JVMCIENV->wrap(object), JVMCI_CHECK_NULL);


2534     JVMCIENV->put_object_at(result, result_index++, entry);
2535   }
2536   return JVMCIENV->get_jobjectArray(result);
2537 }
2538 
2539 C2V_VMENTRY_0(jlong, getFailedSpeculationsAddress, (JNIEnv* env, jobject, jobject jvmci_method))
2540   methodHandle method = JVMCIENV->asMethod(jvmci_method);
2541   MethodData* method_data = method->method_data();
2542   if (method_data == NULL) {
2543     ClassLoaderData* loader_data = method->method_holder()->class_loader_data();
2544     method_data = MethodData::allocate(loader_data, method, CHECK_0);
2545     method->set_method_data(method_data);
2546   }
2547   return (jlong) method_data->get_failed_speculations_address();
2548 }
2549 
2550 C2V_VMENTRY(void, releaseFailedSpeculations, (JNIEnv* env, jobject, jlong failed_speculations_address))
2551   FailedSpeculation::free_failed_speculations((FailedSpeculation**)(address) failed_speculations_address);
2552 }
2553 
2554 C2V_VMENTRY_0(bool, addFailedSpeculation, (JNIEnv* env, jobject, jlong failed_speculations_address, jbyteArray speculation_obj))
2555   JVMCIPrimitiveArray speculation_handle = JVMCIENV->wrap(speculation_obj);
2556   int speculation_len = JVMCIENV->get_length(speculation_handle);
2557   char* speculation = NEW_RESOURCE_ARRAY(char, speculation_len);
2558   JVMCIENV->copy_bytes_to(speculation_handle, (jbyte*) speculation, 0, speculation_len);
2559   return FailedSpeculation::add_failed_speculation(NULL, (FailedSpeculation**)(address) failed_speculations_address, (address) speculation, speculation_len);
2560 }
2561 
2562 #define CC (char*)  /*cast a literal from (const char*)*/
2563 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
2564 
2565 #define STRING                  "Ljava/lang/String;"
2566 #define OBJECT                  "Ljava/lang/Object;"
2567 #define CLASS                   "Ljava/lang/Class;"
2568 #define OBJECTCONSTANT          "Ljdk/vm/ci/hotspot/HotSpotObjectConstantImpl;"
2569 #define HANDLECONSTANT          "Ljdk/vm/ci/hotspot/IndirectHotSpotObjectConstantImpl;"
2570 #define EXECUTABLE              "Ljava/lang/reflect/Executable;"
2571 #define STACK_TRACE_ELEMENT     "Ljava/lang/StackTraceElement;"
2572 #define INSTALLED_CODE          "Ljdk/vm/ci/code/InstalledCode;"
2573 #define TARGET_DESCRIPTION      "Ljdk/vm/ci/code/TargetDescription;"
2574 #define BYTECODE_FRAME          "Ljdk/vm/ci/code/BytecodeFrame;"


2627   {CC "getClassInitializer",                          CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_METHOD,                                      FN_PTR(getClassInitializer)},
2628   {CC "hasFinalizableSubclass",                       CC "(" HS_RESOLVED_KLASS ")Z",                                                        FN_PTR(hasFinalizableSubclass)},
2629   {CC "getMaxCallTargetOffset",                       CC "(J)J",                                                                            FN_PTR(getMaxCallTargetOffset)},
2630   {CC "asResolvedJavaMethod",                         CC "(" EXECUTABLE ")" HS_RESOLVED_METHOD,                                             FN_PTR(asResolvedJavaMethod)},
2631   {CC "getResolvedJavaMethod",                        CC "(" OBJECTCONSTANT "J)" HS_RESOLVED_METHOD,                                        FN_PTR(getResolvedJavaMethod)},
2632   {CC "getConstantPool",                              CC "(" METASPACE_OBJECT ")" HS_CONSTANT_POOL,                                         FN_PTR(getConstantPool)},
2633   {CC "getResolvedJavaType0",                         CC "(Ljava/lang/Object;JZ)" HS_RESOLVED_KLASS,                                        FN_PTR(getResolvedJavaType0)},
2634   {CC "readConfiguration",                            CC "()[" OBJECT,                                                                      FN_PTR(readConfiguration)},
2635   {CC "installCode",                                  CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE INSTALLED_CODE "J[B)I",                    FN_PTR(installCode)},
2636   {CC "getMetadata",                                  CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE HS_METADATA ")I",                          FN_PTR(getMetadata)},
2637   {CC "resetCompilationStatistics",                   CC "()V",                                                                             FN_PTR(resetCompilationStatistics)},
2638   {CC "disassembleCodeBlob",                          CC "(" INSTALLED_CODE ")" STRING,                                                     FN_PTR(disassembleCodeBlob)},
2639   {CC "executeHotSpotNmethod",                        CC "([" OBJECT HS_NMETHOD ")" OBJECT,                                                 FN_PTR(executeHotSpotNmethod)},
2640   {CC "getLineNumberTable",                           CC "(" HS_RESOLVED_METHOD ")[J",                                                      FN_PTR(getLineNumberTable)},
2641   {CC "getLocalVariableTableStart",                   CC "(" HS_RESOLVED_METHOD ")J",                                                       FN_PTR(getLocalVariableTableStart)},
2642   {CC "getLocalVariableTableLength",                  CC "(" HS_RESOLVED_METHOD ")I",                                                       FN_PTR(getLocalVariableTableLength)},
2643   {CC "reprofile",                                    CC "(" HS_RESOLVED_METHOD ")V",                                                       FN_PTR(reprofile)},
2644   {CC "invalidateHotSpotNmethod",                     CC "(" HS_NMETHOD ")V",                                                               FN_PTR(invalidateHotSpotNmethod)},
2645   {CC "readUncompressedOop",                          CC "(J)" OBJECTCONSTANT,                                                              FN_PTR(readUncompressedOop)},
2646   {CC "collectCounters",                              CC "()[J",                                                                            FN_PTR(collectCounters)},


2647   {CC "allocateCompileId",                            CC "(" HS_RESOLVED_METHOD "I)I",                                                      FN_PTR(allocateCompileId)},
2648   {CC "isMature",                                     CC "(" METASPACE_METHOD_DATA ")Z",                                                    FN_PTR(isMature)},
2649   {CC "hasCompiledCodeForOSR",                        CC "(" HS_RESOLVED_METHOD "II)Z",                                                     FN_PTR(hasCompiledCodeForOSR)},
2650   {CC "getSymbol",                                    CC "(J)" STRING,                                                                      FN_PTR(getSymbol)},
2651   {CC "iterateFrames",                                CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT,   FN_PTR(iterateFrames)},
2652   {CC "materializeVirtualObjects",                    CC "(" HS_STACK_FRAME_REF "Z)V",                                                      FN_PTR(materializeVirtualObjects)},
2653   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
2654   {CC "writeDebugOutput",                             CC "([BIIZZ)I",                                                                       FN_PTR(writeDebugOutput)},
2655   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
2656   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
2657   {CC "getFingerprint",                               CC "(J)J",                                                                            FN_PTR(getFingerprint)},
2658   {CC "getHostClass",                                 CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS,                                       FN_PTR(getHostClass)},
2659   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
2660   {CC "compileToBytecode",                            CC "(" OBJECTCONSTANT ")V",                                                           FN_PTR(compileToBytecode)},
2661   {CC "getFlagValue",                                 CC "(" STRING ")" OBJECT,                                                             FN_PTR(getFlagValue)},
2662   {CC "getObjectAtAddress",                           CC "(J)" OBJECT,                                                                      FN_PTR(getObjectAtAddress)},
2663   {CC "getInterfaces",                                CC "(" HS_RESOLVED_KLASS ")[" HS_RESOLVED_KLASS,                                      FN_PTR(getInterfaces)},
2664   {CC "getComponentType",                             CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_TYPE,                                        FN_PTR(getComponentType)},
2665   {CC "ensureInitialized",                            CC "(" HS_RESOLVED_KLASS ")V",                                                        FN_PTR(ensureInitialized)},
2666   {CC "getIdentityHashCode",                          CC "(" OBJECTCONSTANT ")I",                                                           FN_PTR(getIdentityHashCode)},




1096   JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
1097   JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, JVMCI_CHECK);
1098 C2V_END
1099 
1100 C2V_VMENTRY_NULL(jobject, readUncompressedOop, (JNIEnv* env, jobject, jlong addr))
1101   oop ret = RawAccess<>::oop_load((oop*)(address)addr);
1102   return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(ret));
1103  C2V_END
1104 
1105 C2V_VMENTRY_NULL(jlongArray, collectCounters, (JNIEnv* env, jobject))
1106   // Returns a zero length array if counters aren't enabled
1107   JVMCIPrimitiveArray array = JVMCIENV->new_longArray(JVMCICounterSize, JVMCI_CHECK_NULL);
1108   if (JVMCICounterSize > 0) {
1109     jlong* temp_array = NEW_RESOURCE_ARRAY(jlong, JVMCICounterSize);
1110     JavaThread::collect_counters(temp_array, JVMCICounterSize);
1111     JVMCIENV->copy_longs_from(temp_array, array, 0, JVMCICounterSize);
1112   }
1113   return (jlongArray) JVMCIENV->get_jobject(array);
1114 C2V_END
1115 
1116 C2V_VMENTRY_0(jint, getCountersSize, (JNIEnv* env, jobject))
1117   return (jint) JVMCICounterSize;
1118 C2V_END
1119 
1120 C2V_VMENTRY_0(jboolean, setCountersSize, (JNIEnv* env, jobject, jint new_size))
1121   return JavaThread::resize_all_jvmci_counters(new_size);
1122 C2V_END
1123 
1124 C2V_VMENTRY_0(jint, allocateCompileId, (JNIEnv* env, jobject, jobject jvmci_method, int entry_bci))
1125   HandleMark hm;
1126   if (jvmci_method == NULL) {
1127     JVMCI_THROW_0(NullPointerException);
1128   }
1129   Method* method = JVMCIENV->asMethod(jvmci_method);
1130   if (entry_bci >= method->code_size() || entry_bci < -1) {
1131     JVMCI_THROW_MSG_0(IllegalArgumentException, err_msg("Unexpected bci %d", entry_bci));
1132   }
1133   return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci);
1134 C2V_END
1135 
1136 
1137 C2V_VMENTRY_0(jboolean, isMature, (JNIEnv* env, jobject, jlong metaspace_method_data))
1138   MethodData* mdo = JVMCIENV->asMethodData(metaspace_method_data);
1139   return mdo != NULL && mdo->is_mature();
1140 C2V_END
1141 
1142 C2V_VMENTRY_0(jboolean, hasCompiledCodeForOSR, (JNIEnv* env, jobject, jobject jvmci_method, int entry_bci, int comp_level))
1143   Method* method = JVMCIENV->asMethod(jvmci_method);
1144   return method->lookup_osr_nmethod_for(entry_bci, comp_level, true) != NULL;


1606     return -2;
1607   }
1608   jbyte buffer[O_BUFLEN];
1609   while (length > 0) {
1610     int copy_len = MIN2(length, (jint)O_BUFLEN);
1611     JVMCIENV->copy_bytes_to(array, buffer, offset, copy_len);
1612     tty->write((char*) buffer, copy_len);
1613     length -= O_BUFLEN;
1614     offset += O_BUFLEN;
1615   }
1616   if (flush) {
1617     tty->flush();
1618   }
1619   return 0;
1620 C2V_END
1621 
1622 C2V_VMENTRY(void, flushDebugOutput, (JNIEnv* env, jobject))
1623   tty->flush();
1624 C2V_END
1625 
1626 C2V_VMENTRY_0(jint, methodDataProfileDataSize, (JNIEnv* env, jobject, jlong metaspace_method_data, jint position))
1627   MethodData* mdo = JVMCIENV->asMethodData(metaspace_method_data);
1628   ProfileData* profile_data = mdo->data_at(position);
1629   if (mdo->is_valid(profile_data)) {
1630     return profile_data->size_in_bytes();
1631   }
1632   DataLayout* data    = mdo->extra_data_base();
1633   DataLayout* end   = mdo->extra_data_limit();
1634   for (;; data = mdo->next_extra(data)) {
1635     assert(data < end, "moved past end of extra data");
1636     profile_data = data->data_in();
1637     if (mdo->dp_to_di(profile_data->dp()) == position) {
1638       return profile_data->size_in_bytes();
1639     }
1640   }
1641   JVMCI_THROW_MSG_0(IllegalArgumentException, err_msg("Invalid profile data position %d", position));
1642 C2V_END
1643 
1644 C2V_VMENTRY_0(jlong, getFingerprint, (JNIEnv* env, jobject, jlong metaspace_klass))
1645 #if INCLUDE_AOT
1646   Klass *k = (Klass*) (address) metaspace_klass;


1712     JVMCIObject result = JVMCIENV->get_jvmci_type(klass_handle, JVMCI_CHECK_NULL);
1713     return JVMCIENV->get_jobject(result);
1714   }
1715   BasicType type = java_lang_Class::primitive_type(component_mirror);
1716   JVMCIObject result = JVMCIENV->get_jvmci_primitive_type(type);
1717   return JVMCIENV->get_jobject(result);
1718 C2V_END
1719 
1720 C2V_VMENTRY(void, ensureInitialized, (JNIEnv* env, jobject, jobject jvmci_type))
1721   if (jvmci_type == NULL) {
1722     JVMCI_THROW(NullPointerException);
1723   }
1724 
1725   Klass* klass = JVMCIENV->asKlass(jvmci_type);
1726   if (klass != NULL && klass->should_be_initialized()) {
1727     InstanceKlass* k = InstanceKlass::cast(klass);
1728     k->initialize(CHECK);
1729   }
1730 C2V_END
1731 
1732 C2V_VMENTRY_0(jint, interpreterFrameSize, (JNIEnv* env, jobject, jobject bytecode_frame_handle))
1733   if (bytecode_frame_handle == NULL) {
1734     JVMCI_THROW_0(NullPointerException);
1735   }
1736 
1737   JVMCIObject top_bytecode_frame = JVMCIENV->wrap(bytecode_frame_handle);
1738   JVMCIObject bytecode_frame = top_bytecode_frame;
1739   int size = 0;
1740   int callee_parameters = 0;
1741   int callee_locals = 0;
1742   Method* method = JVMCIENV->asMethod(JVMCIENV->get_BytecodePosition_method(bytecode_frame));
1743   int extra_args = method->max_stack() - JVMCIENV->get_BytecodeFrame_numStack(bytecode_frame);
1744 
1745   while (bytecode_frame.is_non_null()) {
1746     int locks = JVMCIENV->get_BytecodeFrame_numLocks(bytecode_frame);
1747     int temps = JVMCIENV->get_BytecodeFrame_numStack(bytecode_frame);
1748     bool is_top_frame = (JVMCIENV->equals(bytecode_frame, top_bytecode_frame));
1749     Method* method = JVMCIENV->asMethod(JVMCIENV->get_BytecodePosition_method(bytecode_frame));
1750 
1751     int frame_size = BytesPerWord * Interpreter::size_activation(method->max_stack(),
1752                                                                  temps + callee_parameters,


1760     callee_parameters = method->size_of_parameters();
1761     callee_locals = method->max_locals();
1762     extra_args = 0;
1763     bytecode_frame = JVMCIENV->get_BytecodePosition_caller(bytecode_frame);
1764   }
1765   return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
1766 C2V_END
1767 
1768 C2V_VMENTRY(void, compileToBytecode, (JNIEnv* env, jobject, jobject lambda_form_handle))
1769   Handle lambda_form = JVMCIENV->asConstant(JVMCIENV->wrap(lambda_form_handle), JVMCI_CHECK);
1770   if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) {
1771     TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode");
1772     JavaValue result(T_VOID);
1773     JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK);
1774   } else {
1775     JVMCI_THROW_MSG(IllegalArgumentException,
1776                     err_msg("Unexpected type: %s", lambda_form->klass()->external_name()))
1777   }
1778 C2V_END
1779 
1780 C2V_VMENTRY_0(jint, getIdentityHashCode, (JNIEnv* env, jobject, jobject object))
1781   Handle obj = JVMCIENV->asConstant(JVMCIENV->wrap(object), JVMCI_CHECK_0);
1782   return obj->identity_hash();
1783 C2V_END
1784 
1785 C2V_VMENTRY_0(jboolean, isInternedString, (JNIEnv* env, jobject, jobject object))
1786   Handle str = JVMCIENV->asConstant(JVMCIENV->wrap(object), JVMCI_CHECK_0);
1787   if (!java_lang_String::is_instance(str())) {
1788     return false;
1789   }
1790   int len;
1791   jchar* name = java_lang_String::as_unicode_string(str(), len, CHECK_0);
1792   return (StringTable::lookup(name, len) != NULL);
1793 C2V_END
1794 
1795 
1796 C2V_VMENTRY_NULL(jobject, unboxPrimitive, (JNIEnv* env, jobject, jobject object))
1797   if (object == NULL) {
1798     JVMCI_THROW_0(NullPointerException);
1799   }
1800   Handle box = JVMCIENV->asConstant(JVMCIENV->wrap(object), JVMCI_CHECK_NULL);


2542     JVMCIENV->put_object_at(result, result_index++, entry);
2543   }
2544   return JVMCIENV->get_jobjectArray(result);
2545 }
2546 
2547 C2V_VMENTRY_0(jlong, getFailedSpeculationsAddress, (JNIEnv* env, jobject, jobject jvmci_method))
2548   methodHandle method = JVMCIENV->asMethod(jvmci_method);
2549   MethodData* method_data = method->method_data();
2550   if (method_data == NULL) {
2551     ClassLoaderData* loader_data = method->method_holder()->class_loader_data();
2552     method_data = MethodData::allocate(loader_data, method, CHECK_0);
2553     method->set_method_data(method_data);
2554   }
2555   return (jlong) method_data->get_failed_speculations_address();
2556 }
2557 
2558 C2V_VMENTRY(void, releaseFailedSpeculations, (JNIEnv* env, jobject, jlong failed_speculations_address))
2559   FailedSpeculation::free_failed_speculations((FailedSpeculation**)(address) failed_speculations_address);
2560 }
2561 
2562 C2V_VMENTRY_0(jboolean, addFailedSpeculation, (JNIEnv* env, jobject, jlong failed_speculations_address, jbyteArray speculation_obj))
2563   JVMCIPrimitiveArray speculation_handle = JVMCIENV->wrap(speculation_obj);
2564   int speculation_len = JVMCIENV->get_length(speculation_handle);
2565   char* speculation = NEW_RESOURCE_ARRAY(char, speculation_len);
2566   JVMCIENV->copy_bytes_to(speculation_handle, (jbyte*) speculation, 0, speculation_len);
2567   return FailedSpeculation::add_failed_speculation(NULL, (FailedSpeculation**)(address) failed_speculations_address, (address) speculation, speculation_len);
2568 }
2569 
2570 #define CC (char*)  /*cast a literal from (const char*)*/
2571 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
2572 
2573 #define STRING                  "Ljava/lang/String;"
2574 #define OBJECT                  "Ljava/lang/Object;"
2575 #define CLASS                   "Ljava/lang/Class;"
2576 #define OBJECTCONSTANT          "Ljdk/vm/ci/hotspot/HotSpotObjectConstantImpl;"
2577 #define HANDLECONSTANT          "Ljdk/vm/ci/hotspot/IndirectHotSpotObjectConstantImpl;"
2578 #define EXECUTABLE              "Ljava/lang/reflect/Executable;"
2579 #define STACK_TRACE_ELEMENT     "Ljava/lang/StackTraceElement;"
2580 #define INSTALLED_CODE          "Ljdk/vm/ci/code/InstalledCode;"
2581 #define TARGET_DESCRIPTION      "Ljdk/vm/ci/code/TargetDescription;"
2582 #define BYTECODE_FRAME          "Ljdk/vm/ci/code/BytecodeFrame;"


2635   {CC "getClassInitializer",                          CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_METHOD,                                      FN_PTR(getClassInitializer)},
2636   {CC "hasFinalizableSubclass",                       CC "(" HS_RESOLVED_KLASS ")Z",                                                        FN_PTR(hasFinalizableSubclass)},
2637   {CC "getMaxCallTargetOffset",                       CC "(J)J",                                                                            FN_PTR(getMaxCallTargetOffset)},
2638   {CC "asResolvedJavaMethod",                         CC "(" EXECUTABLE ")" HS_RESOLVED_METHOD,                                             FN_PTR(asResolvedJavaMethod)},
2639   {CC "getResolvedJavaMethod",                        CC "(" OBJECTCONSTANT "J)" HS_RESOLVED_METHOD,                                        FN_PTR(getResolvedJavaMethod)},
2640   {CC "getConstantPool",                              CC "(" METASPACE_OBJECT ")" HS_CONSTANT_POOL,                                         FN_PTR(getConstantPool)},
2641   {CC "getResolvedJavaType0",                         CC "(Ljava/lang/Object;JZ)" HS_RESOLVED_KLASS,                                        FN_PTR(getResolvedJavaType0)},
2642   {CC "readConfiguration",                            CC "()[" OBJECT,                                                                      FN_PTR(readConfiguration)},
2643   {CC "installCode",                                  CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE INSTALLED_CODE "J[B)I",                    FN_PTR(installCode)},
2644   {CC "getMetadata",                                  CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE HS_METADATA ")I",                          FN_PTR(getMetadata)},
2645   {CC "resetCompilationStatistics",                   CC "()V",                                                                             FN_PTR(resetCompilationStatistics)},
2646   {CC "disassembleCodeBlob",                          CC "(" INSTALLED_CODE ")" STRING,                                                     FN_PTR(disassembleCodeBlob)},
2647   {CC "executeHotSpotNmethod",                        CC "([" OBJECT HS_NMETHOD ")" OBJECT,                                                 FN_PTR(executeHotSpotNmethod)},
2648   {CC "getLineNumberTable",                           CC "(" HS_RESOLVED_METHOD ")[J",                                                      FN_PTR(getLineNumberTable)},
2649   {CC "getLocalVariableTableStart",                   CC "(" HS_RESOLVED_METHOD ")J",                                                       FN_PTR(getLocalVariableTableStart)},
2650   {CC "getLocalVariableTableLength",                  CC "(" HS_RESOLVED_METHOD ")I",                                                       FN_PTR(getLocalVariableTableLength)},
2651   {CC "reprofile",                                    CC "(" HS_RESOLVED_METHOD ")V",                                                       FN_PTR(reprofile)},
2652   {CC "invalidateHotSpotNmethod",                     CC "(" HS_NMETHOD ")V",                                                               FN_PTR(invalidateHotSpotNmethod)},
2653   {CC "readUncompressedOop",                          CC "(J)" OBJECTCONSTANT,                                                              FN_PTR(readUncompressedOop)},
2654   {CC "collectCounters",                              CC "()[J",                                                                            FN_PTR(collectCounters)},
2655   {CC "getCountersSize",                              CC "()I",                                                                             FN_PTR(getCountersSize)},
2656   {CC "setCountersSize",                              CC "(I)Z",                                                                            FN_PTR(setCountersSize)},
2657   {CC "allocateCompileId",                            CC "(" HS_RESOLVED_METHOD "I)I",                                                      FN_PTR(allocateCompileId)},
2658   {CC "isMature",                                     CC "(" METASPACE_METHOD_DATA ")Z",                                                    FN_PTR(isMature)},
2659   {CC "hasCompiledCodeForOSR",                        CC "(" HS_RESOLVED_METHOD "II)Z",                                                     FN_PTR(hasCompiledCodeForOSR)},
2660   {CC "getSymbol",                                    CC "(J)" STRING,                                                                      FN_PTR(getSymbol)},
2661   {CC "iterateFrames",                                CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT,   FN_PTR(iterateFrames)},
2662   {CC "materializeVirtualObjects",                    CC "(" HS_STACK_FRAME_REF "Z)V",                                                      FN_PTR(materializeVirtualObjects)},
2663   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
2664   {CC "writeDebugOutput",                             CC "([BIIZZ)I",                                                                       FN_PTR(writeDebugOutput)},
2665   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
2666   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
2667   {CC "getFingerprint",                               CC "(J)J",                                                                            FN_PTR(getFingerprint)},
2668   {CC "getHostClass",                                 CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS,                                       FN_PTR(getHostClass)},
2669   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
2670   {CC "compileToBytecode",                            CC "(" OBJECTCONSTANT ")V",                                                           FN_PTR(compileToBytecode)},
2671   {CC "getFlagValue",                                 CC "(" STRING ")" OBJECT,                                                             FN_PTR(getFlagValue)},
2672   {CC "getObjectAtAddress",                           CC "(J)" OBJECT,                                                                      FN_PTR(getObjectAtAddress)},
2673   {CC "getInterfaces",                                CC "(" HS_RESOLVED_KLASS ")[" HS_RESOLVED_KLASS,                                      FN_PTR(getInterfaces)},
2674   {CC "getComponentType",                             CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_TYPE,                                        FN_PTR(getComponentType)},
2675   {CC "ensureInitialized",                            CC "(" HS_RESOLVED_KLASS ")V",                                                        FN_PTR(ensureInitialized)},
2676   {CC "getIdentityHashCode",                          CC "(" OBJECTCONSTANT ")I",                                                           FN_PTR(getIdentityHashCode)},


src/hotspot/share/jvmci/jvmciCompilerToVM.cpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File