< prev index next >

src/share/vm/classfile/vmSymbols.cpp

Print this page




 434   // field can be registered by the G1 pre-barrier code. The intrinsified
 435   // version of Reference::get also adds a memory barrier to prevent
 436   // commoning reads from the referent field across safepoint since GC
 437   // can change the referent field's value. See Compile::Compile()
 438   // in src/share/vm/opto/compile.cpp or
 439   // GraphBuilder::GraphBuilder() in src/share/vm/c1/c1_GraphBuilder.cpp
 440   // for more details.
 441   ccstr disable_intr = NULL;
 442   if ((DisableIntrinsic[0] != '\0' && strstr(DisableIntrinsic, vmIntrinsics::name_at(id)) != NULL) ||
 443       (!compilation_context.is_null() &&
 444        CompilerOracle::has_option_value(compilation_context, "DisableIntrinsic", disable_intr) &&
 445        strstr(disable_intr, vmIntrinsics::name_at(id)) != NULL)
 446   ) {
 447     return true;
 448   }
 449 
 450   // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in
 451   // the following switch statement.
 452   if (!InlineNatives) {
 453     switch (id) {
 454     case vmIntrinsics::_indexOf:
 455     case vmIntrinsics::_compareTo:
 456     case vmIntrinsics::_equals:










 457     case vmIntrinsics::_equalsC:






 458     case vmIntrinsics::_getAndAddInt:
 459     case vmIntrinsics::_getAndAddLong:
 460     case vmIntrinsics::_getAndSetInt:
 461     case vmIntrinsics::_getAndSetLong:
 462     case vmIntrinsics::_getAndSetObject:
 463     case vmIntrinsics::_loadFence:
 464     case vmIntrinsics::_storeFence:
 465     case vmIntrinsics::_fullFence:

 466     case vmIntrinsics::_Reference_get:
 467       break;
 468     default:
 469       return true;
 470     }
 471   }
 472 
 473   switch (id) {
 474   case vmIntrinsics::_isInstance:
 475   case vmIntrinsics::_isAssignableFrom:
 476   case vmIntrinsics::_getModifiers:
 477   case vmIntrinsics::_isInterface:
 478   case vmIntrinsics::_isArray:
 479   case vmIntrinsics::_isPrimitive:
 480   case vmIntrinsics::_getSuperclass:
 481   case vmIntrinsics::_Class_cast:
 482   case vmIntrinsics::_getLength:
 483   case vmIntrinsics::_newArray:
 484   case vmIntrinsics::_getClass:
 485     if (!InlineClassNatives) return true;


 628   case vmIntrinsics::_updateBytesAdler32:
 629   case vmIntrinsics::_updateByteBufferAdler32:
 630     if (!UseAdler32Intrinsics) return true;
 631     break;
 632   case vmIntrinsics::_copyMemory:
 633     if (!InlineArrayCopy || !InlineUnsafeOps) return true;
 634     break;
 635 #ifdef COMPILER1
 636   case vmIntrinsics::_checkIndex:
 637     if (!InlineNIOCheckIndex) return true;
 638     break;
 639 #endif // COMPILER1
 640 #ifdef COMPILER2
 641   case vmIntrinsics::_clone:
 642   case vmIntrinsics::_copyOf:
 643   case vmIntrinsics::_copyOfRange:
 644     // These intrinsics use both the objectcopy and the arraycopy
 645     // intrinsic mechanism.
 646     if (!InlineObjectCopy || !InlineArrayCopy) return true;
 647     break;
 648   case vmIntrinsics::_compareTo:



 649     if (!SpecialStringCompareTo) return true;
 650     break;
 651   case vmIntrinsics::_indexOf:






 652     if (!SpecialStringIndexOf) return true;
 653     break;
 654   case vmIntrinsics::_equals:

 655     if (!SpecialStringEquals) return true;
 656     break;

 657   case vmIntrinsics::_equalsC:
 658     if (!SpecialArraysEquals) return true;
 659     break;
 660   case vmIntrinsics::_encodeISOArray:

 661     if (!SpecialEncodeISOArray) return true;
 662     break;
 663   case vmIntrinsics::_getCallerClass:
 664     if (!InlineReflectionGetCallerClass) return true;
 665     break;
 666   case vmIntrinsics::_multiplyToLen:
 667     if (!UseMultiplyToLenIntrinsic) return true;
 668     break;
 669   case vmIntrinsics::_squareToLen:
 670     if (!UseSquareToLenIntrinsic) return true;
 671     break;
 672   case vmIntrinsics::_mulAdd:
 673     if (!UseMulAddIntrinsic) return true;
 674     break;
 675   case vmIntrinsics::_montgomeryMultiply:
 676     if (!UseMontgomeryMultiplyIntrinsic) return true;
 677     break;
 678   case vmIntrinsics::_montgomerySquare:
 679     if (!UseMontgomerySquareIntrinsic) return true;
 680     break;
 681   case vmIntrinsics::_addExactI:
 682   case vmIntrinsics::_addExactL:
 683   case vmIntrinsics::_decrementExactI:
 684   case vmIntrinsics::_decrementExactL:
 685   case vmIntrinsics::_incrementExactI:
 686   case vmIntrinsics::_incrementExactL:
 687   case vmIntrinsics::_multiplyExactI:
 688   case vmIntrinsics::_multiplyExactL:
 689   case vmIntrinsics::_negateExactI:
 690   case vmIntrinsics::_negateExactL:
 691   case vmIntrinsics::_subtractExactI:
 692   case vmIntrinsics::_subtractExactL:
 693     if (!UseMathExactIntrinsics || !InlineMathNatives) return true;






 694     break;
 695 #endif // COMPILER2
 696   default:
 697     return false;
 698   }
 699 
 700   return false;
 701 }
 702 
 703 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0"
 704 static const char* vm_intrinsic_name_bodies =
 705   VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE,
 706                    VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE);
 707 
 708 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT];
 709 
 710 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) {
 711   const char** nt = &vm_intrinsic_name_table[0];
 712   if (nt[_none] == NULL) {
 713     char* string = (char*) &vm_intrinsic_name_bodies[0];




 434   // field can be registered by the G1 pre-barrier code. The intrinsified
 435   // version of Reference::get also adds a memory barrier to prevent
 436   // commoning reads from the referent field across safepoint since GC
 437   // can change the referent field's value. See Compile::Compile()
 438   // in src/share/vm/opto/compile.cpp or
 439   // GraphBuilder::GraphBuilder() in src/share/vm/c1/c1_GraphBuilder.cpp
 440   // for more details.
 441   ccstr disable_intr = NULL;
 442   if ((DisableIntrinsic[0] != '\0' && strstr(DisableIntrinsic, vmIntrinsics::name_at(id)) != NULL) ||
 443       (!compilation_context.is_null() &&
 444        CompilerOracle::has_option_value(compilation_context, "DisableIntrinsic", disable_intr) &&
 445        strstr(disable_intr, vmIntrinsics::name_at(id)) != NULL)
 446   ) {
 447     return true;
 448   }
 449 
 450   // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in
 451   // the following switch statement.
 452   if (!InlineNatives) {
 453     switch (id) {
 454     case vmIntrinsics::_indexOfL:
 455     case vmIntrinsics::_indexOfU:
 456     case vmIntrinsics::_indexOfUL:
 457     case vmIntrinsics::_indexOfIL:
 458     case vmIntrinsics::_indexOfIU:
 459     case vmIntrinsics::_indexOfIUL:
 460     case vmIntrinsics::_indexOfU_char:
 461     case vmIntrinsics::_compareToL:
 462     case vmIntrinsics::_compareToU:
 463     case vmIntrinsics::_compareToLU:
 464     case vmIntrinsics::_compareToUL:
 465     case vmIntrinsics::_equalsL:
 466     case vmIntrinsics::_equalsU:
 467     case vmIntrinsics::_equalsC:
 468     case vmIntrinsics::_getCharStringU:
 469     case vmIntrinsics::_putCharStringU:
 470     case vmIntrinsics::_compressStringC:
 471     case vmIntrinsics::_compressStringB:
 472     case vmIntrinsics::_inflateStringC:
 473     case vmIntrinsics::_inflateStringB:
 474     case vmIntrinsics::_getAndAddInt:
 475     case vmIntrinsics::_getAndAddLong:
 476     case vmIntrinsics::_getAndSetInt:
 477     case vmIntrinsics::_getAndSetLong:
 478     case vmIntrinsics::_getAndSetObject:
 479     case vmIntrinsics::_loadFence:
 480     case vmIntrinsics::_storeFence:
 481     case vmIntrinsics::_fullFence:
 482     case vmIntrinsics::_hasNegatives:
 483     case vmIntrinsics::_Reference_get:
 484       break;
 485     default:
 486       return true;
 487     }
 488   }
 489 
 490   switch (id) {
 491   case vmIntrinsics::_isInstance:
 492   case vmIntrinsics::_isAssignableFrom:
 493   case vmIntrinsics::_getModifiers:
 494   case vmIntrinsics::_isInterface:
 495   case vmIntrinsics::_isArray:
 496   case vmIntrinsics::_isPrimitive:
 497   case vmIntrinsics::_getSuperclass:
 498   case vmIntrinsics::_Class_cast:
 499   case vmIntrinsics::_getLength:
 500   case vmIntrinsics::_newArray:
 501   case vmIntrinsics::_getClass:
 502     if (!InlineClassNatives) return true;


 645   case vmIntrinsics::_updateBytesAdler32:
 646   case vmIntrinsics::_updateByteBufferAdler32:
 647     if (!UseAdler32Intrinsics) return true;
 648     break;
 649   case vmIntrinsics::_copyMemory:
 650     if (!InlineArrayCopy || !InlineUnsafeOps) return true;
 651     break;
 652 #ifdef COMPILER1
 653   case vmIntrinsics::_checkIndex:
 654     if (!InlineNIOCheckIndex) return true;
 655     break;
 656 #endif // COMPILER1
 657 #ifdef COMPILER2
 658   case vmIntrinsics::_clone:
 659   case vmIntrinsics::_copyOf:
 660   case vmIntrinsics::_copyOfRange:
 661     // These intrinsics use both the objectcopy and the arraycopy
 662     // intrinsic mechanism.
 663     if (!InlineObjectCopy || !InlineArrayCopy) return true;
 664     break;
 665   case vmIntrinsics::_compareToL:
 666   case vmIntrinsics::_compareToU:
 667   case vmIntrinsics::_compareToLU:
 668   case vmIntrinsics::_compareToUL:
 669     if (!SpecialStringCompareTo) return true;
 670     break;
 671   case vmIntrinsics::_indexOfL:
 672   case vmIntrinsics::_indexOfU:
 673   case vmIntrinsics::_indexOfUL:
 674   case vmIntrinsics::_indexOfIL:
 675   case vmIntrinsics::_indexOfIU:
 676   case vmIntrinsics::_indexOfIUL:
 677   case vmIntrinsics::_indexOfU_char:
 678     if (!SpecialStringIndexOf) return true;
 679     break;
 680   case vmIntrinsics::_equalsL:
 681   case vmIntrinsics::_equalsU:
 682     if (!SpecialStringEquals) return true;
 683     break;
 684   case vmIntrinsics::_equalsB:
 685   case vmIntrinsics::_equalsC:
 686     if (!SpecialArraysEquals) return true;
 687     break;
 688   case vmIntrinsics::_encodeISOArray:
 689   case vmIntrinsics::_encodeByteISOArray:
 690     if (!SpecialEncodeISOArray) return true;
 691     break;
 692   case vmIntrinsics::_getCallerClass:
 693     if (!InlineReflectionGetCallerClass) return true;
 694     break;
 695   case vmIntrinsics::_multiplyToLen:
 696     if (!UseMultiplyToLenIntrinsic) return true;
 697     break;
 698   case vmIntrinsics::_squareToLen:
 699     if (!UseSquareToLenIntrinsic) return true;
 700     break;
 701   case vmIntrinsics::_mulAdd:
 702     if (!UseMulAddIntrinsic) return true;
 703     break;
 704   case vmIntrinsics::_montgomeryMultiply:
 705     if (!UseMontgomeryMultiplyIntrinsic) return true;
 706     break;
 707   case vmIntrinsics::_montgomerySquare:
 708     if (!UseMontgomerySquareIntrinsic) return true;
 709     break;
 710   case vmIntrinsics::_addExactI:
 711   case vmIntrinsics::_addExactL:
 712   case vmIntrinsics::_decrementExactI:
 713   case vmIntrinsics::_decrementExactL:
 714   case vmIntrinsics::_incrementExactI:
 715   case vmIntrinsics::_incrementExactL:
 716   case vmIntrinsics::_multiplyExactI:
 717   case vmIntrinsics::_multiplyExactL:
 718   case vmIntrinsics::_negateExactI:
 719   case vmIntrinsics::_negateExactL:
 720   case vmIntrinsics::_subtractExactI:
 721   case vmIntrinsics::_subtractExactL:
 722     if (!UseMathExactIntrinsics || !InlineMathNatives) return true;
 723     break;
 724   case vmIntrinsics::_getCharStringU:
 725   case vmIntrinsics::_putCharStringU:
 726     // Until JDK-8138651 is fixed, we have to rely on a special flag to
 727     // disable these intrinsics for experiments.
 728     if (!StringCharIntrinsics) return true;
 729     break;
 730 #endif // COMPILER2
 731   default:
 732     return false;
 733   }
 734 
 735   return false;
 736 }
 737 
 738 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0"
 739 static const char* vm_intrinsic_name_bodies =
 740   VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE,
 741                    VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE);
 742 
 743 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT];
 744 
 745 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) {
 746   const char** nt = &vm_intrinsic_name_table[0];
 747   if (nt[_none] == NULL) {
 748     char* string = (char*) &vm_intrinsic_name_bodies[0];


< prev index next >