Module Backend.Machine

Copyright 2024, Mikhail Gavrilenko, Danila Rudnev-Stepanyan, Daniel Vlasenko

SPDX-License-Identifier: LGPL-3.0-or-later

type reg =
  1. | A of int
  2. | T of int
  3. | S of int
  4. | RA
  5. | SP
  6. | Zero
val equal_reg : reg -> reg -> bool
val pp_reg : Stdlib.Format.formatter -> reg -> unit
type offset = reg * int
type instr =
  1. | Addi of reg * reg * int
  2. | Add of reg * reg * reg
  3. | Sub of reg * reg * reg
  4. | Mul of reg * reg * reg
  5. | Slt of reg * reg * reg
  6. | Seqz of reg * reg
  7. | Snez of reg * reg
  8. | Xor of reg * reg * reg
  9. | Xori of reg * reg * int
  10. | Beq of reg * reg * string
  11. | Blt of reg * reg * string
  12. | Ble of reg * reg * string
  13. | Lla of reg * string
  14. | Li of reg * int
  15. | Ld of reg * offset
  16. | Sd of reg * offset
  17. | Mv of reg * reg
  18. | Comment of string
  19. | Label of string
  20. | Call of string
  21. | J of string
  22. | Ecall
  23. | Ret
  24. | La of reg * string
  25. | Slli of reg * reg * int
  26. | Srai of reg * reg * int
val pp_instr : Stdlib.Format.formatter -> instr -> unit
val addi : (instr -> 'a) -> reg -> reg -> int -> 'a
val add : (instr -> 'a) -> reg -> reg -> reg -> 'a
val sub : (instr -> 'a) -> reg -> reg -> reg -> 'a
val mul : (instr -> 'a) -> reg -> reg -> reg -> 'a
val slt : (instr -> 'a) -> reg -> reg -> reg -> 'a
val seqz : (instr -> 'a) -> reg -> reg -> 'a
val snez : (instr -> 'a) -> reg -> reg -> 'a
val xor : (instr -> 'a) -> reg -> reg -> reg -> 'a
val xori : (instr -> 'a) -> reg -> reg -> int -> 'a
val li : (instr -> 'a) -> reg -> int -> 'a
val ecall : (instr -> 'a) -> 'a
val call : (instr -> 'a) -> string -> 'a
val ret : (instr -> 'a) -> 'a
val lla : (instr -> 'a) -> reg -> string -> 'a
val ld : (instr -> 'a) -> reg -> offset -> 'a
val sd : (instr -> 'a) -> reg -> offset -> 'a
val mv : (instr -> 'a) -> reg -> reg -> 'a
val beq : (instr -> 'a) -> reg -> reg -> string -> 'a
val blt : (instr -> 'a) -> reg -> reg -> string -> 'a
val ble : (instr -> 'a) -> reg -> reg -> string -> 'a
val j : (instr -> 'a) -> string -> 'a
val la : (instr -> 'a) -> reg -> string -> 'a
val comment : (instr -> 'a) -> string -> 'a
val label : (instr -> 'a) -> string -> 'a
val slli : (instr -> 'a) -> reg -> reg -> int -> 'a
val srai : (instr -> 'a) -> reg -> reg -> int -> 'a