aboutsummaryrefslogtreecommitdiff
path: root/triscv
diff options
context:
space:
mode:
Diffstat (limited to 'triscv')
-rw-r--r--triscv/src/cpu.c8
-rw-r--r--triscv/src/mmu.c1
2 files changed, 9 insertions, 0 deletions
diff --git a/triscv/src/cpu.c b/triscv/src/cpu.c
index a2bc9fb..9e82974 100644
--- a/triscv/src/cpu.c
+++ b/triscv/src/cpu.c
@@ -101,6 +101,12 @@ static void do_op_imm(struct cpu *cpu, tri_t i)
tri_t src = get_gpr(cpu, rs1);
switch (fn0) {
+ case OP_IMM_SLTI: {
+ tri_t r = tri_lt(src, imm9);
+ set_gpr(cpu, rd, r);
+ break;
+ }
+
case OP_IMM_ADDI: {
tri_t r = tri_add(src, imm9);
set_gpr(cpu, rd, r);
@@ -293,6 +299,8 @@ static void do_branch(struct cpu *cpu, tri_t i)
switch (fn0) {
case BRANCH_BLT: take = tri_lt(c0, c1); break;
case BRANCH_BGE: take = tri_ge(c0, c1); break;
+ case BRANCH_BNE: take = tri_ne(c0, c1); break;
+ case BRANCH_BEQ: take = tri_eq(c0, c1); break;
default: fprintf(stderr, "illegal/unimplemented BRANCH at %lli,"
"aborting\n", (long long int)cpu->pc);
abort();
diff --git a/triscv/src/mmu.c b/triscv/src/mmu.c
index c90c51d..7549012 100644
--- a/triscv/src/mmu.c
+++ b/triscv/src/mmu.c
@@ -236,6 +236,7 @@ void mmu_write3(struct cpu *cpu, struct mmu *mmu, vm_t addr, tri_t t)
struct dev_map *d = mmu_find_dev_map(mmu, addr);
if (!d || !d->dev.write3) {
/** @todo raise bus error */
+ return;
}
d->dev.write3(cpu, d->dev.dev, addr - d->start, t);