< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page




1481     callee_parameters = method->size_of_parameters();
1482     callee_locals = method->max_locals();
1483     extra_args = 0;
1484     bytecode_frame = BytecodePosition::caller(bytecode_frame);
1485   }
1486   return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
1487 C2V_END
1488 
1489 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle))
1490   Handle lambda_form(THREAD, JNIHandles::resolve_non_null(lambda_form_handle));
1491   if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) {
1492     TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK);
1493     JavaValue result(T_VOID);
1494     JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK);
1495   } else {
1496     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
1497                 err_msg("Unexpected type: %s", lambda_form->klass()->external_name()));
1498   }
1499 C2V_END
1500 
































1501 #define CC (char*)  /*cast a literal from (const char*)*/
1502 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
1503 
1504 #define STRING                  "Ljava/lang/String;"
1505 #define OBJECT                  "Ljava/lang/Object;"
1506 #define CLASS                   "Ljava/lang/Class;"
1507 #define EXECUTABLE              "Ljava/lang/reflect/Executable;"
1508 #define STACK_TRACE_ELEMENT     "Ljava/lang/StackTraceElement;"
1509 #define INSTALLED_CODE          "Ljdk/vm/ci/code/InstalledCode;"
1510 #define TARGET_DESCRIPTION      "Ljdk/vm/ci/code/TargetDescription;"
1511 #define BYTECODE_FRAME          "Ljdk/vm/ci/code/BytecodeFrame;"
1512 #define INSPECTED_FRAME_VISITOR "Ljdk/vm/ci/code/stack/InspectedFrameVisitor;"
1513 #define RESOLVED_METHOD         "Ljdk/vm/ci/meta/ResolvedJavaMethod;"
1514 #define HS_RESOLVED_METHOD      "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl;"
1515 #define HS_RESOLVED_KLASS       "Ljdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl;"
1516 #define HS_CONSTANT_POOL        "Ljdk/vm/ci/hotspot/HotSpotConstantPool;"
1517 #define HS_COMPILED_CODE        "Ljdk/vm/ci/hotspot/HotSpotCompiledCode;"
1518 #define HS_CONFIG               "Ljdk/vm/ci/hotspot/HotSpotVMConfig;"
1519 #define HS_METADATA             "Ljdk/vm/ci/hotspot/HotSpotMetaData;"
1520 #define HS_STACK_FRAME_REF      "Ljdk/vm/ci/hotspot/HotSpotStackFrameReference;"
1521 #define HS_SPECULATION_LOG      "Ljdk/vm/ci/hotspot/HotSpotSpeculationLog;"


