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 |