362 case vmIntrinsics::_getClass: 363 case vmIntrinsics::_isInstance: 364 case vmIntrinsics::_currentThread: 365 case vmIntrinsics::_dabs: 366 case vmIntrinsics::_dsqrt: 367 case vmIntrinsics::_dsin: 368 case vmIntrinsics::_dcos: 369 case vmIntrinsics::_dtan: 370 case vmIntrinsics::_dlog: 371 case vmIntrinsics::_dlog10: 372 case vmIntrinsics::_dexp: 373 case vmIntrinsics::_dpow: 374 case vmIntrinsics::_checkIndex: 375 case vmIntrinsics::_Reference_get: 376 case vmIntrinsics::_updateCRC32: 377 case vmIntrinsics::_updateBytesCRC32: 378 case vmIntrinsics::_updateByteBufferCRC32: 379 case vmIntrinsics::_vectorizedMismatch: 380 case vmIntrinsics::_fmaD: 381 case vmIntrinsics::_fmaF: 382 return true; 383 default: 384 return false; 385 } 386 } 387 388 bool vmIntrinsics::can_trap(vmIntrinsics::ID id) { 389 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 390 switch(id) { 391 #ifdef JFR_HAVE_INTRINSICS 392 case vmIntrinsics::_counterTime: 393 case vmIntrinsics::_getClassId: 394 #endif 395 case vmIntrinsics::_currentTimeMillis: 396 case vmIntrinsics::_nanoTime: 397 case vmIntrinsics::_floatToRawIntBits: 398 case vmIntrinsics::_intBitsToFloat: 399 case vmIntrinsics::_doubleToRawLongBits: 400 case vmIntrinsics::_longBitsToDouble: 401 case vmIntrinsics::_currentThread: 810 break; 811 case vmIntrinsics::_montgomeryMultiply: 812 if (!UseMontgomeryMultiplyIntrinsic) return true; 813 break; 814 case vmIntrinsics::_montgomerySquare: 815 if (!UseMontgomerySquareIntrinsic) return true; 816 break; 817 case vmIntrinsics::_addExactI: 818 case vmIntrinsics::_addExactL: 819 case vmIntrinsics::_decrementExactI: 820 case vmIntrinsics::_decrementExactL: 821 case vmIntrinsics::_incrementExactI: 822 case vmIntrinsics::_incrementExactL: 823 case vmIntrinsics::_multiplyExactI: 824 case vmIntrinsics::_multiplyExactL: 825 case vmIntrinsics::_negateExactI: 826 case vmIntrinsics::_negateExactL: 827 case vmIntrinsics::_subtractExactI: 828 case vmIntrinsics::_subtractExactL: 829 if (!UseMathExactIntrinsics || !InlineMathNatives) return true; 830 break; 831 #endif // COMPILER2 832 default: 833 return false; 834 } 835 836 return false; 837 } 838 839 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0" 840 static const char* vm_intrinsic_name_bodies = 841 VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE, 842 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE); 843 844 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT]; 845 846 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) { 847 const char** nt = &vm_intrinsic_name_table[0]; 848 if (nt[_none] == NULL) { 849 char* string = (char*) &vm_intrinsic_name_bodies[0]; | 362 case vmIntrinsics::_getClass: 363 case vmIntrinsics::_isInstance: 364 case vmIntrinsics::_currentThread: 365 case vmIntrinsics::_dabs: 366 case vmIntrinsics::_dsqrt: 367 case vmIntrinsics::_dsin: 368 case vmIntrinsics::_dcos: 369 case vmIntrinsics::_dtan: 370 case vmIntrinsics::_dlog: 371 case vmIntrinsics::_dlog10: 372 case vmIntrinsics::_dexp: 373 case vmIntrinsics::_dpow: 374 case vmIntrinsics::_checkIndex: 375 case vmIntrinsics::_Reference_get: 376 case vmIntrinsics::_updateCRC32: 377 case vmIntrinsics::_updateBytesCRC32: 378 case vmIntrinsics::_updateByteBufferCRC32: 379 case vmIntrinsics::_vectorizedMismatch: 380 case vmIntrinsics::_fmaD: 381 case vmIntrinsics::_fmaF: 382 case vmIntrinsics::_isDigit: 383 case vmIntrinsics::_isLowerCase: 384 case vmIntrinsics::_isUpperCase: 385 case vmIntrinsics::_isWhitespace: 386 return true; 387 default: 388 return false; 389 } 390 } 391 392 bool vmIntrinsics::can_trap(vmIntrinsics::ID id) { 393 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 394 switch(id) { 395 #ifdef JFR_HAVE_INTRINSICS 396 case vmIntrinsics::_counterTime: 397 case vmIntrinsics::_getClassId: 398 #endif 399 case vmIntrinsics::_currentTimeMillis: 400 case vmIntrinsics::_nanoTime: 401 case vmIntrinsics::_floatToRawIntBits: 402 case vmIntrinsics::_intBitsToFloat: 403 case vmIntrinsics::_doubleToRawLongBits: 404 case vmIntrinsics::_longBitsToDouble: 405 case vmIntrinsics::_currentThread: 814 break; 815 case vmIntrinsics::_montgomeryMultiply: 816 if (!UseMontgomeryMultiplyIntrinsic) return true; 817 break; 818 case vmIntrinsics::_montgomerySquare: 819 if (!UseMontgomerySquareIntrinsic) return true; 820 break; 821 case vmIntrinsics::_addExactI: 822 case vmIntrinsics::_addExactL: 823 case vmIntrinsics::_decrementExactI: 824 case vmIntrinsics::_decrementExactL: 825 case vmIntrinsics::_incrementExactI: 826 case vmIntrinsics::_incrementExactL: 827 case vmIntrinsics::_multiplyExactI: 828 case vmIntrinsics::_multiplyExactL: 829 case vmIntrinsics::_negateExactI: 830 case vmIntrinsics::_negateExactL: 831 case vmIntrinsics::_subtractExactI: 832 case vmIntrinsics::_subtractExactL: 833 if (!UseMathExactIntrinsics || !InlineMathNatives) return true; 834 break; 835 case vmIntrinsics::_isDigit: 836 case vmIntrinsics::_isLowerCase: 837 case vmIntrinsics::_isUpperCase: 838 case vmIntrinsics::_isWhitespace: 839 if (!UseCharacterCompareIntrinsics) return true; 840 break; 841 #endif // COMPILER2 842 default: 843 return false; 844 } 845 846 return false; 847 } 848 849 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0" 850 static const char* vm_intrinsic_name_bodies = 851 VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE, 852 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE); 853 854 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT]; 855 856 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) { 857 const char** nt = &vm_intrinsic_name_table[0]; 858 if (nt[_none] == NULL) { 859 char* string = (char*) &vm_intrinsic_name_bodies[0]; |