summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/rts.c5
-rw-r--r--lib/sail.c7
-rw-r--r--lib/sail.h1
3 files changed, 11 insertions, 2 deletions
diff --git a/lib/rts.c b/lib/rts.c
index 61f772cf..fa8830e4 100644
--- a/lib/rts.c
+++ b/lib/rts.c
@@ -25,7 +25,7 @@ unit sail_exit(unit u)
unit sleep_request(const unit u)
{
fprintf(stderr, "Sail model going to sleep\n");
- exit(EXIT_SUCCESS);
+ return UNIT;
}
/* ***** Sail memory builtins ***** */
@@ -176,7 +176,8 @@ unit load_raw(mach_bits addr, const sail_string file)
return UNIT;
}
-void load_image(char *file) {
+void load_image(char *file)
+{
FILE *fp = fopen(file, "r");
if (!fp) {
diff --git a/lib/sail.c b/lib/sail.c
index 13f1a0e8..35860419 100644
--- a/lib/sail.c
+++ b/lib/sail.c
@@ -360,6 +360,13 @@ mach_bits CONVERT_OF(mach_bits, sail_bits)(const sail_bits op)
return mpz_get_ui(*op.bits);
}
+void CONVERT_OF(sail_bits, mach_bits)(sail_bits *rop, const mach_bits op, const uint64_t len)
+{
+ rop->len = len;
+ // use safe_rshift to correctly handle the case when we have a 0-length vector.
+ mpz_set_ui(*rop->bits, op & safe_rshift(UINT64_MAX, 64 - len));
+}
+
void UNDEFINED(sail_bits)(sail_bits *rop, const sail_int len, const mach_bits bit)
{
zeros(rop, len);
diff --git a/lib/sail.h b/lib/sail.h
index 23ff7f52..27b088fe 100644
--- a/lib/sail.h
+++ b/lib/sail.h
@@ -176,6 +176,7 @@ void RECREATE_OF(sail_bits, mach_bits)(sail_bits *,
const bool direction);
mach_bits CONVERT_OF(mach_bits, sail_bits)(const sail_bits);
+void CONVERT_OF(sail_bits, mach_bits)(sail_bits *, const mach_bits, const uint64_t);
void UNDEFINED(sail_bits)(sail_bits *, const sail_int len, const mach_bits bit);
mach_bits UNDEFINED(mach_bits)(const unit);