src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotWordOperationPlugin.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotWordOperationPlugin.java

Print this page




  23 package org.graalvm.compiler.hotspot.meta;
  24 
  25 import static org.graalvm.compiler.core.common.LocationIdentity.any;
  26 import static org.graalvm.compiler.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_EQ;
  27 import static org.graalvm.compiler.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_NE;
  28 import static org.graalvm.compiler.nodes.ConstantNode.forBoolean;
  29 
  30 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
  31 import org.graalvm.compiler.bytecode.BridgeMethodUtils;
  32 import org.graalvm.compiler.core.common.LocationIdentity;
  33 import org.graalvm.compiler.core.common.type.Stamp;
  34 import org.graalvm.compiler.core.common.type.StampFactory;
  35 import org.graalvm.compiler.debug.GraalError;
  36 import org.graalvm.compiler.hotspot.nodes.LoadIndexedPointerNode;
  37 import org.graalvm.compiler.hotspot.nodes.type.KlassPointerStamp;
  38 import org.graalvm.compiler.hotspot.nodes.type.MetaspacePointerStamp;
  39 import org.graalvm.compiler.hotspot.nodes.type.MethodPointerStamp;
  40 import org.graalvm.compiler.hotspot.word.HotSpotOperation;
  41 import org.graalvm.compiler.hotspot.word.HotSpotOperation.HotspotOpcode;
  42 import org.graalvm.compiler.hotspot.word.PointerCastNode;
  43 import org.graalvm.compiler.nodes.AbstractBeginNode;
  44 import org.graalvm.compiler.nodes.LogicNode;
  45 import org.graalvm.compiler.nodes.ValueNode;
  46 import org.graalvm.compiler.nodes.calc.ConditionalNode;
  47 import org.graalvm.compiler.nodes.calc.IsNullNode;
  48 import org.graalvm.compiler.nodes.calc.PointerEqualsNode;
  49 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
  50 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
  51 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  52 import org.graalvm.compiler.nodes.memory.ReadNode;
  53 import org.graalvm.compiler.nodes.memory.address.AddressNode;
  54 import org.graalvm.compiler.nodes.type.StampTool;
  55 import org.graalvm.compiler.replacements.WordOperationPlugin;
  56 import org.graalvm.compiler.word.WordTypes;
  57 
  58 import jdk.vm.ci.meta.JavaKind;
  59 import jdk.vm.ci.meta.ResolvedJavaMethod;
  60 import jdk.vm.ci.meta.ResolvedJavaType;
  61 
  62 /**
  63  * Extends {@link WordOperationPlugin} to handle {@linkplain HotSpotOperation HotSpot word


 132                 b.addPush(returnKind, new PointerCastNode(KlassPointerStamp.klass(), args[0]));
 133                 break;
 134 
 135             case TO_METHOD_POINTER:
 136                 assert args.length == 1;
 137                 b.addPush(returnKind, new PointerCastNode(MethodPointerStamp.method(), args[0]));
 138                 break;
 139 
 140             case READ_KLASS_POINTER:
 141                 assert args.length == 2 || args.length == 3;
 142                 Stamp readStamp = KlassPointerStamp.klass();
 143                 AddressNode address = makeAddress(b, args[0], args[1]);
 144                 LocationIdentity location;
 145                 if (args.length == 2) {
 146                     location = any();
 147                 } else {
 148                     assert args[2].isConstant();
 149                     location = snippetReflection.asObject(LocationIdentity.class, args[2].asJavaConstant());
 150                 }
 151                 ReadNode read = b.add(new ReadNode(address, location, readStamp, BarrierType.NONE));
 152                 /*
 153                  * The read must not float outside its block otherwise it may float above an
 154                  * explicit zero check on its base address.
 155                  */
 156                 read.setGuard(AbstractBeginNode.prevBegin(read));
 157                 b.push(returnKind, read);
 158                 break;
 159 
 160             default:
 161                 throw GraalError.shouldNotReachHere("unknown operation: " + operation.opcode());
 162         }
 163     }
 164 }


  23 package org.graalvm.compiler.hotspot.meta;
  24 
  25 import static org.graalvm.compiler.core.common.LocationIdentity.any;
  26 import static org.graalvm.compiler.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_EQ;
  27 import static org.graalvm.compiler.hotspot.word.HotSpotOperation.HotspotOpcode.POINTER_NE;
  28 import static org.graalvm.compiler.nodes.ConstantNode.forBoolean;
  29 
  30 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
  31 import org.graalvm.compiler.bytecode.BridgeMethodUtils;
  32 import org.graalvm.compiler.core.common.LocationIdentity;
  33 import org.graalvm.compiler.core.common.type.Stamp;
  34 import org.graalvm.compiler.core.common.type.StampFactory;
  35 import org.graalvm.compiler.debug.GraalError;
  36 import org.graalvm.compiler.hotspot.nodes.LoadIndexedPointerNode;
  37 import org.graalvm.compiler.hotspot.nodes.type.KlassPointerStamp;
  38 import org.graalvm.compiler.hotspot.nodes.type.MetaspacePointerStamp;
  39 import org.graalvm.compiler.hotspot.nodes.type.MethodPointerStamp;
  40 import org.graalvm.compiler.hotspot.word.HotSpotOperation;
  41 import org.graalvm.compiler.hotspot.word.HotSpotOperation.HotspotOpcode;
  42 import org.graalvm.compiler.hotspot.word.PointerCastNode;

  43 import org.graalvm.compiler.nodes.LogicNode;
  44 import org.graalvm.compiler.nodes.ValueNode;
  45 import org.graalvm.compiler.nodes.calc.ConditionalNode;
  46 import org.graalvm.compiler.nodes.calc.IsNullNode;
  47 import org.graalvm.compiler.nodes.calc.PointerEqualsNode;
  48 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
  49 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
  50 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  51 import org.graalvm.compiler.nodes.memory.ReadNode;
  52 import org.graalvm.compiler.nodes.memory.address.AddressNode;
  53 import org.graalvm.compiler.nodes.type.StampTool;
  54 import org.graalvm.compiler.replacements.WordOperationPlugin;
  55 import org.graalvm.compiler.word.WordTypes;
  56 
  57 import jdk.vm.ci.meta.JavaKind;
  58 import jdk.vm.ci.meta.ResolvedJavaMethod;
  59 import jdk.vm.ci.meta.ResolvedJavaType;
  60 
  61 /**
  62  * Extends {@link WordOperationPlugin} to handle {@linkplain HotSpotOperation HotSpot word


 131                 b.addPush(returnKind, new PointerCastNode(KlassPointerStamp.klass(), args[0]));
 132                 break;
 133 
 134             case TO_METHOD_POINTER:
 135                 assert args.length == 1;
 136                 b.addPush(returnKind, new PointerCastNode(MethodPointerStamp.method(), args[0]));
 137                 break;
 138 
 139             case READ_KLASS_POINTER:
 140                 assert args.length == 2 || args.length == 3;
 141                 Stamp readStamp = KlassPointerStamp.klass();
 142                 AddressNode address = makeAddress(b, args[0], args[1]);
 143                 LocationIdentity location;
 144                 if (args.length == 2) {
 145                     location = any();
 146                 } else {
 147                     assert args[2].isConstant();
 148                     location = snippetReflection.asObject(LocationIdentity.class, args[2].asJavaConstant());
 149                 }
 150                 ReadNode read = b.add(new ReadNode(address, location, readStamp, BarrierType.NONE));





 151                 b.push(returnKind, read);
 152                 break;
 153 
 154             default:
 155                 throw GraalError.shouldNotReachHere("unknown operation: " + operation.opcode());
 156         }
 157     }
 158 }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotWordOperationPlugin.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File