1522 #define METASPACE_METHOD_DATA   "J"
1523 
1524 JNINativeMethod CompilerToVM::methods[] = {
1525   {CC "getBytecode",                                  CC "(" HS_RESOLVED_METHOD ")[B",                                                      FN_PTR(getBytecode)},
1526   {CC "getExceptionTableStart",                       CC "(" HS_RESOLVED_METHOD ")J",                                                       FN_PTR(getExceptionTableStart)},
1527   {CC "getExceptionTableLength",                      CC "(" HS_RESOLVED_METHOD ")I",                                                       FN_PTR(getExceptionTableLength)},
1528   {CC "findUniqueConcreteMethod",                     CC "(" HS_RESOLVED_KLASS HS_RESOLVED_METHOD ")" HS_RESOLVED_METHOD,                   FN_PTR(findUniqueConcreteMethod)},
1529   {CC "getImplementor",                               CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS,                                       FN_PTR(getImplementor)},
1530   {CC "getStackTraceElement",                         CC "(" HS_RESOLVED_METHOD "I)" STACK_TRACE_ELEMENT,                                   FN_PTR(getStackTraceElement)},
1531   {CC "methodIsIgnoredBySecurityStackWalk",           CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(methodIsIgnoredBySecurityStackWalk)},
1532   {CC "setNotInlinableOrCompilable",                  CC "(" HS_RESOLVED_METHOD ")V",                                                       FN_PTR(setNotInlinableOrCompilable)},
1533   {CC "isCompilable",                                 CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(isCompilable)},
1534   {CC "hasNeverInlineDirective",                      CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(hasNeverInlineDirective)},
1535   {CC "shouldInlineMethod",                           CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(shouldInlineMethod)},
1536   {CC "lookupType",                                   CC "(" STRING CLASS "Z)" HS_RESOLVED_KLASS,                                           FN_PTR(lookupType)},
1537   {CC "lookupNameInPool",                             CC "(" HS_CONSTANT_POOL "I)" STRING,                                                  FN_PTR(lookupNameInPool)},
1538   {CC "lookupNameAndTypeRefIndexInPool",              CC "(" HS_CONSTANT_POOL "I)I",                                                        FN_PTR(lookupNameAndTypeRefIndexInPool)},
1539   {CC "lookupSignatureInPool",                        CC "(" HS_CONSTANT_POOL "I)" STRING,                                                  FN_PTR(lookupSignatureInPool)},
1540   {CC "lookupKlassRefIndexInPool",                    CC "(" HS_CONSTANT_POOL "I)I",                                                        FN_PTR(lookupKlassRefIndexInPool)},
1541   {CC "lookupKlassInPool",                            CC "(" HS_CONSTANT_POOL "I)Ljava/lang/Object;",                                       FN_PTR(lookupKlassInPool)},


1569   {CC "getLocalVariableTableStart",                   CC "(" HS_RESOLVED_METHOD ")J",                                                       FN_PTR(getLocalVariableTableStart)},
1570   {CC "getLocalVariableTableLength",                  CC "(" HS_RESOLVED_METHOD ")I",                                                       FN_PTR(getLocalVariableTableLength)},
1571   {CC "reprofile",                                    CC "(" HS_RESOLVED_METHOD ")V",                                                       FN_PTR(reprofile)},
1572   {CC "invalidateInstalledCode",                      CC "(" INSTALLED_CODE ")V",                                                           FN_PTR(invalidateInstalledCode)},
1573   {CC "collectCounters",                              CC "()[J",                                                                            FN_PTR(collectCounters)},
1574   {CC "allocateCompileId",                            CC "(" HS_RESOLVED_METHOD "I)I",                                                      FN_PTR(allocateCompileId)},
1575   {CC "isMature",                                     CC "(" METASPACE_METHOD_DATA ")Z",                                                    FN_PTR(isMature)},
1576   {CC "hasCompiledCodeForOSR",                        CC "(" HS_RESOLVED_METHOD "II)Z",                                                     FN_PTR(hasCompiledCodeForOSR)},
1577   {CC "getSymbol",                                    CC "(J)" STRING,                                                                      FN_PTR(getSymbol)},
1578   {CC "iterateFrames",                                CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT,   FN_PTR(iterateFrames)},
1579   {CC "materializeVirtualObjects",                    CC "(" HS_STACK_FRAME_REF "Z)V",                                                      FN_PTR(materializeVirtualObjects)},
1580   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
1581   {CC "writeDebugOutput",                             CC "([BII)V",                                                                         FN_PTR(writeDebugOutput)},
1582   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
1583   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
1584   {CC "getFingerprint",                               CC "(J)J",                                                                            FN_PTR(getFingerprint)},
1585   {CC "getHostClass",                                 CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS,                                       FN_PTR(getHostClass)},
1586   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
1587   {CC "compileToBytecode",                            CC "(" OBJECT ")V",                                                                   FN_PTR(compileToBytecode)},
1588   {CC "getFlagValue",                                 CC "(" STRING ")" OBJECT,                                                             FN_PTR(getFlagValue)},


1589 };
1590 
1591 int CompilerToVM::methods_count() {
1592   return sizeof(methods) / sizeof(JNINativeMethod);
1593 }


