diff options
| author | Robert Norton | 2019-07-02 16:34:11 +0100 |
|---|---|---|
| committer | Robert Norton | 2019-07-15 14:51:21 +0100 |
| commit | 0a8981186d4da342ef36179cf093e64674573c63 (patch) | |
| tree | 549858818706d78f4fdae88d51bbee556f1a9654 /lib | |
| parent | 170543faa031d90186e6b45612ed8374f1c25f7b (diff) | |
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).
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rts.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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, |
