Browse Source

fixes for format 3.1.1 / agal2

Nicolas Cannasse 11 years ago
parent
commit
ee9dd1123c
1 changed files with 24 additions and 3 deletions
  1. 24 3
      hxsl/AgalOptim.hx

+ 24 - 3
hxsl/AgalOptim.hx

@@ -647,7 +647,7 @@ class AgalOptim {
 			else
 			else
 				reg(v, false);
 				reg(v, false);
 			reg(d, true);
 			reg(d, true);
-		case OTex(d, v, _), ORcp(d, v), OFrc(d,v),OSqt(d,v), ORsq(d,v), OLog(d,v),OExp(d,v), ONrm(d,v), OSin(d,v), OCos(d,v), OAbs(d,v), ONeg(d,v), OSat(d,v):
+		case OTex(d, v, _), ORcp(d, v), OFrc(d,v),OSqt(d,v), ORsq(d,v), OLog(d,v),OExp(d,v), ONrm(d,v), OSin(d,v), OCos(d,v), OAbs(d,v), ONeg(d,v), OSat(d,v), OSgn(d,v):
 			reg(v,false);
 			reg(v,false);
 			reg(d,true);
 			reg(d,true);
 		case OAdd(d, a, b), OSub(d, a, b), OMul(d, a, b), ODiv(d, a, b), OMin(d, a, b), OMax(d, a, b),
 		case OAdd(d, a, b), OSub(d, a, b), OMul(d, a, b), ODiv(d, a, b), OMin(d, a, b), OMax(d, a, b),
@@ -668,6 +668,13 @@ class AgalOptim {
 			reg(offset(b, 2), false);
 			reg(offset(b, 2), false);
 			reg(offset(b, 3), false);
 			reg(offset(b, 3), false);
 			reg(d, true);
 			reg(d, true);
+		case OIne(a, b), OIfe(a, b), OIfg(a, b), OIfl(a, b):
+			reg(a, false);
+			reg(b, false);
+		case ODdx(d, v), ODdy(d,v):
+			reg(v, false);
+			reg(d, true);
+		case OEls, OEif:
 		}
 		}
 	}
 	}
 
 
@@ -681,6 +688,11 @@ class AgalOptim {
 			b = r(b, false);
 			b = r(b, false);
 			return op(r(d, true), a, b);
 			return op(r(d, true), a, b);
 		}
 		}
+		inline function cond(a, b, op) {
+			a = r(a, false);
+			b = r(b, false);
+			return op(a, b);
+		}
 		return switch( op ) {
 		return switch( op ) {
 		case OMov(d, v): unop(d, v, OMov);
 		case OMov(d, v): unop(d, v, OMov);
 		case OAdd(d, a, b): binop(d, a, b, OAdd);
 		case OAdd(d, a, b): binop(d, a, b, OAdd);
@@ -706,8 +718,17 @@ class AgalOptim {
 		case ONeg(d, v): unop(d, v, ONeg);
 		case ONeg(d, v): unop(d, v, ONeg);
 		case OSat(d, v): unop(d, v, OSat);
 		case OSat(d, v): unop(d, v, OSat);
 		case OM33(d, a, b): binop(d, a, b, OM33);
 		case OM33(d, a, b): binop(d, a, b, OM33);
-		case OM34(d, a, b): binop(d, a, b, OM34);
 		case OM44(d, a, b): binop(d, a, b, OM44);
 		case OM44(d, a, b): binop(d, a, b, OM44);
+		case OM34(d, a, b): binop(d, a, b, OM34);
+		case ODdx(d, v): unop(d, v, ODdx);
+		case ODdy(d, v): unop(d, v, ODdy);
+		case OIfe(a, b): cond(a, b, OIfe);
+		case OIne(a, b): cond(a, b, OIne);
+		case OIfg(a, b): cond(a, b, OIfg);
+		case OIfl(a, b): cond(a, b, OIfl);
+		case OEls: OEls;
+		case OEif: OEif;
+		case OUnused: OUnused;
 		case OKil(v):
 		case OKil(v):
 			OKil(r(v, false));
 			OKil(r(v, false));
 		case OTex(d, v, t):
 		case OTex(d, v, t):
@@ -715,7 +736,7 @@ class AgalOptim {
 			OTex(r(d, true), v, t);
 			OTex(r(d, true), v, t);
 		case OSge(d, a, b): binop(d, a, b, OSge);
 		case OSge(d, a, b): binop(d, a, b, OSge);
 		case OSlt(d, a, b): binop(d, a, b, OSlt);
 		case OSlt(d, a, b): binop(d, a, b, OSlt);
-		case OUnused: OUnused;
+		case OSgn(d, v): unop(d, v, OSgn);
 		case OSeq(d, a, b): binop(d, a, b, OSeq);
 		case OSeq(d, a, b): binop(d, a, b, OSeq);
 		case OSne(d, a, b): binop(d, a, b, OSne);
 		case OSne(d, a, b): binop(d, a, b, OSne);
 		}
 		}