Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/translate/translate-basis.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/translate/translate-basis.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2447, Sat Sep 28 18:10:51 2013 UTC revision 2485, Mon Oct 21 16:34:57 2013 UTC
# Line 25  Line 25 
25      structure TU = TypeUtil      structure TU = TypeUtil
26      structure MV = MetaVar      structure MV = MetaVar
27      structure VTbl = Var.Tbl      structure VTbl = Var.Tbl
   
28      structure EinOp= Operators      structure EinOp= Operators
29      structure S=Specialize      structure S=Specialize
30    
# Line 96  Line 95 
95    
96      fun assignEin (y, rator, xs) = [IL.ASSGN(y, IL.EINAPP(rator, xs))]      fun assignEin (y, rator, xs) = [IL.ASSGN(y, IL.EINAPP(rator, xs))]
97    
98        fun assignEin2 (y, rator, xs) = IL.ASSGN(y, IL.EINAPP(rator, xs))
99    
100      fun simpleEinOp rator (y, _,xs) = assignEin(y, rator, xs)      fun simpleEinOp rator (y, _,xs) = assignEin(y, rator, xs)
101    
102      fun peelFieldSK SK=[2]  (*(case TU.pruneShape(MV.toShape SK)      fun peelFieldSK SK=[2]  (*(case TU.pruneShape(MV.toShape SK)
# Line 114  Line 115 
115    
116    
117    
118    
119    
120      fun scalarField(einop,paramarg,y,xs)=      fun scalarField(einop,paramarg,y,xs)=
121              let val paramarg'=List.map dimVarToInt  paramarg(*[2]*)              let val paramarg'=List.map dimVarToInt  paramarg(*[2]*)
122                  val rator=S.transform(einop, [[]],paramarg')                  val rator=S.transform(einop, [[]],paramarg')
# Line 171  Line 174 
174                  (BV.sub_ff,             fn (y, [_,NK,SK], xs)=>singleField(SK,EinOp.subField, [NK,NK],y,xs)),                  (BV.sub_ff,             fn (y, [_,NK,SK], xs)=>singleField(SK,EinOp.subField, [NK,NK],y,xs)),
175                  (BV.sub_fr,             fn (y, [_,NK], xs) =>     scalarField(EinOp.subField,[NK], y,xs)),                  (BV.sub_fr,             fn (y, [_,NK], xs) =>     scalarField(EinOp.subField,[NK], y,xs)),
176                  (BV.sub_rf,             fn (y, [_,NK], [s, f]) => scalarField(EinOp.subField,[NK], y,[f, s])),                  (BV.sub_rf,             fn (y, [_,NK], [s, f]) => scalarField(EinOp.subField,[NK], y,[f, s])),
177  (* CHANEG create negative subtraction*)  
178                    (* CHANGE create negative subtraction*)
179                  (BV.mul_ii,             simpleOp Op.IMul),                  (BV.mul_ii,             simpleOp Op.IMul),
180                  (BV.mul_rr,             simpleOp Op.IMul),                  (BV.mul_rr,             fn (y,_,args)=>
181                                assignEin(y, EinOp.prodScalar,args)),
182    
183                  (BV.mul_rt,             tensorEinOp EinOp.scaleTensor),                  (BV.mul_rt,             tensorEinOp EinOp.scaleTensor),
184                  (BV.mul_tr,             fn (y, [SK], [t, r])=>let                  (BV.mul_tr,             fn (y, [SK], [t, r])=>let
185                                           val ty1 as DstTy.TensorTy dd1 = pruneShape SK                                           val ty1 as DstTy.TensorTy dd1 = pruneShape SK
# Line 191  Line 197 
197                  (BV.mul_fr,             fn (y, [_,NK,SK], [f, s])=> singleField(SK,EinOp.scaleField, [NK],y,[s,f])),                  (BV.mul_fr,             fn (y, [_,NK,SK], [f, s])=> singleField(SK,EinOp.scaleField, [NK],y,[s,f])),
198    
199                  (BV.div_ii,             simpleOp Op.IDiv),                  (BV.div_ii,             simpleOp Op.IDiv),
200                  (BV.div_rr,             simpleOp Op.IDiv),                  (BV.div_rr,              fn (y,_,args)=>
201                                assignEin(y, EinOp.divScalar,args)),
202    
203                 (BV.div_tr,             tensorEinOp EinOp.divideTensor),                 (BV.div_tr,             tensorEinOp EinOp.divideTensor),
204    
# Line 265  Line 271 
271                  (BV.clamp_vvv,          vectorOp Op.Clamp),                  (BV.clamp_vvv,          vectorOp Op.Clamp),
272                  (BV.lerp3,              tensorOp Op.Lerp),                  (BV.lerp3,              tensorOp Op.Lerp),
273                  (BV.lerp5,              fn (y, [sv], [a, b, x0, x, x1]) => let                  (BV.lerp5,              fn (y, [sv], [a, b, x0, x, x1]) => let
274                        (*assignEin(y, EinOp.subScalar,[x,x0])),*)
275    
276                                            val t1 = IL.Var.new("t1", DstTy.realTy)                                            val t1 = IL.Var.new("t1", DstTy.realTy)
277                                            val t2 = IL.Var.new("t2", DstTy.realTy)                                            val t2 = IL.Var.new("t2", DstTy.realTy)
278                                            val t3 = IL.Var.new("t3", DstTy.realTy)                                            val t3 = IL.Var.new("t3", DstTy.realTy)
279                                            in [                                            in [
280                                              IL.ASSGN(t1, IL.OP(Op.ISub, [x, x0])),                                              assignEin2(t1, EinOp.subScalar,[x,x0]),
281                                              IL.ASSGN(t2, IL.OP(Op.ISub, [x1, x0])),                                              assignEin2(t2, EinOp.subScalar,[x1,x0]),
282                                              IL.ASSGN(t3, IL.OP(Op.IDiv, [t1, t2])),                                              assignEin2(t3, EinOp.divScalar,[t1,t2]),
283    
284                                              IL.ASSGN(y,  IL.OP(Op.Lerp(shapeVarToTensor sv), [a, b, t3]))                                              IL.ASSGN(y,  IL.OP(Op.Lerp(shapeVarToTensor sv), [a, b, t3]))
285                                            ] end),                                            ] end),
286                  (BV.evals2x2,           eigenVal (Op.Eigen2x2, 2)),                  (BV.evals2x2,           eigenVal (Op.Eigen2x2, 2)),

Legend:
Removed from v.2447  
changed lines
  Added in v.2485

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0