that's a *loop* lol
This commit is contained in:
@@ -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),
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
BIN
test/test.bin
BIN
test/test.bin
Binary file not shown.
@@ -1,3 +1,3 @@
|
||||
:100000006F00000137F1FFFF1303301297513412D4
|
||||
:040010009302400611
|
||||
:10000000B7F0FFFF130130121301301237030080E5
|
||||
:08001000E700430093024006E3
|
||||
:00000001FF
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user