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
|