Refactored file dependencies to decouple components

This commit is contained in:
2017-09-26 17:10:10 +02:00
parent 2499b2173d
commit d8184abbcc
21 changed files with 515 additions and 997 deletions

View File

@ -224,19 +224,24 @@ struct vm_info {
};
struct trap_load_access_fault : public trap_access {
trap_load_access_fault(uint64_t badaddr) : trap_access(5 << 16, badaddr) {}
trap_load_access_fault(uint64_t badaddr)
: trap_access(5 << 16, badaddr) {}
};
struct illegal_instruction_fault : public trap_access {
illegal_instruction_fault(uint64_t badaddr) : trap_access(2 << 16, badaddr) {}
illegal_instruction_fault(uint64_t badaddr)
: trap_access(2 << 16, badaddr) {}
};
struct trap_instruction_page_fault : public trap_access {
trap_instruction_page_fault(uint64_t badaddr) : trap_access(12 << 16, badaddr) {}
trap_instruction_page_fault(uint64_t badaddr)
: trap_access(12 << 16, badaddr) {}
};
struct trap_load_page_fault : public trap_access {
trap_load_page_fault(uint64_t badaddr) : trap_access(13 << 16, badaddr) {}
trap_load_page_fault(uint64_t badaddr)
: trap_access(13 << 16, badaddr) {}
};
struct trap_store_page_fault : public trap_access {
trap_store_page_fault(uint64_t badaddr) : trap_access(15 << 16, badaddr) {}
trap_store_page_fault(uint64_t badaddr)
: trap_access(15 << 16, badaddr) {}
};
}
@ -277,7 +282,7 @@ using mstatus32_t = union {
uint32_t SD : 1, _WPRI4 : 11, MXR : 1, SUM : 1, _WPRI3 : 1, XS : 2, FS : 2, _WPRI2 : 8, UPIE : 1, _WPRI0 : 3,
UIE : 1;
} u;
} ;
};
using mstatus64_t = union {
uint64_t val;
@ -324,7 +329,7 @@ using mstatus64_t = union {
UXL : 2, // value of XLEN for U-mode
_WPRI3 : 12, MXR : 1, SUM : 1, _WPRI2 : 1, XS : 2, FS : 2, _WPRI1 : 8, UPIE : 1, _WPRI0 : 3, UIE : 1;
} u;
} ;
};
template <unsigned L> inline vm_info decode_vm_info(uint32_t state, uint64_t sptbr);
@ -483,7 +488,10 @@ private:
void check_interrupt();
};
template <typename BASE> riscv_hart_msu_vp<BASE>::riscv_hart_msu_vp() : mstatus_r(csr[mstatus]), satp_r(csr[satp]) {
template <typename BASE>
riscv_hart_msu_vp<BASE>::riscv_hart_msu_vp()
: mstatus_r(csr[mstatus])
, satp_r(csr[satp]) {
csr[misa] = traits<BASE>::XLEN == 32 ? 1ULL << (traits<BASE>::XLEN - 2) : 2ULL << (traits<BASE>::XLEN - 2);
uart_buf.str("");
// read-only registers

View File

@ -28,7 +28,7 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Created on: Thu Sep 21 17:01:54 CEST 2017
// Created on: Tue Sep 26 17:41:14 CEST 2017
// * rv32imac.h Author: <CoreDSL Generator>
//
////////////////////////////////////////////////////////////////////////////////
@ -103,15 +103,15 @@ template <> struct traits<rv32imac> {
ICOUNT
};
typedef uint32_t reg_t;
using reg_t = uint32_t;
typedef uint32_t addr_t;
using addr_t = uint32_t;
typedef uint32_t code_word_t; // TODO: check removal
using code_word_t = uint32_t; // TODO: check removal
typedef iss::typed_addr_t<iss::VIRTUAL> virt_addr_t;
using virt_addr_t = iss::typed_addr_t<iss::VIRTUAL>;
typedef iss::typed_addr_t<iss::PHYSICAL> phys_addr_t;
using phys_addr_t = iss::typed_addr_t<iss::PHYSICAL>;
constexpr static unsigned reg_bit_width(unsigned r) {
const uint32_t RV32IMAC_reg_size[] = {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
@ -142,19 +142,19 @@ struct rv32imac : public arch_if {
rv32imac();
~rv32imac();
virtual void reset(uint64_t address = 0) override;
void reset(uint64_t address = 0) override;
virtual uint8_t *get_regs_base_ptr() override;
uint8_t *get_regs_base_ptr() override;
/// deprecated
virtual void get_reg(short idx, std::vector<uint8_t> &value) override {}
virtual void set_reg(short idx, const std::vector<uint8_t> &value) override {}
void get_reg(short idx, std::vector<uint8_t> &value) override {}
void set_reg(short idx, const std::vector<uint8_t> &value) override {}
/// deprecated
virtual bool get_flag(int flag) override { return false; }
virtual void set_flag(int, bool value) override{};
bool get_flag(int flag) override { return false; }
void set_flag(int, bool value) override{};
/// deprecated
virtual void update_flags(operations op, uint64_t opr1, uint64_t opr2) override{};
void update_flags(operations op, uint64_t opr1, uint64_t opr2) override{};
virtual void notify_phase(exec_phase phase) {
void notify_phase(exec_phase phase) {
if (phase == ISTART) {
++reg.icount;
reg.PC = reg.NEXT_PC;

View File

@ -28,7 +28,7 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Created on: Thu Sep 21 17:01:54 CEST 2017
// Created on: Tue Sep 26 17:41:14 CEST 2017
// * rv64ia.h Author: <CoreDSL Generator>
//
////////////////////////////////////////////////////////////////////////////////
@ -103,15 +103,15 @@ template <> struct traits<rv64ia> {
ICOUNT
};
typedef uint64_t reg_t;
using reg_t = uint64_t;
typedef uint64_t addr_t;
using addr_t = uint64_t;
typedef uint64_t code_word_t; // TODO: check removal
using code_word_t = uint64_t; // TODO: check removal
typedef iss::typed_addr_t<iss::VIRTUAL> virt_addr_t;
using virt_addr_t = iss::typed_addr_t<iss::VIRTUAL>;
typedef iss::typed_addr_t<iss::PHYSICAL> phys_addr_t;
using phys_addr_t = iss::typed_addr_t<iss::PHYSICAL>;
constexpr static unsigned reg_bit_width(unsigned r) {
const uint32_t RV64IA_reg_size[] = {64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
@ -141,19 +141,19 @@ struct rv64ia : public arch_if {
rv64ia();
~rv64ia();
virtual void reset(uint64_t address = 0) override;
void reset(uint64_t address = 0) override;
virtual uint8_t *get_regs_base_ptr() override;
uint8_t *get_regs_base_ptr() override;
/// deprecated
virtual void get_reg(short idx, std::vector<uint8_t> &value) override {}
virtual void set_reg(short idx, const std::vector<uint8_t> &value) override {}
void get_reg(short idx, std::vector<uint8_t> &value) override {}
void set_reg(short idx, const std::vector<uint8_t> &value) override {}
/// deprecated
virtual bool get_flag(int flag) override { return false; }
virtual void set_flag(int, bool value) override{};
bool get_flag(int flag) override { return false; }
void set_flag(int, bool value) override{};
/// deprecated
virtual void update_flags(operations op, uint64_t opr1, uint64_t opr2) override{};
void update_flags(operations op, uint64_t opr1, uint64_t opr2) override{};
virtual void notify_phase(exec_phase phase) {
void notify_phase(exec_phase phase) {
if (phase == ISTART) {
++reg.icount;
reg.PC = reg.NEXT_PC;