Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/compiler/FLINT/cps/convert.sml
ViewVC logotype

Diff of /sml/trunk/compiler/FLINT/cps/convert.sml

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

revision 4539, Sat Apr 21 17:13:52 2018 UTC revision 4540, Wed Apr 25 17:06:35 2018 UTC
# Line 98  Line 98 
98    
99      fun recordNM(ul,ts,w,ce) =      fun recordNM(ul,ts,w,ce) =
100        let fun g (FLTt 64::r,u::z,l,h) =        let fun g (FLTt 64::r,u::z,l,h) =
101                  mkfn(fn v => g(r, z, (VAR v,OFFp 0)::l,                  mkfn(fn v => g(r, z, (VAR v,OFFp 0)::l, fn ce => h(wrapf64(u,v,ce))))
                               fn ce => h(wrapf64(u,v,ce))))  
102              | g (FLTt _ ::_, _, _, _) = raise Fail "unsupported FLTt size" (* REAL32: FIXME *)              | g (FLTt _ ::_, _, _, _) = raise Fail "unsupported FLTt size" (* REAL32: FIXME *)
103              | g (INTt 32::r,u::z,l,h) =              | g (INTt 32::r,u::z,l,h) =
104                  mkfn(fn v => g(r, z, (VAR v,OFFp 0)::l,                  mkfn(fn v => g(r, z, (VAR v,OFFp 0)::l, fn ce => h(wrapi32(u,v,ce))))
                                   fn ce => h(wrapi32(u,v,ce))))  
105              | g (INTt _ ::_, _, _, _) = raise Fail "unsupported INTt size" (* 64BIT: FIXME *)              | g (INTt _ ::_, _, _, _) = raise Fail "unsupported INTt size" (* 64BIT: FIXME *)
106              | g (_::r,u::z,l,h) = g(r, z, (u,OFFp0)::l, h)              | g (_::r,u::z,l,h) = g(r, z, (u,OFFp0)::l, h)
107              | g ([],[],l,h) = (rev l, h)              | g ([],[],l,h) = (rev l, h)
# Line 300  Line 298 
298     *        that gets converted to the right set of bits for the word constant.     *        that gets converted to the right set of bits for the word constant.
299     *)     *)
300      fun do_switch_gen ren = Switch.switch {      fun do_switch_gen ren = Switch.switch {
301                E_switchlimit = 4,
302              E_int    = fn i => if i < ~0x20000000 orelse i >= 0x20000000              E_int    = fn i => if i < ~0x20000000 orelse i >= 0x20000000
303                                 then raise Switch.TooBig else INT i,                                 then raise Switch.TooBig else INT i,
304              E_word   = fn w => (* if w >= 0wx20000000              E_word   = fn w => (* if w >= 0wx20000000
305                                 then raise Switch.TooBig else *) INT (Word.toIntX w),                                 then raise Switch.TooBig else *) INT (Word.toIntX w),
             E_switchlimit = 4,  
306              E_neq    = P.ineq,              E_neq    = P.ineq,
307              E_w32neq = P.cmp{oper=P.neq,kind=P.UINT 32},              E_w32neq = P.cmp{oper=P.neq,kind=P.UINT 32},
308              E_i32neq = P.cmp{oper=P.neq,kind=P.INT 32},              E_i32neq = P.cmp{oper=P.neq,kind=P.INT 32},
# Line 314  Line 312 
312              E_pneq   = P.pneq,              E_pneq   = P.pneq,
313              E_less   = P.ilt,              E_less   = P.ilt,
314              E_branch = (fn (cmp,x,y,a,b) => BRANCH(cmp,[x,y],mkv(),a,b)),              E_branch = (fn (cmp,x,y,a,b) => BRANCH(cmp,[x,y],mkv(),a,b)),
315              E_strneq = (fn (w,str,a,b) => BRANCH(P.strneq, [INT(size str), w,              E_strneq = (fn (w,str,a,b) => BRANCH(
316                                                              STRING str], mkv(), a, b)),                                  P.strneq,
317                                    [INT(size str), w, STRING str],
318                                    mkv(), a, b)),
319              E_switch = (fn (v,l) => SWITCH(v, mkv(), l)),              E_switch = (fn (v,l) => SWITCH(v, mkv(), l)),
320              E_add    = (fn (x,y,c) =>              E_add    = (fn (x,y,c) =>
321                               mkfn(fn v => ARITH(P.iadd,[x,y],v,TINTt,c(VAR v)))),                               mkfn(fn v => ARITH(P.iadd,[x,y],v,TINTt,c(VAR v)))),
# Line 436  Line 436 
436             | lpvar (F.REAL r) = REAL r             | lpvar (F.REAL r) = REAL r
437             | lpvar (F.STRING s) = STRING s             | lpvar (F.STRING s) = STRING s
438    
   
439           (* lpvars : F.value list -> value list *)           (* lpvars : F.value list -> value list *)
440           fun lpvars vl =           fun lpvars vl =
441             let fun h([], z) = rev z             let fun h([], z) = rev z
# Line 506  Line 505 
505    
506                | F.RECORD(F.RK_VECTOR _, [], v, e) =>                | F.RECORD(F.RK_VECTOR _, [], v, e) =>
507                    bug "zero length vectors in convert"                    bug "zero length vectors in convert"
508                | F.RECORD(rk, [], v, e) =>                | F.RECORD(rk, [], v, e) => let
509                    let val _ = newname(v, INT 0)                    val _ = newname(v, INT 0)
510                     in loop(e, c)                    in
511                        loop(e, c)
512                    end                    end
513                | F.RECORD(rk, vl, v, e) =>                | F.RECORD(rk, vl, v, e) =>
514                    let val ts = map get_cty vl                    let val ts = map get_cty vl

Legend:
Removed from v.4539  
changed lines
  Added in v.4540

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