From 0a8981186d4da342ef36179cf093e64674573c63 Mon Sep 17 00:00:00 2001 From: Robert Norton Date: Tue, 2 Jul 2019 16:34:11 +0100 Subject: Add a fast path to speed up platform_read_ram: use fast_read_ram if read is 8 bytes or less to avoid cost of using GMP integers (including free/malloc). --- lib/rts.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/rts.c b/lib/rts.c index dfb2ba5a..57abbc3c 100644 --- a/lib/rts.c +++ b/lib/rts.c @@ -283,6 +283,13 @@ void platform_read_mem(lbits *data, const sbits addr, const mpz_t n) { + sbits sdata; + uint64_t len = mpz_get_ui(n); /* Sail type says always >0 */ + if (len <= 8) { + /* fast path for small reads */ + sdata = fast_read_ram(len, addr.bits); + RECREATE_OF(lbits, sbits)(data, sdata, true); + } else { mpz_t mpz_addr_size; mpz_init(mpz_addr_size); mpz_set_ui(mpz_addr_size, addr_size); @@ -292,6 +299,7 @@ void platform_read_mem(lbits *data, read_ram(data, mpz_addr_size, n, (lbits){.len=0, .bits=NULL}, (lbits){.len=addr.len, .bits=&addr_bv}); mpz_clear(mpz_addr_size); mpz_clear(addr_bv); + } } unit platform_write_mem_ea(const int write_kind, -- cgit v1.2.3