Mercurial > hg > graal-compiler
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; |