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