< prev index next >

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

Print this page




  33 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  34 import org.graalvm.compiler.nodes.extended.FixedValueAnchorNode;
  35 import org.graalvm.compiler.nodes.extended.RawLoadNode;
  36 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  37 import org.graalvm.compiler.nodes.spi.LoweringTool;
  38 import org.graalvm.compiler.options.OptionValues;
  39 import org.graalvm.compiler.replacements.SnippetTemplate.AbstractTemplates;
  40 import org.graalvm.compiler.replacements.SnippetTemplate.Arguments;
  41 import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo;
  42 import org.graalvm.compiler.replacements.Snippets;
  43 import org.graalvm.compiler.word.Word;
  44 
  45 import jdk.vm.ci.code.TargetDescription;
  46 
  47 public class UnsafeLoadSnippets implements Snippets {
  48 
  49     @Snippet
  50     public static Object lowerUnsafeLoad(Object object, long offset) {
  51         Object fixedObject = FixedValueAnchorNode.getObject(object);
  52         if (object instanceof java.lang.ref.Reference && referentOffset(INJECTED_METAACCESS) == offset) {
  53             return Word.objectToTrackedPointer(fixedObject).readObject((int) offset, BarrierType.PRECISE);
  54         } else {
  55             return Word.objectToTrackedPointer(fixedObject).readObject((int) offset, BarrierType.NONE);
  56         }
  57     }
  58 
  59     public static class Templates extends AbstractTemplates {
  60 
  61         private final SnippetInfo unsafeLoad = snippet(UnsafeLoadSnippets.class, "lowerUnsafeLoad");
  62 
  63         public Templates(OptionValues options, Iterable<DebugHandlersFactory> factories, HotSpotProviders providers, TargetDescription target) {
  64             super(options, factories, providers, providers.getSnippetReflection(), target);
  65         }
  66 
  67         public void lower(RawLoadNode load, LoweringTool tool) {
  68             Arguments args = new Arguments(unsafeLoad, load.graph().getGuardsStage(), tool.getLoweringStage());
  69             args.add("object", load.object());
  70             args.add("offset", load.offset());
  71             template(load, args).instantiate(providers.getMetaAccess(), load, DEFAULT_REPLACER, args);
  72         }
  73     }


  33 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  34 import org.graalvm.compiler.nodes.extended.FixedValueAnchorNode;
  35 import org.graalvm.compiler.nodes.extended.RawLoadNode;
  36 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  37 import org.graalvm.compiler.nodes.spi.LoweringTool;
  38 import org.graalvm.compiler.options.OptionValues;
  39 import org.graalvm.compiler.replacements.SnippetTemplate.AbstractTemplates;
  40 import org.graalvm.compiler.replacements.SnippetTemplate.Arguments;
  41 import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo;
  42 import org.graalvm.compiler.replacements.Snippets;
  43 import org.graalvm.compiler.word.Word;
  44 
  45 import jdk.vm.ci.code.TargetDescription;
  46 
  47 public class UnsafeLoadSnippets implements Snippets {
  48 
  49     @Snippet
  50     public static Object lowerUnsafeLoad(Object object, long offset) {
  51         Object fixedObject = FixedValueAnchorNode.getObject(object);
  52         if (object instanceof java.lang.ref.Reference && referentOffset(INJECTED_METAACCESS) == offset) {
  53             return Word.objectToTrackedPointer(fixedObject).readObject((int) offset, BarrierType.WEAK_FIELD);
  54         } else {
  55             return Word.objectToTrackedPointer(fixedObject).readObject((int) offset, BarrierType.NONE);
  56         }
  57     }
  58 
  59     public static class Templates extends AbstractTemplates {
  60 
  61         private final SnippetInfo unsafeLoad = snippet(UnsafeLoadSnippets.class, "lowerUnsafeLoad");
  62 
  63         public Templates(OptionValues options, Iterable<DebugHandlersFactory> factories, HotSpotProviders providers, TargetDescription target) {
  64             super(options, factories, providers, providers.getSnippetReflection(), target);
  65         }
  66 
  67         public void lower(RawLoadNode load, LoweringTool tool) {
  68             Arguments args = new Arguments(unsafeLoad, load.graph().getGuardsStage(), tool.getLoweringStage());
  69             args.add("object", load.object());
  70             args.add("offset", load.offset());
  71             template(load, args).instantiate(providers.getMetaAccess(), load, DEFAULT_REPLACER, args);
  72         }
  73     }
< prev index next >