summaryrefslogtreecommitdiff
path: root/riscv/main.sail
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/main.sail')
-rw-r--r--riscv/main.sail24
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()
+}