ソースを参照

added limited discard support

Nicolas Cannasse 11 年 前
コミット
833a2036d1
1 ファイル変更15 行追加0 行削除
  1. 15 0
      hxsl/AgalOut.hx

+ 15 - 0
hxsl/AgalOut.hx

@@ -285,6 +285,21 @@ class AgalOut {
 		case TSwiz(e, regs):
 			var r = expr(e);
 			return swiz(r, [for( r in regs ) COMPS[r.getIndex()]]);
+		case TIf( cond, { e : TDiscard }, null ):
+			switch( cond.e ) {
+			case TBinop(bop = OpLt | OpGt, e1, e2) if( e1.t == TFloat ):
+				if( bop == OpGt ) {
+					var tmp = e1;
+					e1 = e2;
+					e2 = e1;
+				}
+				var r = allocReg(TFloat);
+				op(OSub(r, expr(e1), expr(e2)));
+				op(OKil(r));
+				return nullReg;
+			default:
+				throw "Discard cond not supported " + e.e;
+			}
 		default:
 			throw "TODO " + e.e;
 		}