commit - 94fb04263ddc9042a16e8123229ac8a66ce3f640
commit + b7739ce0610723e174431f433a6335f33dec04d9
blob - 758e9bd133624527bd2988b1e37dfbe8183d51a9
blob + 961761d22ce8fd4748b57645c841b5e25eaefceb
--- rvvm/rvhandler.c
+++ rvvm/rvhandler.c
#include <stdio.h>
#include "rvhandler.h"
+
+void
+exec_addi(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] + i.imm;
+}
+
+void
+exec_andi(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] & i.imm;
+}
+
+void
+exec_ori(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] | i.imm;
+}
+
+void
+exec_xori(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] ^ i.imm;
+}
+
+void
+exec_add(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] + h->rfile[i.rs2];
+}
+
+void
+exec_sub(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] - h->rfile[i.rs2];
+}
+
+void
+exec_and(struct rv_hart *h, struct rv_instr i)
+{
+ h->rfile[i.rd] = h->rfile[i.rs1] & h->rfile[i.rs2];
+}
+
+void
+exec_addiw(struct rv_hart *h, struct rv_instr i)
+{
+ int32_t r;
+
+ r = (int32_t)h->rfile[i.rs1] + (int32_t)i.imm;
+ h->rfile[i.rd] = (int64_t)r;
+}
+
+void
+exec_addw(struct rv_hart *h, struct rv_instr i)
+{
+ int32_t r;
+
+ r = (int32_t)h->rfile[i.rs1] + (int32_t)h->rfile[i.rs2];
+ h->rfile[i.rd] = (int64_t)r;
+}
+
+void
+exec_beq(struct rv_hart *h, struct rv_instr i)
+{
+ if (h->rfile[i.rs1] == h->rfile[i.rs2])
+ h->next_pc = h->pc + i.imm;
+}
+
+void
+exec_bnq(struct rv_hart *h, struct rv_instr i)
+{
+ if (h->rfile[i.rs1] != h->rfile[i.rs2])
+ h->next_pc = h->pc + i.imm;
+}
+
+void
+exec_ld(struct rv_hart *h, struct rv_instr i)
+{
+ (void)h; (void)i;
+}
+
+void
+exec_lw(struct rv_hart *h, struct rv_instr i)
+{
+ (void)h; (void)i;
+}
+
+void
+exec_sd(struct rv_hart *h, struct rv_instr i)
+{
+ (void)h; (void)i;
+}
+
+void
+exec_sw(struct rv_hart *h, struct rv_instr i)
+{
+ (void)h; (void)i;
+}
+
+void
+exec_ecall(struct rv_hart *h, struct rv_instr i)
+{
+ (void)h; (void)i;
+}