From e668bbc06ff95939627ef6082b1ca5cd4d198df6 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sun, 7 Apr 2024 01:28:23 +0300 Subject: implement some more branches --- triscv/src/cpu.c | 8 ++++++++ triscv/src/mmu.c | 1 + 2 files changed, 9 insertions(+) (limited to 'triscv') 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); -- cgit v1.3