aboutsummaryrefslogtreecommitdiff
path: root/c_emulator
diff options
context:
space:
mode:
authorPrashanth Mundkur <prashanth.mundkur@gmail.com>2019-02-20 16:28:37 -0800
committerPrashanth Mundkur <prashanth.mundkur@gmail.com>2019-02-20 16:28:44 -0800
commit21d8267ffc1c72e1e132303ef94bdca97015571e (patch)
tree0b1586df617308be34c463721ecb8a84b73ffc47 /c_emulator
parent31c55d5e0b10a53699de2b5712fbeb4350aa20b5 (diff)
downloadsail-riscv-21d8267ffc1c72e1e132303ef94bdca97015571e.zip
sail-riscv-21d8267ffc1c72e1e132303ef94bdca97015571e.tar.gz
sail-riscv-21d8267ffc1c72e1e132303ef94bdca97015571e.tar.bz2
Some changes for arch-specific initialization.
Diffstat (limited to 'c_emulator')
-rw-r--r--c_emulator/riscv_platform_impl.h1
-rw-r--r--c_emulator/riscv_sim.c13
2 files changed, 10 insertions, 4 deletions
diff --git a/c_emulator/riscv_platform_impl.h b/c_emulator/riscv_platform_impl.h
index 85e25c9..2e59fd8 100644
--- a/c_emulator/riscv_platform_impl.h
+++ b/c_emulator/riscv_platform_impl.h
@@ -6,7 +6,6 @@
/* Settings of the platform implementation. */
#define DEFAULT_RSTVEC 0x00001000
-#define SAIL_XLEN 64
extern bool rv_enable_dirty_update;
extern bool rv_enable_misaligned;
diff --git a/c_emulator/riscv_sim.c b/c_emulator/riscv_sim.c
index ebcfdc9..f160cde 100644
--- a/c_emulator/riscv_sim.c
+++ b/c_emulator/riscv_sim.c
@@ -108,11 +108,17 @@ static void report_arch(void)
exit(0);
}
+static bool is_32bit_model(void)
+{
+ return zxlen_val == 32;
+}
+
static void dump_dts(void)
{
#ifdef ENABLE_SPIKE
size_t dts_len = 0;
- struct tv_spike_t *s = tv_init("RV64IMAC", rv_ram_size, 0);
+ const char *isa = is_32bit_model() ? RV32ISA : RV64ISA;
+ struct tv_spike_t *s = tv_init(isa, rv_ram_size, 0);
tv_get_dts(s, NULL, &dts_len);
if (dts_len > 0) {
unsigned char *dts = (unsigned char *)malloc(dts_len + 1);
@@ -263,7 +269,8 @@ void init_spike(const char *f, uint64_t entry, uint64_t ram_size)
{
#ifdef ENABLE_SPIKE
bool mismatch = false;
- s = tv_init("RV64IMAC", ram_size, 1);
+ const char *isa = is_32bit_model() ? RV32ISA : RV64ISA;
+ s = tv_init(isa, ram_size, 1);
if (tv_is_dirty_enabled(s) != rv_enable_dirty_update) {
mismatch = true;
fprintf(stderr, "inconsistent enable-dirty-update setting: spike %s, sail %s\n",
@@ -326,7 +333,7 @@ void init_sail_reset_vector(uint64_t entry)
0x297, // auipc t0,0x0
0x28593 + (RST_VEC_SIZE * 4 << 20), // addi a1, t0, &dtb
0xf1402573, // csrr a0, mhartid
- SAIL_XLEN == 32 ?
+ is_32bit_model() ?
0x0182a283u : // lw t0,24(t0)
0x0182b283u, // ld t0,24(t0)
0x28067, // jr t0