327 template(vmslots_name, "vmslots") \
328 template(vmindex_name, "vmindex") \
329 template(vmargslot_name, "vmargslot") \
330 template(flags_name, "flags") \
331 template(argument_name, "argument") \
332 template(conversion_name, "conversion") \
333 template(rtype_name, "rtype") \
334 template(ptypes_name, "ptypes") \
335 template(form_name, "form") \
336 template(erasedType_name, "erasedType") \
337 \
338 /* non-intrinsic name/signature pairs: */ \
339 template(register_method_name, "register") \
340 do_alias(register_method_signature, object_void_signature) \
341 \
342 /* name symbols needed by intrinsics */ \
343 VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \
344 \
345 /* common signatures names */ \
346 template(void_method_signature, "()V") \
347 template(void_int_signature, "()I") \
348 template(void_long_signature, "()J") \
349 template(void_boolean_signature, "()Z") \
350 template(int_void_signature, "(I)V") \
351 template(int_int_signature, "(I)I") \
352 template(int_bool_signature, "(I)Z") \
353 template(float_int_signature, "(F)I") \
354 template(double_long_signature, "(D)J") \
355 template(double_double_signature, "(D)D") \
356 template(int_float_signature, "(I)F") \
357 template(long_int_signature, "(J)I") \
358 template(long_long_signature, "(J)J") \
359 template(long_double_signature, "(J)D") \
360 template(byte_signature, "B") \
361 template(char_signature, "C") \
362 template(double_signature, "D") \
363 template(float_signature, "F") \
364 template(int_signature, "I") \
365 template(long_signature, "J") \
366 template(short_signature, "S") \
367 template(bool_signature, "Z") \
368 template(void_signature, "V") \
369 template(byte_array_signature, "[B") \
803 do_signature( prefetch_signature, "(Ljava/lang/Object;J)V") \
804 \
805 do_intrinsic(_prefetchRead, sun_misc_Unsafe, prefetchRead_name, prefetch_signature, F_RN) \
806 do_name( prefetchRead_name, "prefetchRead") \
807 do_intrinsic(_prefetchWrite, sun_misc_Unsafe, prefetchWrite_name, prefetch_signature, F_RN) \
808 do_name( prefetchWrite_name, "prefetchWrite") \
809 do_intrinsic(_prefetchReadStatic, sun_misc_Unsafe, prefetchReadStatic_name, prefetch_signature, F_SN) \
810 do_name( prefetchReadStatic_name, "prefetchReadStatic") \
811 do_intrinsic(_prefetchWriteStatic, sun_misc_Unsafe, prefetchWriteStatic_name, prefetch_signature, F_SN) \
812 do_name( prefetchWriteStatic_name, "prefetchWriteStatic") \
813 /*== LAST_COMPILER_INLINE*/ \
814 /*the compiler does have special inlining code for these; bytecode inline is just fine */ \
815 \
816 do_intrinsic(_fillInStackTrace, java_lang_Throwable, fillInStackTrace_name, void_throwable_signature, F_RNY) \
817 \
818 do_intrinsic(_Object_init, java_lang_Object, object_initializer_name, void_method_signature, F_R) \
819 /* (symbol object_initializer_name defined above) */ \
820 \
821 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_array_object_object_signature, F_R) \
822 /* (symbols invoke_name and invoke_signature defined above) */ \
823 \
824 /*end*/
825
826
827
828
829 // Class vmSymbols
830
831 class vmSymbols: AllStatic {
832 friend class vmSymbolHandles;
833 friend class vmIntrinsics;
834 public:
835 // enum for figuring positions and size of array holding symbolOops
836 enum SID {
837 NO_SID = 0,
838
839 #define VM_SYMBOL_ENUM(name, string) VM_SYMBOL_ENUM_NAME(name),
840 VM_SYMBOLS_DO(VM_SYMBOL_ENUM, VM_ALIAS_IGNORE)
841 #undef VM_SYMBOL_ENUM
842
932 enum ID {
933 _none = 0, // not an intrinsic (default answer)
934
935 #define VM_INTRINSIC_ENUM(id, klass, name, sig, flags) id,
936 VM_INTRINSICS_DO(VM_INTRINSIC_ENUM,
937 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE)
938 #undef VM_INTRINSIC_ENUM
939
940 ID_LIMIT,
941 LAST_COMPILER_INLINE = _prefetchWriteStatic,
942 FIRST_ID = _none + 1
943 };
944
945 enum Flags {
946 // AccessFlags syndromes relevant to intrinsics.
947 F_none = 0,
948 F_R, // !static !synchronized (R="regular")
949 F_S, // static !synchronized
950 F_RN, // !static native !synchronized
951 F_SN, // static native !synchronized
952 F_RNY // !static native synchronized
953 };
954
955 public:
956 static ID ID_from(int raw_id) {
957 assert(raw_id >= (int)_none && raw_id < (int)ID_LIMIT,
958 "must be a valid intrinsic ID");
959 return (ID)raw_id;
960 }
961
962 static const char* name_at(ID id);
963
964 // Given a method's class, name, signature, and access flags, report its ID.
965 static ID find_id(vmSymbols::SID holder,
966 vmSymbols::SID name,
967 vmSymbols::SID sig,
968 jshort flags);
969
970 static void verify_method(ID actual_id, methodOop m) PRODUCT_RETURN;
971
972 // No need for these in the product:
973 static vmSymbols::SID class_for(ID id);
974 static vmSymbols::SID name_for(ID id);
975 static vmSymbols::SID signature_for(ID id);
976 static Flags flags_for(ID id);
977
978 static const char* short_name_as_C_string(ID id, char* buf, int size);
979
980 // Access to intrinsic methods:
981 static methodOop method_for(ID id);
982 };
|
327 template(vmslots_name, "vmslots") \
328 template(vmindex_name, "vmindex") \
329 template(vmargslot_name, "vmargslot") \
330 template(flags_name, "flags") \
331 template(argument_name, "argument") \
332 template(conversion_name, "conversion") \
333 template(rtype_name, "rtype") \
334 template(ptypes_name, "ptypes") \
335 template(form_name, "form") \
336 template(erasedType_name, "erasedType") \
337 \
338 /* non-intrinsic name/signature pairs: */ \
339 template(register_method_name, "register") \
340 do_alias(register_method_signature, object_void_signature) \
341 \
342 /* name symbols needed by intrinsics */ \
343 VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \
344 \
345 /* common signatures names */ \
346 template(void_method_signature, "()V") \
347 template(void_boolean_signature, "()Z") \
348 template(void_byte_signature, "()B") \
349 template(void_char_signature, "()C") \
350 template(void_short_signature, "()S") \
351 template(void_int_signature, "()I") \
352 template(void_long_signature, "()J") \
353 template(void_float_signature, "()F") \
354 template(void_double_signature, "()D") \
355 template(int_void_signature, "(I)V") \
356 template(int_int_signature, "(I)I") \
357 template(int_bool_signature, "(I)Z") \
358 template(float_int_signature, "(F)I") \
359 template(double_long_signature, "(D)J") \
360 template(double_double_signature, "(D)D") \
361 template(int_float_signature, "(I)F") \
362 template(long_int_signature, "(J)I") \
363 template(long_long_signature, "(J)J") \
364 template(long_double_signature, "(J)D") \
365 template(byte_signature, "B") \
366 template(char_signature, "C") \
367 template(double_signature, "D") \
368 template(float_signature, "F") \
369 template(int_signature, "I") \
370 template(long_signature, "J") \
371 template(short_signature, "S") \
372 template(bool_signature, "Z") \
373 template(void_signature, "V") \
374 template(byte_array_signature, "[B") \
808 do_signature( prefetch_signature, "(Ljava/lang/Object;J)V") \
809 \
810 do_intrinsic(_prefetchRead, sun_misc_Unsafe, prefetchRead_name, prefetch_signature, F_RN) \
811 do_name( prefetchRead_name, "prefetchRead") \
812 do_intrinsic(_prefetchWrite, sun_misc_Unsafe, prefetchWrite_name, prefetch_signature, F_RN) \
813 do_name( prefetchWrite_name, "prefetchWrite") \
814 do_intrinsic(_prefetchReadStatic, sun_misc_Unsafe, prefetchReadStatic_name, prefetch_signature, F_SN) \
815 do_name( prefetchReadStatic_name, "prefetchReadStatic") \
816 do_intrinsic(_prefetchWriteStatic, sun_misc_Unsafe, prefetchWriteStatic_name, prefetch_signature, F_SN) \
817 do_name( prefetchWriteStatic_name, "prefetchWriteStatic") \
818 /*== LAST_COMPILER_INLINE*/ \
819 /*the compiler does have special inlining code for these; bytecode inline is just fine */ \
820 \
821 do_intrinsic(_fillInStackTrace, java_lang_Throwable, fillInStackTrace_name, void_throwable_signature, F_RNY) \
822 \
823 do_intrinsic(_Object_init, java_lang_Object, object_initializer_name, void_method_signature, F_R) \
824 /* (symbol object_initializer_name defined above) */ \
825 \
826 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_array_object_object_signature, F_R) \
827 /* (symbols invoke_name and invoke_signature defined above) */ \
828 do_intrinsic(_checkSpreadArgument, sun_dyn_MethodHandleImpl, checkSpreadArgument_name, checkSpreadArgument_signature, F_S) \
829 do_name( checkSpreadArgument_name, "checkSpreadArgument") \
830 do_name( checkSpreadArgument_signature, "(Ljava/lang/Object;I)V") \
831 \
832 /* unboxing methods: */ \
833 do_intrinsic(_booleanValue, java_lang_Boolean, booleanValue_name, void_boolean_signature, F_R) \
834 do_name( booleanValue_name, "booleanValue") \
835 do_intrinsic(_byteValue, java_lang_Byte, byteValue_name, void_byte_signature, F_R) \
836 do_name( byteValue_name, "byteValue") \
837 do_intrinsic(_charValue, java_lang_Character, charValue_name, void_char_signature, F_R) \
838 do_name( charValue_name, "charValue") \
839 do_intrinsic(_shortValue, java_lang_Short, shortValue_name, void_short_signature, F_R) \
840 do_name( shortValue_name, "shortValue") \
841 do_intrinsic(_intValue, java_lang_Integer, intValue_name, void_int_signature, F_R) \
842 do_name( intValue_name, "intValue") \
843 do_intrinsic(_longValue, java_lang_Long, longValue_name, void_long_signature, F_R) \
844 do_name( longValue_name, "longValue") \
845 do_intrinsic(_floatValue, java_lang_Float, floatValue_name, void_float_signature, F_R) \
846 do_name( floatValue_name, "floatValue") \
847 do_intrinsic(_doubleValue, java_lang_Double, doubleValue_name, void_double_signature, F_R) \
848 do_name( doubleValue_name, "doubleValue") \
849 \
850 /* boxing methods: */ \
851 do_name( valueOf_name, "valueOf") \
852 do_intrinsic(_Boolean_valueOf, java_lang_Boolean, valueOf_name, Boolean_valueOf_signature, F_S) \
853 do_name( Boolean_valueOf_signature, "(Z)Ljava/lang/Boolean;") \
854 do_intrinsic(_Byte_valueOf, java_lang_Byte, valueOf_name, Byte_valueOf_signature, F_S) \
855 do_name( Byte_valueOf_signature, "(B)Ljava/lang/Byte;") \
856 do_intrinsic(_Character_valueOf, java_lang_Character, valueOf_name, Character_valueOf_signature, F_S) \
857 do_name( Character_valueOf_signature, "(C)Ljava/lang/Character;") \
858 do_intrinsic(_Short_valueOf, java_lang_Short, valueOf_name, Short_valueOf_signature, F_S) \
859 do_name( Short_valueOf_signature, "(S)Ljava/lang/Short;") \
860 do_intrinsic(_Integer_valueOf, java_lang_Integer, valueOf_name, Integer_valueOf_signature, F_S) \
861 do_name( Integer_valueOf_signature, "(I)Ljava/lang/Integer;") \
862 do_intrinsic(_Long_valueOf, java_lang_Long, valueOf_name, Long_valueOf_signature, F_S) \
863 do_name( Long_valueOf_signature, "(J)Ljava/lang/Long;") \
864 do_intrinsic(_Float_valueOf, java_lang_Float, valueOf_name, Float_valueOf_signature, F_S) \
865 do_name( Float_valueOf_signature, "(F)Ljava/lang/Float;") \
866 do_intrinsic(_Double_valueOf, java_lang_Double, valueOf_name, Double_valueOf_signature, F_S) \
867 do_name( Double_valueOf_signature, "(D)Ljava/lang/Double;") \
868 \
869 /*end*/
870
871
872
873
874 // Class vmSymbols
875
876 class vmSymbols: AllStatic {
877 friend class vmSymbolHandles;
878 friend class vmIntrinsics;
879 public:
880 // enum for figuring positions and size of array holding symbolOops
881 enum SID {
882 NO_SID = 0,
883
884 #define VM_SYMBOL_ENUM(name, string) VM_SYMBOL_ENUM_NAME(name),
885 VM_SYMBOLS_DO(VM_SYMBOL_ENUM, VM_ALIAS_IGNORE)
886 #undef VM_SYMBOL_ENUM
887
977 enum ID {
978 _none = 0, // not an intrinsic (default answer)
979
980 #define VM_INTRINSIC_ENUM(id, klass, name, sig, flags) id,
981 VM_INTRINSICS_DO(VM_INTRINSIC_ENUM,
982 VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE)
983 #undef VM_INTRINSIC_ENUM
984
985 ID_LIMIT,
986 LAST_COMPILER_INLINE = _prefetchWriteStatic,
987 FIRST_ID = _none + 1
988 };
989
990 enum Flags {
991 // AccessFlags syndromes relevant to intrinsics.
992 F_none = 0,
993 F_R, // !static !synchronized (R="regular")
994 F_S, // static !synchronized
995 F_RN, // !static native !synchronized
996 F_SN, // static native !synchronized
997 F_RNY, // !static native synchronized
998
999 FLAG_LIMIT
1000 };
1001 enum {
1002 log2_FLAG_LIMIT = 4 // checked by an assert at start-up
1003 };
1004
1005 public:
1006 static ID ID_from(int raw_id) {
1007 assert(raw_id >= (int)_none && raw_id < (int)ID_LIMIT,
1008 "must be a valid intrinsic ID");
1009 return (ID)raw_id;
1010 }
1011
1012 static const char* name_at(ID id);
1013
1014 // Given a method's class, name, signature, and access flags, report its ID.
1015 static ID find_id(vmSymbols::SID holder,
1016 vmSymbols::SID name,
1017 vmSymbols::SID sig,
1018 jshort flags);
1019
1020 static void verify_method(ID actual_id, methodOop m) PRODUCT_RETURN;
1021
1022 // Find out the symbols behind an intrinsic:
1023 static vmSymbols::SID class_for(ID id);
1024 static vmSymbols::SID name_for(ID id);
1025 static vmSymbols::SID signature_for(ID id);
1026 static Flags flags_for(ID id);
1027
1028 static const char* short_name_as_C_string(ID id, char* buf, int size);
1029
1030 // Access to intrinsic methods:
1031 static methodOop method_for(ID id);
1032
1033 // Wrapper object methods:
1034 static ID for_boxing(BasicType type);
1035 static ID for_unboxing(BasicType type);
1036 };
|