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 } |