diff src/share/vm/graal/graalCompilerToVM.cpp @ 15052:5e6f29f287d6

added InstanceKlass::_graal_node_class field to accelerate Node.getNodeClass()
author Doug Simon <doug.simon@oracle.com>
date Thu, 10 Apr 2014 00:01:30 +0200
parents aa1a43bfdf4e
children d4a9d6f6e57d
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Wed Apr 09 23:48:22 2014 +0200
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Thu Apr 10 00:01:30 2014 +0200
@@ -727,11 +727,21 @@
   HotSpotInstalledCode::set_codeBlob(hotspotInstalledCode, 0);
 C2V_END
 
+C2V_VMENTRY(jobject, getJavaMirror, (JNIEnv *env, jobject, jlong metaspace_klass))
+  Klass* klass = asKlass(metaspace_klass);
+  return JNIHandles::make_local(klass->java_mirror());
+C2V_END
 
-C2V_VMENTRY(jobject, readUnsafeUncompressedPointer, (JNIEnv *env, jobject, jobject o, jlong offset))
-  oop resolved_o = JNIHandles::resolve(o);
-  address addr = ((address)resolved_o) + offset;
-  return JNIHandles::make_local(*((oop*)addr));
+C2V_VMENTRY(jobject, getNodeClass, (JNIEnv *env, jobject, jobject java_class_handle))
+  oop java_class = JNIHandles::resolve(java_class_handle);
+  InstanceKlass* iklass = (InstanceKlass*) java_lang_Class::as_Klass(java_class);
+  return JNIHandles::make_local(iklass->graal_node_class());
+C2V_END
+
+C2V_VMENTRY(void, setNodeClass, (JNIEnv *env, jobject, jobject java_class_handle, jobject value))
+  oop java_class = JNIHandles::resolve(java_class_handle);
+  InstanceKlass* iklass = (InstanceKlass*) java_lang_Class::as_Klass(java_class);
+  iklass->set_graal_node_class(JNIHandles::resolve(value));
 C2V_END
 
 C2V_VMENTRY(jlong, readUnsafeKlassPointer, (JNIEnv *env, jobject, jobject o))
@@ -787,6 +797,7 @@
 #define HS_COMPILED_CODE      "Lcom/oracle/graal/hotspot/HotSpotCompiledCode;"
 #define HS_CONFIG             "Lcom/oracle/graal/hotspot/HotSpotVMConfig;"
 #define HS_INSTALLED_CODE     "Lcom/oracle/graal/hotspot/meta/HotSpotInstalledCode;"
+#define NODE_CLASS            "Lcom/oracle/graal/graph/NodeClass;"
 #define METASPACE_KLASS       "J"
 #define METASPACE_METHOD      "J"
 #define METASPACE_METHOD_DATA "J"
@@ -835,7 +846,9 @@
   {CC"getLocalVariableTableLength",                  CC"("METASPACE_METHOD")I",                                        FN_PTR(getLocalVariableTableLength)},
   {CC"reprofile",                                    CC"("METASPACE_METHOD")V",                                        FN_PTR(reprofile)},
   {CC"invalidateInstalledCode",                      CC"("HS_INSTALLED_CODE")V",                                       FN_PTR(invalidateInstalledCode)},
-  {CC"readUnsafeUncompressedPointer",                CC"("OBJECT"J)"OBJECT,                                            FN_PTR(readUnsafeUncompressedPointer)},
+  {CC"getJavaMirror",                                CC"("METASPACE_KLASS")"CLASS,                                     FN_PTR(getJavaMirror)},
+  {CC"getNodeClass",                                 CC"("CLASS")"NODE_CLASS,                                          FN_PTR(getNodeClass)},
+  {CC"setNodeClass",                                 CC"("CLASS NODE_CLASS")V",                                        FN_PTR(setNodeClass)},
   {CC"readUnsafeKlassPointer",                       CC"("OBJECT")J",                                                  FN_PTR(readUnsafeKlassPointer)},
   {CC"collectCounters",                              CC"()[J",                                                         FN_PTR(collectCounters)},
   {CC"getGPUs",                                      CC"()"STRING,                                                     FN_PTR(getGPUs)},