diff src/share/vm/graal/graalJavaAccess.hpp @ 18172:c59612b9d110

Use arrayOop subclasses in graalJavaAccess
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Fri, 24 Oct 2014 12:45:27 -0700
parents 9a804ec7f707
children c2270ad35f57
line wrap: on
line diff
--- a/src/share/vm/graal/graalJavaAccess.hpp	Mon Oct 27 13:37:06 2014 -0700
+++ b/src/share/vm/graal/graalJavaAccess.hpp	Fri Oct 24 12:45:27 2014 -0700
@@ -47,7 +47,7 @@
  *
  */
 
-#define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, static_oop_field, static_int_field) \
+#define COMPILER_CLASSES_DO(start_class, end_class, char_field, int_field, boolean_field, long_field, float_field, oop_field, typeArrayOop_field, objArrayOop_field, static_oop_field, static_int_field) \
   start_class(HotSpotResolvedObjectType)                                                                                                                       \
     oop_field(HotSpotResolvedObjectType, javaClass, "Ljava/lang/Class;")                                                                                       \
   end_class                                                                                                                                                    \
@@ -70,9 +70,9 @@
   end_class                                                                                                                                                    \
   start_class(HotSpotCompiledCode)                                                                                                                             \
     oop_field(HotSpotCompiledCode, comp, "Lcom/oracle/graal/api/code/CompilationResult;")                                                                      \
-    oop_field(HotSpotCompiledCode, sites, "[Lcom/oracle/graal/api/code/CompilationResult$Site;")                                                               \
-    oop_field(HotSpotCompiledCode, exceptionHandlers, "[Lcom/oracle/graal/api/code/CompilationResult$ExceptionHandler;")                                       \
-    oop_field(HotSpotCompiledCode, comments, "[Lcom/oracle/graal/hotspot/HotSpotCompiledCode$Comment;")                                                        \
+    objArrayOop_field(HotSpotCompiledCode, sites, "[Lcom/oracle/graal/api/code/CompilationResult$Site;")                                                       \
+    objArrayOop_field(HotSpotCompiledCode, exceptionHandlers, "[Lcom/oracle/graal/api/code/CompilationResult$ExceptionHandler;")                               \
+    objArrayOop_field(HotSpotCompiledCode, comments, "[Lcom/oracle/graal/hotspot/HotSpotCompiledCode$Comment;")                                                \
     oop_field(HotSpotCompiledCode, dataSection, "Lcom/oracle/graal/hotspot/data/DataSection;")                                                                 \
   end_class                                                                                                                                                    \
   start_class(HotSpotCompiledCode_Comment)                                                                                                                     \
@@ -93,8 +93,8 @@
   end_class                                                                                                                                                    \
   start_class(DataSection)                                                                                                                                     \
     int_field(DataSection, sectionAlignment)                                                                                                                   \
-    oop_field(DataSection, data, "[B")                                                                                                                         \
-    oop_field(DataSection, patches, "[Lcom/oracle/graal/api/code/CompilationResult$DataPatch;")                                                                \
+    typeArrayOop_field(DataSection, data, "[B")                                                                                                                \
+    objArrayOop_field(DataSection, patches, "[Lcom/oracle/graal/api/code/CompilationResult$DataPatch;")                                                        \
   end_class                                                                                                                                                    \
   start_class(DataSectionReference)                                                                                                                            \
     int_field(DataSectionReference, offset)                                                                                                                    \
@@ -114,12 +114,12 @@
   start_class(CompilationResult)                                                                                                                               \
     int_field(CompilationResult, totalFrameSize)                                                                                                               \
     int_field(CompilationResult, customStackAreaOffset)                                                                                                        \
-    oop_field(CompilationResult, targetCode, "[B")                                                                                                             \
+    typeArrayOop_field(CompilationResult, targetCode, "[B")                                                                                                    \
     oop_field(CompilationResult, assumptions, "Lcom/oracle/graal/api/code/Assumptions;")                                                                       \
     int_field(CompilationResult, targetCodeSize)                                                                                                               \
   end_class                                                                                                                                                    \
   start_class(Assumptions)                                                                                                                                     \
