changeset 15561:0fc035104370

Baseline: add support for getstatic.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 08 May 2014 10:04:15 +0200
parents db5e9c70d829
children de3dca7cc6fd
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java test/whitelist_baseline.txt
diffstat 4 files changed, 31 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Thu May 08 14:57:28 2014 +0200
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Thu May 08 10:04:15 2014 +0200
@@ -478,6 +478,14 @@
 
     @Override
     protected Value genLoadField(Value receiver, ResolvedJavaField field) {
+        if (field.isStatic()) {
+            Value classRef = lirBuilder.getClassConstant(field.getDeclaringClass());
+            long displacement = lirBuilder.getFieldOffset(field);
+            Value address = gen.emitAddress(classRef, displacement, Value.ILLEGAL, 0);
+            PlatformKind readKind = gen.getPlatformKind(StampFactory.forKind(field.getKind()));
+            LIRFrameState state = createFrameState(frameState);
+            return gen.emitLoad(readKind, address, state);
+        }
         // TODO Auto-generated method stub
         throw GraalInternalError.unimplemented("Auto-generated method stub");
     }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java	Thu May 08 14:57:28 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeLIRBuilder.java	Thu May 08 10:04:15 2014 +0200
@@ -63,4 +63,8 @@
 
     public abstract int getArrayLengthOffset();
 
+    public abstract Constant getClassConstant(ResolvedJavaType declaringClass);
+
+    public abstract int getFieldOffset(ResolvedJavaField field);
+
 }
\ No newline at end of file
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java	Thu May 08 14:57:28 2014 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBytecodeLIRBuilder.java	Thu May 08 10:04:15 2014 +0200
@@ -28,6 +28,7 @@
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.gen.*;
 import com.oracle.graal.hotspot.amd64.AMD64HotSpotLIRGenerator.SaveRbp;
+import com.oracle.graal.hotspot.meta.*;
 import com.oracle.graal.lir.StandardOp.NoOp;
 import com.oracle.graal.lir.gen.*;
 
@@ -84,4 +85,14 @@
         return getGen().config.arrayLengthOffset;
     }
 
+    @Override
+    public Constant getClassConstant(ResolvedJavaType declaringClass) {
+        return HotSpotObjectConstant.forObject(((HotSpotResolvedJavaType) declaringClass).mirror());
+    }
+
+    @Override
+    public int getFieldOffset(ResolvedJavaField field) {
+        return ((HotSpotResolvedJavaField) field).offset();
+    }
+
 }
--- a/test/whitelist_baseline.txt	Thu May 08 14:57:28 2014 +0200
+++ b/test/whitelist_baseline.txt	Thu May 08 10:04:15 2014 +0200
@@ -17,3 +17,11 @@
 com.oracle.graal.jtt.bytecode.BC_iconst
 com.oracle.graal.jtt.bytecode.BC_ireturn
 com.oracle.graal.jtt.bytecode.BC_lreturn
+com.oracle.graal.jtt.bytecode.BC_getstatic_b
+com.oracle.graal.jtt.bytecode.BC_getstatic_c
+com.oracle.graal.jtt.bytecode.BC_getstatic_d
+com.oracle.graal.jtt.bytecode.BC_getstatic_f
+com.oracle.graal.jtt.bytecode.BC_getstatic_i
+com.oracle.graal.jtt.bytecode.BC_getstatic_l
+com.oracle.graal.jtt.bytecode.BC_getstatic_s
+com.oracle.graal.jtt.bytecode.BC_getstatic_z