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