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