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];
|