* add neg
* change fmt_instr
This commit is contained in:
parent
9480a8aba2
commit
af7799ea2c
1 changed files with 25 additions and 18 deletions
43
mips.ml
43
mips.ml
|
@ -44,6 +44,7 @@ type instr =
|
|||
| Sb of reg * loc
|
||||
| Lb of reg * loc
|
||||
| Move of reg * reg
|
||||
| Neg of reg * reg
|
||||
| Addi of reg * reg * int
|
||||
| Add of reg * reg * reg
|
||||
| Mul of reg * reg * reg
|
||||
|
@ -112,24 +113,30 @@ let fmt_loc = function
|
|||
;;
|
||||
|
||||
let fmt_instr = function
|
||||
| Label l -> Printf.sprintf "%s:" l
|
||||
| Li (r, i) -> Printf.sprintf " li %s, %d" (fmt_reg r) i
|
||||
| La (r, a) -> Printf.sprintf " la %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Sw (r, a) -> Printf.sprintf " sw %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Lw (r, a) -> Printf.sprintf " lw %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Sb (r, a) -> Printf.sprintf " sb %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Lb (r, a) -> Printf.sprintf " lb %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Move (rd, rs) -> Printf.sprintf " move %s, %s" (fmt_reg rd) (fmt_reg rs)
|
||||
| Addi (rd, rs, i) -> Printf.sprintf " addi %s, %s, %d" (fmt_reg rd) (fmt_reg rs) i
|
||||
| Add (rd, rs, rt) ->
|
||||
Printf.sprintf " add %s, %s, %s" (fmt_reg rd) (fmt_reg rs) (fmt_reg rt)
|
||||
| Mul (rd, rs, rt) ->
|
||||
Printf.sprintf " mul %s, %s, %s" (fmt_reg rd) (fmt_reg rs) (fmt_reg rt)
|
||||
| Syscall -> Printf.sprintf " syscall"
|
||||
| B l -> Printf.sprintf " b %s" l
|
||||
| Beqz (r, l) -> Printf.sprintf " beqz %s, %s" (fmt_reg r) l
|
||||
| Jal l -> Printf.sprintf " jal %s" l
|
||||
| Jr r -> Printf.sprintf " jr %s" (fmt_reg r)
|
||||
| Label _ -> ""
|
||||
| _ as i ->
|
||||
Printf.sprintf " "
|
||||
^
|
||||
(match i with
|
||||
| Label l -> Printf.sprintf "%s:" l
|
||||
| Li (r, i) -> Printf.sprintf "li %s, %d" (fmt_reg r) i
|
||||
| La (r, a) -> Printf.sprintf "la %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Sw (r, a) -> Printf.sprintf "sw %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Lw (r, a) -> Printf.sprintf "lw %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Sb (r, a) -> Printf.sprintf "sb %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Lb (r, a) -> Printf.sprintf "lb %s, %s" (fmt_reg r) (fmt_loc a)
|
||||
| Move (rd, rs) -> Printf.sprintf "move %s, %s" (fmt_reg rd) (fmt_reg rs)
|
||||
| Neg (r, a) -> Printf.sprintf "neg %s, %s" (fmt_reg r) (fmt_reg a)
|
||||
| Addi (rd, rs, i) -> Printf.sprintf "addi %s, %s, %d" (fmt_reg rd) (fmt_reg rs) i
|
||||
| Add (rd, rs, rt) ->
|
||||
Printf.sprintf "add %s, %s, %s" (fmt_reg rd) (fmt_reg rs) (fmt_reg rt)
|
||||
| Mul (rd, rs, rt) ->
|
||||
Printf.sprintf "mul %s, %s, %s" (fmt_reg rd) (fmt_reg rs) (fmt_reg rt)
|
||||
| Syscall -> Printf.sprintf "syscall"
|
||||
| B l -> Printf.sprintf "b %s" l
|
||||
| Beqz (r, l) -> Printf.sprintf "beqz %s, %s" (fmt_reg r) l
|
||||
| Jal l -> Printf.sprintf "jal %s" l
|
||||
| Jr r -> Printf.sprintf "jr %s" (fmt_reg r))
|
||||
;;
|
||||
|
||||
let fmt_dir = function
|
||||
|
|
Reference in a new issue