source: Deliverables/D2.2/8051/src/ASM/MIPSInterpret.ml @ 486

Last change on this file since 486 was 486, checked in by ayache, 9 years ago

Deliverable D2.2

File size: 1.6 KB
Line 
1
2let error_prefix = "MIPS interpret"
3let error s = Error.global_error error_prefix (s ^ "\n")
4
5
6let unop = function
7  | MIPSOps.UOpAddi i -> Value.add (Value.Val_int i)
8  | MIPSOps.UOpSlti i -> (fun v -> Value.cmp_lt v (Value.Val_int i))
9  | MIPSOps.UOpSltiu i -> (fun v -> Value.cmp_lt_u v (Value.Val_int i))
10  | MIPSOps.UOpAndi i -> Value.and_op (Value.Val_int i)
11  | MIPSOps.UOpOri i -> Value.or_op (Value.Val_int i)
12  | MIPSOps.UOpXori i -> Value.xor (Value.Val_int i)
13  | MIPSOps.UOpNeg -> Value.negint
14  | MIPSOps.UOpNot -> Value.notint
15
16let binop = function
17  | MIPSOps.OpAdd -> Value.add
18  | MIPSOps.OpSub -> Value.sub
19  | MIPSOps.OpMul -> Value.mul
20  | MIPSOps.OpDiv -> Value.div
21  | MIPSOps.OpDivu -> Value.divu
22  | MIPSOps.OpModu -> Value.modulo
23  | MIPSOps.OpLt -> Value.cmp_lt
24  | MIPSOps.OpLtu -> Value.cmp_lt_u
25  | MIPSOps.OpLe -> Value.cmp_le
26  | MIPSOps.OpLeu -> Value.cmp_le_u
27  | MIPSOps.OpGt -> Value.cmp_gt
28  | MIPSOps.OpGtu -> Value.cmp_gt_u
29  | MIPSOps.OpGe -> Value.cmp_ge
30  | MIPSOps.OpGeu -> Value.cmp_ge_u
31  | MIPSOps.OpEq -> Value.cmp_eq
32  | MIPSOps.OpNe -> Value.cmp_ne
33  | MIPSOps.OpSllv -> Value.shl
34  | MIPSOps.OpSrav -> Value.shr
35  | MIPSOps.OpSrlv -> Value.shru
36  | MIPSOps.OpAnd -> Value.and_op
37  | MIPSOps.OpOr -> Value.or_op
38  | MIPSOps.OpXor -> Value.xor
39
40let fun_of_uncon = function
41  | MIPSOps.UConGez -> Value.cmp_ge
42  | MIPSOps.UConGtz -> Value.cmp_gt
43  | MIPSOps.UConLez -> Value.cmp_le
44  | MIPSOps.UConLtz -> Value.cmp_lt
45
46let uncon con = (fun_of_uncon con) (Value.Val_int 0l)
47 
48
49let bincon = function
50  | MIPSOps.ConEq -> Value.cmp_eq
51  | MIPSOps.ConNe -> Value.cmp_ne
Note: See TracBrowser for help on using the repository browser.