summaryrefslogtreecommitdiff
path: root/lib/int128/rts.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/int128/rts.h')
-rw-r--r--lib/int128/rts.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/lib/int128/rts.h b/lib/int128/rts.h
new file mode 100644
index 00000000..4c5375ae
--- /dev/null
+++ b/lib/int128/rts.h
@@ -0,0 +1,108 @@
+#pragma once
+
+#include<inttypes.h>
+#include<stdlib.h>
+#include<stdio.h>
+
+#include"sail.h"
+
+/*
+ * This function should be called whenever a pattern match failure
+ * occurs. Pattern match failures are always fatal.
+ */
+void sail_match_failure(sail_string msg);
+
+/*
+ * sail_assert implements the assert construct in Sail. If any
+ * assertion fails we immediately exit the model.
+ */
+unit sail_assert(bool b, sail_string msg);
+
+unit sail_exit(unit);
+
+/*
+ * sail_get_verbosity reads a 64-bit value that the C runtime allows you to set
+ * on the command line.
+ * The intention is that you can use individual bits to turn on/off different
+ * pieces of debugging output.
+ */
+fbits sail_get_verbosity(const unit u);
+
+/*
+ * Put processor to sleep until an external device calls wakeup_request().
+ */
+unit sleep_request(const unit u);
+
+/*
+ * Stop processor sleeping.
+ * (Typically called when a device generates an interrupt.)
+ */
+unit wakeup_request(const unit u);
+
+/*
+ * Test whether processor is sleeping.
+ * (Typically used to disable execution of instructions.)
+ */
+bool sleeping(const unit u);
+
+/* ***** Memory builtins ***** */
+
+void write_mem(uint64_t, uint64_t);
+uint64_t read_mem(uint64_t);
+
+// These memory builtins are intended to match the semantics for the
+// __ReadRAM and __WriteRAM functions in ASL.
+
+bool write_ram(const sail_int addr_size, // Either 32 or 64
+ const sail_int data_size_mpz, // Number of bytes
+ const lbits hex_ram, // Currently unused
+ const lbits addr_bv,
+ const lbits data);
+
+void read_ram(lbits *data,
+ const sail_int addr_size,
+ const sail_int data_size_mpz,
+ const lbits hex_ram,
+ const lbits addr_bv);
+
+sbits fast_read_ram(const int64_t data_size,
+ const uint64_t addr_bv);
+
+unit write_tag_bool(const fbits, const bool);
+bool read_tag_bool(const fbits);
+
+unit load_raw(fbits addr, const sail_string file);
+
+void load_image(char *);
+
+/*
+ * Functions for counting and limiting cycles
+ */
+
+// increment cycle count and test if over limit
+bool cycle_limit_reached(const unit);
+
+// increment cycle count and abort if over
+unit cycle_count(const unit);
+
+// read cycle count
+sail_int get_cycle_count(const unit);
+
+/*
+ * Functions to get info from ELF files.
+ */
+
+sail_int elf_entry(const unit u);
+sail_int elf_tohost(const unit u);
+
+int process_arguments(int, char**);
+
+/*
+ * setup_rts and cleanup_rts are responsible for calling setup_library
+ * and cleanup_library in sail.h.
+ */
+void setup_rts(void);
+void cleanup_rts(void);
+
+unit z__SetConfig(sail_string, sail_int);
+unit z__ListConfig(const unit u);