< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java
Print this page
rev 56282 : [mq]: graal
@@ -49,10 +49,11 @@
import org.graalvm.compiler.nodes.NamedLocationIdentity;
import org.graalvm.compiler.nodes.NodeView;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.extended.ForeignCallNode;
import org.graalvm.compiler.nodes.extended.LoadHubNode;
+import org.graalvm.compiler.nodes.extended.LoadHubOrNullNode;
import org.graalvm.compiler.nodes.extended.RawLoadNode;
import org.graalvm.compiler.nodes.extended.StoreHubNode;
import org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext;
import org.graalvm.compiler.nodes.memory.Access;
import org.graalvm.compiler.nodes.memory.address.AddressNode;
@@ -775,33 +776,54 @@
private static native KlassPointer loadKlassFromObjectIntrinsic(Object object, long offset, @ConstantNodeParameter LocationIdentity locationIdentity, @ConstantNodeParameter JavaKind wordKind);
@NodeIntrinsic(value = LoadHubNode.class)
public static native KlassPointer loadHubIntrinsic(Object object);
- public static final LocationIdentity CLASS_STATE_LOCATION = NamedLocationIdentity.mutable("ClassState");
+ @NodeIntrinsic(value = LoadHubOrNullNode.class)
+ public static native KlassPointer loadHubOrNullIntrinsic(Object object);
+
+ static final LocationIdentity CLASS_INIT_STATE_LOCATION = NamedLocationIdentity.mutable("ClassInitState");
+
+ static final LocationIdentity CLASS_INIT_THREAD_LOCATION = NamedLocationIdentity.mutable("ClassInitThread");
@Fold
- public static int instanceKlassInitStateOffset(@InjectedParameter GraalHotSpotVMConfig config) {
+ static int instanceKlassInitStateOffset(@InjectedParameter GraalHotSpotVMConfig config) {
return config.instanceKlassInitStateOffset;
}
@Fold
+ static int instanceKlassInitThreadOffset(@InjectedParameter GraalHotSpotVMConfig config) {
+ assert config.instanceKlassInitThreadOffset != -1;
+ return config.instanceKlassInitThreadOffset;
+ }
+
+ @Fold
public static int instanceKlassStateFullyInitialized(@InjectedParameter GraalHotSpotVMConfig config) {
return config.instanceKlassStateFullyInitialized;
}
+ @Fold
+ public static int instanceKlassStateBeingInitialized(@InjectedParameter GraalHotSpotVMConfig config) {
+ assert config.instanceKlassStateBeingInitialized != -1;
+ return config.instanceKlassStateBeingInitialized;
+ }
+
/**
*
* @param hub the hub of an InstanceKlass
* @return true is the InstanceKlass represented by hub is fully initialized
*/
public static boolean isInstanceKlassFullyInitialized(KlassPointer hub) {
- return readInstanceKlassState(hub) == instanceKlassStateFullyInitialized(INJECTED_VMCONFIG);
+ return readInstanceKlassInitState(hub) == instanceKlassStateFullyInitialized(INJECTED_VMCONFIG);
+ }
+
+ static byte readInstanceKlassInitState(KlassPointer hub) {
+ return hub.readByte(instanceKlassInitStateOffset(INJECTED_VMCONFIG), CLASS_INIT_STATE_LOCATION);
}
- private static byte readInstanceKlassState(KlassPointer hub) {
- return hub.readByte(instanceKlassInitStateOffset(INJECTED_VMCONFIG), CLASS_STATE_LOCATION);
+ static Word readInstanceKlassInitThread(KlassPointer hub) {
+ return hub.readWord(instanceKlassInitThreadOffset(INJECTED_VMCONFIG), CLASS_INIT_THREAD_LOCATION);
}
public static final LocationIdentity KLASS_MODIFIER_FLAGS_LOCATION = NamedLocationIdentity.immutable("Klass::_modifier_flags");
@Fold
< prev index next >