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

SCM Repository

[diderot] Diff of /branches/charisee_dev/src/compiler/high-il/normalize-ein.sml
ViewVC logotype

Diff of /branches/charisee_dev/src/compiler/high-il/normalize-ein.sml

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

revision 2976, Fri Mar 6 16:37:08 2015 UTC revision 3030, Tue Mar 10 01:24:41 2015 UTC
# Line 13  Line 13 
13      in      in
14    
15      fun err str=raise Fail (String.concat["Ill-formed EIN Operator",str])      fun err str=raise Fail (String.concat["Ill-formed EIN Operator",str])
16      val testing=0      val testing=1
17      fun flatProd e =F.rewriteProd e      fun flatProd e =F.rewriteProd e
18      fun mkProd e= F.mkProd e      fun mkProd e= F.mkProd e
19      fun filterSca e=F.filterSca e      fun filterSca e=F.filterSca e
# Line 104  Line 104 
104              in              in
105                  (1,g)                  (1,g)
106              end              end
 (*  
         | E.Sqrt e=>let  
             val half=E.Div(E.Const 1 ,E.Const 2)  
             val  E.Partial dels=d1  
             val del0=E.Partial([List.hd(dels)])  
             val deln=E.Partial( List.tl(dels))  
             val applydel0=E.Apply(del0,e)  
             val e1'=E.PowReal(e,E.Sub(E.Const 1,half))  
             val g=(case deln  
                 of E.Partial []=>E.Prod[half,e1',applydel0]  
                 | _ =>E.Prod[half,E.Apply(deln,E.Prod[e1',applydel0])]  
             (*end case*))  
             val _ = print(String.concat["\n*****\n found sqrt \n",  
                 P.printbody(E.Apply(d1,e1)),"\n==>\n",P.printbody g,"\n ***\n\n"])  
             in  
                 (1,g)  
             end  
 *)  
         | E.PowReal(e2,n2)=> let  
             val  E.Partial dels=d1  
             val del0=E.Partial([List.hd(dels)])  
             val deln=E.Partial( List.tl(dels))  
             val applydel0=E.Apply(del0,e2)  
             in  
                 (1,E.Prod[E.ConstR n2,E.Apply(deln,E.Prod[E.PowReal(e2,R.-(R.fromInt 1 ,n2)),applydel0])])  
             end  
107          | E.Prod []   => err("Apply of empty product")          | E.Prod []   => err("Apply of empty product")
108          | E.Add []    => err("Apply of empty Addition")          | E.Add []    => err("Apply of empty Addition")
109          | E.Conv(v, alpha, h, d2)    =>let          | E.Conv(v, alpha, h, d2)    =>let
# Line 149  Line 123 
123          | E.Neg e2    => (1,E.Neg(E.Apply(d1,e2)))          | E.Neg e2    => (1,E.Neg(E.Apply(d1,e2)))
124          | E.Add e     => (1,E.Add (List.map (fn(a)=>E.Apply(d1,a)) e))          | E.Add e     => (1,E.Add (List.map (fn(a)=>E.Apply(d1,a)) e))
125          | E.Sub (a,b) => (1,E.Sub(E.Apply(d1,a),E.Apply(d1,b)))          | E.Sub (a,b) => (1,E.Sub(E.Apply(d1,a),E.Apply(d1,b)))
         | E.Div (E.Const g, b) =>(1,E.Div(E.Const g,E.Apply(d1,b)))  
126          | E.Div (g,E.Const b) =>(1,E.Div(E.Apply(d1,g),E.Const b))          | E.Div (g,E.Const b) =>(1,E.Div(E.Apply(d1,g),E.Const b))
127            (*| E.Div(E.Const c,e)=>(1,E.Div(E.Const c,E.Apply(d1,e)))*)
128          | E.Div (g,b) => let          | E.Div (g,b) => let
129              val (c,EE)=(case filterField[b]              val (c,EE)=(case filterField[b]
130              of (_,[]) => (1,E.Div(E.Apply(d1,g),b)) (*Division by a real*)              of (_,[]) => (1,E.Div(E.Apply(d1,g),b)) (*Division by a real*)
# Line 162  Line 136 
136                  val deln=E.Partial( List.tl(dels))                  val deln=E.Partial( List.tl(dels))
137                  val g'=E.Apply(del0,g)                  val g'=E.Apply(del0,g)
138                  val h'=E.Apply(del0,flatProd(h))                  val h'=E.Apply(del0,flatProd(h))
139                  val num=E.Sub(E.Prod([g']@h),E.Prod[g,h'])                  val num=(case g
140                        of E.Const 1    => E.Prod[E.Const ~1,h']
141                        | E.Const c     => E.Neg(E.Prod[g,h'])
142                        | _             => E.Sub(E.Prod([g']@h),E.Prod[g,h'])
143                        (*end case*))
144                  val denom=E.Prod(pre@h@h)                  val denom=E.Prod(pre@h@h)
145                      val e=(case deln                      val e=(case deln
146                      of E.Partial []=>E.Div(num,denom)                      of E.Partial []=>E.Div(num,denom)

Legend:
Removed from v.2976  
changed lines
  Added in v.3030

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