diff options
Diffstat (limited to 'riscv/main.sail')
| -rw-r--r-- | riscv/main.sail | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/riscv/main.sail b/riscv/main.sail new file mode 100644 index 00000000..f7099398 --- /dev/null +++ b/riscv/main.sail @@ -0,0 +1,24 @@ +val fetch_and_execute : unit -> unit effect {barr, eamem, escape, exmem, rmem, rreg, wmv, wreg} + +function break () : unit -> unit = () + +function fetch_and_execute () = while true do { + let instr = __RISCV_read(PC, 4); + nextPC = PC + 4; + let instr_ast = decode(instr); + break (); + match instr_ast { + Some(ast) => execute(ast), + None => exit (()) + }; + PC = nextPC +} + +val elf_entry = "Elf_loader.elf_entry" : unit -> int + +val main : unit -> unit effect {barr, eamem, escape, exmem, rmem, rreg, wmv, wreg} + +function main () = { + PC = __GetSlice_int(64, elf_entry(), 0); + fetch_and_execute() +} |
