From 0839f50b2ceb95db79f17126449d5456cb08bfb1 Mon Sep 17 00:00:00 2001 From: Benjamin Kyd Date: Thu, 13 Jul 2023 23:19:34 +0100 Subject: [PATCH] that's a *loop* lol --- src/ext/i/mod.rs | 11 +++++++++-- test/Makefile | 2 +- test/test | Bin 5024 -> 5040 bytes test/test.S | 9 +++++---- test/test.bin | Bin 20 -> 24 bytes test/test.hex | 4 ++-- test/test.lst | 15 ++++++++------- test/test.map | 14 +++++++------- 8 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/ext/i/mod.rs b/src/ext/i/mod.rs index 204328b..b589182 100644 --- a/src/ext/i/mod.rs +++ b/src/ext/i/mod.rs @@ -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), } diff --git a/test/Makefile b/test/Makefile index a2556eb..8a6ae6c 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 diff --git a/test/test b/test/test index 05aee2d06c7d743a867af614b9c941e359d164c4..7310d2aaa1bc9955a512c1bc8f1791f300a50702 100755 GIT binary patch delta 316 zcmZ3WzCnG02BX15O?gI%iH+hD6D&9-7$87m6649*Ob z1q5Um4JU3?p6nwK<0%eS&d4AF)d!^|gm(QS5QB-DTl4(?6IJr;o6QjiBMj>+`xl_oV f(PHvXA$!gaL7+K6P&nC9*qrkxlxIBoppZNO8Url1 delta 308 zcmdm>zCe9~2BX46O?gI!oLt7h$PZ+)7L}QqWEvG1Ox!3xIYc1F6C?=K#~=Wv5d_F+0fvwNMI;bn zAeI_foRL8UO@sTyI&ns`$qxm@J)LkU@xvh=i$gqRa-pC!mqDO+s*heigG$BZd4iu9 pMJ7)aG6#|;h3pv(CUXkgb2bP9^#eiX: - 0: 0100006f j 10
- 4: fffff137 lui sp,0xfffff - 8: 12300313 li t1,291 - c: 12345197 auipc gp,0x12345 +0000000000000000 : + 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
: - 10: 06400293 li t0,100 +0000000000000014
: + 14: 06400293 addi t0,zero,100 diff --git a/test/test.map b/test/test.map index 820a49c..741db51 100644 --- a/test/test.map +++ b/test/test.map @@ -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