diff --git a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/jfr/TestGetEventWriter.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/jfr/TestGetEventWriter.java index 27cca77802f2..404acc4f2cfb 100644 --- a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/jfr/TestGetEventWriter.java +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/jfr/TestGetEventWriter.java @@ -28,12 +28,6 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import jdk.graal.compiler.core.common.PermanentBailoutException; -import jdk.graal.compiler.core.test.SubprocessTest; -import jdk.graal.compiler.serviceprovider.GraalServices; -import jdk.graal.compiler.serviceprovider.JavaVersionUtil; -import jdk.graal.compiler.test.AddExports; -import jdk.graal.compiler.test.SubprocessUtil; import org.junit.Assert; import org.junit.Assume; import org.junit.Test; @@ -42,6 +36,11 @@ import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; +import jdk.graal.compiler.core.common.PermanentBailoutException; +import jdk.graal.compiler.core.test.SubprocessTest; +import jdk.graal.compiler.serviceprovider.GraalServices; +import jdk.graal.compiler.test.AddExports; +import jdk.graal.compiler.test.SubprocessUtil; import jdk.jfr.Event; import jdk.jfr.Recording; import jdk.vm.ci.meta.ResolvedJavaMethod; @@ -61,7 +60,6 @@ public class TestGetEventWriter extends SubprocessTest { private static void initializeJFR() { - Assume.assumeTrue("JDK-8282420 came in JDK 19", JavaVersionUtil.JAVA_SPEC >= 19); Assume.assumeTrue("Requires JDK-8290075", GraalServices.hasLookupMethodWithCaller()); try (Recording r = new Recording()) { r.start(); @@ -82,7 +80,6 @@ static class InitializationEvent extends Event { @Test public void test() throws IOException, InterruptedException { - Assume.assumeTrue("JDK-8282420 came in JDK 19", JavaVersionUtil.JAVA_SPEC >= 19); launchSubprocess(() -> { try { initializeJFR(); diff --git a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/replacements/test/HalfFloatTest.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/replacements/test/HalfFloatTest.java index b5b6a454f6e4..c345f3a2e536 100644 --- a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/replacements/test/HalfFloatTest.java +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/replacements/test/HalfFloatTest.java @@ -24,12 +24,9 @@ */ package jdk.graal.compiler.replacements.test; -import static jdk.graal.compiler.serviceprovider.JavaVersionUtil.JAVA_SPEC; -import static org.junit.Assume.assumeTrue; - -import jdk.graal.compiler.jtt.JTTTest; import org.junit.Test; +import jdk.graal.compiler.jtt.JTTTest; import jdk.vm.ci.code.InstalledCode; import jdk.vm.ci.code.InvalidInstalledCodeException; @@ -49,7 +46,6 @@ public static short floatToFloat16(float f) { */ @Test public void binary16RoundTrip() { - assumeTrue("Interpreter returns different result for silent NaNs prior to JDK-8302976", JAVA_SPEC >= 21); for (int i = Short.MIN_VALUE; i < Short.MAX_VALUE; i++) { short s = (short) i; Result result = test("float16ToFloat", s); @@ -248,7 +244,6 @@ public void roundFloatToBinary16FullBinade() throws InvalidInstalledCodeExceptio */ @Test public void binary16NaNRoundTrip() { - assumeTrue("Interpreter returns different result for silent NaNs prior to JDK-8302976", JAVA_SPEC >= 21); // A NaN has a nonzero significand for (int i = 1; i <= 0x3ff; i++) { short binary16NaN = (short) (NAN_EXPONENT | i); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java index e3fcd487cd36..04e88585e01c 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java @@ -270,6 +270,7 @@ public final int arrayOopDescLengthOffset() { public final int threadIsInVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_VTMS_transition", Integer.class, "bool"); public final int threadIsInTmpVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_tmp_VTMS_transition", Integer.class, "bool"); + public final int threadIsDisableSuspendOffset = getFieldOffset("JavaThread::_is_disable_suspend", Integer.class, "bool", -1, JDK >= 22); public final int javaLangThreadJFREpochOffset = getFieldValue("java_lang_Thread::_jfr_epoch_offset", Integer.class, "int"); public final int javaLangThreadTIDOffset = getFieldValue("java_lang_Thread::_tid_offset", Integer.class, "int"); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java index 94b304b37a9c..50564e33e2c5 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java @@ -622,52 +622,48 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec } }); - if (JavaVersionUtil.JAVA_SPEC >= 19) { - r.register(new InvocationPlugin("currentCarrierThread") { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { - try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { - ValueNode value = helper.readCurrentThreadObject(false); - b.push(JavaKind.Object, value); - } - return true; + r.register(new InvocationPlugin("currentCarrierThread") { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + ValueNode value = helper.readCurrentThreadObject(false); + b.push(JavaKind.Object, value); } - }); + return true; + } + }); - r.register(new InlineOnlyInvocationPlugin("setCurrentThread", Receiver.class, Thread.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode thread) { - GraalError.guarantee(Services.IS_IN_NATIVE_IMAGE || isAnnotatedByChangesCurrentThread(b.getMethod()), "method changes current Thread but is not annotated ChangesCurrentThread"); - try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { - receiver.get(); - helper.setCurrentThread(thread); - } - return true; + r.register(new InlineOnlyInvocationPlugin("setCurrentThread", Receiver.class, Thread.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode thread) { + GraalError.guarantee(Services.IS_IN_NATIVE_IMAGE || isAnnotatedByChangesCurrentThread(b.getMethod()), "method changes current Thread but is not annotated ChangesCurrentThread"); + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + receiver.get(); + helper.setCurrentThread(thread); } - }); - } + return true; + } + }); - if (JavaVersionUtil.JAVA_SPEC >= 20) { - r.registerConditional(config.threadScopedValueCacheOffset != -1, new InvocationPlugin("scopedValueCache") { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { - try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { - b.push(JavaKind.Object, helper.readThreadScopedValueCache()); - } - return true; + r.registerConditional(config.threadScopedValueCacheOffset != -1, new InvocationPlugin("scopedValueCache") { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + b.push(JavaKind.Object, helper.readThreadScopedValueCache()); } - }); + return true; + } + }); - r.registerConditional(config.threadScopedValueCacheOffset != -1, new InvocationPlugin("setScopedValueCache", Object[].class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode cache) { - try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { - helper.setThreadScopedValueCache(cache); - } - return true; + r.registerConditional(config.threadScopedValueCacheOffset != -1, new InvocationPlugin("setScopedValueCache", Object[].class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode cache) { + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + helper.setThreadScopedValueCache(cache); } - }); - } + return true; + } + }); } // @formatter:off @@ -721,8 +717,8 @@ private static void inlineNativeNotifyJvmtiFunctions(GraalHotSpotVMConfig config } private static void registerVirtualThreadPlugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, Replacements replacements) { - if (JavaVersionUtil.JAVA_SPEC >= 21 && config.supportJVMTIVThreadNotification()) { - Registration r = new Registration(plugins, "java.lang.VirtualThread", replacements); + Registration r = new Registration(plugins, "java.lang.VirtualThread", replacements); + if (config.supportJVMTIVThreadNotification()) { r.register(new InvocationPlugin("notifyJvmtiStart", Receiver.class) { @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { @@ -763,18 +759,38 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec return true; } }); - r.register(new InvocationPlugin("notifyJvmtiHideFrames", Receiver.class, boolean.class) { + } + r.register(new InvocationPlugin("notifyJvmtiHideFrames", Receiver.class, boolean.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode hide) { + if (config.doJVMTIVirtualThreadTransitions) { + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + receiver.get(); + // unconditionally update the temporary VTMS transition bit in current + // JavaThread + GraalError.guarantee(config.threadIsInTmpVTMSTransitionOffset != -1, "JavaThread::_is_in_tmp_VTMS_transition is not exported"); + CurrentJavaThreadNode javaThread = b.add(new CurrentJavaThreadNode(helper.getWordKind())); + OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.threadIsInTmpVTMSTransitionOffset))); + b.add(new JavaWriteNode(JavaKind.Boolean, address, HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_IS_IN_TMP_VTMS_TRANSITION, hide, BarrierType.NONE, false)); + } + } + return true; + } + }); + + if (JavaVersionUtil.JAVA_SPEC >= 22) { + r.register(new InvocationPlugin("notifyJvmtiDisableSuspend", Receiver.class, boolean.class) { @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode hide) { + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode enter) { if (config.doJVMTIVirtualThreadTransitions) { try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { receiver.get(); - // unconditionally update the temporary VTMS transition bit in current + // unconditionally update the is_disable_suspend bit in current // JavaThread - GraalError.guarantee(config.threadIsInTmpVTMSTransitionOffset != -1L, "JavaThread::_is_in_tmp_VTMS_transition is not exported"); + GraalError.guarantee(config.threadIsDisableSuspendOffset != -1, "JavaThread::_is_disable_suspend is not exported"); CurrentJavaThreadNode javaThread = b.add(new CurrentJavaThreadNode(helper.getWordKind())); - OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.threadIsInTmpVTMSTransitionOffset))); - b.add(new JavaWriteNode(JavaKind.Boolean, address, HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_IS_IN_TMP_VTMS_TRANSITION, hide, BarrierType.NONE, false)); + OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.threadIsDisableSuspendOffset))); + b.add(new JavaWriteNode(JavaKind.Boolean, address, HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_IS_DISABLE_SUSPEND, enter, BarrierType.NONE, false)); } } return true; @@ -898,10 +914,8 @@ private static void registerAESPlugins(InvocationPlugins plugins, GraalHotSpotVM r.registerConditional(config.electronicCodeBookEncrypt != 0L, new ElectronicCodeBookCryptPlugin(CryptMode.ENCRYPT)); r.registerConditional(config.electronicCodeBookDecrypt != 0L, new ElectronicCodeBookCryptPlugin(CryptMode.DECRYPT)); - if (JavaVersionUtil.JAVA_SPEC >= 18) { - r = new Registration(plugins, "com.sun.crypto.provider.GaloisCounterMode", replacements); - r.registerConditional(config.galoisCounterModeCrypt != 0L, new GaloisCounterModeCryptPlugin()); - } + r = new Registration(plugins, "com.sun.crypto.provider.GaloisCounterMode", replacements); + r.registerConditional(config.galoisCounterModeCrypt != 0L, new GaloisCounterModeCryptPlugin()); r = new Registration(plugins, "com.sun.crypto.provider.CounterMode", replacements); r.registerConditional(CounterModeAESNode.isSupported(arch), new CounterModeCryptPlugin() { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/UnimplementedGraalIntrinsics.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/UnimplementedGraalIntrinsics.java index af5306ff9259..6f1c57d11738 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/UnimplementedGraalIntrinsics.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/UnimplementedGraalIntrinsics.java @@ -117,8 +117,6 @@ public UnimplementedGraalIntrinsics() { "jdk/jfr/internal/JVM.getEventWriter()Ljdk/jfr/internal/event/EventWriter;"); add(toBeInvestigated, // @formatter:off - // JDK-8311218 - "java/lang/VirtualThread.notifyJvmtiDisableSuspend(Z)V", // JDK-8309130: x86_64 AVX512 intrinsics for Arrays.sort methods (GR-48679) "java/util/DualPivotQuicksort.partition(Ljava/lang/Class;Ljava/lang/Object;JIIIILjava/util/DualPivotQuicksort$PartitionOperation;)[I", "java/util/DualPivotQuicksort.sort(Ljava/lang/Class;Ljava/lang/Object;JIILjava/util/DualPivotQuicksort$SortOperation;)V", diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotReplacementsUtil.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotReplacementsUtil.java index e125d8120d6a..a3e87c56255d 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotReplacementsUtil.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotReplacementsUtil.java @@ -29,6 +29,8 @@ import java.lang.ref.Reference; +import org.graalvm.word.LocationIdentity; + import jdk.graal.compiler.api.replacements.Fold; import jdk.graal.compiler.api.replacements.Fold.InjectedParameter; import jdk.graal.compiler.core.common.SuppressFBWarnings; @@ -58,10 +60,7 @@ import jdk.graal.compiler.nodes.type.StampTool; import jdk.graal.compiler.replacements.ReplacementsUtil; import jdk.graal.compiler.replacements.nodes.ReadRegisterNode; -import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.graal.compiler.word.Word; -import org.graalvm.word.LocationIdentity; - import jdk.vm.ci.code.Register; import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime; import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant; @@ -293,11 +292,9 @@ public static Object getPendingException(Word thread) { * After that, it is never changed. In the presence of virtual threads from JDK 19 onwards, this * value can change when a virtual thread is unmounted and then mounted again. */ - public static final LocationIdentity JAVA_THREAD_CURRENT_THREAD_OBJECT_LOCATION = JavaVersionUtil.JAVA_SPEC < 19 ? NamedLocationIdentity.immutable("JavaThread::_threadObj") - : NamedLocationIdentity.mutable("JavaThread::_vthread"); + public static final LocationIdentity JAVA_THREAD_CURRENT_THREAD_OBJECT_LOCATION = NamedLocationIdentity.mutable("JavaThread::_vthread"); - public static final LocationIdentity JAVA_THREAD_CARRIER_THREAD_OBJECT_LOCATION = JavaVersionUtil.JAVA_SPEC < 19 ? JAVA_THREAD_CURRENT_THREAD_OBJECT_LOCATION - : NamedLocationIdentity.mutable("JavaThread::_threadObj"); + public static final LocationIdentity JAVA_THREAD_CARRIER_THREAD_OBJECT_LOCATION = NamedLocationIdentity.mutable("JavaThread::_threadObj"); public static final LocationIdentity JAVA_THREAD_OSTHREAD_LOCATION = NamedLocationIdentity.mutable("JavaThread::_osthread"); @@ -884,17 +881,16 @@ public static NamedLocationIdentity mutable(String name) { * This represents the contents of the OopHandle used to store the current thread. Virtual * thread support makes this mutable. */ - public static final LocationIdentity HOTSPOT_CURRENT_THREAD_OOP_HANDLE_LOCATION = JavaVersionUtil.JAVA_SPEC < 19 ? HOTSPOT_OOP_HANDLE_LOCATION - : OopHandleLocationIdentity.mutable("_vthread OopHandle contents"); + public static final LocationIdentity HOTSPOT_CURRENT_THREAD_OOP_HANDLE_LOCATION = OopHandleLocationIdentity.mutable("_vthread OopHandle contents"); - public static final LocationIdentity HOTSPOT_CARRIER_THREAD_OOP_HANDLE_LOCATION = JavaVersionUtil.JAVA_SPEC < 19 ? HOTSPOT_OOP_HANDLE_LOCATION - : OopHandleLocationIdentity.mutable("_threadObj OopHandle contents"); + public static final LocationIdentity HOTSPOT_CARRIER_THREAD_OOP_HANDLE_LOCATION = OopHandleLocationIdentity.mutable("_threadObj OopHandle contents"); public static final LocationIdentity HOTSPOT_JAVA_THREAD_SCOPED_VALUE_CACHE_HANDLE_LOCATION = OopHandleLocationIdentity.mutable("_scopedValueCache OopHandle contents"); public static final LocationIdentity HOTSPOT_VTMS_NOTIFY_JVMTI_EVENTS = NamedLocationIdentity.mutable("JvmtiVTMSTransitionDisabler::_VTMS_notify_jvmti_events"); public static final LocationIdentity HOTSPOT_JAVA_THREAD_IS_IN_VTMS_TRANSITION = NamedLocationIdentity.mutable("JavaThread::_is_in_VTMS_transition"); public static final LocationIdentity HOTSPOT_JAVA_THREAD_IS_IN_TMP_VTMS_TRANSITION = NamedLocationIdentity.mutable("JavaThread::_is_in_tmp_VTMS_transition"); + public static final LocationIdentity HOTSPOT_JAVA_THREAD_IS_DISABLE_SUSPEND = NamedLocationIdentity.mutable("JavaThread::_is_disable_suspend"); public static final LocationIdentity HOTSPOT_JAVA_LANG_THREAD_IS_IN_VTMS_TRANSITION = NamedLocationIdentity.mutable("Thread::_is_in_VTMS_transition"); @Fold diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java index f9ff00bf993c..e5cc5baef940 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java @@ -211,7 +211,6 @@ import jdk.graal.compiler.replacements.nodes.arithmetic.IntegerSubExactOverflowNode; import jdk.graal.compiler.replacements.nodes.arithmetic.IntegerSubExactSplitNode; import jdk.graal.compiler.replacements.nodes.arithmetic.UnsignedMulHighNode; -import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.graal.compiler.serviceprovider.SpeculationReasonGroup; import jdk.vm.ci.code.Architecture; import jdk.vm.ci.code.BytecodePosition; @@ -749,10 +748,7 @@ private static void registerUnsafePlugins0(Registration r, boolean sunMiscUnsafe r.register(new CacheWritebackPlugin(false, "writeback0", Receiver.class, long.class)); r.register(new CacheWritebackPlugin(true, "writebackPreSync0", Receiver.class)); r.register(new CacheWritebackPlugin(false, "writebackPostSync0", Receiver.class)); - - if (JavaVersionUtil.JAVA_SPEC >= 18) { - r.register(new UnsafeFencePlugin(MembarNode.FenceKind.STORE_STORE, "storeStoreFence")); - } + r.register(new UnsafeFencePlugin(MembarNode.FenceKind.STORE_STORE, "storeStoreFence")); } r.register(new InvocationPlugin("arrayBaseOffset", Receiver.class, Class.class) { @@ -1128,15 +1124,13 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec return true; } }); - if (JavaVersionUtil.JAVA_SPEC >= 18) { - r.register(new InvocationPlugin("unsignedMultiplyHigh", long.class, long.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode x, ValueNode y) { - b.addPush(JavaKind.Long, new UnsignedMulHighNode(x, y)); - return true; - } - }); - } + r.register(new InvocationPlugin("unsignedMultiplyHigh", long.class, long.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode x, ValueNode y) { + b.addPush(JavaKind.Long, new UnsignedMulHighNode(x, y)); + return true; + } + }); } private static void registerRound(boolean supportsRound, Registration r, String name, RoundingMode mode) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java index 98bce10eb0f9..997384016f4d 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/aarch64/AArch64GraphBuilderPlugins.java @@ -61,18 +61,16 @@ import jdk.graal.compiler.replacements.StringUTF16CompressNode; import jdk.graal.compiler.replacements.StringUTF16Snippets; import jdk.graal.compiler.replacements.TargetGraphBuilderPlugins; +import jdk.graal.compiler.replacements.nodes.ArrayCompareToNode; +import jdk.graal.compiler.replacements.nodes.ArrayIndexOfNode; import jdk.graal.compiler.replacements.nodes.BinaryMathIntrinsicNode; +import jdk.graal.compiler.replacements.nodes.CountLeadingZerosNode; import jdk.graal.compiler.replacements.nodes.CountTrailingZerosNode; import jdk.graal.compiler.replacements.nodes.FloatToHalfFloatNode; import jdk.graal.compiler.replacements.nodes.FusedMultiplyAddNode; -import jdk.graal.compiler.replacements.nodes.UnaryMathIntrinsicNode; -import jdk.graal.compiler.replacements.nodes.ArrayCompareToNode; -import jdk.graal.compiler.replacements.nodes.ArrayIndexOfNode; -import jdk.graal.compiler.replacements.nodes.CountLeadingZerosNode; import jdk.graal.compiler.replacements.nodes.HalfFloatToFloatNode; import jdk.graal.compiler.replacements.nodes.MessageDigestNode; -import jdk.graal.compiler.serviceprovider.JavaVersionUtil; - +import jdk.graal.compiler.replacements.nodes.UnaryMathIntrinsicNode; import jdk.vm.ci.aarch64.AArch64; import jdk.vm.ci.code.Architecture; import jdk.vm.ci.meta.JavaKind; @@ -135,22 +133,20 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec private static void registerFloatPlugins(InvocationPlugins plugins, Replacements replacements) { Registration r = new Registration(plugins, Float.class, replacements); - if (JavaVersionUtil.JAVA_SPEC >= 20) { - r.register(new InvocationPlugin("float16ToFloat", short.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { - b.push(JavaKind.Float, b.append(new HalfFloatToFloatNode(value))); - return true; - } - }); - r.register(new InvocationPlugin("floatToFloat16", float.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { - b.push(JavaKind.Short, b.append(new FloatToHalfFloatNode(value))); - return true; - } - }); - } + r.register(new InvocationPlugin("float16ToFloat", short.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { + b.push(JavaKind.Float, b.append(new HalfFloatToFloatNode(value))); + return true; + } + }); + r.register(new InvocationPlugin("floatToFloat16", float.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { + b.push(JavaKind.Short, b.append(new FloatToHalfFloatNode(value))); + return true; + } + }); } private static void registerMathPlugins(InvocationPlugins plugins, boolean registerForeignCallMath) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java index 41e6aceb6fc2..5e5b9a209b76 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/amd64/AMD64GraphBuilderPlugins.java @@ -84,7 +84,6 @@ import jdk.graal.compiler.replacements.nodes.HalfFloatToFloatNode; import jdk.graal.compiler.replacements.nodes.UnaryMathIntrinsicNode; import jdk.graal.compiler.replacements.nodes.UnaryMathIntrinsicNode.UnaryOperation; -import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.vm.ci.amd64.AMD64; import jdk.vm.ci.amd64.AMD64.CPUFeature; import jdk.vm.ci.code.Architecture; @@ -146,22 +145,20 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec } }); - if (JavaVersionUtil.JAVA_SPEC >= 20) { - r.registerConditional(arch.getFeatures().contains(CPUFeature.BMI2), new InvocationPlugin("compress", type, type) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value, ValueNode mask) { - b.push(kind, b.append(new CompressBitsNode(value, mask))); - return true; - } - }); - r.registerConditional(arch.getFeatures().contains(CPUFeature.BMI2), new InvocationPlugin("expand", type, type) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value, ValueNode mask) { - b.push(kind, b.append(new ExpandBitsNode(value, mask))); - return true; - } - }); - } + r.registerConditional(arch.getFeatures().contains(CPUFeature.BMI2), new InvocationPlugin("compress", type, type) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value, ValueNode mask) { + b.push(kind, b.append(new CompressBitsNode(value, mask))); + return true; + } + }); + r.registerConditional(arch.getFeatures().contains(CPUFeature.BMI2), new InvocationPlugin("expand", type, type) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value, ValueNode mask) { + b.push(kind, b.append(new ExpandBitsNode(value, mask))); + return true; + } + }); } private static boolean supportsFeature(AMD64 arch, String feature) { @@ -175,24 +172,22 @@ private static boolean supportsFeature(AMD64 arch, String feature) { private static void registerFloatPlugins(InvocationPlugins plugins, AMD64 arch, Replacements replacements) { Registration r = new Registration(plugins, Float.class, replacements); - if (JavaVersionUtil.JAVA_SPEC >= 20) { - boolean supportsF16C = supportsFeature(arch, "F16C"); + boolean supportsF16C = supportsFeature(arch, "F16C"); - r.registerConditional(supportsF16C, new InvocationPlugin("float16ToFloat", short.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { - b.push(JavaKind.Float, b.append(new HalfFloatToFloatNode(value))); - return true; - } - }); - r.registerConditional(supportsF16C, new InvocationPlugin("floatToFloat16", float.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { - b.push(JavaKind.Short, b.append(new FloatToHalfFloatNode(value))); - return true; - } - }); - } + r.registerConditional(supportsF16C, new InvocationPlugin("float16ToFloat", short.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { + b.push(JavaKind.Float, b.append(new HalfFloatToFloatNode(value))); + return true; + } + }); + r.registerConditional(supportsF16C, new InvocationPlugin("floatToFloat16", float.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode value) { + b.push(JavaKind.Short, b.append(new FloatToHalfFloatNode(value))); + return true; + } + }); } private static void registerFloatDoublePlugins(InvocationPlugins plugins, JavaKind kind, AMD64 arch, Replacements replacements) {