24 |
24 |
25 package org.graalvm.compiler.hotspot.replacements; |
25 package org.graalvm.compiler.hotspot.replacements; |
26 |
26 |
27 import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_INTRINSIC_CONTEXT; |
27 import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_INTRINSIC_CONTEXT; |
28 import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_METAACCESS; |
28 import static org.graalvm.compiler.hotspot.GraalHotSpotVMConfigBase.INJECTED_METAACCESS; |
29 import static org.graalvm.compiler.serviceprovider.JavaVersionUtil.Java8OrEarlier; |
|
30 |
29 |
31 import org.graalvm.compiler.api.replacements.ClassSubstitution; |
30 import org.graalvm.compiler.api.replacements.ClassSubstitution; |
32 import org.graalvm.compiler.api.replacements.Fold; |
31 import org.graalvm.compiler.api.replacements.Fold; |
33 import org.graalvm.compiler.api.replacements.Fold.InjectedParameter; |
32 import org.graalvm.compiler.api.replacements.Fold.InjectedParameter; |
34 import org.graalvm.compiler.api.replacements.MethodSubstitution; |
33 import org.graalvm.compiler.api.replacements.MethodSubstitution; |
36 import org.graalvm.compiler.nodes.ComputeObjectAddressNode; |
35 import org.graalvm.compiler.nodes.ComputeObjectAddressNode; |
37 import org.graalvm.compiler.nodes.PiNode; |
36 import org.graalvm.compiler.nodes.PiNode; |
38 import org.graalvm.compiler.nodes.extended.RawLoadNode; |
37 import org.graalvm.compiler.nodes.extended.RawLoadNode; |
39 import org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext; |
38 import org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext; |
40 import org.graalvm.compiler.replacements.ReplacementsUtil; |
39 import org.graalvm.compiler.replacements.ReplacementsUtil; |
|
40 import org.graalvm.compiler.serviceprovider.JavaVersionUtil; |
41 import org.graalvm.compiler.word.Word; |
41 import org.graalvm.compiler.word.Word; |
42 import jdk.internal.vm.compiler.word.LocationIdentity; |
42 import jdk.internal.vm.compiler.word.LocationIdentity; |
43 import jdk.internal.vm.compiler.word.WordFactory; |
43 import jdk.internal.vm.compiler.word.WordFactory; |
44 |
44 |
45 import jdk.vm.ci.meta.JavaKind; |
45 import jdk.vm.ci.meta.JavaKind; |
46 |
46 |
47 @ClassSubstitution(className = "sun.security.provider.SHA", optional = true) |
47 @ClassSubstitution(className = "sun.security.provider.SHA", optional = true) |
48 public class SHASubstitutions { |
48 public class SHASubstitutions { |
49 |
49 |
50 public static final String implCompressName = Java8OrEarlier ? "implCompress" : "implCompress0"; |
50 public static final String implCompressName = JavaVersionUtil.JAVA_SPEC <= 8 ? "implCompress" : "implCompress0"; |
51 |
51 |
52 @MethodSubstitution(isStatic = false) |
52 @MethodSubstitution(isStatic = false) |
53 static void implCompress0(Object receiver, byte[] buf, int ofs) { |
53 static void implCompress0(Object receiver, byte[] buf, int ofs) { |
54 Object realReceiver = PiNode.piCastNonNull(receiver, HotSpotReplacementsUtil.methodHolderClass(INJECTED_INTRINSIC_CONTEXT)); |
54 Object realReceiver = PiNode.piCastNonNull(receiver, HotSpotReplacementsUtil.methodHolderClass(INJECTED_INTRINSIC_CONTEXT)); |
55 Object state = RawLoadNode.load(realReceiver, stateOffset(INJECTED_INTRINSIC_CONTEXT), JavaKind.Object, LocationIdentity.any()); |
55 Object state = RawLoadNode.load(realReceiver, stateOffset(INJECTED_INTRINSIC_CONTEXT), JavaKind.Object, LocationIdentity.any()); |