< prev index next >

src/hotspot/share/jvmci/jvmciJavaClasses.cpp

Print this page

201     assert(obj != nullptr, "null field access of %s.%s", #className, field_name);       \
202     assert(obj->is_a(className::klass()), "wrong class, " #className " expected, found %s", obj->klass()->external_name()); \
203     assert(offset != 0, "must be valid offset");                                        \
204   }                                                                                     \
205   InstanceKlass* HotSpotJVMCI::className::_klass = nullptr;
206 
207 #define END_CLASS
208 
209 #define FIELD(className, name, type, accessor, cast)                     \
210   type HotSpotJVMCI::className::name(JVMCIEnv* env, oop obj)               { className::check(obj, #name, className::_##name##_offset); return cast obj->accessor(className::_##name##_offset); } \
211   void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, oop obj, type x) { className::check(obj, #name, className::_##name##_offset); obj->accessor##_put(className::_##name##_offset, x); }
212 
213 #define EMPTY_CAST
214 #define CHAR_FIELD(className, name) FIELD(className, name, jchar, char_field, EMPTY_CAST)
215 #define INT_FIELD(className, name) FIELD(className, name, jint, int_field, EMPTY_CAST)
216 #define BOOLEAN_FIELD(className, name) FIELD(className, name, jboolean, bool_field, EMPTY_CAST)
217 #define LONG_FIELD(className, name) FIELD(className, name, jlong, long_field, EMPTY_CAST)
218 #define FLOAT_FIELD(className, name) FIELD(className, name, jfloat, float_field, EMPTY_CAST)
219 
220 #define OBJECT_FIELD(className, name, signature) FIELD(className, name, oop, obj_field, EMPTY_CAST)
221 #define OBJECTARRAY_FIELD(className, name, signature) FIELD(className, name, objArrayOop, obj_field, (objArrayOop))
222 #define PRIMARRAY_FIELD(className, name, signature) FIELD(className, name, typeArrayOop, obj_field, (typeArrayOop))
223 #define STATIC_OBJECT_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, oop)
224 #define STATIC_OBJECTARRAY_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, objArrayOop)
225 #define STATIC_OOPISH_FIELD(className, name, type)                                                                        \
226     type HotSpotJVMCI::className::name(JVMCIEnv* env) {                                                                   \
227       assert(className::klass() != nullptr && className::klass()->is_linked(), "Class not yet linked: " #className);      \
228       InstanceKlass* ik = className::klass();                                                                             \
229       oop base = ik->static_field_base_raw();                                                                             \
230       oop result = HeapAccess<>::oop_load_at(base, className::_##name##_offset);                                          \
231       return type(result);                                                                                                \
232     }                                                                                                                     \
233     void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, type x) {                                                     \
234       assert(className::klass() != nullptr && className::klass()->is_linked(), "Class not yet linked: " #className);      \
235       assert(className::klass() != nullptr, "Class not yet loaded: " #className);                                         \
236       InstanceKlass* ik = className::klass();                                                                             \
237       oop base = ik->static_field_base_raw();                                                                             \
238       HeapAccess<>::oop_store_at(base, className::_##name##_offset, x);                                                   \
239     }
240 #define STATIC_PRIMITIVE_FIELD(className, name, jtypename)                                                                \
241     jtypename HotSpotJVMCI::className::get_##name(JVMCIEnv* env) {                                                        \
242       assert(className::klass() != nullptr && className::klass()->is_linked(), "Class not yet linked: " #className);      \
243       InstanceKlass* ik = className::klass();                                                                             \
244       oop base = ik->static_field_base_raw();                                                                             \

201     assert(obj != nullptr, "null field access of %s.%s", #className, field_name);       \
202     assert(obj->is_a(className::klass()), "wrong class, " #className " expected, found %s", obj->klass()->external_name()); \
203     assert(offset != 0, "must be valid offset");                                        \
204   }                                                                                     \
205   InstanceKlass* HotSpotJVMCI::className::_klass = nullptr;
206 
207 #define END_CLASS
208 
209 #define FIELD(className, name, type, accessor, cast)                     \
210   type HotSpotJVMCI::className::name(JVMCIEnv* env, oop obj)               { className::check(obj, #name, className::_##name##_offset); return cast obj->accessor(className::_##name##_offset); } \
211   void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, oop obj, type x) { className::check(obj, #name, className::_##name##_offset); obj->accessor##_put(className::_##name##_offset, x); }
212 
213 #define EMPTY_CAST
214 #define CHAR_FIELD(className, name) FIELD(className, name, jchar, char_field, EMPTY_CAST)
215 #define INT_FIELD(className, name) FIELD(className, name, jint, int_field, EMPTY_CAST)
216 #define BOOLEAN_FIELD(className, name) FIELD(className, name, jboolean, bool_field, EMPTY_CAST)
217 #define LONG_FIELD(className, name) FIELD(className, name, jlong, long_field, EMPTY_CAST)
218 #define FLOAT_FIELD(className, name) FIELD(className, name, jfloat, float_field, EMPTY_CAST)
219 
220 #define OBJECT_FIELD(className, name, signature) FIELD(className, name, oop, obj_field, EMPTY_CAST)
221 #define OBJECTARRAY_FIELD(className, name, signature) FIELD(className, name, refArrayOop, obj_field, (refArrayOop))
222 #define PRIMARRAY_FIELD(className, name, signature) FIELD(className, name, typeArrayOop, obj_field, (typeArrayOop))
223 #define STATIC_OBJECT_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, oop)
224 #define STATIC_OBJECTARRAY_FIELD(className, name, signature) STATIC_OOPISH_FIELD(className, name, refArrayOop)
225 #define STATIC_OOPISH_FIELD(className, name, type)                                                                        \
226     type HotSpotJVMCI::className::name(JVMCIEnv* env) {                                                                   \
227       assert(className::klass() != nullptr && className::klass()->is_linked(), "Class not yet linked: " #className);      \
228       InstanceKlass* ik = className::klass();                                                                             \
229       oop base = ik->static_field_base_raw();                                                                             \
230       oop result = HeapAccess<>::oop_load_at(base, className::_##name##_offset);                                          \
231       return type(result);                                                                                                \
232     }                                                                                                                     \
233     void HotSpotJVMCI::className::set_##name(JVMCIEnv* env, type x) {                                                     \
234       assert(className::klass() != nullptr && className::klass()->is_linked(), "Class not yet linked: " #className);      \
235       assert(className::klass() != nullptr, "Class not yet loaded: " #className);                                         \
236       InstanceKlass* ik = className::klass();                                                                             \
237       oop base = ik->static_field_base_raw();                                                                             \
238       HeapAccess<>::oop_store_at(base, className::_##name##_offset, x);                                                   \
239     }
240 #define STATIC_PRIMITIVE_FIELD(className, name, jtypename)                                                                \
241     jtypename HotSpotJVMCI::className::get_##name(JVMCIEnv* env) {                                                        \
242       assert(className::klass() != nullptr && className::klass()->is_linked(), "Class not yet linked: " #className);      \
243       InstanceKlass* ik = className::klass();                                                                             \
244       oop base = ik->static_field_base_raw();                                                                             \
< prev index next >