241 template(override_name, "override") \
242 template(parameterTypes_name, "parameterTypes") \
243 template(returnType_name, "returnType") \
244 template(signature_name, "signature") \
245 template(slot_name, "slot") \
246 \
247 /* Support for annotations (JDK 1.5 and above) */ \
248 \
249 template(annotations_name, "annotations") \
250 template(index_name, "index") \
251 template(executable_name, "executable") \
252 template(parameter_annotations_name, "parameterAnnotations") \
253 template(annotation_default_name, "annotationDefault") \
254 template(sun_reflect_ConstantPool, "sun/reflect/ConstantPool") \
255 template(ConstantPool_name, "constantPoolOop") \
256 template(sun_reflect_UnsafeStaticFieldAccessorImpl, "sun/reflect/UnsafeStaticFieldAccessorImpl")\
257 template(base_name, "base") \
258 /* Type Annotations (JDK 8 and above) */ \
259 template(type_annotations_name, "typeAnnotations") \
260 \
261 \
262 /* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
263 template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \
264 template(java_lang_invoke_ConstantCallSite, "java/lang/invoke/ConstantCallSite") \
265 template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \
266 template(java_lang_invoke_MutableCallSite, "java/lang/invoke/MutableCallSite") \
267 template(java_lang_invoke_VolatileCallSite, "java/lang/invoke/VolatileCallSite") \
268 template(java_lang_invoke_MethodHandle, "java/lang/invoke/MethodHandle") \
269 template(java_lang_invoke_MethodType, "java/lang/invoke/MethodType") \
270 template(java_lang_invoke_MethodType_signature, "Ljava/lang/invoke/MethodType;") \
271 template(java_lang_invoke_MemberName_signature, "Ljava/lang/invoke/MemberName;") \
272 template(java_lang_invoke_LambdaForm_signature, "Ljava/lang/invoke/LambdaForm;") \
273 template(java_lang_invoke_MethodHandle_signature, "Ljava/lang/invoke/MethodHandle;") \
274 /* internal classes known only to the JVM: */ \
275 template(java_lang_invoke_MemberName, "java/lang/invoke/MemberName") \
276 template(java_lang_invoke_MethodHandleNatives, "java/lang/invoke/MethodHandleNatives") \
277 template(java_lang_invoke_MethodHandleNatives_CallSiteContext, "java/lang/invoke/MethodHandleNatives$CallSiteContext") \
278 template(java_lang_invoke_LambdaForm, "java/lang/invoke/LambdaForm") \
279 template(java_lang_invoke_ForceInline_signature, "Ljava/lang/invoke/ForceInline;") \
280 template(java_lang_invoke_DontInline_signature, "Ljava/lang/invoke/DontInline;") \
328 template(finalize_method_name, "finalize") \
329 template(reference_lock_name, "lock") \
330 template(reference_discovered_name, "discovered") \
331 template(run_finalization_name, "runFinalization") \
332 template(run_finalizers_on_exit_name, "runFinalizersOnExit") \
333 template(dispatchUncaughtException_name, "dispatchUncaughtException") \
334 template(initializeSystemClass_name, "initializeSystemClass") \
335 template(loadClass_name, "loadClass") \
336 template(loadClassInternal_name, "loadClassInternal") \
337 template(get_name, "get") \
338 template(put_name, "put") \
339 template(type_name, "type") \
340 template(findNative_name, "findNative") \
341 template(deadChild_name, "deadChild") \
342 template(addClass_name, "addClass") \
343 template(throwIllegalAccessError_name, "throwIllegalAccessError") \
344 template(getFromClass_name, "getFromClass") \
345 template(dispatch_name, "dispatch") \
346 template(getSystemClassLoader_name, "getSystemClassLoader") \
347 template(fillInStackTrace_name, "fillInStackTrace") \
348 template(fillInStackTrace0_name, "fillInStackTrace0") \
349 template(getCause_name, "getCause") \
350 template(initCause_name, "initCause") \
351 template(setProperty_name, "setProperty") \
352 template(getProperty_name, "getProperty") \
353 template(context_name, "context") \
354 template(privilegedContext_name, "privilegedContext") \
355 template(contextClassLoader_name, "contextClassLoader") \
356 template(inheritedAccessControlContext_name, "inheritedAccessControlContext") \
357 template(isPrivileged_name, "isPrivileged") \
358 template(isAuthorized_name, "isAuthorized") \
359 template(getClassContext_name, "getClassContext") \
360 template(wait_name, "wait") \
361 template(checkPackageAccess_name, "checkPackageAccess") \
362 template(stackSize_name, "stackSize") \
363 template(thread_id_name, "tid") \
364 template(newInstance0_name, "newInstance0") \
365 template(limit_name, "limit") \
366 template(member_name, "member") \
367 template(forName_name, "forName") \
368 template(forName0_name, "forName0") \
618 // For example:
619 // do_intrinsic(_foo, java_lang_Object, foo_name, foo_signature, F_xx)
620 // do_name( foo_name, "foo")
621 // do_signature(foo_signature, "()F")
622 // klass = vmSymbols::java_lang_Object()
623 // name = vmSymbols::foo_name()
624 // signature = vmSymbols::foo_signature()
625 //
626 // The name and/or signature might be a "well known" symbol
627 // like "equal" or "()I", in which case there will be no local
628 // re-definition of the symbol.
629 //
630 // The do_class, do_name, and do_signature calls are all used for the
631 // same purpose: Define yet another VM symbol. They could all be merged
632 // into a common 'do_symbol' call, but it seems useful to record our
633 // intentions here about kinds of symbols (class vs. name vs. signature).
634 //
635 // The F_xx is one of the Flags enum; see below.
636 //
637 // for Emacs: (let ((c-backslash-column 120) (c-backslash-max-column 120)) (c-backslash-region (point) (point-max) nil t))
638 #define VM_INTRINSICS_DO(do_intrinsic, do_class, do_name, do_signature, do_alias) \
639 do_intrinsic(_hashCode, java_lang_Object, hashCode_name, void_int_signature, F_R) \
640 do_name( hashCode_name, "hashCode") \
641 do_intrinsic(_getClass, java_lang_Object, getClass_name, void_class_signature, F_R) \
642 do_name( getClass_name, "getClass") \
643 do_intrinsic(_clone, java_lang_Object, clone_name, void_object_signature, F_R) \
644 do_name( clone_name, "clone") \
645 \
646 /* Math & StrictMath intrinsics are defined in terms of just a few signatures: */ \
647 do_class(java_lang_Math, "java/lang/Math") \
648 do_class(java_lang_StrictMath, "java/lang/StrictMath") \
649 do_signature(double2_double_signature, "(DD)D") \
650 do_signature(int2_int_signature, "(II)I") \
651 do_signature(long2_long_signature, "(JJ)J") \
652 \
653 /* here are the math names, all together: */ \
654 do_name(abs_name,"abs") do_name(sin_name,"sin") do_name(cos_name,"cos") \
655 do_name(tan_name,"tan") do_name(atan2_name,"atan2") do_name(sqrt_name,"sqrt") \
656 do_name(log_name,"log") do_name(log10_name,"log10") do_name(pow_name,"pow") \
657 do_name(exp_name,"exp") do_name(min_name,"min") do_name(max_name,"max") \
658 \
775 \
776 do_intrinsic(_copyOfRange, java_util_Arrays, copyOfRange_name, copyOfRange_signature, F_S) \
777 do_name( copyOfRange_name, "copyOfRange") \
778 do_signature(copyOfRange_signature, "([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;") \
779 \
780 do_intrinsic(_equalsC, java_util_Arrays, equals_name, equalsC_signature, F_S) \
781 do_signature(equalsC_signature, "([C[C)Z") \
782 \
783 do_intrinsic(_compareTo, java_lang_String, compareTo_name, string_int_signature, F_R) \
784 do_name( compareTo_name, "compareTo") \
785 do_intrinsic(_indexOf, java_lang_String, indexOf_name, string_int_signature, F_R) \
786 do_name( indexOf_name, "indexOf") \
787 do_intrinsic(_equals, java_lang_String, equals_name, object_boolean_signature, F_R) \
788 \
789 do_class(java_nio_Buffer, "java/nio/Buffer") \
790 do_intrinsic(_checkIndex, java_nio_Buffer, checkIndex_name, int_int_signature, F_R) \
791 do_name( checkIndex_name, "checkIndex") \
792 \
793 do_class(sun_nio_cs_iso8859_1_Encoder, "sun/nio/cs/ISO_8859_1$Encoder") \
794 do_intrinsic(_encodeISOArray, sun_nio_cs_iso8859_1_Encoder, encodeISOArray_name, encodeISOArray_signature, F_S) \
795 do_name( encodeISOArray_name, "encodeISOArray") \
796 do_signature(encodeISOArray_signature, "([CI[BII)I") \
797 \
798 do_class(java_math_BigInteger, "java/math/BigInteger") \
799 do_intrinsic(_multiplyToLen, java_math_BigInteger, multiplyToLen_name, multiplyToLen_signature, F_R) \
800 do_name( multiplyToLen_name, "multiplyToLen") \
801 do_signature(multiplyToLen_signature, "([II[II[I)[I") \
802 \
803 do_intrinsic(_squareToLen, java_math_BigInteger, squareToLen_name, squareToLen_signature, F_S) \
804 do_name( squareToLen_name, "implSquareToLen") \
805 do_signature(squareToLen_signature, "([II[II)[I") \
806 \
807 do_intrinsic(_mulAdd, java_math_BigInteger, mulAdd_name, mulAdd_signature, F_S) \
808 do_name( mulAdd_name, "implMulAdd") \
809 do_signature(mulAdd_signature, "([I[IIII)I") \
810 \
811 /* java/lang/ref/Reference */ \
812 do_intrinsic(_Reference_get, java_lang_ref_Reference, get_name, void_object_signature, F_R) \
813 \
814 /* support for com.sun.crypto.provider.AESCrypt and some of its callers */ \
815 do_class(com_sun_crypto_provider_aescrypt, "com/sun/crypto/provider/AESCrypt") \
816 do_intrinsic(_aescrypt_encryptBlock, com_sun_crypto_provider_aescrypt, encryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \
817 do_intrinsic(_aescrypt_decryptBlock, com_sun_crypto_provider_aescrypt, decryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \
818 do_name( encryptBlock_name, "encryptBlock") \
819 do_name( decryptBlock_name, "decryptBlock") \
820 do_signature(byteArray_int_byteArray_int_signature, "([BI[BI)V") \
821 \
822 do_class(com_sun_crypto_provider_cipherBlockChaining, "com/sun/crypto/provider/CipherBlockChaining") \
823 do_intrinsic(_cipherBlockChaining_encryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, encrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \
824 do_intrinsic(_cipherBlockChaining_decryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, decrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \
825 do_name( encrypt_name, "encrypt") \
826 do_name( decrypt_name, "decrypt") \
827 do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)I") \
828 \
829 /* support for sun.security.provider.SHA */ \
830 do_class(sun_security_provider_sha, "sun/security/provider/SHA") \
831 do_intrinsic(_sha_implCompress, sun_security_provider_sha, implCompress_name, implCompress_signature, F_R) \
832 do_name( implCompress_name, "implCompress") \
833 do_signature(implCompress_signature, "([BI)V") \
834 \
835 /* support for sun.security.provider.SHA2 */ \
836 do_class(sun_security_provider_sha2, "sun/security/provider/SHA2") \
837 do_intrinsic(_sha2_implCompress, sun_security_provider_sha2, implCompress_name, implCompress_signature, F_R) \
838 \
839 /* support for sun.security.provider.SHA5 */ \
840 do_class(sun_security_provider_sha5, "sun/security/provider/SHA5") \
841 do_intrinsic(_sha5_implCompress, sun_security_provider_sha5, implCompress_name, implCompress_signature, F_R) \
842 \
843 /* support for sun.security.provider.DigestBase */ \
844 do_class(sun_security_provider_digestbase, "sun/security/provider/DigestBase") \
845 do_intrinsic(_digestBase_implCompressMB, sun_security_provider_digestbase, implCompressMB_name, implCompressMB_signature, F_R) \
846 do_name( implCompressMB_name, "implCompressMultiBlock") \
847 do_signature(implCompressMB_signature, "([BII)I") \
848 \
849 /* support for com.sun.crypto.provider.GHASH */ \
850 do_class(com_sun_crypto_provider_ghash, "com/sun/crypto/provider/GHASH") \
851 do_intrinsic(_ghash_processBlocks, com_sun_crypto_provider_ghash, processBlocks_name, ghash_processBlocks_signature, F_S) \
852 do_name(processBlocks_name, "processBlocks") \
853 do_signature(ghash_processBlocks_signature, "([BII[J[J)V") \
854 \
855 /* support for java.util.zip */ \
856 do_class(java_util_zip_CRC32, "java/util/zip/CRC32") \
857 do_intrinsic(_updateCRC32, java_util_zip_CRC32, update_name, int2_int_signature, F_SN) \
858 do_name( update_name, "update") \
859 do_intrinsic(_updateBytesCRC32, java_util_zip_CRC32, updateBytes_name, updateBytes_signature, F_SN) \
860 do_name( updateBytes_name, "updateBytes") \
861 do_signature(updateBytes_signature, "(I[BII)I") \
862 do_intrinsic(_updateByteBufferCRC32, java_util_zip_CRC32, updateByteBuffer_name, updateByteBuffer_signature, F_SN) \
863 do_name( updateByteBuffer_name, "updateByteBuffer") \
864 do_signature(updateByteBuffer_signature, "(IJII)I") \
865 \
866 /* support for sun.misc.Unsafe */ \
867 do_class(sun_misc_Unsafe, "sun/misc/Unsafe") \
868 \
869 do_intrinsic(_allocateInstance, sun_misc_Unsafe, allocateInstance_name, allocateInstance_signature, F_RN) \
870 do_name( allocateInstance_name, "allocateInstance") \
871 do_signature(allocateInstance_signature, "(Ljava/lang/Class;)Ljava/lang/Object;") \
872 do_intrinsic(_copyMemory, sun_misc_Unsafe, copyMemory_name, copyMemory_signature, F_RN) \
873 do_name( copyMemory_name, "copyMemory") \
874 do_signature(copyMemory_signature, "(Ljava/lang/Object;JLjava/lang/Object;JJ)V") \
875 do_intrinsic(_park, sun_misc_Unsafe, park_name, park_signature, F_RN) \
876 do_name( park_name, "park") \
877 do_signature(park_signature, "(ZJ)V") \
878 do_intrinsic(_unpark, sun_misc_Unsafe, unpark_name, unpark_signature, F_RN) \
879 do_name( unpark_name, "unpark") \
880 do_alias( unpark_signature, /*(LObject;)V*/ object_void_signature) \
881 do_intrinsic(_loadFence, sun_misc_Unsafe, loadFence_name, loadFence_signature, F_RN) \
882 do_name( loadFence_name, "loadFence") \
883 do_alias( loadFence_signature, void_method_signature) \
884 do_intrinsic(_storeFence, sun_misc_Unsafe, storeFence_name, storeFence_signature, F_RN) \
885 do_name( storeFence_name, "storeFence") \
886 do_alias( storeFence_signature, void_method_signature) \
887 do_intrinsic(_fullFence, sun_misc_Unsafe, fullFence_name, fullFence_signature, F_RN) \
888 do_name( fullFence_name, "fullFence") \
889 do_alias( fullFence_signature, void_method_signature) \
890 \
891 /* Custom branch frequencies profiling support for JSR292 */ \
892 do_class(java_lang_invoke_MethodHandleImpl, "java/lang/invoke/MethodHandleImpl") \
893 do_intrinsic(_profileBoolean, java_lang_invoke_MethodHandleImpl, profileBoolean_name, profileBoolean_signature, F_S) \
894 do_name( profileBoolean_name, "profileBoolean") \
895 do_signature(profileBoolean_signature, "(Z[I)Z") \
896 do_intrinsic(_isCompileConstant, java_lang_invoke_MethodHandleImpl, isCompileConstant_name, isCompileConstant_signature, F_S) \
897 do_name( isCompileConstant_name, "isCompileConstant") \
898 do_alias( isCompileConstant_signature, object_boolean_signature) \
899 \
900 /* unsafe memory references (there are a lot of them...) */ \
1043 do_alias( putOrderedLong_signature, /*(Ljava/lang/Object;JJ)V*/ putLong_signature) \
1044 do_intrinsic(_putOrderedInt, sun_misc_Unsafe, putOrderedInt_name, putOrderedInt_signature, F_RN) \
1045 do_name( putOrderedInt_name, "putOrderedInt") \
1046 do_alias( putOrderedInt_signature, /*(Ljava/lang/Object;JI)V*/ putInt_signature) \
1047 \
1048 do_intrinsic(_getAndAddInt, sun_misc_Unsafe, getAndAddInt_name, getAndAddInt_signature, F_R) \
1049 do_name( getAndAddInt_name, "getAndAddInt") \
1050 do_signature(getAndAddInt_signature, "(Ljava/lang/Object;JI)I" ) \
1051 do_intrinsic(_getAndAddLong, sun_misc_Unsafe, getAndAddLong_name, getAndAddLong_signature, F_R) \
1052 do_name( getAndAddLong_name, "getAndAddLong") \
1053 do_signature(getAndAddLong_signature, "(Ljava/lang/Object;JJ)J" ) \
1054 do_intrinsic(_getAndSetInt, sun_misc_Unsafe, getAndSetInt_name, getAndSetInt_signature, F_R) \
1055 do_name( getAndSetInt_name, "getAndSetInt") \
1056 do_alias( getAndSetInt_signature, /*"(Ljava/lang/Object;JI)I"*/ getAndAddInt_signature) \
1057 do_intrinsic(_getAndSetLong, sun_misc_Unsafe, getAndSetLong_name, getAndSetLong_signature, F_R) \
1058 do_name( getAndSetLong_name, "getAndSetLong") \
1059 do_alias( getAndSetLong_signature, /*"(Ljava/lang/Object;JJ)J"*/ getAndAddLong_signature) \
1060 do_intrinsic(_getAndSetObject, sun_misc_Unsafe, getAndSetObject_name, getAndSetObject_signature, F_R)\
1061 do_name( getAndSetObject_name, "getAndSetObject") \
1062 do_signature(getAndSetObject_signature, "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;" ) \
1063 /*== LAST_COMPILER_INLINE*/ \
1064 /*the compiler does have special inlining code for these; bytecode inline is just fine */ \
1065 \
1066 do_intrinsic(_fillInStackTrace, java_lang_Throwable, fillInStackTrace_name, void_throwable_signature, F_RNY) \
1067 \
1068 do_intrinsic(_StringBuilder_void, java_lang_StringBuilder, object_initializer_name, void_method_signature, F_R) \
1069 do_intrinsic(_StringBuilder_int, java_lang_StringBuilder, object_initializer_name, int_void_signature, F_R) \
1070 do_intrinsic(_StringBuilder_String, java_lang_StringBuilder, object_initializer_name, string_void_signature, F_R) \
1071 \
1072 do_intrinsic(_StringBuilder_append_char, java_lang_StringBuilder, append_name, char_StringBuilder_signature, F_R) \
1073 do_intrinsic(_StringBuilder_append_int, java_lang_StringBuilder, append_name, int_StringBuilder_signature, F_R) \
1074 do_intrinsic(_StringBuilder_append_String, java_lang_StringBuilder, append_name, String_StringBuilder_signature, F_R) \
1075 \
1076 do_intrinsic(_StringBuilder_toString, java_lang_StringBuilder, toString_name, void_string_signature, F_R) \
1077 \
1078 do_intrinsic(_StringBuffer_void, java_lang_StringBuffer, object_initializer_name, void_method_signature, F_R) \
1079 do_intrinsic(_StringBuffer_int, java_lang_StringBuffer, object_initializer_name, int_void_signature, F_R) \
1080 do_intrinsic(_StringBuffer_String, java_lang_StringBuffer, object_initializer_name, string_void_signature, F_R) \
1081 \
1082 do_intrinsic(_StringBuffer_append_char, java_lang_StringBuffer, append_name, char_StringBuffer_signature, F_Y) \
1083 do_intrinsic(_StringBuffer_append_int, java_lang_StringBuffer, append_name, int_StringBuffer_signature, F_Y) \
1084 do_intrinsic(_StringBuffer_append_String, java_lang_StringBuffer, append_name, String_StringBuffer_signature, F_Y) \
1085 \
1086 do_intrinsic(_StringBuffer_toString, java_lang_StringBuffer, toString_name, void_string_signature, F_Y) \
1087 \
|
241 template(override_name, "override") \
242 template(parameterTypes_name, "parameterTypes") \
243 template(returnType_name, "returnType") \
244 template(signature_name, "signature") \
245 template(slot_name, "slot") \
246 \
247 /* Support for annotations (JDK 1.5 and above) */ \
248 \
249 template(annotations_name, "annotations") \
250 template(index_name, "index") \
251 template(executable_name, "executable") \
252 template(parameter_annotations_name, "parameterAnnotations") \
253 template(annotation_default_name, "annotationDefault") \
254 template(sun_reflect_ConstantPool, "sun/reflect/ConstantPool") \
255 template(ConstantPool_name, "constantPoolOop") \
256 template(sun_reflect_UnsafeStaticFieldAccessorImpl, "sun/reflect/UnsafeStaticFieldAccessorImpl")\
257 template(base_name, "base") \
258 /* Type Annotations (JDK 8 and above) */ \
259 template(type_annotations_name, "typeAnnotations") \
260 \
261 /* Intrinsic Annotation (JDK 9 and above) */ \
262 template(jdk_internal_HotSpotIntrinsicCandidate_signature, "Ljdk/internal/HotSpotIntrinsicCandidate;") \
263 \
264 /* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
265 template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \
266 template(java_lang_invoke_ConstantCallSite, "java/lang/invoke/ConstantCallSite") \
267 template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \
268 template(java_lang_invoke_MutableCallSite, "java/lang/invoke/MutableCallSite") \
269 template(java_lang_invoke_VolatileCallSite, "java/lang/invoke/VolatileCallSite") \
270 template(java_lang_invoke_MethodHandle, "java/lang/invoke/MethodHandle") \
271 template(java_lang_invoke_MethodType, "java/lang/invoke/MethodType") \
272 template(java_lang_invoke_MethodType_signature, "Ljava/lang/invoke/MethodType;") \
273 template(java_lang_invoke_MemberName_signature, "Ljava/lang/invoke/MemberName;") \
274 template(java_lang_invoke_LambdaForm_signature, "Ljava/lang/invoke/LambdaForm;") \
275 template(java_lang_invoke_MethodHandle_signature, "Ljava/lang/invoke/MethodHandle;") \
276 /* internal classes known only to the JVM: */ \
277 template(java_lang_invoke_MemberName, "java/lang/invoke/MemberName") \
278 template(java_lang_invoke_MethodHandleNatives, "java/lang/invoke/MethodHandleNatives") \
279 template(java_lang_invoke_MethodHandleNatives_CallSiteContext, "java/lang/invoke/MethodHandleNatives$CallSiteContext") \
280 template(java_lang_invoke_LambdaForm, "java/lang/invoke/LambdaForm") \
281 template(java_lang_invoke_ForceInline_signature, "Ljava/lang/invoke/ForceInline;") \
282 template(java_lang_invoke_DontInline_signature, "Ljava/lang/invoke/DontInline;") \
330 template(finalize_method_name, "finalize") \
331 template(reference_lock_name, "lock") \
332 template(reference_discovered_name, "discovered") \
333 template(run_finalization_name, "runFinalization") \
334 template(run_finalizers_on_exit_name, "runFinalizersOnExit") \
335 template(dispatchUncaughtException_name, "dispatchUncaughtException") \
336 template(initializeSystemClass_name, "initializeSystemClass") \
337 template(loadClass_name, "loadClass") \
338 template(loadClassInternal_name, "loadClassInternal") \
339 template(get_name, "get") \
340 template(put_name, "put") \
341 template(type_name, "type") \
342 template(findNative_name, "findNative") \
343 template(deadChild_name, "deadChild") \
344 template(addClass_name, "addClass") \
345 template(throwIllegalAccessError_name, "throwIllegalAccessError") \
346 template(getFromClass_name, "getFromClass") \
347 template(dispatch_name, "dispatch") \
348 template(getSystemClassLoader_name, "getSystemClassLoader") \
349 template(fillInStackTrace_name, "fillInStackTrace") \
350 template(getCause_name, "getCause") \
351 template(initCause_name, "initCause") \
352 template(setProperty_name, "setProperty") \
353 template(getProperty_name, "getProperty") \
354 template(context_name, "context") \
355 template(privilegedContext_name, "privilegedContext") \
356 template(contextClassLoader_name, "contextClassLoader") \
357 template(inheritedAccessControlContext_name, "inheritedAccessControlContext") \
358 template(isPrivileged_name, "isPrivileged") \
359 template(isAuthorized_name, "isAuthorized") \
360 template(getClassContext_name, "getClassContext") \
361 template(wait_name, "wait") \
362 template(checkPackageAccess_name, "checkPackageAccess") \
363 template(stackSize_name, "stackSize") \
364 template(thread_id_name, "tid") \
365 template(newInstance0_name, "newInstance0") \
366 template(limit_name, "limit") \
367 template(member_name, "member") \
368 template(forName_name, "forName") \
369 template(forName0_name, "forName0") \
619 // For example:
620 // do_intrinsic(_foo, java_lang_Object, foo_name, foo_signature, F_xx)
621 // do_name( foo_name, "foo")
622 // do_signature(foo_signature, "()F")
623 // klass = vmSymbols::java_lang_Object()
624 // name = vmSymbols::foo_name()
625 // signature = vmSymbols::foo_signature()
626 //
627 // The name and/or signature might be a "well known" symbol
628 // like "equal" or "()I", in which case there will be no local
629 // re-definition of the symbol.
630 //
631 // The do_class, do_name, and do_signature calls are all used for the
632 // same purpose: Define yet another VM symbol. They could all be merged
633 // into a common 'do_symbol' call, but it seems useful to record our
634 // intentions here about kinds of symbols (class vs. name vs. signature).
635 //
636 // The F_xx is one of the Flags enum; see below.
637 //
638 // for Emacs: (let ((c-backslash-column 120) (c-backslash-max-column 120)) (c-backslash-region (point) (point-max) nil t))
639 //
640 //
641 // There are two types of intrinsic methods: (1) Library intrinsics and (2) bytecode intrinsics.
642 //
643 // (1) A library intrinsic method may be replaced with hand-crafted assembly code,
644 // with hand-crafted compiler IR, or with a combination of the two. The semantics
645 // of the replacement code may differ from the semantics of the replaced code.
646 //
647 // (2) Bytecode intrinsic methods are not replaced by special code, but they are
648 // treated in some other special way by the compiler. For example, the compiler
649 // may delay inlining for some String-related intrinsic methods (e.g.,, some methods
650 // defined in the StringBuilder and StringBuffer classes), see
651 // Compile::should_delay_string_inlining() for more details).
652 //
653 // Due to the difference between the semantics of an intrinsic method as defined
654 // in the (Java) source code and the semantics of the method as defined
655 // by the code in the VM, intrinsic methods must be explicitly marked.
656 //
657 // Intrinsic methods are marked by the jdk.internal.HotSpotIntrinsicCandidate
658 // annotation. If CheckIntrinsics is enabled, the VM performs the following
659 // checks when a class C is loaded: (1) all intrinsics defined by the VM for
660 // class C are present in the loaded class file and are marked;
661 // (2) an intrinsic is defined by the VM for all marked methods of class C.
662 //
663 // If a mismatch is detected for a method, the VM behaves differently depending
664 // on the type of build. A fastdebug build exits and reports an error on a mismatch.
665 // A product build will not replace an unmarked library intrinsic method with
666 // hand-crafted code, that is, unmarked library intrinsics are treated as ordinary
667 // methods in a product build. The special treatment of a bytecode intrinsic method
668 // persists even if the method not marked.
669 //
670 // When adding an intrinsic for a method, please make sure to appropriately
671 // annotate the method in the source code. The list below contains all
672 // library intrinsics followed by bytecode intrinsics. Please also make sure to
673 // add the declaration of the intrinsic to the approriate section of the list.
674 #define VM_INTRINSICS_DO(do_intrinsic, do_class, do_name, do_signature, do_alias) \
675 /* (1) Library intrinsics */ \
676 do_intrinsic(_hashCode, java_lang_Object, hashCode_name, void_int_signature, F_R) \
677 do_name( hashCode_name, "hashCode") \
678 do_intrinsic(_getClass, java_lang_Object, getClass_name, void_class_signature, F_R) \
679 do_name( getClass_name, "getClass") \
680 do_intrinsic(_clone, java_lang_Object, clone_name, void_object_signature, F_R) \
681 do_name( clone_name, "clone") \
682 \
683 /* Math & StrictMath intrinsics are defined in terms of just a few signatures: */ \
684 do_class(java_lang_Math, "java/lang/Math") \
685 do_class(java_lang_StrictMath, "java/lang/StrictMath") \
686 do_signature(double2_double_signature, "(DD)D") \
687 do_signature(int2_int_signature, "(II)I") \
688 do_signature(long2_long_signature, "(JJ)J") \
689 \
690 /* here are the math names, all together: */ \
691 do_name(abs_name,"abs") do_name(sin_name,"sin") do_name(cos_name,"cos") \
692 do_name(tan_name,"tan") do_name(atan2_name,"atan2") do_name(sqrt_name,"sqrt") \
693 do_name(log_name,"log") do_name(log10_name,"log10") do_name(pow_name,"pow") \
694 do_name(exp_name,"exp") do_name(min_name,"min") do_name(max_name,"max") \
695 \
812 \
813 do_intrinsic(_copyOfRange, java_util_Arrays, copyOfRange_name, copyOfRange_signature, F_S) \
814 do_name( copyOfRange_name, "copyOfRange") \
815 do_signature(copyOfRange_signature, "([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;") \
816 \
817 do_intrinsic(_equalsC, java_util_Arrays, equals_name, equalsC_signature, F_S) \
818 do_signature(equalsC_signature, "([C[C)Z") \
819 \
820 do_intrinsic(_compareTo, java_lang_String, compareTo_name, string_int_signature, F_R) \
821 do_name( compareTo_name, "compareTo") \
822 do_intrinsic(_indexOf, java_lang_String, indexOf_name, string_int_signature, F_R) \
823 do_name( indexOf_name, "indexOf") \
824 do_intrinsic(_equals, java_lang_String, equals_name, object_boolean_signature, F_R) \
825 \
826 do_class(java_nio_Buffer, "java/nio/Buffer") \
827 do_intrinsic(_checkIndex, java_nio_Buffer, checkIndex_name, int_int_signature, F_R) \
828 do_name( checkIndex_name, "checkIndex") \
829 \
830 do_class(sun_nio_cs_iso8859_1_Encoder, "sun/nio/cs/ISO_8859_1$Encoder") \
831 do_intrinsic(_encodeISOArray, sun_nio_cs_iso8859_1_Encoder, encodeISOArray_name, encodeISOArray_signature, F_S) \
832 do_name( encodeISOArray_name, "implEncodeISOArray") \
833 do_signature(encodeISOArray_signature, "([CI[BII)I") \
834 \
835 do_class(java_math_BigInteger, "java/math/BigInteger") \
836 do_intrinsic(_multiplyToLen, java_math_BigInteger, multiplyToLen_name, multiplyToLen_signature, F_R) \
837 do_name( multiplyToLen_name, "implMultiplyToLen") \
838 do_signature(multiplyToLen_signature, "([II[II[I)[I") \
839 \
840 do_intrinsic(_squareToLen, java_math_BigInteger, squareToLen_name, squareToLen_signature, F_S) \
841 do_name( squareToLen_name, "implSquareToLen") \
842 do_signature(squareToLen_signature, "([II[II)[I") \
843 \
844 do_intrinsic(_mulAdd, java_math_BigInteger, mulAdd_name, mulAdd_signature, F_S) \
845 do_name( mulAdd_name, "implMulAdd") \
846 do_signature(mulAdd_signature, "([I[IIII)I") \
847 \
848 /* java/lang/ref/Reference */ \
849 do_intrinsic(_Reference_get, java_lang_ref_Reference, get_name, void_object_signature, F_R) \
850 \
851 /* support for com.sun.crypto.provider.AESCrypt and some of its callers */ \
852 do_class(com_sun_crypto_provider_aescrypt, "com/sun/crypto/provider/AESCrypt") \
853 do_intrinsic(_aescrypt_encryptBlock, com_sun_crypto_provider_aescrypt, encryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \
854 do_intrinsic(_aescrypt_decryptBlock, com_sun_crypto_provider_aescrypt, decryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \
855 do_name( encryptBlock_name, "implEncryptBlock") \
856 do_name( decryptBlock_name, "implDecryptBlock") \
857 do_signature(byteArray_int_byteArray_int_signature, "([BI[BI)V") \
858 \
859 do_class(com_sun_crypto_provider_cipherBlockChaining, "com/sun/crypto/provider/CipherBlockChaining") \
860 do_intrinsic(_cipherBlockChaining_encryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, encrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \
861 do_intrinsic(_cipherBlockChaining_decryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, decrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \
862 do_name( encrypt_name, "implEncrypt") \
863 do_name( decrypt_name, "implDecrypt") \
864 do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)I") \
865 \
866 /* support for sun.security.provider.SHA */ \
867 do_class(sun_security_provider_sha, "sun/security/provider/SHA") \
868 do_intrinsic(_sha_implCompress, sun_security_provider_sha, implCompress_name, implCompress_signature, F_R) \
869 do_name( implCompress_name, "implCompress0") \
870 do_signature(implCompress_signature, "([BI)V") \
871 \
872 /* support for sun.security.provider.SHA2 */ \
873 do_class(sun_security_provider_sha2, "sun/security/provider/SHA2") \
874 do_intrinsic(_sha2_implCompress, sun_security_provider_sha2, implCompress_name, implCompress_signature, F_R) \
875 \
876 /* support for sun.security.provider.SHA5 */ \
877 do_class(sun_security_provider_sha5, "sun/security/provider/SHA5") \
878 do_intrinsic(_sha5_implCompress, sun_security_provider_sha5, implCompress_name, implCompress_signature, F_R) \
879 \
880 /* support for sun.security.provider.DigestBase */ \
881 do_class(sun_security_provider_digestbase, "sun/security/provider/DigestBase") \
882 do_intrinsic(_digestBase_implCompressMB, sun_security_provider_digestbase, implCompressMB_name, implCompressMB_signature, F_R) \
883 do_name( implCompressMB_name, "implCompressMultiBlock0") \
884 do_signature(implCompressMB_signature, "([BII)I") \
885 \
886 /* support for com.sun.crypto.provider.GHASH */ \
887 do_class(com_sun_crypto_provider_ghash, "com/sun/crypto/provider/GHASH") \
888 do_intrinsic(_ghash_processBlocks, com_sun_crypto_provider_ghash, processBlocks_name, ghash_processBlocks_signature, F_S) \
889 do_name(processBlocks_name, "processBlocks") \
890 do_signature(ghash_processBlocks_signature, "([BII[J[J)V") \
891 \
892 /* support for java.util.zip */ \
893 do_class(java_util_zip_CRC32, "java/util/zip/CRC32") \
894 do_intrinsic(_updateCRC32, java_util_zip_CRC32, update_name, int2_int_signature, F_SN) \
895 do_name( update_name, "update") \
896 do_intrinsic(_updateBytesCRC32, java_util_zip_CRC32, updateBytes_name, updateBytes_signature, F_SN) \
897 do_name( updateBytes_name, "updateBytes0") \
898 do_signature(updateBytes_signature, "(I[BII)I") \
899 do_intrinsic(_updateByteBufferCRC32, java_util_zip_CRC32, updateByteBuffer_name, updateByteBuffer_signature, F_SN) \
900 do_name( updateByteBuffer_name, "updateByteBuffer0") \
901 do_signature(updateByteBuffer_signature, "(IJII)I") \
902 \
903 /* support for sun.misc.Unsafe */ \
904 do_class(sun_misc_Unsafe, "sun/misc/Unsafe") \
905 \
906 do_intrinsic(_allocateInstance, sun_misc_Unsafe, allocateInstance_name, allocateInstance_signature, F_RN) \
907 do_name( allocateInstance_name, "allocateInstance") \
908 do_signature(allocateInstance_signature, "(Ljava/lang/Class;)Ljava/lang/Object;") \
909 do_intrinsic(_copyMemory, sun_misc_Unsafe, copyMemory_name, copyMemory_signature, F_RN) \
910 do_name( copyMemory_name, "copyMemory") \
911 do_signature(copyMemory_signature, "(Ljava/lang/Object;JLjava/lang/Object;JJ)V") \
912 do_intrinsic(_loadFence, sun_misc_Unsafe, loadFence_name, loadFence_signature, F_RN) \
913 do_name( loadFence_name, "loadFence") \
914 do_alias( loadFence_signature, void_method_signature) \
915 do_intrinsic(_storeFence, sun_misc_Unsafe, storeFence_name, storeFence_signature, F_RN) \
916 do_name( storeFence_name, "storeFence") \
917 do_alias( storeFence_signature, void_method_signature) \
918 do_intrinsic(_fullFence, sun_misc_Unsafe, fullFence_name, fullFence_signature, F_RN) \
919 do_name( fullFence_name, "fullFence") \
920 do_alias( fullFence_signature, void_method_signature) \
921 \
922 /* Custom branch frequencies profiling support for JSR292 */ \
923 do_class(java_lang_invoke_MethodHandleImpl, "java/lang/invoke/MethodHandleImpl") \
924 do_intrinsic(_profileBoolean, java_lang_invoke_MethodHandleImpl, profileBoolean_name, profileBoolean_signature, F_S) \
925 do_name( profileBoolean_name, "profileBoolean") \
926 do_signature(profileBoolean_signature, "(Z[I)Z") \
927 do_intrinsic(_isCompileConstant, java_lang_invoke_MethodHandleImpl, isCompileConstant_name, isCompileConstant_signature, F_S) \
928 do_name( isCompileConstant_name, "isCompileConstant") \
929 do_alias( isCompileConstant_signature, object_boolean_signature) \
930 \
931 /* unsafe memory references (there are a lot of them...) */ \
1074 do_alias( putOrderedLong_signature, /*(Ljava/lang/Object;JJ)V*/ putLong_signature) \
1075 do_intrinsic(_putOrderedInt, sun_misc_Unsafe, putOrderedInt_name, putOrderedInt_signature, F_RN) \
1076 do_name( putOrderedInt_name, "putOrderedInt") \
1077 do_alias( putOrderedInt_signature, /*(Ljava/lang/Object;JI)V*/ putInt_signature) \
1078 \
1079 do_intrinsic(_getAndAddInt, sun_misc_Unsafe, getAndAddInt_name, getAndAddInt_signature, F_R) \
1080 do_name( getAndAddInt_name, "getAndAddInt") \
1081 do_signature(getAndAddInt_signature, "(Ljava/lang/Object;JI)I" ) \
1082 do_intrinsic(_getAndAddLong, sun_misc_Unsafe, getAndAddLong_name, getAndAddLong_signature, F_R) \
1083 do_name( getAndAddLong_name, "getAndAddLong") \
1084 do_signature(getAndAddLong_signature, "(Ljava/lang/Object;JJ)J" ) \
1085 do_intrinsic(_getAndSetInt, sun_misc_Unsafe, getAndSetInt_name, getAndSetInt_signature, F_R) \
1086 do_name( getAndSetInt_name, "getAndSetInt") \
1087 do_alias( getAndSetInt_signature, /*"(Ljava/lang/Object;JI)I"*/ getAndAddInt_signature) \
1088 do_intrinsic(_getAndSetLong, sun_misc_Unsafe, getAndSetLong_name, getAndSetLong_signature, F_R) \
1089 do_name( getAndSetLong_name, "getAndSetLong") \
1090 do_alias( getAndSetLong_signature, /*"(Ljava/lang/Object;JJ)J"*/ getAndAddLong_signature) \
1091 do_intrinsic(_getAndSetObject, sun_misc_Unsafe, getAndSetObject_name, getAndSetObject_signature, F_R)\
1092 do_name( getAndSetObject_name, "getAndSetObject") \
1093 do_signature(getAndSetObject_signature, "(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;" ) \
1094 \
1095 /* (2) Bytecode intrinsics */ \
1096 \
1097 do_intrinsic(_park, sun_misc_Unsafe, park_name, park_signature, F_RN) \
1098 do_name( park_name, "park") \
1099 do_signature(park_signature, "(ZJ)V") \
1100 do_intrinsic(_unpark, sun_misc_Unsafe, unpark_name, unpark_signature, F_RN) \
1101 do_name( unpark_name, "unpark") \
1102 do_alias( unpark_signature, /*(LObject;)V*/ object_void_signature) \
1103 do_intrinsic(_StringBuilder_void, java_lang_StringBuilder, object_initializer_name, void_method_signature, F_R) \
1104 do_intrinsic(_StringBuilder_int, java_lang_StringBuilder, object_initializer_name, int_void_signature, F_R) \
1105 do_intrinsic(_StringBuilder_String, java_lang_StringBuilder, object_initializer_name, string_void_signature, F_R) \
1106 \
1107 do_intrinsic(_StringBuilder_append_char, java_lang_StringBuilder, append_name, char_StringBuilder_signature, F_R) \
1108 do_intrinsic(_StringBuilder_append_int, java_lang_StringBuilder, append_name, int_StringBuilder_signature, F_R) \
1109 do_intrinsic(_StringBuilder_append_String, java_lang_StringBuilder, append_name, String_StringBuilder_signature, F_R) \
1110 \
1111 do_intrinsic(_StringBuilder_toString, java_lang_StringBuilder, toString_name, void_string_signature, F_R) \
1112 \
1113 do_intrinsic(_StringBuffer_void, java_lang_StringBuffer, object_initializer_name, void_method_signature, F_R) \
1114 do_intrinsic(_StringBuffer_int, java_lang_StringBuffer, object_initializer_name, int_void_signature, F_R) \
1115 do_intrinsic(_StringBuffer_String, java_lang_StringBuffer, object_initializer_name, string_void_signature, F_R) \
1116 \
1117 do_intrinsic(_StringBuffer_append_char, java_lang_StringBuffer, append_name, char_StringBuffer_signature, F_Y) \
1118 do_intrinsic(_StringBuffer_append_int, java_lang_StringBuffer, append_name, int_StringBuffer_signature, F_Y) \
1119 do_intrinsic(_StringBuffer_append_String, java_lang_StringBuffer, append_name, String_StringBuffer_signature, F_Y) \
1120 \
1121 do_intrinsic(_StringBuffer_toString, java_lang_StringBuffer, toString_name, void_string_signature, F_Y) \
1122 \
|