diff src/share/vm/c1x/c1x_VMEntries.cpp @ 1422:3483ec571caf

* using reflected objects instead of oops * removed scratch from allocatable registers * instanceof xir snippet * arraylength xir snippet * exceptionobject xir snippet * VMEntries and VMExits as interfaces * calls to VMEntries and VMExits are routet through logging proxies
author Lukas Stadler <lukas.stadler@oracle.com>
date Mon, 02 Aug 2010 15:44:38 -0700
parents 6223633ce7dd
children 760213a60e8b
line wrap: on
line diff
--- a/src/share/vm/c1x/c1x_VMEntries.cpp	Fri Jul 23 15:53:02 2010 -0700
+++ b/src/share/vm/c1x/c1x_VMEntries.cpp	Mon Aug 02 15:44:38 2010 -0700
@@ -30,10 +30,10 @@
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiMethod_code
-* Signature: (Ljava/lang/Object;)[B
+* Signature: (Ljava/lang/reflect/Method;)[B
 */
 JNIEXPORT jbyteArray JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1code(JNIEnv *env, jobject, jobject method) {
-  methodOop m = (methodOop)JNIHandles::resolve(method);
+  methodOop m = C1XObjects::getInternalMethod(method);
   int code_size = m->code_size();
   jbyteArray result = env->NewByteArray(code_size);
   env->SetByteArrayRegion(result, 0, code_size, (const jbyte *)m->code_base());
@@ -43,53 +43,59 @@
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiMethod_maxStackSize
-* Signature: (Ljava/lang/Object;)I
+* Signature: (Ljava/lang/reflect/Method;)I
 */
 JNIEXPORT jint JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxStackSize(JNIEnv *, jobject, jobject method) {
-  methodOop m = (methodOop)JNIHandles::resolve(method);
-  return m->max_stack();
+  return C1XObjects::getInternalMethod(method)->max_stack();
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiMethod_maxLocals
-* Signature: (Ljava/lang/Object;)I
+* Signature: (Ljava/lang/reflect/Method;)I
 */
 JNIEXPORT jint JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxLocals(JNIEnv *, jobject, jobject method) {
-  methodOop m = (methodOop)JNIHandles::resolve(method);
-  return m->max_locals();
+  return C1XObjects::getInternalMethod(method)->max_locals();
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiMethod_holder
-* Signature: (Ljava/lang/Object;)Lcom/sun/cri/ri/RiType;
+* Signature: (Ljava/lang/reflect/Method;)Lcom/sun/cri/ri/RiType;
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1holder(JNIEnv *, jobject, jobject method) {
   VM_ENTRY_MARK
-  methodOop m = (methodOop)JNIHandles::resolve(method);
-  klassOop k = m->method_holder();
-  return JNIHandles::make_local(Thread::current(), C1XCompiler::get_RiType(k));
+  oop holder = VMExits::createRiType(C1XObjects::getInternalMethod(method)->method_holder(), THREAD);
+  return JNIHandles::make_local(THREAD, holder);
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiMethod_signature
-* Signature: (Ljava/lang/Object;)Lcom/sun/cri/ri/RiSignature;
+* Signature: (Ljava/lang/reflect/Method;)Lcom/sun/cri/ri/RiSignature;
 */
 JNIEXPORT jstring JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1signature(JNIEnv *env, jobject, jobject method) {
-  methodOop m = (methodOop)JNIHandles::resolve(method);
-  return env->NewStringUTF(m->signature()->as_utf8());
+  VM_ENTRY_MARK
+  return (jstring)JNIHandles::make_local(java_lang_String::create_from_symbol(C1XObjects::getInternalMethod(method)->signature(), Thread::current())());
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiMethod_name
-* Signature: (Ljava/lang/Object;)Ljava/lang/String;
+* Signature: (Ljava/lang/reflect/Method;)Ljava/lang/String;
 */
 JNIEXPORT jstring JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1name(JNIEnv *env, jobject, jobject method) {
-  methodOop m = (methodOop)JNIHandles::resolve(method);
-  return env->NewStringUTF(m->name()->as_utf8());
+  VM_ENTRY_MARK
+  return (jstring)JNIHandles::make_local(java_lang_String::create_from_symbol(C1XObjects::getInternalMethod(method)->name(), Thread::current())());
+}
+
+/*
+* Class:     com_sun_hotspot_c1x_VMEntries
+* Method:    RiMethod_accessFlags
+* Signature: (Ljava/lang/reflect/Method;)I
+*/
+JNIEXPORT jint JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1accessFlags(JNIEnv *, jobject, jobject method) {
+  return C1XObjects::getInternalMethod(method)->access_flags().as_int();
 }
 
 /*
@@ -99,69 +105,36 @@
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType(JNIEnv *, jobject, jstring name, jobject accessor) {
   VM_ENTRY_MARK
-  klassOop k = (klassOop)JNIHandles::resolve(accessor);
-  oop n = JNIHandles::resolve_external_guard(name);
+  klassOop k = C1XObjects::getInternalClass(accessor);
+  oop n = JNIHandles::resolve(name);
   if (n == NULL) {
     THROW_MSG_(vmSymbols::java_lang_NullPointerException(), "Name must not be null.", NULL);
   }
-  char* utf8 = java_lang_String::as_utf8_string(n);
-  symbolOop symbol = oopFactory::new_symbol(utf8, java_lang_String::length(n), THREAD);
-  oop result = C1XCompiler::get_RiType(symbol, k);
+  oop result = C1XCompiler::get_RiType(n, k, THREAD);
   return JNIHandles::make_local(THREAD, result);
 }
 
-/*
-* Class:     com_sun_hotspot_c1x_VMEntries
-* Method:    RiSignature_symbolToString
-* Signature: (Ljava/lang/Object;)Ljava/lang/String;
-*/
-JNIEXPORT jstring JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1symbolToString(JNIEnv *env, jobject, jobject symbol) {
-  symbolOop s = (symbolOop)JNIHandles::resolve(symbol);
-  return env->NewStringUTF(s->as_utf8());
-}
-
-/*
-* Class:     com_sun_hotspot_c1x_VMEntries
-* Method:    RiType_javaClass
-* Signature: (Ljava/lang/Object;)Ljava/lang/Class;
-*/
-JNIEXPORT jclass JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1javaClass(JNIEnv *, jobject, jobject klass) {
-  klassOop k = (klassOop)JNIHandles::resolve(klass);
-  oop result = k->klass_part()->java_mirror();
-  return (jclass) JNIHandles::make_local(Thread::current(), result);
-}
-
-/*
-* Class:     com_sun_hotspot_c1x_VMEntries
-* Method:    RiType_name
-* Signature: (Ljava/lang/Object;)Ljava/lang/String;
-*/
-JNIEXPORT jstring JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1name(JNIEnv *env, jobject, jobject klass) {
-  klassOop k = (klassOop)JNIHandles::resolve(klass);
-  return env->NewStringUTF(k->klass_part()->name()->as_utf8());
-}
-
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiConstantPool_lookupConstant
-* Signature: (Ljava/lang/Object;I)Ljava/lang/Object;
+* Signature: (Ljava/lang/Class;I)Ljava/lang/Object;
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupConstant(JNIEnv *env, jobject, jobject cpHandle, jint index) {
-
   VM_ENTRY_MARK;
-  constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cpHandle);
+  klassOop klass = C1XObjects::getInternalClass(cpHandle);
+  constantPoolOop cp = instanceKlass::cast(klass)->constants();
 
   oop result = NULL;
   constantTag tag = cp->tag_at(index);
   if (tag.is_int()) {
-    result = VMExits::createCiConstantInt(cp->int_at(index));
+    result = VMExits::createCiConstantInt(cp->int_at(index), CHECK_0);
   } else if (tag.is_long()) {
-    result = VMExits::createCiConstantLong(cp->long_at(index));
+    result = VMExits::createCiConstantLong(cp->long_at(index), CHECK_0);
   } else if (tag.is_float()) {
-    result = VMExits::createCiConstantFloat(cp->float_at(index));
+    result = VMExits::createCiConstantFloat(cp->float_at(index), CHECK_0);
   } else if (tag.is_double()) {
-    result = VMExits::createCiConstantDouble(cp->double_at(index));
+    result = VMExits::createCiConstantDouble(cp->double_at(index), CHECK_0);
   } else if (tag.is_string() || tag.is_unresolved_string()) {
     oop string = NULL;
     if (cp->is_pseudo_string_at(index)) {
@@ -175,7 +148,7 @@
         return NULL;
       }
     }
-    result = VMExits::createCiConstantObject(string);
+    result = VMExits::createCiConstantObject(string, CHECK_0);
   } else if (tag.is_klass() || tag.is_unresolved_klass()) {
     
     // TODO: Return RiType object
@@ -194,7 +167,7 @@
   } else if (tag.is_object()) {
     oop obj = cp->object_at(index);
     assert(obj->is_instance(), "must be an instance");
-    result = VMExits::createCiConstantObject(obj);
+    result = VMExits::createCiConstantObject(obj, CHECK_0);
   } else {
     ShouldNotReachHere();
   }
@@ -209,11 +182,13 @@
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupMethod(JNIEnv *env, jobject, jobject cpHandle, jint index, jbyte byteCode) {
   VM_ENTRY_MARK;
-  constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cpHandle);
+  klassOop klass = C1XObjects::getInternalClass(cpHandle);
+  constantPoolOop cp = instanceKlass::cast(klass)->constants();
+//  assert(cp->tag_at(cp->cache() != NULL ? cp->cache()->entry_at(index)->constant_pool_index() : index).is_method(), "reading field from non-field cp index");
   Bytecodes::Code bc = (Bytecodes::Code)(((int)byteCode) & 0xFF);
   ciInstanceKlass* loading_klass = (ciInstanceKlass *)CURRENT_ENV->get_object(cp->pool_holder());
   ciMethod *method = CURRENT_ENV->get_method_by_index(cp, index, bc, loading_klass);
-  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiMethod(method));
+  return JNIHandles::make_local(THREAD, VMExits::createRiMethod((methodOop)method->get_oop(), THREAD));
 }
 
 /*
@@ -233,11 +208,12 @@
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupType(JNIEnv *env, jobject, jobject cpHandle, jint index) {
   VM_ENTRY_MARK;
-  constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cpHandle);
-  ciInstanceKlass* loading_klass = (ciInstanceKlass *)CURRENT_ENV->get_object(cp->pool_holder());
+  klassOop cpKlass = C1XObjects::getInternalClass(cpHandle);
+  constantPoolOop cp = instanceKlass::cast(cpKlass)->constants();
+  ciInstanceKlass* loading_klass = (ciInstanceKlass *)CURRENT_ENV->get_object(cpKlass);
   bool is_accessible = false;
   ciKlass *klass = CURRENT_ENV->get_klass_by_index(cp, index, is_accessible, loading_klass);
-  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiType(klass));
+  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiType(klass, cpKlass, THREAD));
 
 }
 
@@ -248,77 +224,55 @@
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupField(JNIEnv *env, jobject, jobject cpHandle, jint index) {
   VM_ENTRY_MARK;
-  constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cpHandle);
+  klassOop klass = C1XObjects::getInternalClass(cpHandle);
+  constantPoolOop cp = instanceKlass::cast(klass)->constants();
+//  assert(cp->tag_at(cp->cache() != NULL ? cp->cache()->entry_at(index)->constant_pool_index() : index).is_field(), "reading field from non-field cp index");
   ciInstanceKlass* loading_klass = (ciInstanceKlass *)CURRENT_ENV->get_object(cp->pool_holder());
   ciField *field = CURRENT_ENV->get_field_by_index(loading_klass, index);
-  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiField(field));
+  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiField(field, THREAD));
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
-* Method:    findRiType
-* Signature: (Ljava/lang/Object;)Lcom/sun/cri/ri/RiType;
+* Method:    RiType_name
+* Signature: (Ljava/lang/Class;)Ljava/lang/String;
 */
-JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_findRiType(JNIEnv *, jobject, jobject klass) {
-  VM_ENTRY_MARK;
-  klassOop o = (klassOop)JNIHandles::resolve(klass);
-  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiType(o));
-}
-
-/*
-* Class:     com_sun_hotspot_c1x_VMEntries
-* Method:    RiRuntime_getConstantPool
-* Signature: (Ljava/lang/Object;)Lcom/sun/cri/ri/RiConstantPool;
-*/
-JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiRuntime_1getConstantPool(JNIEnv *, jobject, jobject klass) {
-  VM_ENTRY_MARK;
-  klassOop o = (klassOop)JNIHandles::resolve(klass);
-  return JNIHandles::make_local(THREAD, C1XCompiler::get_RiConstantPool(((instanceKlass*)o->klass_part())->constants()));
+JNIEXPORT jstring JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1name(JNIEnv *env, jobject, jobject klass) {
+  VM_ENTRY_MARK
+  klassOop k = C1XObjects::getInternalClass(klass);
+  return (jstring)JNIHandles::make_local(java_lang_String::create_from_symbol(k->klass_part()->name(), Thread::current())());
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiType_isArrayClass
-* Signature: (Ljava/lang/Object;)Z
+* Signature: (Ljava/lang/Class;)Z
 */
 JNIEXPORT jboolean JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1isArrayClass(JNIEnv *, jobject, jobject klass) {
-  klassOop o = (klassOop)JNIHandles::resolve(klass);
-  o->print();
-  bool result = o->klass_part()->oop_is_array();
-  tty->print_cr("result=%d", (int)result);
-  return result;
+  klassOop o = C1XObjects::getInternalClass(klass);
+  return o->klass_part()->oop_is_array();
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiType_isInstanceClass
-* Signature: (Ljava/lang/Object;)Z
+* Signature: (Ljava/lang/Class;)Z
 */
 JNIEXPORT jboolean JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1isInstanceClass(JNIEnv *, jobject, jobject klass) {
-  klassOop o = (klassOop)JNIHandles::resolve(klass);
+  klassOop o = C1XObjects::getInternalClass(klass);
   return o->klass_part()->oop_is_instanceKlass();
 }
 
 /*
 * Class:     com_sun_hotspot_c1x_VMEntries
 * Method:    RiType_isInterface
-* Signature: (Ljava/lang/Object;)Z
+* Signature: (Ljava/lang/Class;)Z
 */
 JNIEXPORT jboolean JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiType_1isInterface(JNIEnv *, jobject, jobject klass) {
-  klassOop o = (klassOop)JNIHandles::resolve(klass);
+  klassOop o = C1XObjects::getInternalClass(klass);
   return o->klass_part()->is_interface();
 }
 
-/*
-* Class:     com_sun_hotspot_c1x_VMEntries
-* Method:    RiMethod_accessFlags
-* Signature: (Ljava/lang/Object;)I
-*/
-JNIEXPORT jint JNICALL Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1accessFlags(JNIEnv *, jobject, jobject method) {
-  methodOop m = (methodOop)JNIHandles::resolve(method);
-  return m->access_flags().as_int();
-}
-
 
 // helpers used to set fields in the HotSpotVMConfig object
 jfieldID getFieldID(JNIEnv* env, jobject obj, const char* name, const char* sig) {
@@ -372,7 +326,7 @@
   void initialize() {
     HotSpotType = java_lang_Class::as_klassOop(JNIHandles::resolve(jniHotSpotType));
     HotSpotTargetMethod = java_lang_Class::as_klassOop(JNIHandles::resolve(jniHotSpotTargetMethod));
-    HotSpotType_klassOop = compute_offset(HotSpotType, "klassOop", "Ljava/lang/Object;");
+    HotSpotType_klassOop = compute_offset(HotSpotType, "klass", "Ljava/lang/Class;");
   }
 };
 
@@ -387,12 +341,15 @@
 JNIEXPORT void JNICALL Java_com_sun_hotspot_c1x_VMEntries_installCode(JNIEnv *jniEnv, jobject, jobject targetMethod) {
   TypeHelper types(jniEnv);
 
-  methodOop m = (methodOop)JNIHandles::resolve(get_object(jniEnv, targetMethod, "methodOop"));
+  methodOop m = C1XObjects::getInternalMethod(get_object(jniEnv, targetMethod, "method", "Ljava/lang/reflect/Method;"));
   jbyteArray code = (jbyteArray)get_object(jniEnv, targetMethod, "code", "[B");
+  jint codeSize = get_int(jniEnv, targetMethod, "codeSize");
   jintArray relocationOffsetsObj = (jintArray)get_object(jniEnv, targetMethod, "relocationOffsets", "[I");
   jobjectArray relocationDataObj = (jobjectArray)get_object(jniEnv, targetMethod, "relocationData", "[Ljava/lang/Object;");
   jint frameSize = get_int(jniEnv, targetMethod, "frameSize");
 
+  assert(codeSize > 0 && codeSize <= ((arrayOop)JNIHandles::resolve(code))->length(), "invalid codeSize");
+
   CodeOffsets offsets;
 
   // TODO: This is a hack.. Produce correct entries.
@@ -412,7 +369,6 @@
   env->set_dependencies(new Dependencies(env));
   ciMethod *ciMethodObject = (ciMethod *)env->get_object(m);
 
-  int codeSize = ((arrayOop)JNIHandles::resolve(code))->length();
   int relocationCount = relocationOffsetsObj == NULL ? 0 : ((arrayOop)JNIHandles::resolve(relocationOffsetsObj))->length();
 
   CodeBuffer buffer("c1x nmethod", codeSize, relocationCount * relocInfo::length_limit);
@@ -429,6 +385,7 @@
 
     for (int i=0; i<relocationCount; i++) {
       address inst = (address)instructions->start() + relocationOffsets[i];
+      u_char inst_byte = *inst;
       oop obj = relocationObjects[i];
       assert(obj != NULL, "NULL oop needn't be patched");
 
@@ -440,13 +397,13 @@
           *((int*)operand) = (int)disp;
 
           instructions->relocate(inst, runtime_call_Relocation::spec(), Assembler::call32_operand);
-          tty->print_cr("relocating (Long)");
+          tty->print_cr("relocating (Long) %02x at %016x/%016x", inst_byte, inst, operand);
       } else if (obj->is_a(types.HotSpotType)) {
           address operand = Assembler::locate_operand(inst, Assembler::imm_operand);
 
-          *((oop**)operand) = obj->obj_field_addr<oop>(types.HotSpotType_klassOop);
+          *((jobject*)operand) = JNIHandles::make_local(C1XObjects::getInternalClass(obj->obj_field(types.HotSpotType_klassOop)));
           instructions->relocate(inst, oop_Relocation::spec_for_immediate(), Assembler::imm_operand);
-          tty->print_cr("relocating (HotSpotType)");
+          tty->print_cr("relocating (HotSpotType) %02x at %016x/%016x", inst_byte, inst, operand);
       } else {
           tty->print_cr("unknown relocation type");
       }
@@ -455,6 +412,9 @@
 
   buffer.print();
 
+  address entry = instructions->start() + offsets.value(CodeOffsets::Verified_Entry);
+
+
   OopMapSet oop_map_set;
   ExceptionHandlerTable handler_table;
   ImplicitExceptionTable inc_table;
@@ -471,6 +431,7 @@
 * Signature: ()Lcom/sun/hotspot/c1x/HotSpotVMConfig;
 */
 JNIEXPORT jobject JNICALL Java_com_sun_hotspot_c1x_VMEntries_getConfiguration(JNIEnv *env, jobject) {
+  tty->print_cr("Java_com_sun_hotspot_c1x_VMEntries_getConfiguration");
   jclass klass = env->FindClass("com/sun/hotspot/c1x/HotSpotVMConfig");
   assert(klass != NULL, "HotSpot vm config class not found");
   jobject config = env->AllocObject(klass);
@@ -483,6 +444,7 @@
   set_int(env, config, "vmPageSize", os::vm_page_size());
   set_int(env, config, "stackShadowPages", StackShadowPages);
   set_int(env, config, "hubOffset", oopDesc::klass_offset_in_bytes());
+  set_int(env, config, "arrayLengthOffset", arrayOopDesc::length_offset_in_bytes());
   set_long(env, config, "instanceofStub", (long)Runtime1::entry_for(Runtime1::slow_subtype_check_id));
   set_long(env, config, "debugStub", (long)warning);
   return config;
@@ -490,26 +452,23 @@
 
 
 JNINativeMethod VMEntries_methods[] = {
-  {CC"RiMethod_code",                   CC"(Ljava/lang/Object;)[B",                                                 FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1code)},
-  {CC"RiMethod_maxStackSize",           CC"(Ljava/lang/Object;)I",                                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxStackSize)},
-  {CC"RiMethod_maxLocals",              CC"(Ljava/lang/Object;)I",                                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxLocals)},
-  {CC"RiMethod_holder",                 CC"(Ljava/lang/Object;)Lcom/sun/cri/ri/RiType;",                            FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1holder)},
-  {CC"RiMethod_signature",              CC"(Ljava/lang/Object;)Ljava/lang/String;",                                 FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1signature)},
-  {CC"RiMethod_name",                   CC"(Ljava/lang/Object;)Ljava/lang/String;",                                 FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1name)},
-  {CC"RiSignature_lookupType",          CC"(Ljava/lang/String;Ljava/lang/Object;)Lcom/sun/cri/ri/RiType;",          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType)},
-  {CC"RiSignature_symbolToString",      CC"(Ljava/lang/Object;)Ljava/lang/String;",                                 FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1symbolToString)},
-  {CC"RiType_javaClass",                CC"(Ljava/lang/Object;)Ljava/lang/Class;",                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1javaClass)},
-  {CC"RiType_name",                     CC"(Ljava/lang/Object;)Ljava/lang/String;",                                 FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1name)},
-  {CC"RiConstantPool_lookupConstant",   CC"(Ljava/lang/Object;I)Ljava/lang/Object;",                                FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupConstant)},
-  {CC"RiConstantPool_lookupMethod",     CC"(Ljava/lang/Object;IB)Lcom/sun/cri/ri/RiMethod;",                        FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupMethod)},
-  {CC"RiConstantPool_lookupSignature",  CC"(Ljava/lang/Object;I)Lcom/sun/cri/ri/RiSignature;",                      FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupSignature)},
-  {CC"RiConstantPool_lookupType",       CC"(Ljava/lang/Object;I)Lcom/sun/cri/ri/RiType;",                           FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupType)},
-  {CC"RiConstantPool_lookupField",      CC"(Ljava/lang/Object;I)Lcom/sun/cri/ri/RiField;",                          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupField)},
-  {CC"RiRuntime_getConstantPool",       CC"(Ljava/lang/Object;)Lcom/sun/cri/ri/RiConstantPool;",                    FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiRuntime_1getConstantPool)},
-  {CC"RiType_isArrayClass",             CC"(Ljava/lang/Object;)Z",                                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1isArrayClass)},
-  {CC"RiType_isInstanceClass",          CC"(Ljava/lang/Object;)Z",                                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1isInstanceClass)},
-  {CC"RiType_isInterface",              CC"(Ljava/lang/Object;)Z",                                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1isInterface)},
-  {CC"RiMethod_accessFlags",            CC"(Ljava/lang/Object;)I",                                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1accessFlags)},
+  {CC"RiMethod_code",                   CC"(Ljava/lang/reflect/Method;)[B",                                         FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1code)},
+  {CC"RiMethod_maxStackSize",           CC"(Ljava/lang/reflect/Method;)I",                                          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxStackSize)},
+  {CC"RiMethod_maxLocals",              CC"(Ljava/lang/reflect/Method;)I",                                          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1maxLocals)},
+  {CC"RiMethod_holder",                 CC"(Ljava/lang/reflect/Method;)Lcom/sun/cri/ri/RiType;",                    FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1holder)},
+  {CC"RiMethod_signature",              CC"(Ljava/lang/reflect/Method;)Ljava/lang/String;",                         FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1signature)},
+  {CC"RiMethod_name",                   CC"(Ljava/lang/reflect/Method;)Ljava/lang/String;",                         FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1name)},
+  {CC"RiMethod_accessFlags",            CC"(Ljava/lang/reflect/Method;)I",                                          FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiMethod_1accessFlags)},
+  {CC"RiSignature_lookupType",          CC"(Ljava/lang/String;Ljava/lang/Class;)Lcom/sun/cri/ri/RiType;",           FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiSignature_1lookupType)},
+  {CC"RiType_name",                     CC"(Ljava/lang/Class;)Ljava/lang/String;",                                  FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1name)},
+  {CC"RiConstantPool_lookupConstant",   CC"(Ljava/lang/Class;I)Ljava/lang/Object;",                                 FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupConstant)},
+  {CC"RiConstantPool_lookupMethod",     CC"(Ljava/lang/Class;IB)Lcom/sun/cri/ri/RiMethod;",                         FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupMethod)},
+  {CC"RiConstantPool_lookupSignature",  CC"(Ljava/lang/Class;I)Lcom/sun/cri/ri/RiSignature;",                       FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupSignature)},
+  {CC"RiConstantPool_lookupType",       CC"(Ljava/lang/Class;I)Lcom/sun/cri/ri/RiType;",                            FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupType)},
+  {CC"RiConstantPool_lookupField",      CC"(Ljava/lang/Class;I)Lcom/sun/cri/ri/RiField;",                           FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiConstantPool_1lookupField)},
+  {CC"RiType_isArrayClass",             CC"(Ljava/lang/Class;)Z",                                                   FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1isArrayClass)},
+  {CC"RiType_isInstanceClass",          CC"(Ljava/lang/Class;)Z",                                                   FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1isInstanceClass)},
+  {CC"RiType_isInterface",              CC"(Ljava/lang/Class;)Z",                                                   FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_RiType_1isInterface)},
   {CC"installCode",                     CC"(Lcom/sun/hotspot/c1x/HotSpotTargetMethod;)V",                           FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_installCode)},
   {CC"getConfiguration",                CC"()Lcom/sun/hotspot/c1x/HotSpotVMConfig;",                                FN_PTR(Java_com_sun_hotspot_c1x_VMEntries_getConfiguration)}
 };