src/hotspot/share/jvmci/jvmciJavaClasses.hpp
changeset 49473 26958d06b585
parent 49358 0dc249f5c260
child 50409 76bca6678913
equal deleted inserted replaced
49472:982acd800812 49473:26958d06b585
   351 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
   351 #define STATIC_OOPISH_FIELD(klassName, name, type, signature)                                                  \
   352     static int _##name##_offset;                                                                               \
   352     static int _##name##_offset;                                                                               \
   353     static type name() {                                                                                       \
   353     static type name() {                                                                                       \
   354       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   354       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   355       InstanceKlass* ik = klassName::klass();                                                                  \
   355       InstanceKlass* ik = klassName::klass();                                                                  \
   356       address addr = ik->static_field_addr(_##name##_offset);                                                  \
   356       oop base = ik->static_field_base_raw();                                                                  \
   357       oop result = HeapAccess<>::oop_load((HeapWord*)addr);                                                    \
   357       oop result = HeapAccess<>::oop_load_at(base, _##name##_offset);                                          \
   358       return type(result);                                                                                     \
   358       return type(result);                                                                                     \
   359     }                                                                                                          \
   359     }                                                                                                          \
   360     static void set_##name(type x) {                                                                           \
   360     static void set_##name(type x) {                                                                           \
   361       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   361       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   362       assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
   362       assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName);                                 \
   363       InstanceKlass* ik = klassName::klass();                                                                  \
   363       InstanceKlass* ik = klassName::klass();                                                                  \
   364       address addr = ik->static_field_addr(_##name##_offset);                                                  \
   364       oop base = ik->static_field_base_raw();                                                                  \
   365       HeapAccess<>::oop_store((HeapWord*)addr, x);                                                             \
   365       HeapAccess<>::oop_store_at(base, _##name##_offset, x);                                                   \
   366     }
   366     }
   367 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename)                                                     \
   367 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename)                                                     \
   368     static int _##name##_offset;                                                                               \
   368     static int _##name##_offset;                                                                               \
   369     static jtypename name() {                                                                                  \
   369     static jtypename name() {                                                                                  \
   370       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   370       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   371       InstanceKlass* ik = klassName::klass();                                                                  \
   371       InstanceKlass* ik = klassName::klass();                                                                  \
   372       address addr = ik->static_field_addr(_##name##_offset);                                                  \
   372       oop base = ik->static_field_base_raw();                                                                  \
   373       return HeapAccess<>::load((jtypename*)addr);                                                             \
   373       return HeapAccess<>::load_at(base, _##name##_offset);                                                    \
   374     }                                                                                                          \
   374     }                                                                                                          \
   375     static void set_##name(jtypename x) {                                                                      \
   375     static void set_##name(jtypename x) {                                                                      \
   376       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   376       assert(klassName::klass() != NULL && klassName::klass()->is_linked(), "Class not yet linked: " #klassName); \
   377       InstanceKlass* ik = klassName::klass();                                                                  \
   377       InstanceKlass* ik = klassName::klass();                                                                  \
   378       address addr = ik->static_field_addr(_##name##_offset);                                                  \
   378       oop base = ik->static_field_base_raw();                                                                  \
   379       HeapAccess<>::store((jtypename*)addr, x);                                                                \
   379       HeapAccess<>::store_at(base, _##name##_offset, x);                                                       \
   380     }
   380     }
   381 
   381 
   382 #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint)
   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)
   383 #define STATIC_BOOLEAN_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jboolean)
   384 
   384