hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp
changeset 41325 050786119cb7
parent 41051 77740a69b211
child 41338 310c87628696
equal deleted inserted replaced
41322:d91c045cdfe4 41325:050786119cb7
   471     return 0L;
   471     return 0L;
   472   }
   472   }
   473   return (jlong) (address) method->exception_table_start();
   473   return (jlong) (address) method->exception_table_start();
   474 C2V_END
   474 C2V_END
   475 
   475 
   476 C2V_VMENTRY(jobject, getResolvedJavaMethodAtSlot, (JNIEnv *, jobject, jclass holder_handle, jint slot))
   476 C2V_VMENTRY(jobject, asResolvedJavaMethod, (JNIEnv *, jobject, jobject executable_handle))
   477   oop java_class = JNIHandles::resolve(holder_handle);
   477   oop executable = JNIHandles::resolve(executable_handle);
   478   Klass* holder = java_lang_Class::as_Klass(java_class);
   478   oop mirror = NULL;
       
   479   int slot = 0;
       
   480 
       
   481   if (executable->klass() == SystemDictionary::reflect_Constructor_klass()) {
       
   482     mirror = java_lang_reflect_Constructor::clazz(executable);
       
   483     slot = java_lang_reflect_Constructor::slot(executable);
       
   484   } else {
       
   485     assert(executable->klass() == SystemDictionary::reflect_Method_klass(), "wrong type");
       
   486     mirror = java_lang_reflect_Method::clazz(executable);
       
   487     slot = java_lang_reflect_Method::slot(executable);
       
   488   }
       
   489   Klass* holder = java_lang_Class::as_Klass(mirror);
   479   methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot);
   490   methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot);
   480   oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL);
   491   oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL);
   481   return JNIHandles::make_local(THREAD, result);
   492   return JNIHandles::make_local(THREAD, result);
   482 }
   493 }
   483 
   494 
  1516     bytecode_frame = BytecodePosition::caller(bytecode_frame);
  1527     bytecode_frame = BytecodePosition::caller(bytecode_frame);
  1517   }
  1528   }
  1518   return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
  1529   return size + Deoptimization::last_frame_adjust(0, callee_locals) * BytesPerWord;
  1519 C2V_END
  1530 C2V_END
  1520 
  1531 
       
  1532 C2V_VMENTRY(void, compileToBytecode, (JNIEnv*, jobject, jobject lambda_form_handle))
       
  1533   Handle lambda_form = JNIHandles::resolve_non_null(lambda_form_handle);
       
  1534   if (lambda_form->is_a(SystemDictionary::LambdaForm_klass())) {
       
  1535     TempNewSymbol compileToBytecode = SymbolTable::new_symbol("compileToBytecode", CHECK);
       
  1536     JavaValue result(T_VOID);
       
  1537     JavaCalls::call_special(&result, lambda_form, SystemDictionary::LambdaForm_klass(), compileToBytecode, vmSymbols::void_method_signature(), CHECK);
       
  1538   } else {
       
  1539     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
       
  1540                 err_msg("Unexpected type: %s", lambda_form->klass()->external_name()));
       
  1541   }
       
  1542 C2V_END
  1521 
  1543 
  1522 #define CC (char*)  /*cast a literal from (const char*)*/
  1544 #define CC (char*)  /*cast a literal from (const char*)*/
  1523 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
  1545 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
  1524 
  1546 
  1525 #define STRING                "Ljava/lang/String;"
  1547 #define STRING                "Ljava/lang/String;"
  1526 #define OBJECT                "Ljava/lang/Object;"
  1548 #define OBJECT                "Ljava/lang/Object;"
  1527 #define CLASS                 "Ljava/lang/Class;"
  1549 #define CLASS                 "Ljava/lang/Class;"
       
  1550 #define EXECUTABLE            "Ljava/lang/reflect/Executable;"
  1528 #define STACK_TRACE_ELEMENT   "Ljava/lang/StackTraceElement;"
  1551 #define STACK_TRACE_ELEMENT   "Ljava/lang/StackTraceElement;"
  1529 #define INSTALLED_CODE        "Ljdk/vm/ci/code/InstalledCode;"
  1552 #define INSTALLED_CODE        "Ljdk/vm/ci/code/InstalledCode;"
  1530 #define TARGET_DESCRIPTION    "Ljdk/vm/ci/code/TargetDescription;"
  1553 #define TARGET_DESCRIPTION    "Ljdk/vm/ci/code/TargetDescription;"
  1531 #define BYTECODE_FRAME        "Ljdk/vm/ci/code/BytecodeFrame;"
  1554 #define BYTECODE_FRAME        "Ljdk/vm/ci/code/BytecodeFrame;"
  1532 #define RESOLVED_METHOD       "Ljdk/vm/ci/meta/ResolvedJavaMethod;"
  1555 #define RESOLVED_METHOD       "Ljdk/vm/ci/meta/ResolvedJavaMethod;"
  1570   {CC "getSignaturePolymorphicHolders",               CC "()[" STRING,                                                                      FN_PTR(getSignaturePolymorphicHolders)},
  1593   {CC "getSignaturePolymorphicHolders",               CC "()[" STRING,                                                                      FN_PTR(getSignaturePolymorphicHolders)},
  1571   {CC "getVtableIndexForInterfaceMethod",             CC "(" HS_RESOLVED_KLASS HS_RESOLVED_METHOD ")I",                                     FN_PTR(getVtableIndexForInterfaceMethod)},
  1594   {CC "getVtableIndexForInterfaceMethod",             CC "(" HS_RESOLVED_KLASS HS_RESOLVED_METHOD ")I",                                     FN_PTR(getVtableIndexForInterfaceMethod)},
  1572   {CC "getClassInitializer",                          CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_METHOD,                                      FN_PTR(getClassInitializer)},
  1595   {CC "getClassInitializer",                          CC "(" HS_RESOLVED_KLASS ")" HS_RESOLVED_METHOD,                                      FN_PTR(getClassInitializer)},
  1573   {CC "hasFinalizableSubclass",                       CC "(" HS_RESOLVED_KLASS ")Z",                                                        FN_PTR(hasFinalizableSubclass)},
  1596   {CC "hasFinalizableSubclass",                       CC "(" HS_RESOLVED_KLASS ")Z",                                                        FN_PTR(hasFinalizableSubclass)},
  1574   {CC "getMaxCallTargetOffset",                       CC "(J)J",                                                                            FN_PTR(getMaxCallTargetOffset)},
  1597   {CC "getMaxCallTargetOffset",                       CC "(J)J",                                                                            FN_PTR(getMaxCallTargetOffset)},
  1575   {CC "getResolvedJavaMethodAtSlot",                  CC "(" CLASS "I)" HS_RESOLVED_METHOD,                                                 FN_PTR(getResolvedJavaMethodAtSlot)},
  1598   {CC "asResolvedJavaMethod",                         CC "(" EXECUTABLE ")" HS_RESOLVED_METHOD,                                             FN_PTR(asResolvedJavaMethod)},
  1576   {CC "getResolvedJavaMethod",                        CC "(Ljava/lang/Object;J)" HS_RESOLVED_METHOD,                                        FN_PTR(getResolvedJavaMethod)},
  1599   {CC "getResolvedJavaMethod",                        CC "(Ljava/lang/Object;J)" HS_RESOLVED_METHOD,                                        FN_PTR(getResolvedJavaMethod)},
  1577   {CC "getConstantPool",                              CC "(Ljava/lang/Object;)" HS_CONSTANT_POOL,                                           FN_PTR(getConstantPool)},
  1600   {CC "getConstantPool",                              CC "(Ljava/lang/Object;)" HS_CONSTANT_POOL,                                           FN_PTR(getConstantPool)},
  1578   {CC "getResolvedJavaType",                          CC "(Ljava/lang/Object;JZ)" HS_RESOLVED_KLASS,                                        FN_PTR(getResolvedJavaType)},
  1601   {CC "getResolvedJavaType",                          CC "(Ljava/lang/Object;JZ)" HS_RESOLVED_KLASS,                                        FN_PTR(getResolvedJavaType)},
  1579   {CC "readConfiguration",                            CC "()[" OBJECT,                                                                      FN_PTR(readConfiguration)},
  1602   {CC "readConfiguration",                            CC "()[" OBJECT,                                                                      FN_PTR(readConfiguration)},
  1580   {CC "installCode",                                  CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE INSTALLED_CODE HS_SPECULATION_LOG ")I",    FN_PTR(installCode)},
  1603   {CC "installCode",                                  CC "(" TARGET_DESCRIPTION HS_COMPILED_CODE INSTALLED_CODE HS_SPECULATION_LOG ")I",    FN_PTR(installCode)},
  1597   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
  1620   {CC "shouldDebugNonSafepoints",                     CC "()Z",                                                                             FN_PTR(shouldDebugNonSafepoints)},
  1598   {CC "writeDebugOutput",                             CC "([BII)V",                                                                         FN_PTR(writeDebugOutput)},
  1621   {CC "writeDebugOutput",                             CC "([BII)V",                                                                         FN_PTR(writeDebugOutput)},
  1599   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
  1622   {CC "flushDebugOutput",                             CC "()V",                                                                             FN_PTR(flushDebugOutput)},
  1600   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
  1623   {CC "methodDataProfileDataSize",                    CC "(JI)I",                                                                           FN_PTR(methodDataProfileDataSize)},
  1601   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
  1624   {CC "interpreterFrameSize",                         CC "(" BYTECODE_FRAME ")I",                                                           FN_PTR(interpreterFrameSize)},
       
  1625   {CC "compileToBytecode",                            CC "(" OBJECT ")V",                                                                   FN_PTR(compileToBytecode)},
  1602 };
  1626 };
  1603 
  1627 
  1604 int CompilerToVM::methods_count() {
  1628 int CompilerToVM::methods_count() {
  1605   return sizeof(methods) / sizeof(JNINativeMethod);
  1629   return sizeof(methods) / sizeof(JNINativeMethod);
  1606 }
  1630 }