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: 809 break; 810 case vmIntrinsics::_montgomeryMultiply: 811 if (!UseMontgomeryMultiplyIntrinsic) return true; 812 break; 813 case vmIntrinsics::_montgomerySquare: 814 if (!UseMontgomerySquareIntrinsic) return true; 815 break; 816 case vmIntrinsics::_addExactI: 817 case vmIntrinsics::_addExactL: 818 case vmIntrinsics::_decrementExactI: 819 case vmIntrinsics::_decrementExactL: 820 case vmIntrinsics::_incrementExactI: 821 case vmIntrinsics::_incrementExactL: 822 case vmIntrinsics::_multiplyExactI: 823 case vmIntrinsics::_multiplyExactL: 824 case vmIntrinsics::_negateExactI: 825 case vmIntrinsics::_negateExactL: 826 case vmIntrinsics::_subtractExactI: 827 case vmIntrinsics::_subtractExactL: 828 if (!UseMathExactIntrinsics || !InlineMathNatives) return true; 829 break; 830 #endif // COMPILER2 831 default: 832 return false; 833 } 834 835 return false; 836 } 837 838 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0" 839 static const char* vm_intrinsic_name_bodies = 840 VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE, 841 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE); 842 843 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT]; 844 845 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) { 846 const char** nt = &vm_intrinsic_name_table[0]; 847 if (nt[_none] == NULL) { 848 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: 813 break; 814 case vmIntrinsics::_montgomeryMultiply: 815 if (!UseMontgomeryMultiplyIntrinsic) return true; 816 break; 817 case vmIntrinsics::_montgomerySquare: 818 if (!UseMontgomerySquareIntrinsic) return true; 819 break; 820 case vmIntrinsics::_addExactI: 821 case vmIntrinsics::_addExactL: 822 case vmIntrinsics::_decrementExactI: 823 case vmIntrinsics::_decrementExactL: 824 case vmIntrinsics::_incrementExactI: 825 case vmIntrinsics::_incrementExactL: 826 case vmIntrinsics::_multiplyExactI: 827 case vmIntrinsics::_multiplyExactL: 828 case vmIntrinsics::_negateExactI: 829 case vmIntrinsics::_negateExactL: 830 case vmIntrinsics::_subtractExactI: 831 case vmIntrinsics::_subtractExactL: 832 if (!UseMathExactIntrinsics || !InlineMathNatives) return true; 833 break; 834 case vmIntrinsics::_isDigit: 835 case vmIntrinsics::_isLowerCase: 836 case vmIntrinsics::_isUpperCase: 837 case vmIntrinsics::_isWhitespace: 838 if (!UseCharacterCompareIntrinsics) return true; 839 break; 840 #endif // COMPILER2 841 default: 842 return false; 843 } 844 845 return false; 846 } 847 848 #define VM_INTRINSIC_INITIALIZE(id, klass, name, sig, flags) #id "\0" 849 static const char* vm_intrinsic_name_bodies = 850 VM_INTRINSICS_DO(VM_INTRINSIC_INITIALIZE, 851 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE); 852 853 static const char* vm_intrinsic_name_table[vmIntrinsics::ID_LIMIT]; 854 855 const char* vmIntrinsics::name_at(vmIntrinsics::ID id) { 856 const char** nt = &vm_intrinsic_name_table[0]; 857 if (nt[_none] == NULL) { 858 char* string = (char*) &vm_intrinsic_name_bodies[0]; |