Module Architecture.Riscv_backend

type reg =
  1. | Zero
  2. | RA
  3. | SP
  4. | A of int
  5. | T of int
  6. | S of int
val equal_reg : reg -> reg -> Ppx_deriving_runtime.bool
type offset = reg * int
type instr =
  1. | Addi of reg * reg * int
  2. | Ld of reg * offset
  3. | Sd of reg * offset
  4. | Mv of reg * reg
  5. | Li of reg * int
  6. | Add of reg * reg * reg
  7. | Sub of reg * reg * reg
  8. | Call of string
  9. | Ret
  10. | Beq of reg * reg * string
  11. | J of string
  12. | Label of string
  13. | La of reg * string
  14. | Slt of reg * reg * reg
  15. | Seqz of reg * reg
  16. | Snez of reg * reg
  17. | Xori of reg * reg * int
  18. | Xor of reg * reg * reg
  19. | Mul of reg * reg * reg
  20. | Div of reg * reg * reg
  21. | Slli of reg * reg * int
  22. | Srli of reg * reg * int
val pp_reg : Stdlib.Format.formatter -> reg -> unit
val pp_offset : Stdlib.Format.formatter -> offset -> unit
val pp_instr : Stdlib.Format.formatter -> instr -> unit
val tag_int : int -> int
val fp : reg
val sp : reg
val ra : reg
val zero : reg
val a0 : reg
val a1 : reg
val a2 : reg
val a3 : reg
val a4 : reg
val a5 : reg
val a6 : reg
val a7 : reg
val t0 : reg
val t1 : reg
val result_reg : reg
val addi : reg -> reg -> int -> instr list
val ld : reg -> offset -> instr list
val sd : reg -> offset -> instr list
val mv : reg -> reg -> instr list
val li : reg -> int -> instr list
val add : reg -> reg -> reg -> instr list
val sub : reg -> reg -> reg -> instr list
val call : string -> instr list
val ret : unit -> instr list
val beq : reg -> reg -> string -> instr list
val j : string -> instr list
val label : string -> instr list
val la : reg -> string -> instr list
val slt : reg -> reg -> reg -> instr list
val seqz : reg -> reg -> instr list
val snez : reg -> reg -> instr list
val xori : reg -> reg -> int -> instr list
val xor : reg -> reg -> reg -> instr list
val mul : reg -> reg -> reg -> instr list
val div : reg -> reg -> reg -> instr list
val slli : reg -> reg -> int -> instr list
val srli : reg -> reg -> int -> instr list
val add_tag_items : reg -> int -> instr list
val arg_regs : reg list
val candidate_regs_for_spill : reg list
val arg_regs_count : int
val word_size : int
val stack_align : int
val frame_header_size : int
val saved_fp_offset : int
val saved_ra_offset : int
val max_addi_imm : int
val sub_sp : int -> instr list
val addi_or_li_add : reg -> reg -> int -> instr list
val sd_at_sp_offset : reg -> int -> instr list
type location =
  1. | Loc_reg of reg
  2. | Loc_mem of offset
val prologue : enable_gc:bool -> name:string -> stack_size:int -> instr list
val epilogue : enable_gc:bool -> is_main:bool -> instr list
val format_item : Stdlib.Format.formatter -> instr -> unit