src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java
changeset 58299 6df94ce3ab2f
parent 55674 ff76baab1c90
child 58679 9c3209ff7550
child 58901 2700c409ff10
equal deleted inserted replaced
58298:0152ad7b38b8 58299:6df94ce3ab2f
    49 import org.graalvm.compiler.nodes.NamedLocationIdentity;
    49 import org.graalvm.compiler.nodes.NamedLocationIdentity;
    50 import org.graalvm.compiler.nodes.NodeView;
    50 import org.graalvm.compiler.nodes.NodeView;
    51 import org.graalvm.compiler.nodes.ValueNode;
    51 import org.graalvm.compiler.nodes.ValueNode;
    52 import org.graalvm.compiler.nodes.extended.ForeignCallNode;
    52 import org.graalvm.compiler.nodes.extended.ForeignCallNode;
    53 import org.graalvm.compiler.nodes.extended.LoadHubNode;
    53 import org.graalvm.compiler.nodes.extended.LoadHubNode;
       
    54 import org.graalvm.compiler.nodes.extended.LoadHubOrNullNode;
    54 import org.graalvm.compiler.nodes.extended.RawLoadNode;
    55 import org.graalvm.compiler.nodes.extended.RawLoadNode;
    55 import org.graalvm.compiler.nodes.extended.StoreHubNode;
    56 import org.graalvm.compiler.nodes.extended.StoreHubNode;
    56 import org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext;
    57 import org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext;
    57 import org.graalvm.compiler.nodes.memory.Access;
    58 import org.graalvm.compiler.nodes.memory.Access;
    58 import org.graalvm.compiler.nodes.memory.address.AddressNode;
    59 import org.graalvm.compiler.nodes.memory.address.AddressNode;
   775     private static native KlassPointer loadKlassFromObjectIntrinsic(Object object, long offset, @ConstantNodeParameter LocationIdentity locationIdentity, @ConstantNodeParameter JavaKind wordKind);
   776     private static native KlassPointer loadKlassFromObjectIntrinsic(Object object, long offset, @ConstantNodeParameter LocationIdentity locationIdentity, @ConstantNodeParameter JavaKind wordKind);
   776 
   777 
   777     @NodeIntrinsic(value = LoadHubNode.class)
   778     @NodeIntrinsic(value = LoadHubNode.class)
   778     public static native KlassPointer loadHubIntrinsic(Object object);
   779     public static native KlassPointer loadHubIntrinsic(Object object);
   779 
   780 
   780     public static final LocationIdentity CLASS_STATE_LOCATION = NamedLocationIdentity.mutable("ClassState");
   781     @NodeIntrinsic(value = LoadHubOrNullNode.class)
   781 
   782     public static native KlassPointer loadHubOrNullIntrinsic(Object object);
   782     @Fold
   783 
   783     public static int instanceKlassInitStateOffset(@InjectedParameter GraalHotSpotVMConfig config) {
   784     static final LocationIdentity CLASS_INIT_STATE_LOCATION = NamedLocationIdentity.mutable("ClassInitState");
       
   785 
       
   786     static final LocationIdentity CLASS_INIT_THREAD_LOCATION = NamedLocationIdentity.mutable("ClassInitThread");
       
   787 
       
   788     @Fold
       
   789     static int instanceKlassInitStateOffset(@InjectedParameter GraalHotSpotVMConfig config) {
   784         return config.instanceKlassInitStateOffset;
   790         return config.instanceKlassInitStateOffset;
       
   791     }
       
   792 
       
   793     @Fold
       
   794     static int instanceKlassInitThreadOffset(@InjectedParameter GraalHotSpotVMConfig config) {
       
   795         assert config.instanceKlassInitThreadOffset != -1;
       
   796         return config.instanceKlassInitThreadOffset;
   785     }
   797     }
   786 
   798 
   787     @Fold
   799     @Fold
   788     public static int instanceKlassStateFullyInitialized(@InjectedParameter GraalHotSpotVMConfig config) {
   800     public static int instanceKlassStateFullyInitialized(@InjectedParameter GraalHotSpotVMConfig config) {
   789         return config.instanceKlassStateFullyInitialized;
   801         return config.instanceKlassStateFullyInitialized;
   790     }
   802     }
   791 
   803 
       
   804     @Fold
       
   805     public static int instanceKlassStateBeingInitialized(@InjectedParameter GraalHotSpotVMConfig config) {
       
   806         assert config.instanceKlassStateBeingInitialized != -1;
       
   807         return config.instanceKlassStateBeingInitialized;
       
   808     }
       
   809 
   792     /**
   810     /**
   793      *
   811      *
   794      * @param hub the hub of an InstanceKlass
   812      * @param hub the hub of an InstanceKlass
   795      * @return true is the InstanceKlass represented by hub is fully initialized
   813      * @return true is the InstanceKlass represented by hub is fully initialized
   796      */
   814      */
   797     public static boolean isInstanceKlassFullyInitialized(KlassPointer hub) {
   815     public static boolean isInstanceKlassFullyInitialized(KlassPointer hub) {
   798         return readInstanceKlassState(hub) == instanceKlassStateFullyInitialized(INJECTED_VMCONFIG);
   816         return readInstanceKlassInitState(hub) == instanceKlassStateFullyInitialized(INJECTED_VMCONFIG);
   799     }
   817     }
   800 
   818 
   801     private static byte readInstanceKlassState(KlassPointer hub) {
   819     static byte readInstanceKlassInitState(KlassPointer hub) {
   802         return hub.readByte(instanceKlassInitStateOffset(INJECTED_VMCONFIG), CLASS_STATE_LOCATION);
   820         return hub.readByte(instanceKlassInitStateOffset(INJECTED_VMCONFIG), CLASS_INIT_STATE_LOCATION);
       
   821     }
       
   822 
       
   823     static Word readInstanceKlassInitThread(KlassPointer hub) {
       
   824         return hub.readWord(instanceKlassInitThreadOffset(INJECTED_VMCONFIG), CLASS_INIT_THREAD_LOCATION);
   803     }
   825     }
   804 
   826 
   805     public static final LocationIdentity KLASS_MODIFIER_FLAGS_LOCATION = NamedLocationIdentity.immutable("Klass::_modifier_flags");
   827     public static final LocationIdentity KLASS_MODIFIER_FLAGS_LOCATION = NamedLocationIdentity.immutable("Klass::_modifier_flags");
   806 
   828 
   807     @Fold
   829     @Fold