< prev index next >

src/hotspot/share/jvmci/jvmciJavaClasses.hpp

Print this page

        

*** 23,36 **** #ifndef SHARE_VM_JVMCI_JVMCIJAVACLASSES_HPP #define SHARE_VM_JVMCI_JVMCIJAVACLASSES_HPP #include "classfile/systemDictionary.hpp" ! #include "oops/access.inline.hpp" #include "oops/instanceMirrorKlass.hpp" ! #include "oops/oop.inline.hpp" ! #include "runtime/jniHandles.inline.hpp" class JVMCIJavaClasses : AllStatic { public: static void compute_offsets(TRAPS); }; --- 23,35 ---- #ifndef SHARE_VM_JVMCI_JVMCIJAVACLASSES_HPP #define SHARE_VM_JVMCI_JVMCIJAVACLASSES_HPP #include "classfile/systemDictionary.hpp" ! #include "oops/access.hpp" #include "oops/instanceMirrorKlass.hpp" ! #include "oops/oop.hpp" class JVMCIJavaClasses : AllStatic { public: static void compute_offsets(TRAPS); };
*** 241,263 **** end_class \ start_class(HotSpotSentinelConstant) \ end_class \ start_class(JavaKind) \ char_field(JavaKind, typeChar) \ ! static_oop_field(JavaKind, Boolean, "Ljdk/vm/ci/meta/JavaKind;"); \ ! static_oop_field(JavaKind, Byte, "Ljdk/vm/ci/meta/JavaKind;"); \ ! static_oop_field(JavaKind, Char, "Ljdk/vm/ci/meta/JavaKind;"); \ ! static_oop_field(JavaKind, Short, "Ljdk/vm/ci/meta/JavaKind;"); \ ! static_oop_field(JavaKind, Int, "Ljdk/vm/ci/meta/JavaKind;"); \ ! static_oop_field(JavaKind, Long, "Ljdk/vm/ci/meta/JavaKind;"); \ end_class \ start_class(ValueKind) \ oop_field(ValueKind, platformKind, "Ljdk/vm/ci/meta/PlatformKind;") \ end_class \ start_class(Value) \ oop_field(Value, valueKind, "Ljdk/vm/ci/meta/ValueKind;") \ ! static_oop_field(Value, ILLEGAL, "Ljdk/vm/ci/meta/AllocatableValue;"); \ end_class \ start_class(RegisterValue) \ oop_field(RegisterValue, reg, "Ljdk/vm/ci/code/Register;") \ end_class \ start_class(code_Location) \ --- 240,262 ---- end_class \ start_class(HotSpotSentinelConstant) \ end_class \ start_class(JavaKind) \ char_field(JavaKind, typeChar) \ ! static_oop_field(JavaKind, Boolean, "Ljdk/vm/ci/meta/JavaKind;") \ ! static_oop_field(JavaKind, Byte, "Ljdk/vm/ci/meta/JavaKind;") \ ! static_oop_field(JavaKind, Char, "Ljdk/vm/ci/meta/JavaKind;") \ ! static_oop_field(JavaKind, Short, "Ljdk/vm/ci/meta/JavaKind;") \ ! static_oop_field(JavaKind, Int, "Ljdk/vm/ci/meta/JavaKind;") \ ! static_oop_field(JavaKind, Long, "Ljdk/vm/ci/meta/JavaKind;") \ end_class \ start_class(ValueKind) \ oop_field(ValueKind, platformKind, "Ljdk/vm/ci/meta/PlatformKind;") \ end_class \ start_class(Value) \ oop_field(Value, valueKind, "Ljdk/vm/ci/meta/ValueKind;") \ ! static_oop_field(Value, ILLEGAL, "Ljdk/vm/ci/meta/AllocatableValue;") \ end_class \ start_class(RegisterValue) \ oop_field(RegisterValue, reg, "Ljdk/vm/ci/code/Register;") \ end_class \ start_class(code_Location) \
*** 315,343 **** #define START_CLASS(name) \ class name : AllStatic { \ private: \ friend class JVMCICompiler; \ ! static void check(oop obj, const char* field_name, int offset) { \ ! assert(obj != NULL, "NULL field access of %s.%s", #name, field_name); \ ! assert(obj->is_a(SystemDictionary::name##_klass()), "wrong class, " #name " expected, found %s", obj->klass()->external_name()); \ ! assert(offset != 0, "must be valid offset"); \ ! } \ static void compute_offsets(TRAPS); \ public: \ static InstanceKlass* klass() { return SystemDictionary::name##_klass(); } #define END_CLASS }; #define FIELD(name, type, accessor, cast) \ static int _##name##_offset; \ static type name(oop obj) { check(obj, #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \ static type name(Handle obj) { check(obj(), #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \ ! static type name(jobject obj) { check(JNIHandles::resolve(obj), #name, _##name##_offset); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); } \ static void set_##name(oop obj, type x) { check(obj, #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); } \ static void set_##name(Handle obj, type x) { check(obj(), #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); } \ ! static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj), #name, _##name##_offset); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); } #define EMPTY_CAST #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST) #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST) #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST) --- 314,338 ---- #define START_CLASS(name) \ class name : AllStatic { \ private: \ friend class JVMCICompiler; \ ! static void check(oop obj, const char* field_name, int offset); \ static void compute_offsets(TRAPS); \ public: \ static InstanceKlass* klass() { return SystemDictionary::name##_klass(); } #define END_CLASS }; #define FIELD(name, type, accessor, cast) \ static int _##name##_offset; \ static type name(oop obj) { check(obj, #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \ static type name(Handle obj) { check(obj(), #name, _##name##_offset); return cast obj->accessor(_##name##_offset); } \ ! static type name(jobject obj); \ static void set_##name(oop obj, type x) { check(obj, #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); } \ static void set_##name(Handle obj, type x) { check(obj(), #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); } \ ! static void set_##name(jobject obj, type x); \ #define EMPTY_CAST #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST) #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST) #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST)
*** 348,385 **** #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop)) #define STATIC_OOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, oop, signature) #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature) #define STATIC_OOPISH_FIELD(klassName, name, type, signature) \ static int _##name##_offset; \ ! static type name() { \ ! assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \ ! InstanceKlass* ik = klassName::klass(); \ ! oop base = ik->static_field_base_raw(); \ ! oop result = HeapAccess<>::oop_load_at(base, _##name##_offset); \ ! return type(result); \ ! } \ ! static void set_##name(type x) { \ ! assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \ ! assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName); \ ! InstanceKlass* ik = klassName::klass(); \ ! oop base = ik->static_field_base_raw(); \ ! HeapAccess<>::oop_store_at(base, _##name##_offset, x); \ ! } #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename) \ static int _##name##_offset; \ ! static jtypename name() { \ ! assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \ ! InstanceKlass* ik = klassName::klass(); \ ! oop base = ik->static_field_base_raw(); \ ! return HeapAccess<>::load_at(base, _##name##_offset); \ ! } \ ! static void set_##name(jtypename x) { \ ! assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \ ! InstanceKlass* ik = klassName::klass(); \ ! oop base = ik->static_field_base_raw(); \ ! HeapAccess<>::store_at(base, _##name##_offset, x); \ ! } #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint) #define STATIC_BOOLEAN_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jboolean) COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, TYPEARRAYOOP_FIELD, OBJARRAYOOP_FIELD, STATIC_OOP_FIELD, STATIC_OBJARRAYOOP_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD) --- 343,358 ---- #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop)) #define STATIC_OOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, oop, signature) #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature) #define STATIC_OOPISH_FIELD(klassName, name, type, signature) \ static int _##name##_offset; \ ! static type name(); \ ! static void set_##name(type x); #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename) \ static int _##name##_offset; \ ! static jtypename name(); \ ! static void set_##name(jtypename x); #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint) #define STATIC_BOOLEAN_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jboolean) COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, TYPEARRAYOOP_FIELD, OBJARRAYOOP_FIELD, STATIC_OOP_FIELD, STATIC_OBJARRAYOOP_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD)
*** 397,406 **** --- 370,380 ---- #undef STATIC_OOPISH_FIELD #undef STATIC_OOP_FIELD #undef STATIC_OBJARRAYOOP_FIELD #undef STATIC_INT_FIELD #undef STATIC_BOOLEAN_FIELD + #undef STATIC_PRIMITIVE_FIELD #undef EMPTY_CAST void compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field, TRAPS); #endif // SHARE_VM_JVMCI_JVMCIJAVACLASSES_HPP
< prev index next >