1481     callee_parameters = method->size_of_parameters();
1482     callee_locals = method->max_locals();
1483     extra_args = 0;
1484     bytecode_frame = BytecodePosition::caller(bytecode_frame);
1485   }
1486   return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
1487 C2V_END
1488 
1489 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle))
1490   Handle lambda_form(THREAD, JNIHandles::resolve_non_null(lambda_form_handle));
1491   if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) {
1492     TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK);
1493     JavaValue result(T_VOID);
1494     JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK);
1495   } else {
1496     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
1497                 err_msg("Unexpected type: %s", lambda_form->klass()->external_name()));
1498   }
1499 C2V_END
1500 
1501 C2V_VMENTRY(jobject, asReflectionExecutable, (JNIEnv* env, jobject, jobject jvmci_method))
1502   methodHandle m = CompilerToVM::asMethod(jvmci_method);
1503   oop executable;
1504   if (m->is_initializer()) {
1505     if (m->is_static_initializer()) {
1506       THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1507         "Cannot create java.lang.reflect.Method for class initializer");
1508     }
1509     executable = Reflection::new_constructor(m, CHECK_NULL);
1510   } else {
1511     executable = Reflection::new_method(m, false, CHECK_NULL);
1512   }
1513   return JNIHandles::make_local(thread, executable);
1514 }
1515 
1516 C2V_VMENTRY(jobject, asReflectionField, (JNIEnv* env, jobject, jobject jvmci_type, jint index))
1517   Klass* klass = CompilerToVM::asKlass(jvmci_type);
1518   if (!klass->is_instance_klass()) {
1519     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1520         err_msg("Expected non-primitive type, got %s", klass->external_name()));
1521   }
1522   InstanceKlass* iklass = InstanceKlass::cast(klass);
1523   Array<u2>* fields = iklass->fields();
1524   if (index < 0 || index > fields->length()) {
1525     THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
1526         err_msg("Field index %d out of bounds for %s", index, klass->external_name()));
1527   }
1528   fieldDescriptor fd(iklass, index);
1529   oop reflected = Reflection::new_field(&fd, CHECK_NULL);
1530   return JNIHandles::make_local(env, reflected);
1531 }
1532 
1533 #define CC (char*)  /*cast a literal from (const char*)*/
1534 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
1535 
1536 #define STRING                  "Ljava/lang/String;"
1537 #define OBJECT                  "Ljava/lang/Object;"
1538 #define CLASS                   "Ljava/lang/Class;"
1539 #define EXECUTABLE              "Ljava/lang/reflect/Executable;"
1540 #define STACK_TRACE_ELEMENT     "Ljava/lang/StackTraceElement;"
1541 #define INSTALLED_CODE          "Ljdk/vm/ci/code/InstalledCode;"
1542 #define TARGET_DESCRIPTION      "Ljdk/vm/ci/code/TargetDescription;"
1543 #define BYTECODE_FRAME          "Ljdk/vm/ci/code/BytecodeFrame;"
1544 #define INSPECTED_FRAME_VISITOR "Ljdk/vm/ci/code/stack/InspectedFrameVisitor;"
1545 #define RESOLVED_METHOD         "Ljdk/vm/ci/meta/ResolvedJavaMethod;"
1546 #define HS_RESOLVED_METHOD      "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl;"
1547 #define HS_RESOLVED_KLASS       "Ljdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl;"
1548 #define HS_CONSTANT_POOL        "Ljdk/vm/ci/hotspot/HotSpotConstantPool;"
1549 #define HS_COMPILED_CODE        "Ljdk/vm/ci/hotspot/HotSpotCompiledCode;"
1550 #define HS_CONFIG               "Ljdk/vm/ci/hotspot/HotSpotVMConfig;"
1551 #define HS_METADATA             "Ljdk/vm/ci/hotspot/HotSpotMetaData;"
1552 #define HS_STACK_FRAME_REF      "Ljdk/vm/ci/hotspot/HotSpotStackFrameReference;"
1553 #define HS_SPECULATION_LOG      "Ljdk/vm/ci/hotspot/HotSpotSpeculationLog;"
1554 #define REFLECTION_EXECUTABLE   "Ljava/lang/reflect/Executable;"
1555 #define REFLECTION_FIELD        "Ljava/lang/reflect/Field;"
1556 #define METASPACE_METHOD_DATA   "J"
1557 
1558 JNINativeMethod CompilerToVM::methods[] = {
1559   {CC "getBytecode",                                  CC "(" HS_RESOLVED_METHOD ")[B",                                                      FN_PTR(getBytecode)},
1560   {CC "getExceptionTableStart",                       CC "(" HS_RESOLVED_METHOD ")J",                                                       FN_PTR(getExceptionTableStart)},
1561   {CC "getExceptionTableLength",                      CC "(" HS_RESOLVED_METHOD ")I",                                                       FN_PTR(getExceptionTableLength)},
1562   {CC "findUniqueConcreteMethod",                     CC "(" HS_RESOLVED_KLASS HS_RESOLVED_METHOD ")" HS_RESOLVED_METHOD,                   FN_PTR(findUniqueConcreteMethod)},
1563   {CC "getImplementor",                               CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS,                                       FN_PTR(getImplementor)},
1564   {CC "getStackTraceElement",                         CC "(" HS_RESOLVED_METHOD "I)" STACK_TRACE_ELEMENT,                                   FN_PTR(getStackTraceElement)},
1565   {CC "methodIsIgnoredBySecurityStackWalk",           CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(methodIsIgnoredBySecurityStackWalk)},
1566   {CC "setNotInlinableOrCompilable",                  CC "(" HS_RESOLVED_METHOD ")V",                                                       FN_PTR(setNotInlinableOrCompilable)},
1567   {CC "isCompilable",                                 CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(isCompilable)},
1568   {CC "hasNeverInlineDirective",                      CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(hasNeverInlineDirective)},
1569   {CC "shouldInlineMethod",                           CC "(" HS_RESOLVED_METHOD ")Z",                                                       FN_PTR(shouldInlineMethod)},
1570   {CC "lookupType",                                   CC "(" STRING CLASS "Z)" HS_RESOLVED_KLASS,                                           FN_PTR(lookupType)},
1571   {CC "lookupNameInPool",                             CC "(" HS_CONSTANT_POOL "I)" STRING,                                                  FN_PTR(lookupNameInPool)},
1572   {CC "lookupNameAndTypeRefIndexInPool",              CC "(" HS_CONSTANT_POOL "I)I",                                                        FN_PTR(lookupNameAndTypeRefIndexInPool)},
1573   {CC "lookupSignatureInPool",                        CC "(" HS_CONSTANT_POOL "I)" STRING,                                                  FN_PTR(lookupSignatureInPool)},
1574   {CC "lookupKlassRefIndexInPool",                    CC "(" HS_CONSTANT_POOL "I)I",                                                        FN_PTR(lookupKlassRefIndexInPool)},
1575   {CC "lookupKlassInPool",                            CC "(" HS_CONSTANT_POOL "I)Ljava/lang/Object;",                                       FN_PTR(lookupKlassInPool)},


1603   {CC "getLocalVariableTableStart",                   CC "(" HS_RESOLVED_METHOD ")J",                                                       FN_PTR(getLocalVariableTableStart)},
1604   {CC "getLocalVariableTableLength",                  CC "(" HS_RESOLVED_METHOD ")I",                                                       FN_PTR(getLocalVariableTableLength)},
1605   {CC "reprofile",                                    CC "(" HS_RESOLVED_METHOD ")V",                                                       FN_PTR(reprofile)},
1606   {CC "invalidateInstalledCode",                      CC "(" INSTALLED_CODE ")V",                                                           FN_PTR(invalidateInstalledCode)},
1607   {CC "collectCounters",                              CC "()[J",                                                                            FN_PTR(collectCounters)},
1608   {CC "allocateCompileId",                            CC "(" HS_RESOLVED_METHOD "I)I",                                                      FN_PTR(allocateCompileId)},
1609   {CC "isMature",                                     CC "(" METASPACE_METHOD_DATA ")Z",                                                    FN_PTR(isMature)},
1610   {CC "hasCompiledCodeForOSR",                        CC "(" HS_RESOLVED_METHOD "II)Z",                                                     FN_PTR(hasCompiledCodeForOSR)},
1611   {CC "getSymbol",                                    CC "(J)" STRING,                                                                      FN_PTR(getSymbol)},
1612   {CC "iterateFrames",                                CC "([" RESOLVED_METHOD "[" RESOLVED_METHOD "I" INSPECTED_FRAME_VISITOR ")" OBJECT,   FN_PTR(iterateFrames)},
1613   {CC "materializeVirtualObjects",                    CC "(" HS_STACK_FRAME_REF "Z)V",                                                      FN_PTR(materializeVirtualObjects)},
1614   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
1615   {CC "writeDebugOutput",                             CC "([BII)V",                                                                         FN_PTR(writeDebugOutput)},
1616   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
1617   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
1618   {CC "getFingerprint",                               CC "(J)J",                                                                            FN_PTR(getFingerprint)},
1619   {CC "getHostClass",                                 CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_KLASS,                                       FN_PTR(getHostClass)},
1620   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
1621   {CC "compileToBytecode",                            CC "(" OBJECT ")V",                                                                   FN_PTR(compileToBytecode)},
1622   {CC "getFlagValue",                                 CC "(" STRING ")" OBJECT,                                                             FN_PTR(getFlagValue)},
1623   {CC "asReflectionExecutable",                       CC "(" HS_RESOLVED_METHOD ")" REFLECTION_EXECUTABLE,                                  FN_PTR(asReflectionExecutable)},
1624   {CC "asReflectionField",                            CC "(" HS_RESOLVED_KLASS "I)" REFLECTION_FIELD,                                       FN_PTR(asReflectionField)},
1625 };
1626 
1627 int CompilerToVM::methods_count() {
1628   return sizeof(methods) / sizeof(JNINativeMethod);
1629 }
< prev index next >