diff src/share/vm/graal/graalCompilerToVM.cpp @ 18719:6484e5c068c7

Generalize object reading in HotSpotMemoryAccessProvider.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 18 Dec 2014 15:31:12 +0100
parents a8cff27ca2e1
children 8f2fb6bec986
line wrap: on
line diff
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Thu Dec 18 15:23:08 2014 +0100
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Thu Dec 18 15:31:12 2014 +0100
@@ -699,6 +699,17 @@
   return klass;
 C2V_END
 
+C2V_VMENTRY(jobject, readUnsafeOop, (JNIEnv*, jobject, jobject base, jlong displacement, jboolean compressed))
+  address addr = (address)JNIHandles::resolve(base);
+  oop ret;
+  if (compressed) {
+    ret = oopDesc::load_decode_heap_oop((narrowOop*)(addr + displacement));
+  } else {
+    ret = oopDesc::load_decode_heap_oop((oop*)(addr + displacement));
+  }
+  return JNIHandles::make_local(ret);
+C2V_END
+
 C2V_VMENTRY(jlongArray, collectCounters, (JNIEnv*, jobject))
   typeArrayOop arrayOop = oopFactory::new_longArray(GraalCounterSize, CHECK_NULL);
   JavaThread::collect_counters(arrayOop);
@@ -1078,6 +1089,7 @@
   {CC"invalidateInstalledCode",                      CC"("INSTALLED_CODE")V",                                                  FN_PTR(invalidateInstalledCode)},
   {CC"getJavaMirror",                                CC"("METASPACE_KLASS")"CLASS,                                             FN_PTR(getJavaMirror)},
   {CC"readUnsafeKlassPointer",                       CC"("OBJECT")J",                                                          FN_PTR(readUnsafeKlassPointer)},
+  {CC"readUnsafeOop",                                CC"("OBJECT"JZ)"OBJECT,                                                   FN_PTR(readUnsafeOop)},
   {CC"collectCounters",                              CC"()[J",                                                                 FN_PTR(collectCounters)},
   {CC"getGPUs",                                      CC"()"STRING,                                                             FN_PTR(getGPUs)},
   {CC"allocateCompileId",                            CC"("METASPACE_METHOD"I)I",                                               FN_PTR(allocateCompileId)},