diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2016-06-22 23:25:55 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2016-06-22 23:25:55 -0700 |
commit | 7b9cd3e781a6bf359f31f2da3d05fcda27dafe98 (patch) | |
tree | f9754d2a6b7526810f082488686d3e519fa12975 /riscv | |
parent | 036c9086663024512dd0a8e5409b68187211c0bf (diff) | |
download | spike-7b9cd3e781a6bf359f31f2da3d05fcda27dafe98.zip spike-7b9cd3e781a6bf359f31f2da3d05fcda27dafe98.tar.gz spike-7b9cd3e781a6bf359f31f2da3d05fcda27dafe98.tar.bz2 |
Don't use I$ in debug mode
This avoids the need for fence.i.
Diffstat (limited to 'riscv')
-rw-r--r-- | riscv/mmu.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/riscv/mmu.h b/riscv/mmu.h index a87b6af..03be15d 100644 --- a/riscv/mmu.h +++ b/riscv/mmu.h @@ -40,7 +40,7 @@ public: // template for functions that load an aligned value from memory #define load_func(type) \ - type##_t load_##type(reg_t addr) __attribute__((always_inline)) { \ + inline type##_t load_##type(reg_t addr) { \ if (addr & (sizeof(type##_t)-1)) \ throw trap_load_address_misaligned(addr); \ reg_t vpn = addr >> PGSHIFT; \ @@ -130,7 +130,8 @@ public: inline insn_fetch_t load_insn(reg_t addr) { - return access_icache(addr)->data; + icache_entry_t entry; + return refill_icache(addr, &entry)->data; } void flush_tlb(); @@ -168,7 +169,7 @@ private: reg_t translate(reg_t addr, access_type type); // ITLB lookup - const uint16_t* translate_insn_addr(reg_t addr) __attribute__((always_inline)) { + inline const uint16_t* translate_insn_addr(reg_t addr) { reg_t vpn = addr >> PGSHIFT; if (likely(tlb_insn_tag[vpn % TLB_ENTRIES] == vpn)) return (uint16_t*)(tlb_data[vpn % TLB_ENTRIES] + addr); |