From 63a3cdcd18972cdc2b6fa24d6a2deb5cae7549cc Mon Sep 17 00:00:00 2001 From: Alasdair Date: Tue, 22 Jan 2019 03:08:46 +0000 Subject: Make sure we optimize constrained union constructors --- lib/rts.c | 15 +++++++++++++++ lib/rts.h | 3 +++ 2 files changed, 18 insertions(+) (limited to 'lib') diff --git a/lib/rts.c b/lib/rts.c index bc0d4732..eacf0a70 100644 --- a/lib/rts.c +++ b/lib/rts.c @@ -238,6 +238,21 @@ bool write_ram(const mpz_t addr_size, // Either 32 or 64 return true; } +sbits fast_read_ram(const int64_t data_size, + const uint64_t addr) +{ + uint64_t r = 0; + + uint64_t byte; + for(uint64_t i = (uint64_t) data_size; i > 0; --i) { + byte = read_mem(addr + (i - 1)); + r = r << 8; + r = r + byte; + } + sbits res = {.len = data_size * 8, .bits = r }; + return res; +} + void read_ram(lbits *data, const mpz_t addr_size, const mpz_t data_size_mpz, diff --git a/lib/rts.h b/lib/rts.h index f5e5e3b1..c7c1259f 100644 --- a/lib/rts.h +++ b/lib/rts.h @@ -65,6 +65,9 @@ void read_ram(lbits *data, 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); -- cgit v1.2.3