< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/LogicCompareAndSwapNode.java

Print this page
rev 52509 : [mq]: graal2


  39 import jdk.internal.vm.compiler.word.LocationIdentity;
  40 
  41 import jdk.vm.ci.meta.JavaConstant;
  42 import jdk.vm.ci.meta.JavaKind;
  43 import jdk.vm.ci.meta.Value;
  44 
  45 /**
  46  * Represents the low-level version of an atomic compare-and-swap operation.
  47  *
  48  * This version returns a boolean indicating is the CAS was successful or not.
  49  */
  50 @NodeInfo(cycles = CYCLES_8, size = SIZE_8)
  51 public final class LogicCompareAndSwapNode extends AbstractCompareAndSwapNode {
  52     public static final NodeClass<LogicCompareAndSwapNode> TYPE = NodeClass.create(LogicCompareAndSwapNode.class);
  53 
  54     public LogicCompareAndSwapNode(ValueNode address, ValueNode expectedValue, ValueNode newValue, LocationIdentity location) {
  55         this((AddressNode) address, location, expectedValue, newValue, BarrierType.NONE);
  56     }
  57 
  58     public LogicCompareAndSwapNode(AddressNode address, LocationIdentity location, ValueNode expectedValue, ValueNode newValue, BarrierType barrierType) {
  59         super(TYPE, address, location, expectedValue, newValue, barrierType, StampFactory.forKind(JavaKind.Boolean.getStackKind()));
  60     }
  61 
  62     @Override
  63     public void generate(NodeLIRBuilderTool gen) {
  64         assert getNewValue().stamp(NodeView.DEFAULT).isCompatible(getExpectedValue().stamp(NodeView.DEFAULT));
  65         assert !this.canDeoptimize();
  66         LIRGeneratorTool tool = gen.getLIRGeneratorTool();
  67 
  68         LIRKind resultKind = tool.getLIRKind(stamp(NodeView.DEFAULT));
  69         Value trueResult = tool.emitConstant(resultKind, JavaConstant.TRUE);
  70         Value falseResult = tool.emitConstant(resultKind, JavaConstant.FALSE);
  71         Value result = tool.emitLogicCompareAndSwap(tool.getLIRKind(getAccessStamp()), gen.operand(getAddress()), gen.operand(getExpectedValue()), gen.operand(getNewValue()), trueResult, falseResult);
  72 
  73         gen.setResult(this, result);
  74     }
  75 }


  39 import jdk.internal.vm.compiler.word.LocationIdentity;
  40 
  41 import jdk.vm.ci.meta.JavaConstant;
  42 import jdk.vm.ci.meta.JavaKind;
  43 import jdk.vm.ci.meta.Value;
  44 
  45 /**
  46  * Represents the low-level version of an atomic compare-and-swap operation.
  47  *
  48  * This version returns a boolean indicating is the CAS was successful or not.
  49  */
  50 @NodeInfo(cycles = CYCLES_8, size = SIZE_8)
  51 public final class LogicCompareAndSwapNode extends AbstractCompareAndSwapNode {
  52     public static final NodeClass<LogicCompareAndSwapNode> TYPE = NodeClass.create(LogicCompareAndSwapNode.class);
  53 
  54     public LogicCompareAndSwapNode(ValueNode address, ValueNode expectedValue, ValueNode newValue, LocationIdentity location) {
  55         this((AddressNode) address, location, expectedValue, newValue, BarrierType.NONE);
  56     }
  57 
  58     public LogicCompareAndSwapNode(AddressNode address, LocationIdentity location, ValueNode expectedValue, ValueNode newValue, BarrierType barrierType) {
  59         super(TYPE, address, location, expectedValue, newValue, barrierType, StampFactory.forInteger(JavaKind.Int, 0, 1));
  60     }
  61 
  62     @Override
  63     public void generate(NodeLIRBuilderTool gen) {
  64         assert getNewValue().stamp(NodeView.DEFAULT).isCompatible(getExpectedValue().stamp(NodeView.DEFAULT));
  65         assert !this.canDeoptimize();
  66         LIRGeneratorTool tool = gen.getLIRGeneratorTool();
  67 
  68         LIRKind resultKind = tool.getLIRKind(stamp(NodeView.DEFAULT));
  69         Value trueResult = tool.emitConstant(resultKind, JavaConstant.TRUE);
  70         Value falseResult = tool.emitConstant(resultKind, JavaConstant.FALSE);
  71         Value result = tool.emitLogicCompareAndSwap(tool.getLIRKind(getAccessStamp()), gen.operand(getAddress()), gen.operand(getExpectedValue()), gen.operand(getNewValue()), trueResult, falseResult);
  72 
  73         gen.setResult(this, result);
  74     }
  75 }
< prev index next >