fence / fence.i

This commit is contained in:
inixyz
2023-10-25 14:49:02 +03:00
parent 43d5e8dbfc
commit 3f4f268d1f

View File

@@ -148,43 +148,32 @@ void tinyriscv_step(tinyriscv_core* core){
core->x[0] = 0; core->x[0] = 0;
switch(opcode){ switch(opcode){
case /*LUI*/ 0x37: case /*LUI*/ 0x37: core->x[rd] = inst & 0xfffff000; break;
core->x[rd] = inst & 0xfffff000; case /*AUIPC*/ 0x17:
break;
case /*AUIPC*/ 0x17:
core->x[rd] = core->pc - 4 + (inst & 0xfffff000); core->x[rd] = core->pc - 4 + (inst & 0xfffff000);
break; break;
case /*JAL*/ 0x6f: core->x[rd] = core->pc; core->pc += imm_j - 4; break;
case /*JAL*/ 0x6f: case /*JALR*/ 0x67:
core->x[rd] = core->pc; core->pc += imm_j - 4;
break;
case /*JALR*/ 0x67:
const u32 ret_addr = core->pc; const u32 ret_addr = core->pc;
core->pc = (core->x[rs1] + (i32)imm_i) & 0xfffffffe; core->pc = (core->x[rs1] + (i32)imm_i) & 0xfffffffe;
core->x[rd] = ret_addr; core->x[rd] = ret_addr;
break; break;
case /*B-type*/ 0x63: case /*B-type*/ 0x63:
tinyriscv_B_type(funct3, core->x, &core->pc, rs1, rs2, imm_b); tinyriscv_B_type(funct3, core->x, &core->pc, rs1, rs2, imm_b);
break; break;
case /*L-type*/ 0x03: case /*L-type*/ 0x03:
tinyriscv_L_type(funct3, core->x, core->mem, rd, rs1, imm_i); tinyriscv_L_type(funct3, core->x, core->mem, rd, rs1, imm_i);
break; break;
case /*S-type*/ 0x23: case /*S-type*/ 0x23:
tinyriscv_S_type(funct3, core->x, core->mem, rs1, rs2, imm_s); tinyriscv_S_type(funct3, core->x, core->mem, rs1, rs2, imm_s);
break; break;
case /*I-type*/ 0x13: case /*I-type*/ 0x13:
tinyriscv_I_type(funct3, funct7, core->x, rd, rs1, imm_i, rs2); tinyriscv_I_type(funct3, funct7, core->x, rd, rs1, imm_i, rs2);
break; break;
case /*R-type*/ 0x33: case /*R-type*/ 0x33:
tinyriscv_R_type(funct3, funct7, core->x, rd, rs1, rs2); tinyriscv_R_type(funct3, funct7, core->x, rd, rs1, rs2);
break; break;
case /*FENCE*/ 0x0f: break;
} }
} }