< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/SHA5Substitutions.java

Print this page

        

*** 22,37 **** */ package org.graalvm.compiler.hotspot.replacements; import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_METAACCESS; import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier; import org.graalvm.compiler.api.replacements.ClassSubstitution; import org.graalvm.compiler.api.replacements.MethodSubstitution; - import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.hotspot.HotSpotBackend; import org.graalvm.compiler.nodes.ComputeObjectAddressNode; import org.graalvm.compiler.nodes.PiNode; import org.graalvm.compiler.nodes.extended.RawLoadNode; import org.graalvm.compiler.replacements.ReplacementsUtil; --- 22,37 ---- */ package org.graalvm.compiler.hotspot.replacements; + import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_INTRINSIC_CONTEXT; import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_METAACCESS; import static org.graalvm.compiler.serviceprovider.GraalServices.Java8OrEarlier; import org.graalvm.compiler.api.replacements.ClassSubstitution; import org.graalvm.compiler.api.replacements.MethodSubstitution; import org.graalvm.compiler.hotspot.HotSpotBackend; import org.graalvm.compiler.nodes.ComputeObjectAddressNode; import org.graalvm.compiler.nodes.PiNode; import org.graalvm.compiler.nodes.extended.RawLoadNode; import org.graalvm.compiler.replacements.ReplacementsUtil;
*** 42,74 **** import jdk.vm.ci.meta.JavaKind; @ClassSubstitution(className = "sun.security.provider.SHA5", optional = true) public class SHA5Substitutions { - static final long stateOffset; - - static final Class<?> shaClass; - public static final String implCompressName = Java8OrEarlier ? "implCompress" : "implCompress0"; - static { - try { - // Need to use the system class loader as com.sun.crypto.provider.AESCrypt - // is normally loaded by the extension class loader which is not delegated - // to by the JVMCI class loader. - ClassLoader cl = ClassLoader.getSystemClassLoader(); - shaClass = Class.forName("sun.security.provider.SHA5", true, cl); - stateOffset = UnsafeAccess.UNSAFE.objectFieldOffset(shaClass.getDeclaredField("state")); - } catch (Exception ex) { - throw new GraalError(ex); - } - } - @MethodSubstitution(isStatic = false) static void implCompress0(Object receiver, byte[] buf, int ofs) { ! Object realReceiver = PiNode.piCastNonNull(receiver, shaClass); ! Object state = RawLoadNode.load(realReceiver, stateOffset, JavaKind.Object, LocationIdentity.any()); Word bufAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(buf, ReplacementsUtil.getArrayBaseOffset(INJECTED_METAACCESS, JavaKind.Byte) + ofs)); Word stateAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(state, ReplacementsUtil.getArrayBaseOffset(INJECTED_METAACCESS, JavaKind.Int))); HotSpotBackend.sha5ImplCompressStub(bufAddr, stateAddr); } } --- 42,62 ---- import jdk.vm.ci.meta.JavaKind; @ClassSubstitution(className = "sun.security.provider.SHA5", optional = true) public class SHA5Substitutions { public static final String implCompressName = Java8OrEarlier ? "implCompress" : "implCompress0"; @MethodSubstitution(isStatic = false) static void implCompress0(Object receiver, byte[] buf, int ofs) { ! Object realReceiver = PiNode.piCastNonNull(receiver, HotSpotReplacementsUtil.methodHolderClass(INJECTED_INTRINSIC_CONTEXT)); ! Object state = RawLoadNode.load(realReceiver, stateOffset(), JavaKind.Object, LocationIdentity.any()); Word bufAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(buf, ReplacementsUtil.getArrayBaseOffset(INJECTED_METAACCESS, JavaKind.Byte) + ofs)); Word stateAddr = WordFactory.unsigned(ComputeObjectAddressNode.get(state, ReplacementsUtil.getArrayBaseOffset(INJECTED_METAACCESS, JavaKind.Int))); HotSpotBackend.sha5ImplCompressStub(bufAddr, stateAddr); } + + static long stateOffset() { + return HotSpotReplacementsUtil.getFieldOffset(HotSpotReplacementsUtil.methodHolderClass(INJECTED_INTRINSIC_CONTEXT), "state"); + } + }
< prev index next >