aboutsummaryrefslogtreecommitdiff
path: root/triscv/src/cpu.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-04-07 01:28:23 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-04-07 01:28:23 +0300
commite668bbc06ff95939627ef6082b1ca5cd4d198df6 (patch)
tree75e31dd04cda4b90f6020470e0d2b5117b084e97 /triscv/src/cpu.c
parentab276c733ce9dc80983e5c8ae5c530e1477cf990 (diff)
downloadtri-e668bbc06ff95939627ef6082b1ca5cd4d198df6.tar.gz
tri-e668bbc06ff95939627ef6082b1ca5cd4d198df6.zip
implement some more branches
Diffstat (limited to 'triscv/src/cpu.c')
-rw-r--r--triscv/src/cpu.c8
1 files changed, 8 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();