comparison src/share/vm/graal/graalCompilerToVM.cpp @ 15805:dffc37fa7157

initialize HotSpotVMConfig fields efficiently from C++
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Tue, 20 May 2014 13:46:34 -0700
parents fb530b9fa474
children 240cc9a901fb
comparison
equal deleted inserted replaced
15804:bde6fbdbbe38 15805:dffc37fa7157
89 extern uint64_t gHotSpotVMLongConstantEntryNameOffset; 89 extern uint64_t gHotSpotVMLongConstantEntryNameOffset;
90 extern uint64_t gHotSpotVMLongConstantEntryValueOffset; 90 extern uint64_t gHotSpotVMLongConstantEntryValueOffset;
91 extern uint64_t gHotSpotVMLongConstantEntryArrayStride; 91 extern uint64_t gHotSpotVMLongConstantEntryArrayStride;
92 } 92 }
93 93
94 // helpers used to set fields in the HotSpotVMConfig object 94 C2V_VMENTRY(void, initializeConfiguration, (JNIEnv *env, jobject, jobject config))
95 static jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) { 95 VMStructs::initHotSpotVMConfig(env, config);
96 jfieldID id = env->GetFieldID(env->GetObjectClass(obj), name, sig);
97 if (id == NULL) {
98 fatal(err_msg("field not found: %s (%s)", name, sig));
99 }
100 return id;
101 }
102
103 C2V_ENTRY(void, initializeConfiguration, (JNIEnv *env, jobject, jobject config))
104
105 #define set_boolean(name, value) do { env->SetBooleanField(config, getFieldID(env, config, name, "Z"), value); } while (0)
106 #define set_int(name, value) do { env->SetIntField(config, getFieldID(env, config, name, "I"), value); } while (0)
107 #define set_long(name, value) do { env->SetLongField(config, getFieldID(env, config, name, "J"), value); } while (0)
108 #define set_address(name, value) do { set_long(name, (jlong) value); } while (0)
109
110 guarantee(HeapWordSize == sizeof(char*), "Graal assumption that HeadWordSize == machine word size is wrong");
111
112 set_address("gHotSpotVMStructs", gHotSpotVMStructs);
113 set_long("gHotSpotVMStructEntryTypeNameOffset", gHotSpotVMStructEntryTypeNameOffset);
114 set_long("gHotSpotVMStructEntryFieldNameOffset", gHotSpotVMStructEntryFieldNameOffset);
115 set_long("gHotSpotVMStructEntryTypeStringOffset", gHotSpotVMStructEntryTypeStringOffset);
116 set_long("gHotSpotVMStructEntryIsStaticOffset", gHotSpotVMStructEntryIsStaticOffset);
117 set_long("gHotSpotVMStructEntryOffsetOffset", gHotSpotVMStructEntryOffsetOffset);
118 set_long("gHotSpotVMStructEntryAddressOffset", gHotSpotVMStructEntryAddressOffset);
119 set_long("gHotSpotVMStructEntryArrayStride", gHotSpotVMStructEntryArrayStride);
120
121 set_address("gHotSpotVMTypes", gHotSpotVMTypes);
122 set_long("gHotSpotVMTypeEntryTypeNameOffset", gHotSpotVMTypeEntryTypeNameOffset);
123 set_long("gHotSpotVMTypeEntrySuperclassNameOffset", gHotSpotVMTypeEntrySuperclassNameOffset);
124 set_long("gHotSpotVMTypeEntryIsOopTypeOffset", gHotSpotVMTypeEntryIsOopTypeOffset);
125 set_long("gHotSpotVMTypeEntryIsIntegerTypeOffset", gHotSpotVMTypeEntryIsIntegerTypeOffset);
126 set_long("gHotSpotVMTypeEntryIsUnsignedOffset", gHotSpotVMTypeEntryIsUnsignedOffset);
127 set_long("gHotSpotVMTypeEntrySizeOffset", gHotSpotVMTypeEntrySizeOffset);
128 set_long("gHotSpotVMTypeEntryArrayStride", gHotSpotVMTypeEntryArrayStride);
129
130 set_address("gHotSpotVMIntConstants", gHotSpotVMIntConstants);
131 set_long("gHotSpotVMIntConstantEntryNameOffset", gHotSpotVMIntConstantEntryNameOffset);
132 set_long("gHotSpotVMIntConstantEntryValueOffset", gHotSpotVMIntConstantEntryValueOffset);
133 set_long("gHotSpotVMIntConstantEntryArrayStride", gHotSpotVMIntConstantEntryArrayStride);
134
135 set_address("gHotSpotVMLongConstants", gHotSpotVMLongConstants);
136 set_long("gHotSpotVMLongConstantEntryNameOffset", gHotSpotVMLongConstantEntryNameOffset);
137 set_long("gHotSpotVMLongConstantEntryValueOffset", gHotSpotVMLongConstantEntryValueOffset);
138 set_long("gHotSpotVMLongConstantEntryArrayStride", gHotSpotVMLongConstantEntryArrayStride);
139
140 //------------------------------------------------------------------------------------------------
141
142 set_int("arrayLengthOffset", arrayOopDesc::length_offset_in_bytes());
143
144 set_int("extraStackEntries", Method::extra_stack_entries());
145
146 set_int("tlabAlignmentReserve", (int32_t)ThreadLocalAllocBuffer::alignment_reserve());
147 set_long("heapTopAddress", (jlong)(address) Universe::heap()->top_addr());
148 set_long("heapEndAddress", (jlong)(address) Universe::heap()->end_addr());
149
150 set_boolean("inlineContiguousAllocationSupported", !CMSIncrementalMode && Universe::heap()->supports_inline_contig_alloc());
151
152 set_long("verifyOopMask", Universe::verify_oop_mask());
153 set_long("verifyOopBits", Universe::verify_oop_bits());
154
155 set_int("instanceKlassVtableStartOffset", InstanceKlass::vtable_start_offset() * HeapWordSize);
156
157 //------------------------------------------------------------------------------------------------
158
159 set_address("registerFinalizerAddress", SharedRuntime::register_finalizer);
160 set_address("exceptionHandlerForReturnAddressAddress", SharedRuntime::exception_handler_for_return_address);
161 set_address("osrMigrationEndAddress", SharedRuntime::OSR_migration_end);
162
163 set_address("javaTimeMillisAddress", CAST_FROM_FN_PTR(address, os::javaTimeMillis));
164 set_address("javaTimeNanosAddress", CAST_FROM_FN_PTR(address, os::javaTimeNanos));
165 set_address("arithmeticSinAddress", CAST_FROM_FN_PTR(address, SharedRuntime::dsin));
166 set_address("arithmeticCosAddress", CAST_FROM_FN_PTR(address, SharedRuntime::dcos));
167 set_address("arithmeticTanAddress", CAST_FROM_FN_PTR(address, SharedRuntime::dtan));
168
169 set_address("newInstanceAddress", GraalRuntime::new_instance);
170 set_address("newArrayAddress", GraalRuntime::new_array);
171 set_address("newMultiArrayAddress", GraalRuntime::new_multi_array);
172 set_address("dynamicNewArrayAddress", GraalRuntime::dynamic_new_array);
173 set_address("dynamicNewInstanceAddress", GraalRuntime::dynamic_new_instance);
174 set_address("threadIsInterruptedAddress", GraalRuntime::thread_is_interrupted);
175 set_address("vmMessageAddress", GraalRuntime::vm_message);
176 set_address("identityHashCodeAddress", GraalRuntime::identity_hash_code);
177 set_address("exceptionHandlerForPcAddress", GraalRuntime::exception_handler_for_pc);
178 set_address("monitorenterAddress", GraalRuntime::monitorenter);
179 set_address("monitorexitAddress", GraalRuntime::monitorexit);
180 set_address("createNullPointerExceptionAddress", GraalRuntime::create_null_exception);
181 set_address("createOutOfBoundsExceptionAddress", GraalRuntime::create_out_of_bounds_exception);
182 set_address("logPrimitiveAddress", GraalRuntime::log_primitive);
183 set_address("logObjectAddress", GraalRuntime::log_object);
184 set_address("logPrintfAddress", GraalRuntime::log_printf);
185 set_address("vmErrorAddress", GraalRuntime::vm_error);
186 set_address("loadAndClearExceptionAddress", GraalRuntime::load_and_clear_exception);
187 set_address("writeBarrierPreAddress", GraalRuntime::write_barrier_pre);
188 set_address("writeBarrierPostAddress", GraalRuntime::write_barrier_post);
189 set_address("validateObject", GraalRuntime::validate_object);
190
191 set_address("deoptimizationFetchUnrollInfo", Deoptimization::fetch_unroll_info);
192 set_address("deoptimizationUncommonTrap", Deoptimization::uncommon_trap);
193 set_address("deoptimizationUnpackFrames", Deoptimization::unpack_frames);
194
195 //------------------------------------------------------------------------------------------------
196
197 set_int("graalCountersThreadOffset", in_bytes(JavaThread::graal_counters_offset()));
198 set_int("graalCountersSize", (jint) GraalCounterSize);
199
200 //------------------------------------------------------------------------------------------------
201
202 set_long("dllLoad", (jlong) os::dll_load);
203 set_long("dllLookup", (jlong) os::dll_lookup);
204 #if defined(TARGET_OS_FAMILY_bsd) || defined(TARGET_OS_FAMILY_linux)
205 set_long("rtldDefault", (jlong) RTLD_DEFAULT);
206 #endif
207
208 #undef set_boolean
209 #undef set_int
210 #undef set_long
211 #undef set_address
212
213 C2V_END 96 C2V_END
214 97
215 C2V_ENTRY(jbyteArray, initializeBytecode, (JNIEnv *env, jobject, jlong metaspace_method, jbyteArray result)) 98 C2V_ENTRY(jbyteArray, initializeBytecode, (JNIEnv *env, jobject, jlong metaspace_method, jbyteArray result))
216 methodHandle method = asMethod(metaspace_method); 99 methodHandle method = asMethod(metaspace_method);
217 ResourceMark rm; 100 ResourceMark rm;