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(); \
|