[vmkit-commits] [vmkit] r185341 - Implemented Unsafe arrayBaseOffset and arrayIndexScale.

Harris Bakiras h.bakiras at gmail.com
Mon Jul 1 09:03:18 PDT 2013


Author: harris
Date: Mon Jul  1 11:03:17 2013
New Revision: 185341

URL: http://llvm.org/viewvc/llvm-project?rev=185341&view=rev
Log:
Implemented Unsafe arrayBaseOffset and arrayIndexScale.

Modified:
    vmkit/trunk/lib/j3/ClassLib/Unsafe.inc

Modified: vmkit/trunk/lib/j3/ClassLib/Unsafe.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Unsafe.inc?rev=185341&r1=185340&r2=185341&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/Unsafe.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/Unsafe.inc Mon Jul  1 11:03:17 2013
@@ -80,8 +80,10 @@ JavaObject* unsafe, JavaObjectField* _fi
 ///
 JNIEXPORT jlong JNICALL Java_sun_misc_Unsafe_arrayBaseOffset(
 JavaObject* unsafe, JavaObject* clazz) {
-  // Array starts at beginning of object
-  return 0;
+  llvm_gcroot(clazz, 0);
+  llvm_gcroot(unsafe, 0);
+  // See JavaArray.h for arrays layout
+  return sizeof(JavaObject) + sizeof(ssize_t);
 }
 
 /// arrayIndexScale - Indexing scale for the element type in
@@ -92,9 +94,23 @@ JavaObject* unsafe, JavaObject* clazz) {
 ///
 JNIEXPORT jlong JNICALL Java_sun_misc_Unsafe_arrayIndexScale(
 JavaObject* unsafe, JavaObject* clazz) {
-  // For now, just return '0', indicating we don't support this indexing.
-  // TODO: Implement this for the array types we /do/ support this way.
-  return 0;
+  JavaObjectClass* jcl = 0;
+  llvm_gcroot(clazz, 0);
+  llvm_gcroot(unsafe, 0);
+  llvm_gcroot(jcl, 0);
+  ClassArray* clArray = 0;
+  int size = 0;
+  
+  UserCommonClass* cl = JavaObjectClass::getClass(jcl = (JavaObjectClass*)clazz);
+  if (cl->isArray()) {
+    clArray = cl->asArrayClass();
+    if(clArray->_baseClass->isPrimitive()) {
+      size = 1 << clArray->_baseClass->asPrimitiveClass()->logSize;
+    } else {
+      size = sizeof(JavaObject*);
+    }
+  }
+  return size;
 }
 
 





More information about the vmkit-commits mailing list