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)},