changeset 7366:c58066ff1add

fixed bugs in AESCrypt intrinsifications and enabled them by default
author Doug Simon <doug.simon@oracle.com>
date Mon, 14 Jan 2013 14:26:00 +0100
parents 96ce80e956a1
children cbcee2e1ce51
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/AESCryptSubstitutions.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java
diffstat 2 files changed, 11 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/AESCryptSubstitutions.java	Mon Jan 14 14:25:16 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/AESCryptSubstitutions.java	Mon Jan 14 14:26:00 2013 +0100
@@ -22,10 +22,12 @@
  */
 package com.oracle.graal.hotspot.snippets;
 
+import static com.oracle.graal.hotspot.snippets.HotSpotSnippetUtils.*;
 import sun.misc.*;
 
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.code.RuntimeCallTarget.Descriptor;
+import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.gen.*;
 import com.oracle.graal.compiler.target.*;
 import com.oracle.graal.graph.*;
@@ -56,17 +58,17 @@
 
     @MethodSubstitution(isStatic = false)
     static void encryptBlock(Object rcvr, byte[] in, int inOffset, byte[] out, int outOffset) {
-        Word kAddr = Word.unsigned(GetObjectAddressNode.get(rcvr) + kOffset);
-        Word inAddr = Word.unsigned(GetObjectAddressNode.get(in) + inOffset);
-        Word outAddr = Word.unsigned(GetObjectAddressNode.get(out) + outOffset);
+        Word kAddr = Word.fromObject(rcvr).readWord(Word.unsigned(kOffset)).add(arrayBaseOffset(Kind.Byte));
+        Word inAddr = Word.unsigned(GetObjectAddressNode.get(in) + arrayBaseOffset(Kind.Byte) + inOffset);
+        Word outAddr = Word.unsigned(GetObjectAddressNode.get(out) + arrayBaseOffset(Kind.Byte) + outOffset);
         EncryptBlockStubCall.call(inAddr, outAddr, kAddr);
     }
 
     @MethodSubstitution(isStatic = false)
     static void decryptBlock(Object rcvr, byte[] in, int inOffset, byte[] out, int outOffset) {
-        Word kAddr = Word.unsigned(GetObjectAddressNode.get(rcvr) + kOffset);
-        Word inAddr = Word.unsigned(GetObjectAddressNode.get(in) + inOffset);
-        Word outAddr = Word.unsigned(GetObjectAddressNode.get(out) + outOffset);
+        Word kAddr = Word.unsigned(GetObjectAddressNode.get(rcvr)).readWord(Word.unsigned(kOffset)).add(arrayBaseOffset(Kind.Byte));
+        Word inAddr = Word.unsigned(GetObjectAddressNode.get(in) + arrayBaseOffset(Kind.Byte) + inOffset);
+        Word outAddr = Word.unsigned(GetObjectAddressNode.get(out) + arrayBaseOffset(Kind.Byte) + outOffset);
         DecryptBlockStubCall.call(inAddr, outAddr, kAddr);
     }
 
@@ -88,7 +90,7 @@
         @Override
         public void generate(LIRGenerator gen) {
             RuntimeCallTarget stub = gen.getRuntime().lookupRuntimeCall(ENCRYPT_BLOCK);
-            gen.emitCall(stub, stub.getCallingConvention(), true, gen.operand(in), gen.operand(out), gen.operand(key));
+            gen.emitCall(stub, stub.getCallingConvention(), false, gen.operand(in), gen.operand(out), gen.operand(key));
         }
 
         @NodeIntrinsic
@@ -113,7 +115,7 @@
         @Override
         public void generate(LIRGenerator gen) {
             RuntimeCallTarget stub = gen.getRuntime().lookupRuntimeCall(DECRYPT_BLOCK);
-            gen.emitCall(stub, stub.getCallingConvention(), true, gen.operand(in), gen.operand(out), gen.operand(key));
+            gen.emitCall(stub, stub.getCallingConvention(), false, gen.operand(in), gen.operand(out), gen.operand(key));
         }
 
         @NodeIntrinsic
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java	Mon Jan 14 14:25:16 2013 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java	Mon Jan 14 14:26:00 2013 +0100
@@ -208,7 +208,7 @@
     public static boolean IntrinsifyThreadMethods            = true;
     public static boolean IntrinsifyUnsafeMethods            = true;
     public static boolean IntrinsifyMathMethods              = true;
-    public static boolean IntrinsifyAESCryptMethods          = false; // TODO (ds) make true once AES stubs are working
+    public static boolean IntrinsifyAESCryptMethods          = true;
 
     /**
      * Counts the various paths taken through snippets.