graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java

Print this page
rev 8592 : Graal PTX enhancements


  63         @Override
  64         public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) {
  65             masm.at();
  66             Label l = destination.label();
  67             l.addPatchAt(tasm.asm.codeBuffer.position());
  68             String target = l.isBound() ? "L" + l.toString() : AbstractPTXAssembler.UNBOUND_TARGET;
  69             masm.bra(target);
  70         }
  71 
  72         @Override
  73         public LabelRef destination() {
  74             return destination;
  75         }
  76 
  77         @Override
  78         public void negate(LabelRef newDestination) {
  79             destination = newDestination;
  80             condition = condition.negate();
  81         }
  82     }













































  83 }


  63         @Override
  64         public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) {
  65             masm.at();
  66             Label l = destination.label();
  67             l.addPatchAt(tasm.asm.codeBuffer.position());
  68             String target = l.isBound() ? "L" + l.toString() : AbstractPTXAssembler.UNBOUND_TARGET;
  69             masm.bra(target);
  70         }
  71 
  72         @Override
  73         public LabelRef destination() {
  74             return destination;
  75         }
  76 
  77         @Override
  78         public void negate(LabelRef newDestination) {
  79             destination = newDestination;
  80             condition = condition.negate();
  81         }
  82     }
  83     
  84     public static class CondMoveOp extends PTXLIRInstruction {
  85         @Def({REG, HINT}) protected Value result;
  86         @Alive({REG}) protected Value trueValue;
  87         @Use({REG, STACK, CONST}) protected Value falseValue;
  88         private final Condition condition;
  89 
  90         public CondMoveOp(Variable result, Condition condition, Variable trueValue, Value falseValue) {
  91             this.result = result;
  92             this.condition = condition;
  93             this.trueValue = trueValue;
  94             this.falseValue = falseValue;
  95         }
  96 
  97         @Override
  98         public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) {
  99             // cmove(tasm, masm, result, false, condition, false, trueValue, falseValue);
 100                 // see 8.3 Predicated Execution p. 61 of PTX ISA 3.1
 101             throw new InternalError("NYI");
 102         }
 103     }
 104 
 105 
 106     public static class FloatCondMoveOp extends PTXLIRInstruction {
 107         @Def({REG}) protected Value result;
 108         @Alive({REG}) protected Value trueValue;
 109         @Alive({REG}) protected Value falseValue;
 110         private final Condition condition;
 111         private final boolean unorderedIsTrue;
 112 
 113         public FloatCondMoveOp(Variable result, Condition condition, boolean unorderedIsTrue, Variable trueValue, Variable falseValue) {
 114             this.result = result;
 115             this.condition = condition;
 116             this.unorderedIsTrue = unorderedIsTrue;
 117             this.trueValue = trueValue;
 118             this.falseValue = falseValue;
 119         }
 120 
 121         @Override
 122         public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) {
 123             // cmove(tasm, masm, result, true, condition, unorderedIsTrue, trueValue, falseValue);
 124             // see 8.3 Predicated Execution p. 61 of PTX ISA 3.1
 125             throw new InternalError("NYI");
 126         }
 127     }
 128 }