commit e437d30c7b412e620c272575563a12a2a9a7d868
parent 6531dc54564c59c9c4aeb0c919ea7591bc619977
Author: Michail Konstantinos Dimopoulos <mk@mcdim.xyz>
Date: Wed, 2 Sep 2026 18:47:59 +0300
Cleaned up printf clutter
Diffstat:
| M | main.c | | | 196 | +------------------------------------------------------------------------------ |
1 file changed, 2 insertions(+), 194 deletions(-)
diff --git a/main.c b/main.c
@@ -74,35 +74,16 @@ static int32_t get_valid_jalr_target(uint32_t base, int32_t offset,
static void exec_itype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE I\n");
itype_t i;
decode_itype(&i, inst);
- /**print**/
- printf("f7 rs2 rs1 f3 rd opcode\n");
- print_binless(i.imm, 12);
- printf(" ");
- print_binless(i.rs1, 5);
- printf(" ");
- print_binless(i.funct3, 3);
- printf(" ");
- print_binless(i.rd, 5);
- printf("\nf7 in\n");
- print_binless(i.funct7, 7);
- printf(" ");
- print_binless(i.inimm, 5);
- printf("\n");
- /*********/
-
uint32_t x; uint32_t shamt;
switch(i.funct3) {
case 0x0:
- printf("ADDI\n");
x = cpu->x[i.rs1]+i.imm;
break;
case 0x1:
if (i.funct7 != 0x00) {
- printf("Shift logical left i\n");
shamt = i.imm & 31;
x = cpu->x[i.rs1] << shamt;
} else {
@@ -111,26 +92,21 @@ static void exec_itype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
}
break;
case 0x2:
- printf("Set less than i\n");
x = ((int32_t)cpu->x[i.rs1] < (int32_t)i.imm) ? 1 : 0;
break;
case 0x3:
- printf("Set less than Ui\n");
x = (cpu->x[i.rs1] < i.imm) ? 1 : 0;
break;
case 0x4:
- printf("XORi\n");
x = cpu->x[i.rs1]^i.imm;
break;
case 0x5:
switch(i.funct7) {
case 0x00:
- printf("Shift logical right i\n");
shamt = i.imm & 31;
x = cpu->x[i.rs1] >> shamt;
break;
case 0x20:
- printf("Shift arithm right i\n");
shamt = i.imm & 31;
x = (uint32_t)((int32_t)cpu->x[i.rs1] >> shamt);
break;
@@ -140,11 +116,9 @@ static void exec_itype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
}
break;
case 0x6:
- printf("OR\n");
x = cpu->x[i.rs1]|i.imm;
break;
case 0x7:
- printf("AND\n");
x = cpu->x[i.rs1]&i.imm;
break;
default:
@@ -152,47 +126,27 @@ static void exec_itype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
return;
}
- printf("rs1:%u imm:%u rd:%u\n",cpu->x[i.rs1],i.imm,cpu->x[i.rd]);
if (i.rd != 0) {
cpu->x[i.rd] = x;
}
- printf("rd:%u\n", cpu->x[i.rd]);
-
cpu->pc += 4;
}
static void exec_rtype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE R\n");
rtype_t r;
decode_rtype(&r, inst);
- /**print**/
- printf("f7 rs2 rs1 f3 rd opcode\n");
- print_binless(r.funct7, 7);
- printf(" ");
- print_binless(r.rs2, 5);
- printf(" ");
- print_binless(r.rs1, 5);
- printf(" ");
- print_binless(r.funct3, 3);
- printf(" ");
- print_binless(r.rd, 5);
- printf("\n");
- /*********/
-
uint32_t x;
uint32_t shamt;
switch(r.funct3) {
case 0x0:
switch(r.funct7) {
case 0x00:
- printf("ADD\n");
x = cpu->x[r.rs1]+cpu->x[r.rs2];
break;
case 0x20:
- printf("SUB\n");
x = cpu->x[r.rs1]-cpu->x[r.rs2];
break;
default:
@@ -201,31 +155,25 @@ static void exec_rtype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
}
break;
case 0x1:
- printf("Shift logical left\n");
shamt = cpu->x[r.rs2] & 31;
x = cpu->x[r.rs1] << shamt;
break;
case 0x2:
- printf("Set less than\n");
x = ((int32_t)cpu->x[r.rs1] < (int32_t)cpu->x[r.rs2]) ? 1 : 0;
break;
case 0x3:
- printf("Set less than U\n");
x = (cpu->x[r.rs1] < cpu->x[r.rs2]) ? 1 : 0;
break;
case 0x4:
- printf("XOR\n");
x = cpu->x[r.rs1]^cpu->x[r.rs2];
break;
case 0x5:
switch(r.funct7) {
case 0x00:
- printf("Shift logical right\n");
shamt = cpu->x[r.rs2] & 31;
x = cpu->x[r.rs1] >> shamt;
break;
case 0x20:
- printf("Shift arithm right\n");
shamt = cpu->x[r.rs2] & 31;
x = (uint32_t)((int32_t)cpu->x[r.rs1] >> shamt);
break;
@@ -235,11 +183,9 @@ static void exec_rtype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
}
break;
case 0x6:
- printf("OR\n");
x = cpu->x[r.rs1]|cpu->x[r.rs2];
break;
case 0x7:
- printf("AND\n");
x = cpu->x[r.rs1]&cpu->x[r.rs2];
break;
default:
@@ -247,32 +193,17 @@ static void exec_rtype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
return;
}
- printf("rs1:%u rs2:%u rd:%u\n",cpu->x[r.rs1],cpu->x[r.rs2],cpu->x[r.rd]);
if (r.rd != 0) {
cpu->x[r.rd] = x;
}
- printf("rd:%u\n", cpu->x[r.rd]);
cpu->pc += 4;
}
static void exec_itype_loads(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
- printf("TYPE L\n");
itype_t i;
decode_itype(&i, inst);
- /**print**/
- printf("imm rs1 f3 rd opcode\n");
- print_binless(i.imm, 12);
- printf(" ");
- print_binless(i.rs1, 5);
- printf(" ");
- print_binless(i.funct3, 3);
- printf(" ");
- print_binless(i.rd, 5);
- printf("\n");
- /*********/
-
uint32_t addr = (uint32_t)i.imm + cpu->x[i.rs1];
/* TODO: do I need to check before loading halves and words */
@@ -280,16 +211,13 @@ static void exec_itype_loads(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
uint32_t x;
switch(i.funct3) {
case 0x0:
- printf("Load byte\n");
x = (uint32_t)(int32_t)(int8_t)mem[addr];
break;
case 0x1:
- printf("Load half, little endian\n");
uint16_t half = (uint16_t)mem[addr] | ((uint16_t)mem[addr+1] << 8);
x = (uint32_t)(int32_t)(int16_t)half;
break;
case 0x2:
- printf("Load word, little endian");
/* TODO: clean up */
x = (uint32_t)(int32_t)(
((uint16_t)mem[addr] | ((uint16_t)mem[addr+1] << 8))
@@ -299,12 +227,10 @@ static void exec_itype_loads(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
);
break;
case 0x4:
- printf("Load byte (U) zero-extends\n");
x = (uint32_t)(uint8_t)mem[addr];
break;
case 0x5:
- printf("Load half, little endian\n");
int16_t uhalf = (int16_t)mem[addr] | ((int16_t)mem[addr+1] << 8);
x = (uint32_t)(int32_t)uhalf;
break;
@@ -317,46 +243,20 @@ static void exec_itype_loads(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
cpu->x[i.rd] = x;
}
cpu->pc += 4;
-
- printf("\nrd:%d\n", cpu->x[i.rd]);
- printf("rd:%x\n", cpu->x[i.rd]);
-
}
static void exec_stype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
- printf("TYPE S\n");
stype_t s;
decode_stype(&s, inst);
- printf("\nimm:%x\n", s.imm);
-
- /**print**/
- /*for printing, not needed*/uint32_t imm_11_5 = (inst >> 25) & 127;
- /*for printing, not needed*/uint32_t imm_4_0 = (inst >> 7) & 31;
- printf("imm rs2 rs1 f3 imm opcode\n");
- printf("[11:5] [4:0]\n");
- print_binless(imm_11_5, 7);
- printf(" ");
- print_binless(s.rs2, 5);
- printf(" ");
- print_binless(s.rs1, 5);
- printf(" ");
- print_binless(s.funct3, 3);
- printf(" ");
- print_binless(imm_4_0, 5);
- printf("\n");
- /*********/
-
uint32_t addr = s.imm + cpu->x[s.rs1];
/* TODO: helpers, better checks */
switch(s.funct3) {
case 0x0:
- printf("STORE BYTE\n");
mem[addr] = cpu->x[s.rs2] & 255;
break;
case 0x1:
- printf("STORE half, little endian\n");
if (addr+1 > MEMSIZE-1) {
fprintf(stderr, "Illegal addr\n");
return;
@@ -368,7 +268,6 @@ static void exec_stype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
}
break;
case 0x2:
- printf("STORE word, little endian\n");
if (addr+3 > MEMSIZE-1) {
fprintf(stderr, "Illegal addr\n");
return;
@@ -390,29 +289,9 @@ static void exec_stype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
static void exec_btype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE B\n");
btype_t b;
decode_btype(&b, inst);
- printf("imm: %" PRId32 "\n", b.imm);
-
- /**print**/
- //printf("imm rs2 rs1 f3 imm opcode\n");
- //printf("[12|10:5] [4:1|11]\n");
- //print_binless(imm_12, 1);
- //print_binless(imm_10_5, 6);
- //printf(" ");
- //print_binless(b.rs2, 5);
- //printf(" ");
- //print_binless(b.rs1, 5);
- //printf(" ");
- //print_binless(b.funct3, 3);
- //printf(" ");
- //print_binless(imm_4_1, 4);
- //print_binless(imm_11, 1);
- //printf("\n");
- /*********/
-
int jump = 0;
switch (b.funct3) {
case 0x0:
@@ -462,26 +341,9 @@ static void exec_btype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
static void exec_itype_jalr(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE I\n");
itype_t i;
decode_itype(&i, inst);
- /**print**/
- printf("f7 rs2 rs1 f3 rd opcode\n");
- print_binless(i.imm, 12);
- printf(" ");
- print_binless(i.rs1, 5);
- printf(" ");
- print_binless(i.funct3, 3);
- printf(" ");
- print_binless(i.rd, 5);
- printf("\nf7 in\n");
- print_binless(i.funct7, 7);
- printf(" ");
- print_binless(i.inimm, 5);
- printf("\n");
- /*********/
-
uint32_t x;
if (i.funct3 != 0x0) {
fprintf(stderr, "Illegal funct3\n");
@@ -500,28 +362,16 @@ static void exec_itype_jalr(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
return;
}
- printf("rs1:%u imm:%u rd:%u\n",cpu->x[i.rs1],i.imm,cpu->x[i.rd]);
if (i.rd != 0) {
cpu->x[i.rd] = x;
}
-
- printf("rd:%u\n", cpu->x[i.rd]);
}
static void exec_jtype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE J\n");
jtype_t j;
decode_jtype(&j, inst);
- /**print**/
- printf("imm rd opcode\n");
- print_binless(j.imm, 20);
- printf(" ");
- print_binless(j.rd, 5);
- printf("\n");
- /*********/
-
uint32_t x;
x = cpu->pc + 4;
cpu->pc += j.imm;
@@ -536,73 +386,38 @@ static void exec_jtype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
return;
}
- printf("imm:%u rd:%u\n",j.imm,cpu->x[j.rd]);
if (j.rd != 0) {
cpu->x[j.rd] = x;
}
-
- printf("rd:%u\n", cpu->x[j.rd]);
}
static void exec_utype(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE U\n");
utype_t u;
decode_utype(&u, inst);
- /**print**/
- printf("imm rd opcode\n");
- print_binless(u.imm, 20);
- printf(" ");
- print_binless(u.rd, 5);
- printf("\n");
- /*********/
-
if (u.rd != 0)
cpu->x[u.rd] = u.imm << 12;
cpu->pc += 4;
-
-
- printf("rd:%u\n", cpu->x[u.rd]);
- printf("rd:%x\n", cpu->x[u.rd]);
}
-static void exec_utype_auipc(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
+static void
+exec_utype_auipc(cpu_state_t *cpu, uint32_t inst, uint8_t *mem) {
(void)mem; /* suppressing unused parameters warning */
- printf("TYPE U\n");
utype_t u;
decode_utype(&u, inst);
- /**print**/
- printf("imm rd opcode\n");
- print_binless(u.imm, 20);
- printf(" ");
- print_binless(u.rd, 5);
- printf("\n");
- /*********/
-
if (u.rd != 0)
cpu->x[u.rd] = cpu->pc + (u.imm << 12);
cpu->pc += 4;
-
- printf("rd:%u\n", cpu->x[u.rd]);
- printf("rd:%x\n", cpu->x[u.rd]);
}
static void
load_program(uint8_t *mem)
{
/* PROGRAM */
-
- /*uint32_t arr[] = {
- 0x500193, // addi x3, x0, 5
- 0x600093, // addi x1, x0, 6
- 0x118263, // beq x3, x1. +4
- 0x728263 // beq x5, x7, +4
- }; */
-
uint32_t arr[] = {
0x00500193, // addi x3, x0, 5
0x00600093, // addi x1, x0, 6
@@ -683,15 +498,8 @@ int main() {
uint32_t inst = make_instruction(mem, cpu.pc);
disassemble_instruction(inst);
- printf("------------INST------\n");
- print_bin32(inst);
- printf("\n");
-
/* decode opcode */
uint16_t opcode = inst & 127;
- printf("opcode: ");
- print_binless(opcode,7);
- printf("\n");
exec_fn fn = opcode_table[opcode];