506 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
507 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
508 int result = 0;
509 CHECK_JNI_EXCEPTION_(env, result);
510 MutexLockerEx mu(Compile_lock);
511 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
512 if (is_osr) {
513 result += mh->mark_osr_nmethods();
514 } else if (mh->code() != NULL) {
515 mh->code()->mark_for_deoptimization();
516 ++result;
517 }
518 result += CodeCache::mark_for_deoptimization(mh());
519 if (result > 0) {
520 VM_Deoptimize op;
521 VMThread::execute(&op);
522 }
523 return result;
524 WB_END
525
526 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
527 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
528 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
529 MutexLockerEx mu(Compile_lock);
530 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
531 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
532 if (code == NULL) {
533 return JNI_FALSE;
534 }
535 return (code->is_alive() && !code->is_marked_for_deoptimization());
536 WB_END
537
538 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
539 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
540 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
541 MutexLockerEx mu(Compile_lock);
542 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
543 if (is_osr) {
544 return CompilationPolicy::can_be_osr_compiled(mh, comp_level);
545 } else {
626 WB_END
627
628 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
629 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
630 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
631 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
632 bool result = mh->force_inline();
633 mh->set_force_inline(value == JNI_TRUE);
634 return result;
635 WB_END
636
637 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci))
638 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
639 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
640 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
641 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
642 MutexLockerEx mu(Compile_lock);
643 return (mh->queued_for_compilation() || nm != NULL);
644 WB_END
645
646 WB_ENTRY(jboolean, WB_ShouldPrintAssembly(JNIEnv* env, jobject o, jobject method))
647 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
648 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
649
650 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
651 DirectiveSet* directive = DirectivesStack::getMatchingDirective(mh, CompileBroker::compiler(CompLevel_simple));
652 bool result = directive->PrintAssemblyOption;
653 DirectivesStack::release(directive);
654
655 return result;
656 WB_END
657
658 WB_ENTRY(jint, WB_MatchesInline(JNIEnv* env, jobject o, jobject method, jstring pattern))
659 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
660 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
661
662 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
663
664 ResourceMark rm;
665 const char* error_msg = NULL;
666 char* method_str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(pattern));
667 InlineMatcher* m = InlineMatcher::parse_inline_pattern(method_str, error_msg);
668
669 if (m == NULL) {
670 assert(error_msg != NULL, "Always have an error message");
671 tty->print_cr("Got error: %s", error_msg);
1508 {CC"g1AuxiliaryMemoryUsage", CC"()Ljava/lang/management/MemoryUsage;",
1509 (void*)&WB_G1AuxiliaryMemoryUsage },
1510 {CC"psVirtualSpaceAlignment",CC"()J", (void*)&WB_PSVirtualSpaceAlignment},
1511 {CC"psHeapGenerationAlignment",CC"()J", (void*)&WB_PSHeapGenerationAlignment},
1512 #endif // INCLUDE_ALL_GCS
1513 #if INCLUDE_NMT
1514 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
1515 {CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack},
1516 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
1517 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
1518 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
1519 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
1520 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
1521 {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel},
1522 {CC"NMTGetHashSize", CC"()I", (void*)&WB_NMTGetHashSize },
1523 #endif // INCLUDE_NMT
1524 {CC"deoptimizeFrames", CC"(Z)I", (void*)&WB_DeoptimizeFrames },
1525 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
1526 {CC"deoptimizeMethod0", CC"(Ljava/lang/reflect/Executable;Z)I",
1527 (void*)&WB_DeoptimizeMethod },
1528 {CC"isMethodCompiled0", CC"(Ljava/lang/reflect/Executable;Z)Z",
1529 (void*)&WB_IsMethodCompiled },
1530 {CC"isMethodCompilable0", CC"(Ljava/lang/reflect/Executable;IZ)Z",
1531 (void*)&WB_IsMethodCompilable},
1532 {CC"isMethodQueuedForCompilation0",
1533 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
1534 {CC"isIntrinsicAvailable0",
1535 CC"(Ljava/lang/reflect/Executable;Ljava/lang/reflect/Executable;I)Z",
1536 (void*)&WB_IsIntrinsicAvailable},
1537 {CC"makeMethodNotCompilable0",
1538 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable},
1539 {CC"testSetDontInlineMethod0",
1540 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod},
1541 {CC"getMethodCompilationLevel0",
1542 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
1543 {CC"getMethodEntryBci0",
1544 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
1545 {CC"getCompileQueueSize",
1546 CC"(I)I", (void*)&WB_GetCompileQueueSize},
1547 {CC"testSetForceInlineMethod0",
1548 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetForceInlineMethod},
1549 {CC"enqueueMethodForCompilation0",
1550 CC"(Ljava/lang/reflect/Executable;II)Z", (void*)&WB_EnqueueMethodForCompilation},
1551 {CC"clearMethodState0",
1552 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState},
1553 {CC"lockCompilation", CC"()V", (void*)&WB_LockCompilation},
1554 {CC"unlockCompilation", CC"()V", (void*)&WB_UnlockCompilation},
1555 {CC"matchesMethod",
1556 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)I",
1557 (void*)&WB_MatchesMethod},
1558 {CC"matchesInline",
1559 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)I",
1560 (void*)&WB_MatchesInline},
1561 {CC"shouldPrintAssembly",
1562 CC"(Ljava/lang/reflect/Executable;)Z",
1563 (void*)&WB_ShouldPrintAssembly},
1564
1565 {CC"isConstantVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsConstantVMFlag},
1566 {CC"isLockedVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsLockedVMFlag},
1567 {CC"setBooleanVMFlag", CC"(Ljava/lang/String;Z)V",(void*)&WB_SetBooleanVMFlag},
1568 {CC"setIntVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntVMFlag},
1569 {CC"setUintVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintVMFlag},
1570 {CC"setIntxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntxVMFlag},
1571 {CC"setUintxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintxVMFlag},
1572 {CC"setUint64VMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUint64VMFlag},
1573 {CC"setSizeTVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetSizeTVMFlag},
1574 {CC"setDoubleVMFlag", CC"(Ljava/lang/String;D)V",(void*)&WB_SetDoubleVMFlag},
1575 {CC"setStringVMFlag", CC"(Ljava/lang/String;Ljava/lang/String;)V",
1576 (void*)&WB_SetStringVMFlag},
1577 {CC"getBooleanVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Boolean;",
1578 (void*)&WB_GetBooleanVMFlag},
1579 {CC"getIntVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1580 (void*)&WB_GetIntVMFlag},
1581 {CC"getUintVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1582 (void*)&WB_GetUintVMFlag},
|
506 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
507 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
508 int result = 0;
509 CHECK_JNI_EXCEPTION_(env, result);
510 MutexLockerEx mu(Compile_lock);
511 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
512 if (is_osr) {
513 result += mh->mark_osr_nmethods();
514 } else if (mh->code() != NULL) {
515 mh->code()->mark_for_deoptimization();
516 ++result;
517 }
518 result += CodeCache::mark_for_deoptimization(mh());
519 if (result > 0) {
520 VM_Deoptimize op;
521 VMThread::execute(&op);
522 }
523 return result;
524 WB_END
525
526 WB_ENTRY(jboolean, WB_HasC1Compiler(JNIEnv* env, jobject o))
527 #ifdef COMPILER1
528 return true;
529 #else
530 return false;
531 #endif
532 WB_END
533
534 WB_ENTRY(jboolean, WB_HasC2Compiler(JNIEnv* env, jobject o))
535 #ifdef COMPILER2
536 return true;
537 #else
538 return false;
539 #endif
540 WB_END
541
542 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
543 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
544 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
545 MutexLockerEx mu(Compile_lock);
546 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
547 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
548 if (code == NULL) {
549 return JNI_FALSE;
550 }
551 return (code->is_alive() && !code->is_marked_for_deoptimization());
552 WB_END
553
554 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
555 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
556 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
557 MutexLockerEx mu(Compile_lock);
558 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
559 if (is_osr) {
560 return CompilationPolicy::can_be_osr_compiled(mh, comp_level);
561 } else {
642 WB_END
643
644 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
645 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
646 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
647 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
648 bool result = mh->force_inline();
649 mh->set_force_inline(value == JNI_TRUE);
650 return result;
651 WB_END
652
653 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci))
654 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
655 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
656 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
657 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
658 MutexLockerEx mu(Compile_lock);
659 return (mh->queued_for_compilation() || nm != NULL);
660 WB_END
661
662 WB_ENTRY(jboolean, WB_ShouldPrintAssembly(JNIEnv* env, jobject o, jobject method, jint comp_level))
663 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
664 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
665
666 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
667 DirectiveSet* directive = DirectivesStack::getMatchingDirective(mh, CompileBroker::compiler(comp_level));
668 bool result = directive->PrintAssemblyOption;
669 DirectivesStack::release(directive);
670
671 return result;
672 WB_END
673
674 WB_ENTRY(jint, WB_MatchesInline(JNIEnv* env, jobject o, jobject method, jstring pattern))
675 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
676 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
677
678 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
679
680 ResourceMark rm;
681 const char* error_msg = NULL;
682 char* method_str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(pattern));
683 InlineMatcher* m = InlineMatcher::parse_inline_pattern(method_str, error_msg);
684
685 if (m == NULL) {
686 assert(error_msg != NULL, "Always have an error message");
687 tty->print_cr("Got error: %s", error_msg);
1524 {CC"g1AuxiliaryMemoryUsage", CC"()Ljava/lang/management/MemoryUsage;",
1525 (void*)&WB_G1AuxiliaryMemoryUsage },
1526 {CC"psVirtualSpaceAlignment",CC"()J", (void*)&WB_PSVirtualSpaceAlignment},
1527 {CC"psHeapGenerationAlignment",CC"()J", (void*)&WB_PSHeapGenerationAlignment},
1528 #endif // INCLUDE_ALL_GCS
1529 #if INCLUDE_NMT
1530 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
1531 {CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack},
1532 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
1533 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
1534 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
1535 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
1536 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
1537 {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel},
1538 {CC"NMTGetHashSize", CC"()I", (void*)&WB_NMTGetHashSize },
1539 #endif // INCLUDE_NMT
1540 {CC"deoptimizeFrames", CC"(Z)I", (void*)&WB_DeoptimizeFrames },
1541 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
1542 {CC"deoptimizeMethod0", CC"(Ljava/lang/reflect/Executable;Z)I",
1543 (void*)&WB_DeoptimizeMethod },
1544 {CC"hasC1Compiler", CC"()Z", (void*)&WB_HasC1Compiler },
1545 {CC"hasC2Compiler", CC"()Z", (void*)&WB_HasC2Compiler },
1546 {CC"isMethodCompiled0", CC"(Ljava/lang/reflect/Executable;Z)Z",
1547 (void*)&WB_IsMethodCompiled },
1548 {CC"isMethodCompilable0", CC"(Ljava/lang/reflect/Executable;IZ)Z",
1549 (void*)&WB_IsMethodCompilable},
1550 {CC"isMethodQueuedForCompilation0",
1551 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
1552 {CC"isIntrinsicAvailable0",
1553 CC"(Ljava/lang/reflect/Executable;Ljava/lang/reflect/Executable;I)Z",
1554 (void*)&WB_IsIntrinsicAvailable},
1555 {CC"makeMethodNotCompilable0",
1556 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable},
1557 {CC"testSetDontInlineMethod0",
1558 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod},
1559 {CC"getMethodCompilationLevel0",
1560 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
1561 {CC"getMethodEntryBci0",
1562 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
1563 {CC"getCompileQueueSize",
1564 CC"(I)I", (void*)&WB_GetCompileQueueSize},
1565 {CC"testSetForceInlineMethod0",
1566 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetForceInlineMethod},
1567 {CC"enqueueMethodForCompilation0",
1568 CC"(Ljava/lang/reflect/Executable;II)Z", (void*)&WB_EnqueueMethodForCompilation},
1569 {CC"clearMethodState0",
1570 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState},
1571 {CC"lockCompilation", CC"()V", (void*)&WB_LockCompilation},
1572 {CC"unlockCompilation", CC"()V", (void*)&WB_UnlockCompilation},
1573 {CC"matchesMethod",
1574 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)I",
1575 (void*)&WB_MatchesMethod},
1576 {CC"matchesInline",
1577 CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)I",
1578 (void*)&WB_MatchesInline},
1579 {CC"shouldPrintAssembly",
1580 CC"(Ljava/lang/reflect/Executable;I)Z",
1581 (void*)&WB_ShouldPrintAssembly},
1582
1583 {CC"isConstantVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsConstantVMFlag},
1584 {CC"isLockedVMFlag", CC"(Ljava/lang/String;)Z", (void*)&WB_IsLockedVMFlag},
1585 {CC"setBooleanVMFlag", CC"(Ljava/lang/String;Z)V",(void*)&WB_SetBooleanVMFlag},
1586 {CC"setIntVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntVMFlag},
1587 {CC"setUintVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintVMFlag},
1588 {CC"setIntxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntxVMFlag},
1589 {CC"setUintxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintxVMFlag},
1590 {CC"setUint64VMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUint64VMFlag},
1591 {CC"setSizeTVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetSizeTVMFlag},
1592 {CC"setDoubleVMFlag", CC"(Ljava/lang/String;D)V",(void*)&WB_SetDoubleVMFlag},
1593 {CC"setStringVMFlag", CC"(Ljava/lang/String;Ljava/lang/String;)V",
1594 (void*)&WB_SetStringVMFlag},
1595 {CC"getBooleanVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Boolean;",
1596 (void*)&WB_GetBooleanVMFlag},
1597 {CC"getIntVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1598 (void*)&WB_GetIntVMFlag},
1599 {CC"getUintVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
1600 (void*)&WB_GetUintVMFlag},
|