Mercurial > hg > graal-jvmci-8
comparison src/share/vm/jvmci/jvmciJavaAccess.hpp @ 22513:82818d115a98
jvmciJavaAccess classes are always instanceKlasses
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Thu, 03 Sep 2015 13:30:54 -0700 |
parents | 943c2bf064fa |
children | 8e4949926ae5 |
comparison
equal
deleted
inserted
replaced
22512:1852abfbaca3 | 22513:82818d115a98 |
---|---|
284 assert(obj->is_a(SystemDictionary::name##_klass()), err_msg("wrong class, " #name " expected, found %s", obj->klass()->external_name())); \ | 284 assert(obj->is_a(SystemDictionary::name##_klass()), err_msg("wrong class, " #name " expected, found %s", obj->klass()->external_name())); \ |
285 assert(offset != 0, "must be valid offset"); \ | 285 assert(offset != 0, "must be valid offset"); \ |
286 } \ | 286 } \ |
287 static void compute_offsets(); \ | 287 static void compute_offsets(); \ |
288 public: \ | 288 public: \ |
289 static Klass* klass() { return SystemDictionary::name##_klass(); } | 289 static InstanceKlass* klass() { return SystemDictionary::name##_klass() == NULL ? NULL : InstanceKlass::cast(SystemDictionary::name##_klass()); } |
290 | 290 |
291 #define END_CLASS }; | 291 #define END_CLASS }; |
292 | 292 |
293 #define FIELD(name, type, accessor, cast) \ | 293 #define FIELD(name, type, accessor, cast) \ |
294 static int _##name##_offset; \ | 294 static int _##name##_offset; \ |
312 #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature) | 312 #define STATIC_OBJARRAYOOP_FIELD(klassName, name, signature) STATIC_OOPISH_FIELD(klassName, name, objArrayOop, signature) |
313 #define STATIC_OOPISH_FIELD(klassName, name, type, signature) \ | 313 #define STATIC_OOPISH_FIELD(klassName, name, type, signature) \ |
314 static int _##name##_offset; \ | 314 static int _##name##_offset; \ |
315 static type name() { \ | 315 static type name() { \ |
316 assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName); \ | 316 assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName); \ |
317 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ | 317 InstanceKlass* ik = klassName::klass(); \ |
318 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ | 318 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ |
319 if (UseCompressedOops) { \ | 319 if (UseCompressedOops) { \ |
320 return (type) oopDesc::load_decode_heap_oop((narrowOop *)addr); \ | 320 return (type) oopDesc::load_decode_heap_oop((narrowOop *)addr); \ |
321 } else { \ | 321 } else { \ |
322 return (type) oopDesc::load_decode_heap_oop((oop*)addr); \ | 322 return (type) oopDesc::load_decode_heap_oop((oop*)addr); \ |
323 } \ | 323 } \ |
324 } \ | 324 } \ |
325 static void set_##name(type x) { \ | 325 static void set_##name(type x) { \ |
326 assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName); \ | 326 assert(klassName::klass() != NULL, "Class not yet loaded: " #klassName); \ |
327 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ | 327 InstanceKlass* ik = klassName::klass(); \ |
328 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ | 328 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ |
329 if (UseCompressedOops) { \ | 329 if (UseCompressedOops) { \ |
330 oop_store((narrowOop *)addr, x); \ | 330 oop_store((narrowOop *)addr, x); \ |
331 } else { \ | 331 } else { \ |
332 oop_store((oop*)addr, x); \ | 332 oop_store((oop*)addr, x); \ |
333 } \ | 333 } \ |
334 } | 334 } |
335 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename) \ | 335 #define STATIC_PRIMITIVE_FIELD(klassName, name, jtypename) \ |
336 static int _##name##_offset; \ | 336 static int _##name##_offset; \ |
337 static jtypename name() { \ | 337 static jtypename name() { \ |
338 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ | 338 InstanceKlass* ik = klassName::klass(); \ |
339 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ | 339 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ |
340 return *((jtypename *)addr); \ | 340 return *((jtypename *)addr); \ |
341 } \ | 341 } \ |
342 static void set_##name(jtypename x) { \ | 342 static void set_##name(jtypename x) { \ |
343 InstanceKlass* ik = InstanceKlass::cast(klassName::klass()); \ | 343 InstanceKlass* ik = klassName::klass(); \ |
344 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ | 344 address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields()); \ |
345 *((jtypename *)addr) = x; \ | 345 *((jtypename *)addr) = x; \ |
346 } | 346 } |
347 | 347 |
348 #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint) | 348 #define STATIC_INT_FIELD(klassName, name) STATIC_PRIMITIVE_FIELD(klassName, name, jint) |