-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathisa.ml
29 lines (27 loc) · 1.07 KB
/
isa.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
open Lib
type 't htag =
[ `RetTag
| `Tag of 't ]
type ('a, 'r, 'w) primitive =
| Load of 'r * 'a (* $rdst := mem[addr] *)
| Store of 'a * 'r (* mem[addr] := $rsrc *)
| MovReg of 'r * 'r (* $rdst := $rsrc *)
| LoadImm of 'r * 'w (* $rdst := word *)
| JmpReg of 'r (* jr $reg // $pc := $reg *)
| Add of 'r * 'r * 'r (* $rdst := $rsrc1 + $rsrc2 *)
| Sub of 'r * 'r * 'r (* $rdst := $rsrc1 - $rsrc2 *)
| BranchLT of 'a * 'r * 'r (* if ($reg1 < $reg2) then $pc := addr *)
and ('a, 't, 'r, 'w) instr =
| Enter of 'a * ('t htag * 'a) list
* 'r list * 'r list (* statusregs, esaveregs *)
| Do of 't * 'r list (* csaveregs *)
| Resume of (('t htag * 'a) list * 'r list) option (* statusregs *)
| Return
| Exit
| Break
| FinalReenter of (('t htag * 'a) list * 'r list) option * 'r list (* statusregs, hsaveregs *)
| Reenter of (('t htag * 'a) list * 'r list) option * 'r list (* statusregs, hsaveregs *)
| Primitive of ('a, 'r, 'w) primitive
| Stop
| DW of 'w
| Nop