Mercurial > hg > graal-compiler
comparison src/share/vm/graal/graalCompilerToVM.cpp @ 14069:2f37b0e442fe
removed remaining VMToCompiler calls for allocating Graal API objects
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 05 Mar 2014 19:07:29 +0100 |
parents | 361acb279104 |
children | dd783f0ecf17 |
comparison
equal
deleted
inserted
replaced
14068:73f5ddd8414d | 14069:2f37b0e442fe |
---|---|
261 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; | 261 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
262 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); | 262 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); |
263 return JNIHandles::make_local(THREAD, appendix_oop); | 263 return JNIHandles::make_local(THREAD, appendix_oop); |
264 C2V_END | 264 C2V_END |
265 | 265 |
266 C2V_VMENTRY(jobject, lookupMethodInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode)) | 266 C2V_VMENTRY(jlong, lookupMethodInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode, jlongArray unresolvedInfo_handle)) |
267 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; | 267 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
268 instanceKlassHandle pool_holder(cp->pool_holder()); | 268 instanceKlassHandle pool_holder(cp->pool_holder()); |
269 | 269 |
270 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); | 270 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); |
271 | 271 |
272 methodHandle method = GraalEnv::get_method_by_index(cp, index, bc, pool_holder); | 272 methodHandle method = GraalEnv::get_method_by_index(cp, index, bc, pool_holder); |
273 if (!method.is_null()) { | 273 if (!method.is_null()) { |
274 Handle holder = VMToCompiler::createResolvedJavaType(method->method_holder()->java_mirror(), CHECK_NULL); | 274 return (jlong) method(); |
275 return JNIHandles::make_local(THREAD, VMToCompiler::createResolvedJavaMethod(holder, method(), THREAD)); | |
276 } else { | 275 } else { |
277 // Get the method's name and signature. | 276 // Get the unresolved method's name and signature. |
278 Handle name = java_lang_String::create_from_symbol(cp->name_ref_at(index), CHECK_NULL); | 277 typeArrayOop unresolvedInfo = (typeArrayOop) JNIHandles::resolve(unresolvedInfo_handle); |
279 Handle signature = java_lang_String::create_from_symbol(cp->signature_ref_at(index), CHECK_NULL); | 278 assert(unresolvedInfo != NULL && unresolvedInfo->length() == 4, "must be"); |
279 unresolvedInfo->long_at_put(0, (jlong) cp->name_ref_at(index)); | |
280 unresolvedInfo->long_at_put(1, (jlong) cp->signature_ref_at(index)); | |
280 Handle type; | 281 Handle type; |
281 if (bc != Bytecodes::_invokedynamic) { | 282 if (bc != Bytecodes::_invokedynamic) { |
282 int holder_index = cp->klass_ref_index_at(index); | 283 int holder_index = cp->klass_ref_index_at(index); |
283 type = GraalCompiler::get_JavaType(cp, holder_index, cp->pool_holder(), CHECK_NULL); | 284 Symbol* klass_name = NULL; |
285 KlassHandle klass = GraalCompiler::get_Klass(cp, holder_index, cp->pool_holder(), klass_name); | |
286 unresolvedInfo->long_at_put(2, (jlong) klass_name); | |
287 unresolvedInfo->long_at_put(3, (jlong) klass()); | |
284 } else { | 288 } else { |
285 type = Handle(SystemDictionary::MethodHandle_klass()->java_mirror()); | 289 unresolvedInfo->long_at_put(3, (jlong) SystemDictionary::MethodHandle_klass()); |
286 } | 290 } |
287 return JNIHandles::make_local(THREAD, VMToCompiler::createUnresolvedJavaMethod(name, signature, type, THREAD)); | 291 return 0L; |
288 } | 292 } |
289 C2V_END | 293 C2V_END |
290 | 294 |
291 C2V_VMENTRY(jobject, lookupTypeInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index)) | 295 C2V_VMENTRY(jlong, lookupTypeInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jlongArray unresolvedTypeName_handle)) |
292 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; | 296 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; |
293 Handle result = GraalCompiler::get_JavaType(cp, index, cp->pool_holder(), CHECK_NULL); | 297 Symbol* klass_name = NULL; |
294 return JNIHandles::make_local(THREAD, result()); | 298 KlassHandle klass = GraalCompiler::get_Klass(cp, index, cp->pool_holder(), klass_name); |
295 C2V_END | 299 typeArrayOop unresolvedTypeName = (typeArrayOop) JNIHandles::resolve(unresolvedTypeName_handle); |
296 | 300 unresolvedTypeName->long_at_put(0, (jlong) klass_name); |
297 C2V_VMENTRY(void, lookupReferencedTypeInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jbyte op)) | 301 return (jlong) klass(); |
302 C2V_END | |
303 | |
304 C2V_VMENTRY(void, loadReferencedTypeInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jbyte op)) | |
298 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; | 305 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; |
299 Bytecodes::Code bc = (Bytecodes::Code) (((int) op) & 0xFF); | 306 Bytecodes::Code bc = (Bytecodes::Code) (((int) op) & 0xFF); |
300 if (bc != Bytecodes::_checkcast && bc != Bytecodes::_instanceof && bc != Bytecodes::_new && bc != Bytecodes::_anewarray | 307 if (bc != Bytecodes::_checkcast && bc != Bytecodes::_instanceof && bc != Bytecodes::_new && bc != Bytecodes::_anewarray |
301 && bc != Bytecodes::_multianewarray && bc != Bytecodes::_ldc && bc != Bytecodes::_ldc_w && bc != Bytecodes::_ldc2_w) | 308 && bc != Bytecodes::_multianewarray && bc != Bytecodes::_ldc && bc != Bytecodes::_ldc_w && bc != Bytecodes::_ldc2_w) |
302 { | 309 { |
314 InstanceKlass::cast(klass)->initialize(CHECK); | 321 InstanceKlass::cast(klass)->initialize(CHECK); |
315 } | 322 } |
316 } | 323 } |
317 C2V_END | 324 C2V_END |
318 | 325 |
319 C2V_VMENTRY(jobject, lookupFieldInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode)) | 326 C2V_VMENTRY(jboolean, lookupFieldInPool, (JNIEnv *env, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode, jlongArray info_handle)) |
320 ResourceMark rm; | 327 ResourceMark rm; |
321 | 328 |
322 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; | 329 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
323 | 330 |
324 int nt_index = cp->name_and_type_ref_index_at(index); | 331 int nt_index = cp->name_and_type_ref_index_at(index); |
325 int sig_index = cp->signature_ref_index_at(nt_index); | 332 int type_index = cp->signature_ref_index_at(nt_index); |
326 Symbol* signature = cp->symbol_at(sig_index); | 333 Symbol* type_name = cp->symbol_at(type_index); |
327 int name_index = cp->name_ref_index_at(nt_index); | 334 int name_index = cp->name_ref_index_at(nt_index); |
328 Symbol* name = cp->symbol_at(name_index); | 335 Symbol* name = cp->symbol_at(name_index); |
329 int holder_index = cp->klass_ref_index_at(index); | 336 int holder_index = cp->klass_ref_index_at(index); |
330 Handle holder = GraalCompiler::get_JavaType(cp, holder_index, cp->pool_holder(), CHECK_NULL); | 337 Symbol* holder_name = NULL; |
331 instanceKlassHandle holder_klass; | 338 KlassHandle holder = GraalCompiler::get_Klass(cp, holder_index, cp->pool_holder(), holder_name); |
339 KlassHandle type = GraalCompiler::get_KlassFromSignature(type_name, cp->pool_holder()); | |
340 typeArrayOop info = (typeArrayOop) JNIHandles::resolve(info_handle); | |
341 assert(info != NULL && info->length() == 7, "must be"); | |
342 info->long_at_put(0, (jlong) name); | |
343 info->long_at_put(1, (jlong) type_name); | |
344 info->long_at_put(2, (jlong) type()); | |
345 info->long_at_put(3, (jlong) holder_name); | |
346 info->long_at_put(4, (jlong) holder()); | |
332 | 347 |
333 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); | 348 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); |
334 int offset = -1; | 349 if (!holder.is_null()) { |
335 AccessFlags flags; | 350 int offset = -1; |
336 if (holder->klass() == SystemDictionary::HotSpotResolvedObjectType_klass()) { | |
337 fieldDescriptor result; | 351 fieldDescriptor result; |
338 LinkResolver::resolve_field_access(result, cp, index, Bytecodes::java_code(code), true, false, Thread::current()); | 352 LinkResolver::resolve_field_access(result, cp, index, Bytecodes::java_code(code), true, false, Thread::current()); |
339 | 353 |
340 if (HAS_PENDING_EXCEPTION) { | 354 if (HAS_PENDING_EXCEPTION) { |
341 CLEAR_PENDING_EXCEPTION; | 355 CLEAR_PENDING_EXCEPTION; |
342 } else { | 356 } else { |
343 offset = result.offset(); | 357 info->long_at_put(4, (jlong) result.field_holder()); |
344 flags = result.access_flags(); | 358 info->long_at_put(5, (jlong) result.access_flags().as_int()); |
345 holder_klass = result.field_holder(); | 359 info->long_at_put(6, (jlong) result.offset()); |
346 holder = VMToCompiler::createResolvedJavaType(holder_klass->java_mirror(), CHECK_NULL); | 360 return true; |
347 } | 361 } |
348 } | 362 } |
349 | 363 return false; |
350 Handle type = GraalCompiler::get_JavaTypeFromSignature(signature, cp->pool_holder(), CHECK_NULL); | |
351 Handle java_name = java_lang_String::create_from_symbol(name, CHECK_NULL); | |
352 Handle field_handle = VMToCompiler::createJavaField(holder, java_name, type, offset, flags.as_int(), false, CHECK_NULL); | |
353 | |
354 return JNIHandles::make_local(THREAD, field_handle()); | |
355 C2V_END | 364 C2V_END |
356 | 365 |
357 C2V_VMENTRY(jlong, resolveMethod, (JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature)) | 366 C2V_VMENTRY(jlong, resolveMethod, (JNIEnv *, jobject, jobject resolved_type, jstring name, jstring signature)) |
358 assert(JNIHandles::resolve(resolved_type) != NULL, ""); | 367 assert(JNIHandles::resolve(resolved_type) != NULL, ""); |
359 Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(resolved_type)); | 368 Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaClass(resolved_type)); |
864 {CC"shouldInlineMethod", CC"("METASPACE_METHOD")Z", FN_PTR(shouldInlineMethod)}, | 873 {CC"shouldInlineMethod", CC"("METASPACE_METHOD")Z", FN_PTR(shouldInlineMethod)}, |
865 {CC"getCompiledCodeSize", CC"("METASPACE_METHOD")I", FN_PTR(getCompiledCodeSize)}, | 874 {CC"getCompiledCodeSize", CC"("METASPACE_METHOD")I", FN_PTR(getCompiledCodeSize)}, |
866 {CC"lookupType", CC"("STRING CLASS"Z)"METASPACE_KLASS, FN_PTR(lookupType)}, | 875 {CC"lookupType", CC"("STRING CLASS"Z)"METASPACE_KLASS, FN_PTR(lookupType)}, |
867 {CC"lookupConstantInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupConstantInPool)}, | 876 {CC"lookupConstantInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupConstantInPool)}, |
868 {CC"lookupAppendixInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupAppendixInPool)}, | 877 {CC"lookupAppendixInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupAppendixInPool)}, |
869 {CC"lookupMethodInPool", CC"("METASPACE_CONSTANT_POOL"IB)"METHOD, FN_PTR(lookupMethodInPool)}, | 878 {CC"lookupMethodInPool", CC"("METASPACE_CONSTANT_POOL"IB[J)"METASPACE_METHOD, FN_PTR(lookupMethodInPool)}, |
870 {CC"lookupTypeInPool", CC"("METASPACE_CONSTANT_POOL"I)"TYPE, FN_PTR(lookupTypeInPool)}, | 879 {CC"lookupTypeInPool", CC"("METASPACE_CONSTANT_POOL"I[J)"METASPACE_KLASS, FN_PTR(lookupTypeInPool)}, |
871 {CC"lookupReferencedTypeInPool", CC"("METASPACE_CONSTANT_POOL"IB)V", FN_PTR(lookupReferencedTypeInPool)}, | 880 {CC"loadReferencedTypeInPool", CC"("METASPACE_CONSTANT_POOL"IB)V", FN_PTR(loadReferencedTypeInPool)}, |
872 {CC"lookupFieldInPool", CC"("METASPACE_CONSTANT_POOL"IB)"FIELD, FN_PTR(lookupFieldInPool)}, | 881 {CC"lookupFieldInPool", CC"("METASPACE_CONSTANT_POOL"IB[J)Z", FN_PTR(lookupFieldInPool)}, |
873 {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METASPACE_METHOD, FN_PTR(resolveMethod)}, | 882 {CC"resolveMethod", CC"("HS_RESOLVED_TYPE STRING STRING")"METASPACE_METHOD, FN_PTR(resolveMethod)}, |
874 {CC"getClassInitializer", CC"("HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getClassInitializer)}, | 883 {CC"getClassInitializer", CC"("HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getClassInitializer)}, |
875 {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)}, | 884 {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_TYPE")Z", FN_PTR(hasFinalizableSubclass)}, |
876 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, | 885 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, |
877 {CC"getMetaspaceMethod", CC"("CLASS"I)"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, | 886 {CC"getMetaspaceMethod", CC"("CLASS"I)"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, |