< prev index next >

src/hotspot/share/jvmci/jvmciJavaClasses.hpp

Print this page
rev 49250 : [mq]: JDK-8199739.patch


 336     static void set_##name(oop obj, type x)     { check(obj, #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                  \
 337     static void set_##name(Handle obj, type x)  { check(obj(), #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                \
 338     static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj), #name, _##name##_offset); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); }
 339 
 340 #define EMPTY_CAST
 341 #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST)
 342 #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST)
 343 #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST)
 344 #define LONG_FIELD(klass, name) FIELD(name, jlong, long_field, EMPTY_CAST)
 345 #define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field, EMPTY_CAST)
 346 #define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field, EMPTY_CAST)
 347 #define OBJARRAYOOP_FIELD(klass, name, signature) FIELD(name, objArrayOop, obj_field, (objArrayOop))
 348 #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop))
 349 #define STATIC_OOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, oop, signature)
 350 #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature)
 351 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
 352     static int _##name##_offset;                                                                               \
 353     static type name() {                                                                                       \
 354       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 355       InstanceKlass* ik = klassName::klass();                                                                  \
 356       address addr = ik->static_field_addr(_##name##_offset);                                                  \
 357       oop result = HeapAccess<>::oop_load((HeapWord*)addr);                                                    \
 358       return type(result);                                                                                     \
 359     }                                                                                                          \
 360     static void set_##name(type x) {                                                                           \
 361       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 362       assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
 363       InstanceKlass* ik = klassName::klass();                                                                  \
 364       address addr = ik->static_field_addr(_##name##_offset);                                                  \
 365       HeapAccess<>::oop_store((HeapWord*)addr, x);                                                             \
 366     }
 367 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename)                                                     \
 368     static int _##name##_offset;                                                                               \
 369     static jtypename name() {                                                                                  \
 370       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 371       InstanceKlass* ik = klassName::klass();                                                                  \
 372       address addr = ik->static_field_addr(_##name##_offset);                                                  \
 373       return HeapAccess<>::load((jtypename*)addr);                                                             \
 374     }                                                                                                          \
 375     static void set_##name(jtypename x) {                                                                      \
 376       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 377       InstanceKlass* ik = klassName::klass();                                                                  \
 378       address addr = ik->static_field_addr(_##name##_offset);                                                  \
 379       HeapAccess<>::store((jtypename*)addr, x);                                                                \
 380     }
 381 
 382 #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint)
 383 #define STATIC_BOOLEAN_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jboolean)
 384 
 385 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)
 386 #undef START_CLASS
 387 #undef END_CLASS
 388 #undef FIELD
 389 #undef CHAR_FIELD
 390 #undef INT_FIELD
 391 #undef BOOLEAN_FIELD
 392 #undef LONG_FIELD
 393 #undef FLOAT_FIELD
 394 #undef OOP_FIELD
 395 #undef TYPEARRAYOOP_FIELD
 396 #undef OBJARRAYOOP_FIELD
 397 #undef STATIC_OOPISH_FIELD
 398 #undef STATIC_OOP_FIELD
 399 #undef STATIC_OBJARRAYOOP_FIELD


 336     static void set_##name(oop obj, type x)     { check(obj, #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                  \
 337     static void set_##name(Handle obj, type x)  { check(obj(), #name, _##name##_offset); obj->accessor##_put(_##name##_offset, x); }                                                \
 338     static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj), #name, _##name##_offset); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); }
 339 
 340 #define EMPTY_CAST
 341 #define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST)
 342 #define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST)
 343 #define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST)
 344 #define LONG_FIELD(klass, name) FIELD(name, jlong, long_field, EMPTY_CAST)
 345 #define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field, EMPTY_CAST)
 346 #define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field, EMPTY_CAST)
 347 #define OBJARRAYOOP_FIELD(klass, name, signature) FIELD(name, objArrayOop, obj_field, (objArrayOop))
 348 #define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop))
 349 #define STATIC_OOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, oop, signature)
 350 #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature)
 351 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
 352     static int _##name##_offset;                                                                               \
 353     static type name() {                                                                                       \
 354       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 355       InstanceKlass* ik = klassName::klass();                                                                  \
 356       oop base = ik->static_field_base();                                                                      \
 357       oop result = HeapAccess<>::oop_load_at(base, _##name##_offset);                                          \
 358       return type(result);                                                                                     \
 359     }                                                                                                          \
 360     static void set_##name(type x) {                                                                           \
 361       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 362       assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
 363       InstanceKlass* ik = klassName::klass();                                                                  \
 364       oop base = ik->static_field_base();                                                                      \
 365       HeapAccess<>::oop_store_at(base, _##name##_offset, x);                                                      \
 366     }
 367 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename)                                                     \
 368     static int _##name##_offset;                                                                               \
 369     static jtypename name() {                                                                                  \
 370       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 371       InstanceKlass* ik = klassName::klass();                                                                  \
 372       oop base = ik->static_field_base();                                                                      \
 373       return HeapAccess<>::load_at(base, _##name##_offset);                                                       \
 374     }                                                                                                          \
 375     static void set_##name(jtypename x) {                                                                      \
 376       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
 377       InstanceKlass* ik = klassName::klass();                                                                  \
 378       oop base = ik->static_field_base();                                                                      \
 379       HeapAccess<>::store_at(base, _##name##_offset, x);                                                          \
 380     }
 381 
 382 #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint)
 383 #define STATIC_BOOLEAN_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jboolean)
 384 
 385 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)
 386 #undef START_CLASS
 387 #undef END_CLASS
 388 #undef FIELD
 389 #undef CHAR_FIELD
 390 #undef INT_FIELD
 391 #undef BOOLEAN_FIELD
 392 #undef LONG_FIELD
 393 #undef FLOAT_FIELD
 394 #undef OOP_FIELD
 395 #undef TYPEARRAYOOP_FIELD
 396 #undef OBJARRAYOOP_FIELD
 397 #undef STATIC_OOPISH_FIELD
 398 #undef STATIC_OOP_FIELD
 399 #undef STATIC_OBJARRAYOOP_FIELD
< prev index next >