Regalloc.RegallocSourcemodule Arch : Arch_full.Archval create_return_addresses :
(('info, 'asm) Prog.sfundef -> Z.t) ->
('info, 'asm) Prog.sfundef list ->
retaddr Jasmin.Prog.Hf.tCompute where the return address will be stored
val renaming :
(unit,
(Arch.reg,
Arch.regx,
Arch.xreg,
Arch.rflag,
Arch.cond,
Arch.asm_op,
Arch.extra_op)
Arch_extra.extended_op)
Prog.func ->
(unit,
(Arch.reg,
Arch.regx,
Arch.xreg,
Arch.rflag,
Arch.cond,
Arch.asm_op,
Arch.extra_op)
Arch_extra.extended_op)
Prog.funcval subroutine_ra_by_stack :
(unit,
(Arch.reg,
Arch.regx,
Arch.xreg,
Arch.rflag,
Arch.cond,
Arch.asm_op,
Arch.extra_op)
Arch_extra.extended_op)
Prog.func ->
boolval get_reg_oracle :
(('info, 'asm) Prog.func -> bool) ->
(Prog.var -> Prog.var) ->
(Prog.funname -> Prog.Sv.t) ->
('info, 'asm) Prog.func ->
reg_oracle_tExtract from the outcome of register allocation the information that is needed by stack-allocation. To be called on export functions only.
val alloc_prog :
retaddr Jasmin.Prog.Hf.t ->
('a
* (unit,
(Arch.reg,
Arch.regx,
Arch.xreg,
Arch.rflag,
Arch.cond,
Arch.asm_op,
Arch.extra_op)
Arch_extra.extended_op)
Prog.func)
list ->
(Prog.var ->
Prog.var)
* (Prog.funname ->
Prog.Sv.t)
* ('a
* (unit,
(Arch.reg,
Arch.regx,
Arch.xreg,
Arch.rflag,
Arch.cond,
Arch.asm_op,
Arch.extra_op)
Arch_extra.extended_op)
Prog.func)
listReturns:
Note: Export functions can freely use caller-saved registers: they are not reported as killed. Subroutines report ALL killed registers.