Ignore:
Timestamp:
Mar 2, 2011, 11:06:58 PM (9 years ago)
Author:
ayache
Message:

Bug fixs and signed division hack in D2.2.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D2.2/8051/src/clight/clightCasts.ml

    r619 r624  
    55    will be transformed into [x + y]. *)
    66
    7 let simplify p = assert false (* TODO *)
     7let f_ctype ctype _ = ctype
     8
     9let f_expr = ClightFold.expr_fill_subs
     10
     11let f_expr_descr e sub_ctypes_res sub_exprs_res =
     12  match e, sub_exprs_res with
     13    | Clight.Ecast (Clight.Tint (Clight.I8, signedness1), _),
     14      Clight.Expr
     15        (Clight.Eunop
     16           (unop,
     17            Clight.Expr
     18              (Clight.Ecast
     19                 (Clight.Tint (Clight.I32, _),
     20                  (Clight.Expr (_, Clight.Tint (Clight.I8, signedness2)) as e)),
     21               _)),
     22         _) :: _ when signedness1 = signedness2 ->
     23      Clight.Eunop (unop, e)
     24    | Clight.Ecast (Clight.Tint (Clight.I8, signedness1), _),
     25      Clight.Expr
     26        (Clight.Ebinop
     27           (binop,
     28            Clight.Expr
     29              (Clight.Ecast
     30                 (Clight.Tint (Clight.I32, _),
     31                  (Clight.Expr (_,
     32                                Clight.Tint (Clight.I8, signedness2)) as e1)),
     33               _),
     34            Clight.Expr
     35              (Clight.Ecast
     36                 (Clight.Tint (Clight.I32, _),
     37                  (Clight.Expr (_,
     38                                Clight.Tint (Clight.I8, signedness3)) as e2)),
     39               _)),
     40         _) :: _ when signedness1 = signedness2 && signedness2 = signedness3 ->
     41      Clight.Ebinop (binop, e1, e2)
     42    | Clight.Ecast (Clight.Tint (Clight.I8, signedness1), _),
     43      Clight.Expr
     44        (Clight.Ebinop
     45           (binop,
     46            Clight.Expr
     47              (Clight.Ecast
     48                 (Clight.Tint (Clight.I32, _),
     49                  (Clight.Expr (_,
     50                                Clight.Tint (Clight.I8, signedness2)) as e1)),
     51               _),
     52            Clight.Expr (Clight.Econst_int i, _)),
     53         _) :: _ when signedness1 = signedness2 ->
     54      Clight.Ebinop (binop, e1,
     55                     Clight.Expr (Clight.Econst_int i,
     56                                  Clight.Tint (Clight.I8, signedness1)))
     57    | Clight.Ecast (Clight.Tint (Clight.I8, signedness1), _),
     58      Clight.Expr
     59        (Clight.Ebinop
     60           (binop,
     61            Clight.Expr (Clight.Econst_int i, _),
     62            Clight.Expr
     63              (Clight.Ecast
     64                 (Clight.Tint (Clight.I32, _),
     65                  (Clight.Expr (_,
     66                                Clight.Tint (Clight.I8, signedness2)) as e1)),
     67               _)),
     68         _) :: _ when signedness1 = signedness2 ->
     69      Clight.Ebinop (binop,
     70                     Clight.Expr (Clight.Econst_int i,
     71                                  Clight.Tint (Clight.I8, signedness1)),
     72                     e1)
     73    | _ -> ClightFold.expr_descr_fill_subs e sub_ctypes_res sub_exprs_res
     74
     75let f_statement = ClightFold.statement_fill_subs
     76
     77let simplify_stmt = ClightFold.statement f_ctype f_expr f_expr_descr f_statement
     78
     79let simplify_funct (id, fundef) =
     80  let fundef' = match fundef with
     81    | Clight.Internal cfun ->
     82      Clight.Internal
     83        { cfun with Clight.fn_body = simplify_stmt cfun.Clight.fn_body }
     84    | _ -> fundef in
     85  (id, fundef')
     86
     87let simplify p =
     88  { p with Clight.prog_funct = List.map simplify_funct p.Clight.prog_funct }
Note: See TracChangeset for help on using the changeset viewer.