aboutsummaryrefslogtreecommitdiff
path: root/riscv/mmu.h
diff options
context:
space:
mode:
authorZhen Wei <zhen.wei@sifive.com>2020-02-27 11:45:05 +0800
committerChih-Min Chao <48193236+chihminchao@users.noreply.github.com>2020-03-04 14:22:31 +0800
commitca74a850cc12bedf9c56bb5e71dc1cc051a459f2 (patch)
treed1fd647c3beece3061e0d60dc93609cd7dc51cff /riscv/mmu.h
parent945e063906b6eefba71c5fa9fd418d97968acd4a (diff)
downloadspike-ca74a850cc12bedf9c56bb5e71dc1cc051a459f2.zip
spike-ca74a850cc12bedf9c56bb5e71dc1cc051a459f2.tar.gz
spike-ca74a850cc12bedf9c56bb5e71dc1cc051a459f2.tar.bz2
rvv: remove the option of vector misaligned access
Diffstat (limited to 'riscv/mmu.h')
-rw-r--r--riscv/mmu.h33
1 files changed, 12 insertions, 21 deletions
diff --git a/riscv/mmu.h b/riscv/mmu.h
index 485371e..c200084 100644
--- a/riscv/mmu.h
+++ b/riscv/mmu.h
@@ -58,32 +58,23 @@ public:
mmu_t(simif_t* sim, processor_t* proc);
~mmu_t();
- inline reg_t misaligned_load(reg_t addr, size_t size, bool mistrap)
+ inline reg_t misaligned_load(reg_t addr, size_t size)
{
#ifdef RISCV_ENABLE_MISALIGNED
- if (mistrap) {
- throw trap_load_address_misaligned(addr);
- } else {
- reg_t res = 0;
- for (size_t i = 0; i < size; i++)
- res += (reg_t)load_uint8(addr + i) << (i * 8);
- return res;
- }
+ reg_t res = 0;
+ for (size_t i = 0; i < size; i++)
+ res += (reg_t)load_uint8(addr + i) << (i * 8);
+ return res;
#else
throw trap_load_address_misaligned(addr);
#endif
}
- inline void misaligned_store(reg_t addr, reg_t data, size_t size,
- bool mistrap)
+ inline void misaligned_store(reg_t addr, reg_t data, size_t size)
{
#ifdef RISCV_ENABLE_MISALIGNED
- if (mistrap) {
- throw trap_store_address_misaligned(addr);
- } else {
- for (size_t i = 0; i < size; i++)
- store_uint8(addr + i, data >> (i * 8));
- }
+ for (size_t i = 0; i < size; i++)
+ store_uint8(addr + i, data >> (i * 8));
#else
throw trap_store_address_misaligned(addr);
#endif
@@ -98,9 +89,9 @@ public:
// template for functions that load an aligned value from memory
#define load_func(type) \
- inline type##_t load_##type(reg_t addr, bool mistrap = false) { \
+ inline type##_t load_##type(reg_t addr) { \
if (unlikely(addr & (sizeof(type##_t)-1))) \
- return misaligned_load(addr, sizeof(type##_t), mistrap); \
+ return misaligned_load(addr, sizeof(type##_t)); \
reg_t vpn = addr >> PGSHIFT; \
size_t size = sizeof(type##_t); \
if (likely(tlb_load_tag[vpn % TLB_ENTRIES] == vpn)) { \
@@ -144,9 +135,9 @@ public:
// template for functions that store an aligned value to memory
#define store_func(type) \
- void store_##type(reg_t addr, type##_t val, bool mistrap = false) { \
+ void store_##type(reg_t addr, type##_t val) { \
if (unlikely(addr & (sizeof(type##_t)-1))) \
- return misaligned_store(addr, val, sizeof(type##_t), mistrap); \
+ return misaligned_store(addr, val, sizeof(type##_t)); \
reg_t vpn = addr >> PGSHIFT; \
size_t size = sizeof(type##_t); \
if (likely(tlb_store_tag[vpn % TLB_ENTRIES] == vpn)) { \