summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBrian Campbell2018-07-13 10:15:30 +0100
committerBrian Campbell2018-07-13 10:15:30 +0100
commit82784b669df18e33c48449020f29f36980d12bf3 (patch)
treee8c9d854b3edd3d34c64e745705e9cce4dc877a1 /lib
parent6586abcc185fa4e0f3853a73d91f097fbde16aca (diff)
parent3c4a27d7041d71fb229970dacab013cf84669755 (diff)
Merge branch 'sail2' of github.com:rems-project/sail into sail2
Diffstat (limited to 'lib')
-rw-r--r--lib/rts.c4
-rw-r--r--lib/rts.h2
-rw-r--r--lib/sail.c13
-rw-r--r--lib/sail.h3
4 files changed, 19 insertions, 3 deletions
diff --git a/lib/rts.c b/lib/rts.c
index 84ff4916..97aad8a4 100644
--- a/lib/rts.c
+++ b/lib/rts.c
@@ -208,7 +208,7 @@ void kill_mem()
// ***** Memory builtins *****
-unit write_ram(const mpz_t addr_size, // Either 32 or 64
+bool write_ram(const mpz_t addr_size, // Either 32 or 64
const mpz_t data_size_mpz, // Number of bytes
const sail_bits hex_ram, // Currently unused
const sail_bits addr_bv,
@@ -231,7 +231,7 @@ unit write_ram(const mpz_t addr_size, // Either 32 or 64
}
mpz_clear(buf);
- return UNIT;
+ return true;
}
void read_ram(sail_bits *data,
diff --git a/lib/rts.h b/lib/rts.h
index cedb555e..98bbd078 100644
--- a/lib/rts.h
+++ b/lib/rts.h
@@ -53,7 +53,7 @@ uint64_t read_mem(uint64_t);
// These memory builtins are intended to match the semantics for the
// __ReadRAM and __WriteRAM functions in ASL.
-unit write_ram(const mpz_t addr_size, // Either 32 or 64
+bool write_ram(const mpz_t addr_size, // Either 32 or 64
const mpz_t data_size_mpz, // Number of bytes
const sail_bits hex_ram, // Currently unused
const sail_bits addr_bv,
diff --git a/lib/sail.c b/lib/sail.c
index 4cb9cdc1..38c8c273 100644
--- a/lib/sail.c
+++ b/lib/sail.c
@@ -781,6 +781,19 @@ void shift_bits_right_arith(sail_bits *rop, const sail_bits op1, const sail_bits
}
}
+void shiftl(sail_bits *rop, const sail_bits op1, const sail_int op2)
+{
+ rop->len = op1.len;
+ mpz_mul_2exp(*rop->bits, *op1.bits, mpz_get_ui(op2));
+ normalize_sail_bits(rop);
+}
+
+void shiftr(sail_bits *rop, const sail_bits op1, const sail_int op2)
+{
+ rop->len = op1.len;
+ mpz_tdiv_q_2exp(*rop->bits, *op1.bits, mpz_get_ui(op2));
+}
+
void reverse_endianness(sail_bits *rop, const sail_bits op)
{
rop->len = op.len;
diff --git a/lib/sail.h b/lib/sail.h
index bbdccd09..9ce3ec6b 100644
--- a/lib/sail.h
+++ b/lib/sail.h
@@ -273,6 +273,9 @@ void shift_bits_left(sail_bits *rop, const sail_bits op1, const sail_bits op2);
void shift_bits_right(sail_bits *rop, const sail_bits op1, const sail_bits op2);
void shift_bits_right_arith(sail_bits *rop, const sail_bits op1, const sail_bits op2);
+void shiftl(sail_bits *rop, const sail_bits op1, const sail_int op2);
+void shiftr(sail_bits *rop, const sail_bits op1, const sail_int op2);
+
void reverse_endianness(sail_bits*, sail_bits);
/* ***** Sail reals ***** */