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
|