that's a *loop* lol

This commit is contained in:
Benjamin Kyd
2023-07-13 23:19:34 +01:00
parent acc2cca6ac
commit 0839f50b2c
8 changed files with 32 additions and 23 deletions

View File

@@ -89,13 +89,19 @@ impl Instruction for JALR {
}
fn match_inst(&self, inst: rv32::Word) -> bool {
match_mask!(inst, "xxxxxxxxxxxxxxxxxxxxxxxxx1101111")
// testing against print
println!("JALR: {:032b}", inst);
println!("JALR: xxxxxxxxxxxxxxxxx000xxxxx1100111");
match_mask!(inst, "xxxxxxxxxxxxxxxxx000xxxxx1100111")
}
fn step(&self, inst: GenInstruction, state: &mut cpu::CPUState) {
println!("VM > Executing JALR");
let inst = unsafe { inst.I };
let offset = sext(inst.full_imm(), 32);
let pc = offset.wrapping_add(state.x[inst.rs1() as usize]);
state.x[inst.rd() as usize] = state.pc + rv32::WORD as u32;
state.pc = pc - 4;
}
}
@@ -144,6 +150,7 @@ pub enum ExtensionI {
LUI(LUI),
AUIPC(AUIPC),
JAL(JAL),
JALR(JALR),
ADDI(ADDI),
ADD(ADD),
}

View File

@@ -9,7 +9,7 @@ assemble:
build:
$(GCC_PREFIX)-gcc -Wl,-Ttext=0x0 -nostdlib -march=rv64i -mabi=lp64 -o $(TARGET) $(TARGET).S
$(GCC_PREFIX)-objdump -t $(TARGET) > $(TARGET).map
$(GCC_PREFIX)-objdump -S $(TARGET) > $(TARGET).lst
$(GCC_PREFIX)-objdump -d -M no-aliases $(TARGET) > $(TARGET).lst
$(GCC_PREFIX)-objcopy -O binary $(TARGET) $(TARGET).bin
$(GCC_PREFIX)-objcopy -O ihex $(TARGET) $(TARGET).hex

BIN
test/test

Binary file not shown.

View File

@@ -1,7 +1,8 @@
j main
lui x2, 0xFFFFF
addi t1, x0, 0x123
auipc x3, 0x12345
lui x1, 0xFFFFF
addi x2, x0, 0x123
addi x2, x0, 0x123
lui t1, 0x80000 # jalr main into x4 then jump to x4
jalr t1, 0x4
main:
addi t0, x0, 100

Binary file not shown.

View File

@@ -1,3 +1,3 @@
:100000006F00000137F1FFFF1303301297513412D4
:040010009302400611
:10000000B7F0FFFF130130121301301237030080E5
:08001000E700430093024006E3
:00000001FF

View File

@@ -4,11 +4,12 @@ test: file format elf64-littleriscv
Disassembly of section .text:
0000000000000000 <main-0x10>:
0: 0100006f j 10 <main>
4: fffff137 lui sp,0xfffff
8: 12300313 li t1,291
c: 12345197 auipc gp,0x12345
0000000000000000 <main-0x14>:
0: fffff0b7 lui ra,0xfffff
4: 12300113 addi sp,zero,291
8: 12300113 addi sp,zero,291
c: 80000337 lui t1,0x80000
10: 004300e7 jalr ra,4(t1) # ffffffff80000004 <__global_pointer$+0xffffffff7fffe7ec>
0000000000000010 <main>:
10: 06400293 li t0,100
0000000000000014 <main>:
14: 06400293 addi t0,zero,100

View File

@@ -4,15 +4,15 @@ test: file format elf64-littleriscv
SYMBOL TABLE:
0000000000000000 l d .text 0000000000000000 .text
0000000000000000 l d .riscv.attributes 0000000000000000 .riscv.attributes
0000000000000000 l df *ABS* 0000000000000000 ccC0QKeL.o
0000000000000010 l .text 0000000000000000 main
0000000000001814 g *ABS* 0000000000000000 __global_pointer$
0000000000001014 g .text 0000000000000000 __SDATA_BEGIN__
0000000000000000 l df *ABS* 0000000000000000 ccC2JIEu.o
0000000000000014 l .text 0000000000000000 main
0000000000001818 g *ABS* 0000000000000000 __global_pointer$
0000000000001018 g .text 0000000000000000 __SDATA_BEGIN__
0000000000000000 *UND* 0000000000000000 _start
0000000000001018 g .text 0000000000000000 __BSS_END__
0000000000001014 g .text 0000000000000000 __bss_start
0000000000001014 g .text 0000000000000000 __DATA_BEGIN__
0000000000001014 g .text 0000000000000000 _edata
0000000000001018 g .text 0000000000000000 __bss_start
0000000000001018 g .text 0000000000000000 __DATA_BEGIN__
0000000000001018 g .text 0000000000000000 _edata
0000000000001018 g .text 0000000000000000 _end