< prev index next >

src/share/vm/jvmci/jvmciJavaClasses.cpp

Print this page




  54 // This piece of macro magic creates the contents of the jvmci_compute_offsets method that initializes the field indices of all the access classes.
  55 
  56 #define START_CLASS(name) { Klass* k = SystemDictionary::name##_klass(); assert(k != NULL, "Could not find class " #name "");
  57 
  58 #define END_CLASS }
  59 
  60 #define FIELD(klass, name, signature, static_field) compute_offset(klass::_##name##_offset, k, #name, signature, static_field);
  61 #define CHAR_FIELD(klass, name) FIELD(klass, name, "C", false)
  62 #define INT_FIELD(klass, name) FIELD(klass, name, "I", false)
  63 #define BOOLEAN_FIELD(klass, name) FIELD(klass, name, "Z", false)
  64 #define LONG_FIELD(klass, name) FIELD(klass, name, "J", false)
  65 #define FLOAT_FIELD(klass, name) FIELD(klass, name, "F", false)
  66 #define OOP_FIELD(klass, name, signature) FIELD(klass, name, signature, false)
  67 #define STATIC_OOP_FIELD(klass, name, signature) FIELD(klass, name, signature, true)
  68 #define STATIC_INT_FIELD(klass, name) FIELD(klass, name, "I", true)
  69 #define STATIC_BOOLEAN_FIELD(klass, name) FIELD(klass, name, "Z", true)
  70 
  71 
  72 void JVMCIJavaClasses::compute_offsets() {
  73   COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, OOP_FIELD, OOP_FIELD, STATIC_OOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD)
  74   guarantee(InstalledCode::_address_offset == sizeof(oopDesc), "codeBlob must be first field!");
  75 }
  76 
  77 #define EMPTY0
  78 #define EMPTY1(x)
  79 #define EMPTY2(x,y)
  80 #define FIELD2(klass, name) int klass::_##name##_offset = 0;
  81 #define FIELD3(klass, name, sig) FIELD2(klass, name)
  82 
  83 COMPILER_CLASSES_DO(EMPTY1, EMPTY0, FIELD2, FIELD2, FIELD2, FIELD2, FIELD2, FIELD3, FIELD3, FIELD3, FIELD3, FIELD3, FIELD2, FIELD2)
  84 
  85 
  86 
  87 
  88 


  54 // This piece of macro magic creates the contents of the jvmci_compute_offsets method that initializes the field indices of all the access classes.
  55 
  56 #define START_CLASS(name) { Klass* k = SystemDictionary::name##_klass(); assert(k != NULL, "Could not find class " #name "");
  57 
  58 #define END_CLASS }
  59 
  60 #define FIELD(klass, name, signature, static_field) compute_offset(klass::_##name##_offset, k, #name, signature, static_field);
  61 #define CHAR_FIELD(klass, name) FIELD(klass, name, "C", false)
  62 #define INT_FIELD(klass, name) FIELD(klass, name, "I", false)
  63 #define BOOLEAN_FIELD(klass, name) FIELD(klass, name, "Z", false)
  64 #define LONG_FIELD(klass, name) FIELD(klass, name, "J", false)
  65 #define FLOAT_FIELD(klass, name) FIELD(klass, name, "F", false)
  66 #define OOP_FIELD(klass, name, signature) FIELD(klass, name, signature, false)
  67 #define STATIC_OOP_FIELD(klass, name, signature) FIELD(klass, name, signature, true)
  68 #define STATIC_INT_FIELD(klass, name) FIELD(klass, name, "I", true)
  69 #define STATIC_BOOLEAN_FIELD(klass, name) FIELD(klass, name, "Z", true)
  70 
  71 
  72 void JVMCIJavaClasses::compute_offsets() {
  73   COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, OOP_FIELD, OOP_FIELD, STATIC_OOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD, STATIC_BOOLEAN_FIELD)

  74 }
  75 
  76 #define EMPTY0
  77 #define EMPTY1(x)
  78 #define EMPTY2(x,y)
  79 #define FIELD2(klass, name) int klass::_##name##_offset = 0;
  80 #define FIELD3(klass, name, sig) FIELD2(klass, name)
  81 
  82 COMPILER_CLASSES_DO(EMPTY1, EMPTY0, FIELD2, FIELD2, FIELD2, FIELD2, FIELD2, FIELD3, FIELD3, FIELD3, FIELD3, FIELD3, FIELD2, FIELD2)
  83 
  84 
  85 
  86 
  87 
< prev index next >