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 }
|