# HG changeset patch # User Doug Simon # Date 1358169960 -3600 # Node ID c58066ff1addf9ddcd5707d53c89685103fadd9c # Parent 96ce80e956a1122d0dc90f46ac628135fb0ef0f0 fixed bugs in AESCrypt intrinsifications and enabled them by default diff -r 96ce80e956a1 -r c58066ff1add graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/AESCryptSubstitutions.java --- 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 diff -r 96ce80e956a1 -r c58066ff1add graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java --- 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.