Mercurial > hg > truffle
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)}, |