-    oop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;")                                                                        \
+    objArrayOop_field(Assumptions, list, "[Lcom/oracle/graal/api/code/Assumptions$Assumption;")                                                                \
   end_class                                                                                                                                                    \
   start_class(Assumptions_MethodContents)                                                                                                                      \
     oop_field(Assumptions_MethodContents, method, "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;")                                                            \
@@ -179,14 +179,14 @@
     oop_field(HotSpotReferenceMap, frameRefMap, "Ljava/util/BitSet;")                                                                                          \
   end_class                                                                                                                                                    \
   start_class(RegisterSaveLayout)                                                                                                                              \
-    oop_field(RegisterSaveLayout, registers, "[Lcom/oracle/graal/api/code/Register;")                                                                          \
-    oop_field(RegisterSaveLayout, slots, "[I")                                                                                                                 \
+    objArrayOop_field(RegisterSaveLayout, registers, "[Lcom/oracle/graal/api/code/Register;")                                                                  \
+    typeArrayOop_field(RegisterSaveLayout, slots, "[I")                                                                                                        \
   end_class                                                                                                                                                    \
   start_class(BitSet)                                                                                                                                          \
-    oop_field(BitSet, words, "[J")                                                                                                                             \
+    typeArrayOop_field(BitSet, words, "[J")                                                                                                                    \
   end_class                                                                                                                                                    \
   start_class(BytecodeFrame)                                                                                                                                   \
-    oop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;")                                                                                     \
+    objArrayOop_field(BytecodeFrame, values, "[Lcom/oracle/graal/api/meta/Value;")                                                                             \
     int_field(BytecodeFrame, numLocals)                                                                                                                        \
     int_field(BytecodeFrame, numStack)                                                                                                                         \
     int_field(BytecodeFrame, numLocks)                                                                                                                         \
@@ -259,7 +259,7 @@
   start_class(VirtualObject)                                                                                                                                   \
     int_field(VirtualObject, id)                                                                                                                               \
     oop_field(VirtualObject, type, "Lcom/oracle/graal/api/meta/ResolvedJavaType;")                                                                             \
-    oop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;")                                                                                     \
+    objArrayOop_field(VirtualObject, values, "[Lcom/oracle/graal/api/meta/Value;")                                                                             \
   end_class                                                                                                                                                    \
   start_class(HotSpotMonitorValue)                                                                                                                             \
     oop_field(HotSpotMonitorValue, owner, "Lcom/oracle/graal/api/meta/Value;")                                                                                 \
@@ -275,8 +275,8 @@
     int_field(HotSpotStackFrameReference, frameNumber)                                                                                                         \
     int_field(HotSpotStackFrameReference, bci)                                                                                                                 \
     long_field(HotSpotStackFrameReference, metaspaceMethod)                                                                                                    \
-    oop_field(HotSpotStackFrameReference, locals, "[Ljava/lang/Object;")                                                                                       \
-    oop_field(HotSpotStackFrameReference, localIsVirtual, "[Z")                                                                                                \
+    objArrayOop_field(HotSpotStackFrameReference, locals, "[Ljava/lang/Object;")                                                                               \
+    typeArrayOop_field(HotSpotStackFrameReference, localIsVirtual, "[Z")                                                                                       \
   end_class                                                                                                                                                    \
   /* end*/
 
@@ -294,21 +294,24 @@
 
 #define END_CLASS };
 
-#define FIELD(name, type, accessor)                                                                                                                            \
+#define FIELD(name, type, accessor, cast)                                                                                                                      \
     static int _##name##_offset;                                                                                                                               \
-    static type name(oop obj)                   { check(obj); return obj->accessor(_##name##_offset); }                                                        \
-    static type name(Handle& obj)                { check(obj()); return obj->accessor(_##name##_offset); }                                                     \
-    static type name(jobject obj)               { check(JNIHandles::resolve(obj)); return JNIHandles::resolve(obj)->accessor(_##name##_offset); }              \
+    static type name(oop obj)                   { check(obj); return cast obj->accessor(_##name##_offset); } \
+    static type name(Handle& obj)                { check(obj()); return cast obj->accessor(_##name##_offset); } \
+    static type name(jobject obj)               { check(JNIHandles::resolve(obj)); return cast JNIHandles::resolve(obj)->accessor(_##name##_offset); }              \
     static void set_##name(oop obj, type x)     { check(obj); obj->accessor##_put(_##name##_offset, x); }                                                      \
     static void set_##name(Handle& obj, type x)  { check(obj()); obj->accessor##_put(_##name##_offset, x); }                                                   \
     static void set_##name(jobject obj, type x) { check(JNIHandles::resolve(obj)); JNIHandles::resolve(obj)->accessor##_put(_##name##_offset, x); }
 
-#define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field)
-#define INT_FIELD(klass, name) FIELD(name, jint, int_field)
-#define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field)
-#define LONG_FIELD(klass, name) FIELD(name, jlong, long_field)
-#define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field)
-#define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field)
+#define EMPTY_CAST 
+#define CHAR_FIELD(klass, name) FIELD(name, jchar, char_field, EMPTY_CAST)
+#define INT_FIELD(klass, name) FIELD(name, jint, int_field, EMPTY_CAST)
+#define BOOLEAN_FIELD(klass, name) FIELD(name, jboolean, bool_field, EMPTY_CAST)
+#define LONG_FIELD(klass, name) FIELD(name, jlong, long_field, EMPTY_CAST)
+#define FLOAT_FIELD(klass, name) FIELD(name, jfloat, float_field, EMPTY_CAST)
+#define OOP_FIELD(klass, name, signature) FIELD(name, oop, obj_field, EMPTY_CAST)
+#define OBJARRAYOOP_FIELD(klass, name, signature) FIELD(name, objArrayOop, obj_field, (objArrayOop))
+#define TYPEARRAYOOP_FIELD(klass, name, signature) FIELD(name, typeArrayOop, obj_field, (typeArrayOop))
 #define STATIC_OOP_FIELD(klassName, name, signature)                                                                                                           \
     static int _##name##_offset;                                                                                                                               \
     static oop name() {                                                                                                                                        \
@@ -341,7 +344,7 @@
       address addr = ik->static_field_addr(_##name##_offset - InstanceMirrorKlass::offset_of_static_fields());                                                 \
       *((jint *)addr) = x;                                                                                                                                     \
     }
-COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD)
+COMPILER_CLASSES_DO(START_CLASS, END_CLASS, CHAR_FIELD, INT_FIELD, BOOLEAN_FIELD, LONG_FIELD, FLOAT_FIELD, OOP_FIELD, TYPEARRAYOOP_FIELD, OBJARRAYOOP_FIELD, STATIC_OOP_FIELD, STATIC_INT_FIELD)
 #undef START_CLASS
 #undef END_CLASS
 #undef FIELD
@@ -351,8 +354,11 @@
 #undef LONG_FIELD
 #undef FLOAT_FIELD
 #undef OOP_FIELD
+#undef TYPEARRAYOOP_FIELD
+#undef OBJARRAYOOP_FIELD
 #undef STATIC_OOP_FIELD
 #undef STATIC_INT_FIELD
+#undef EMPTY_CAST
 
 void compute_offset(int &dest_offset, Klass* klass, const char* name, const char* signature, bool static_field);