comparison src/share/vm/graal/graalCompilerToVM.cpp @ 13258:fdd6ef90d66d

move HotSpotResolvedPrimitiveType's from VMToCompilerImpl to HotSpotGraalRuntime
author twisti
date Sat, 07 Dec 2013 17:11:49 -0800
parents 42aaf7306707
children b16fb0b7479b
comparison
equal deleted inserted replaced
13257:4eacfd0767ed 13258:fdd6ef90d66d
131 env->SetByteArrayRegion(result, 0, code_size, reconstituted_code); 131 env->SetByteArrayRegion(result, 0, code_size, reconstituted_code);
132 132
133 return result; 133 return result;
134 C2V_END 134 C2V_END
135 135
136 C2V_VMENTRY(jstring, getSignature, (JNIEnv *env, jobject, jlong metaspace_method))
137 Method* method = asMethod(metaspace_method);
138 assert(method != NULL && method->signature() != NULL, "signature required");
139 return (jstring)JNIHandles::make_local(java_lang_String::create_from_symbol(method->signature(), THREAD)());
140 C2V_END
141
142 C2V_VMENTRY(jobjectArray, initializeExceptionHandlers, (JNIEnv *, jobject, jlong metaspace_method, jobjectArray java_handlers)) 136 C2V_VMENTRY(jobjectArray, initializeExceptionHandlers, (JNIEnv *, jobject, jlong metaspace_method, jobjectArray java_handlers))
143 ResourceMark rm; 137 ResourceMark rm;
144 methodHandle method = asMethod(metaspace_method); 138 methodHandle method = asMethod(metaspace_method);
145 int handler_count = method->exception_table_length(); 139 int handler_count = method->exception_table_length();
146 objArrayHandle array = (objArrayOop) JNIHandles::resolve(java_handlers); 140 objArrayHandle array = (objArrayOop) JNIHandles::resolve(java_handlers);
304 ResourceMark rm; 298 ResourceMark rm;
305 299
306 Handle name = JNIHandles::resolve(jname); 300 Handle name = JNIHandles::resolve(jname);
307 Symbol* nameSymbol = java_lang_String::as_symbol(name, THREAD); 301 Symbol* nameSymbol = java_lang_String::as_symbol(name, THREAD);
308 assert(nameSymbol != NULL, "name to symbol creation failed"); 302 assert(nameSymbol != NULL, "name to symbol creation failed");
303 assert(nameSymbol->size() > 1, "primitive types should be handled in Java code");
309 304
310 oop result = NULL; 305 oop result = NULL;
311 if (nameSymbol == vmSymbols::int_signature()) { 306 Klass* resolved_type = NULL;
312 result = VMToCompiler::createPrimitiveJavaType((int) T_INT, THREAD); 307 Handle classloader;
313 } else if (nameSymbol == vmSymbols::long_signature()) { 308 Handle protectionDomain;
314 result = VMToCompiler::createPrimitiveJavaType((int) T_LONG, THREAD); 309 if (JNIHandles::resolve(accessingClass) != NULL) {
315 } else if (nameSymbol == vmSymbols::bool_signature()) { 310 classloader = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(accessingClass))->class_loader();
316 result = VMToCompiler::createPrimitiveJavaType((int) T_BOOLEAN, THREAD); 311 protectionDomain = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(accessingClass))->protection_domain();
317 } else if (nameSymbol == vmSymbols::char_signature()) { 312 }
318 result = VMToCompiler::createPrimitiveJavaType((int) T_CHAR, THREAD); 313
319 } else if (nameSymbol == vmSymbols::short_signature()) { 314 if (eagerResolve) {
320 result = VMToCompiler::createPrimitiveJavaType((int) T_SHORT, THREAD); 315 resolved_type = SystemDictionary::resolve_or_fail(nameSymbol, classloader, protectionDomain, true, THREAD);
321 } else if (nameSymbol == vmSymbols::byte_signature()) {
322 result = VMToCompiler::createPrimitiveJavaType((int) T_BYTE, THREAD);
323 } else if (nameSymbol == vmSymbols::double_signature()) {
324 result = VMToCompiler::createPrimitiveJavaType((int) T_DOUBLE, THREAD);
325 } else if (nameSymbol == vmSymbols::float_signature()) {
326 result = VMToCompiler::createPrimitiveJavaType((int) T_FLOAT, THREAD);
327 } else if (nameSymbol == vmSymbols::void_signature()) {
328 result = VMToCompiler::createPrimitiveJavaType((int) T_VOID, THREAD);
329 } else { 316 } else {
330 Klass* resolved_type = NULL; 317 resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD);
331 Handle classloader; 318 }
332 Handle protectionDomain; 319
333 if (JNIHandles::resolve(accessingClass) != NULL) { 320 if (!HAS_PENDING_EXCEPTION) {
334 classloader = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(accessingClass))->class_loader(); 321 if (resolved_type == NULL) {
335 protectionDomain = java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(accessingClass))->protection_domain(); 322 assert(!eagerResolve, "failed eager resolution should have caused an exception");
336 } 323 Handle type = VMToCompiler::createUnresolvedJavaType(name, THREAD);
337 324 result = type();
338 if (eagerResolve) {
339 resolved_type = SystemDictionary::resolve_or_fail(nameSymbol, classloader, protectionDomain, true, THREAD);
340 } else { 325 } else {
341 resolved_type = SystemDictionary::resolve_or_null(nameSymbol, classloader, protectionDomain, THREAD); 326 Handle type = GraalCompiler::createHotSpotResolvedObjectType(resolved_type, name, CHECK_NULL);
342 } 327 result = type();
343
344 if (!HAS_PENDING_EXCEPTION) {
345 if (resolved_type == NULL) {
346 assert(!eagerResolve, "failed eager resolution should have caused an exception");
347 Handle type = VMToCompiler::createUnresolvedJavaType(name, THREAD);
348 result = type();
349 } else {
350 Handle type = GraalCompiler::createHotSpotResolvedObjectType(resolved_type, name, CHECK_NULL);
351 result = type();
352 }
353 } 328 }
354 } 329 }
355 330
356 return JNIHandles::make_local(THREAD, result); 331 return JNIHandles::make_local(THREAD, result);
357 C2V_END 332 C2V_END
358 333
359 C2V_VMENTRY(jobject, lookupConstantInPool, (JNIEnv *env, jobject, jobject type, jint index)) 334 C2V_VMENTRY(jobject, lookupConstantInPool, (JNIEnv *env, jobject, jobject type, jint index))
360 ConstantPool* cp = InstanceKlass::cast(java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(type)))->constants(); 335 ConstantPool* cp = InstanceKlass::cast(java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(type)))->constants();
361 oop result = NULL; 336 oop result = NULL;
362 constantTag tag = cp->tag_at(index); 337 constantTag tag = cp->tag_at(index);
363
364 switch (tag.value()) { 338 switch (tag.value()) {
365 case JVM_CONSTANT_String: 339 case JVM_CONSTANT_String:
366 {
367 result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL); 340 result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL);
368 break; 341 break;
369 }
370
371 case JVM_CONSTANT_MethodHandle: 342 case JVM_CONSTANT_MethodHandle:
372 case JVM_CONSTANT_MethodHandleInError: 343 case JVM_CONSTANT_MethodHandleInError:
373 case JVM_CONSTANT_MethodType: 344 case JVM_CONSTANT_MethodType:
374 case JVM_CONSTANT_MethodTypeInError: 345 case JVM_CONSTANT_MethodTypeInError:
375 {
376 result = cp->resolve_constant_at(index, CHECK_NULL); 346 result = cp->resolve_constant_at(index, CHECK_NULL);
377 break; 347 break;
378 }
379
380 default: 348 default:
381 fatal(err_msg_res("unknown constant pool tag %s at cpi %d in %s", tag.internal_name(), index, cp->pool_holder()->name()->as_C_string())); 349 fatal(err_msg_res("unknown constant pool tag %s at cpi %d in %s", tag.internal_name(), index, cp->pool_holder()->name()->as_C_string()));
382 } 350 }
383
384 return JNIHandles::make_local(THREAD, result); 351 return JNIHandles::make_local(THREAD, result);
385 C2V_END 352 C2V_END
386 353
387 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv *env, jobject, jobject type, jint index, jbyte opcode)) 354 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv *env, jobject, jobject type, jint index, jbyte opcode))
388 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); 355 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF);
389 index = GraalCompiler::to_cp_index(index, bc); 356 index = GraalCompiler::to_cp_index(index, bc);
390 constantPoolHandle cpool(InstanceKlass::cast(java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(type)))->constants()); 357 constantPoolHandle cpool(InstanceKlass::cast(java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(type)))->constants());
391 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, index); 358 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, index);
392
393 return JNIHandles::make_local(THREAD, appendix_oop); 359 return JNIHandles::make_local(THREAD, appendix_oop);
394 C2V_END 360 C2V_END
395 361
396 C2V_VMENTRY(jobject, lookupMethodInPool, (JNIEnv *env, jobject, jobject type, jint index, jbyte opcode)) 362 C2V_VMENTRY(jobject, lookupMethodInPool, (JNIEnv *env, jobject, jobject type, jint index, jbyte opcode))
397 constantPoolHandle cp = InstanceKlass::cast(java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(type)))->constants(); 363 constantPoolHandle cp = InstanceKlass::cast(java_lang_Class::as_Klass(HotSpotResolvedObjectType::javaMirror(type)))->constants();
1024 #define HS_INSTALLED_CODE "Lcom/oracle/graal/hotspot/meta/HotSpotInstalledCode;" 990 #define HS_INSTALLED_CODE "Lcom/oracle/graal/hotspot/meta/HotSpotInstalledCode;"
1025 #define METASPACE_METHOD "J" 991 #define METASPACE_METHOD "J"
1026 992
1027 JNINativeMethod CompilerToVM_methods[] = { 993 JNINativeMethod CompilerToVM_methods[] = {
1028 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)}, 994 {CC"initializeBytecode", CC"("METASPACE_METHOD"[B)[B", FN_PTR(initializeBytecode)},
1029 {CC"getSignature", CC"("METASPACE_METHOD")"STRING, FN_PTR(getSignature)},
1030 {CC"initializeExceptionHandlers", CC"("METASPACE_METHOD EXCEPTION_HANDLERS")"EXCEPTION_HANDLERS, FN_PTR(initializeExceptionHandlers)}, 995 {CC"initializeExceptionHandlers", CC"("METASPACE_METHOD EXCEPTION_HANDLERS")"EXCEPTION_HANDLERS, FN_PTR(initializeExceptionHandlers)},
1031 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, 996 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)},
1032 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)}, 997 {CC"getUniqueConcreteMethod", CC"("METASPACE_METHOD"["HS_RESOLVED_TYPE")"METASPACE_METHOD, FN_PTR(getUniqueConcreteMethod)},
1033 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)}, 998 {CC"getUniqueImplementor", CC"("HS_RESOLVED_TYPE")"RESOLVED_TYPE, FN_PTR(getUniqueImplementor)},
1034 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, 999 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)},