344 /* name symbols needed by intrinsics */ \ |
344 /* name symbols needed by intrinsics */ \ |
345 VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \ |
345 VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \ |
346 \ |
346 \ |
347 /* common signatures names */ \ |
347 /* common signatures names */ \ |
348 template(void_method_signature, "()V") \ |
348 template(void_method_signature, "()V") \ |
|
349 template(void_boolean_signature, "()Z") \ |
|
350 template(void_byte_signature, "()B") \ |
|
351 template(void_char_signature, "()C") \ |
|
352 template(void_short_signature, "()S") \ |
349 template(void_int_signature, "()I") \ |
353 template(void_int_signature, "()I") \ |
350 template(void_long_signature, "()J") \ |
354 template(void_long_signature, "()J") \ |
351 template(void_boolean_signature, "()Z") \ |
355 template(void_float_signature, "()F") \ |
|
356 template(void_double_signature, "()D") \ |
352 template(int_void_signature, "(I)V") \ |
357 template(int_void_signature, "(I)V") \ |
353 template(int_int_signature, "(I)I") \ |
358 template(int_int_signature, "(I)I") \ |
354 template(int_bool_signature, "(I)Z") \ |
359 template(int_bool_signature, "(I)Z") \ |
355 template(float_int_signature, "(F)I") \ |
360 template(float_int_signature, "(F)I") \ |
356 template(double_long_signature, "(D)J") \ |
361 template(double_long_signature, "(D)J") \ |
851 do_intrinsic(_Object_init, java_lang_Object, object_initializer_name, void_method_signature, F_R) \ |
856 do_intrinsic(_Object_init, java_lang_Object, object_initializer_name, void_method_signature, F_R) \ |
852 /* (symbol object_initializer_name defined above) */ \ |
857 /* (symbol object_initializer_name defined above) */ \ |
853 \ |
858 \ |
854 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_array_object_object_signature, F_R) \ |
859 do_intrinsic(_invoke, java_lang_reflect_Method, invoke_name, object_array_object_object_signature, F_R) \ |
855 /* (symbols invoke_name and invoke_signature defined above) */ \ |
860 /* (symbols invoke_name and invoke_signature defined above) */ \ |
|
861 do_intrinsic(_checkSpreadArgument, sun_dyn_MethodHandleImpl, checkSpreadArgument_name, checkSpreadArgument_signature, F_S) \ |
|
862 do_name( checkSpreadArgument_name, "checkSpreadArgument") \ |
|
863 do_name( checkSpreadArgument_signature, "(Ljava/lang/Object;I)V") \ |
|
864 \ |
|
865 /* unboxing methods: */ \ |
|
866 do_intrinsic(_booleanValue, java_lang_Boolean, booleanValue_name, void_boolean_signature, F_R) \ |
|
867 do_name( booleanValue_name, "booleanValue") \ |
|
868 do_intrinsic(_byteValue, java_lang_Byte, byteValue_name, void_byte_signature, F_R) \ |
|
869 do_name( byteValue_name, "byteValue") \ |
|
870 do_intrinsic(_charValue, java_lang_Character, charValue_name, void_char_signature, F_R) \ |
|
871 do_name( charValue_name, "charValue") \ |
|
872 do_intrinsic(_shortValue, java_lang_Short, shortValue_name, void_short_signature, F_R) \ |
|
873 do_name( shortValue_name, "shortValue") \ |
|
874 do_intrinsic(_intValue, java_lang_Integer, intValue_name, void_int_signature, F_R) \ |
|
875 do_name( intValue_name, "intValue") \ |
|
876 do_intrinsic(_longValue, java_lang_Long, longValue_name, void_long_signature, F_R) \ |
|
877 do_name( longValue_name, "longValue") \ |
|
878 do_intrinsic(_floatValue, java_lang_Float, floatValue_name, void_float_signature, F_R) \ |
|
879 do_name( floatValue_name, "floatValue") \ |
|
880 do_intrinsic(_doubleValue, java_lang_Double, doubleValue_name, void_double_signature, F_R) \ |
|
881 do_name( doubleValue_name, "doubleValue") \ |
|
882 \ |
|
883 /* boxing methods: */ \ |
|
884 do_name( valueOf_name, "valueOf") \ |
|
885 do_intrinsic(_Boolean_valueOf, java_lang_Boolean, valueOf_name, Boolean_valueOf_signature, F_S) \ |
|
886 do_name( Boolean_valueOf_signature, "(Z)Ljava/lang/Boolean;") \ |
|
887 do_intrinsic(_Byte_valueOf, java_lang_Byte, valueOf_name, Byte_valueOf_signature, F_S) \ |
|
888 do_name( Byte_valueOf_signature, "(B)Ljava/lang/Byte;") \ |
|
889 do_intrinsic(_Character_valueOf, java_lang_Character, valueOf_name, Character_valueOf_signature, F_S) \ |
|
890 do_name( Character_valueOf_signature, "(C)Ljava/lang/Character;") \ |
|
891 do_intrinsic(_Short_valueOf, java_lang_Short, valueOf_name, Short_valueOf_signature, F_S) \ |
|
892 do_name( Short_valueOf_signature, "(S)Ljava/lang/Short;") \ |
|
893 do_intrinsic(_Integer_valueOf, java_lang_Integer, valueOf_name, Integer_valueOf_signature, F_S) \ |
|
894 do_name( Integer_valueOf_signature, "(I)Ljava/lang/Integer;") \ |
|
895 do_intrinsic(_Long_valueOf, java_lang_Long, valueOf_name, Long_valueOf_signature, F_S) \ |
|
896 do_name( Long_valueOf_signature, "(J)Ljava/lang/Long;") \ |
|
897 do_intrinsic(_Float_valueOf, java_lang_Float, valueOf_name, Float_valueOf_signature, F_S) \ |
|
898 do_name( Float_valueOf_signature, "(F)Ljava/lang/Float;") \ |
|
899 do_intrinsic(_Double_valueOf, java_lang_Double, valueOf_name, Double_valueOf_signature, F_S) \ |
|
900 do_name( Double_valueOf_signature, "(D)Ljava/lang/Double;") \ |
856 \ |
901 \ |
857 /*end*/ |
902 /*end*/ |
858 |
903 |
859 |
904 |
860 |
905 |
981 F_R, // !static ?native !synchronized (R="regular") |
1026 F_R, // !static ?native !synchronized (R="regular") |
982 F_S, // static ?native !synchronized |
1027 F_S, // static ?native !synchronized |
983 F_Y, // !static ?native synchronized |
1028 F_Y, // !static ?native synchronized |
984 F_RN, // !static native !synchronized |
1029 F_RN, // !static native !synchronized |
985 F_SN, // static native !synchronized |
1030 F_SN, // static native !synchronized |
986 F_RNY // !static native synchronized |
1031 F_RNY, // !static native synchronized |
|
1032 |
|
1033 FLAG_LIMIT |
|
1034 }; |
|
1035 enum { |
|
1036 log2_FLAG_LIMIT = 4 // checked by an assert at start-up |
987 }; |
1037 }; |
988 |
1038 |
989 public: |
1039 public: |
990 static ID ID_from(int raw_id) { |
1040 static ID ID_from(int raw_id) { |
991 assert(raw_id >= (int)_none && raw_id < (int)ID_LIMIT, |
1041 assert(raw_id >= (int)_none && raw_id < (int)ID_LIMIT, |
993 return (ID)raw_id; |
1043 return (ID)raw_id; |
994 } |
1044 } |
995 |
1045 |
996 static const char* name_at(ID id); |
1046 static const char* name_at(ID id); |
997 |
1047 |
|
1048 private: |
|
1049 static ID find_id_impl(vmSymbols::SID holder, |
|
1050 vmSymbols::SID name, |
|
1051 vmSymbols::SID sig, |
|
1052 jshort flags); |
|
1053 |
|
1054 public: |
998 // Given a method's class, name, signature, and access flags, report its ID. |
1055 // Given a method's class, name, signature, and access flags, report its ID. |
999 static ID find_id(vmSymbols::SID holder, |
1056 static ID find_id(vmSymbols::SID holder, |
1000 vmSymbols::SID name, |
1057 vmSymbols::SID name, |
1001 vmSymbols::SID sig, |
1058 vmSymbols::SID sig, |
1002 jshort flags); |
1059 jshort flags) { |
|
1060 ID id = find_id_impl(holder, name, sig, flags); |
|
1061 #ifdef ASSERT |
|
1062 // ID _none does not hold the following asserts. |
|
1063 if (id == _none) return id; |
|
1064 #endif |
|
1065 assert( class_for(id) == holder, "correct id"); |
|
1066 assert( name_for(id) == name, "correct id"); |
|
1067 assert(signature_for(id) == sig, "correct id"); |
|
1068 return id; |
|
1069 } |
1003 |
1070 |
1004 static void verify_method(ID actual_id, methodOop m) PRODUCT_RETURN; |
1071 static void verify_method(ID actual_id, methodOop m) PRODUCT_RETURN; |
1005 |
1072 |
1006 // No need for these in the product: |
1073 // Find out the symbols behind an intrinsic: |
1007 static vmSymbols::SID class_for(ID id); |
1074 static vmSymbols::SID class_for(ID id); |
1008 static vmSymbols::SID name_for(ID id); |
1075 static vmSymbols::SID name_for(ID id); |
1009 static vmSymbols::SID signature_for(ID id); |
1076 static vmSymbols::SID signature_for(ID id); |
1010 static Flags flags_for(ID id); |
1077 static Flags flags_for(ID id); |
1011 |
1078 |
1012 static const char* short_name_as_C_string(ID id, char* buf, int size); |
1079 static const char* short_name_as_C_string(ID id, char* buf, int size); |
1013 |
1080 |
1014 // Access to intrinsic methods: |
1081 // Access to intrinsic methods: |
1015 static methodOop method_for(ID id); |
1082 static methodOop method_for(ID id); |
|
1083 |
|
1084 // Wrapper object methods: |
|
1085 static ID for_boxing(BasicType type); |
|
1086 static ID for_unboxing(BasicType type); |
1016 }; |
1087 }; |