fixed infinite loop when not branching

This commit is contained in:
inixyz
2023-10-18 00:22:17 +03:00
parent b79efd608a
commit c47cf4cf01
7 changed files with 56 additions and 31 deletions

View File

@@ -45,15 +45,13 @@ static inline void store32(u8* mem, const u32 addr, const u32 val){
void tinyriscv_b_type(u32* pc, const u8 func3, const u32 x[32], const u8 rs1,
const u8 rs2, const i16 imm){
*pc -= 4;
switch(func3){
case /*BEQ*/ 0: if(x[rs1] == x[rs2]) *pc += (i32)imm; break;
case /*BNE*/ 1: if(x[rs1] != x[rs2]) *pc += (i32)imm; break;
case /*BLT*/ 4: if((i32)x[rs1] < (i32)x[rs2]) *pc += (i32)imm; break;
case /*BGE*/ 5: if((i32)x[rs1] >= (i32)x[rs2]) *pc += (i32)imm; break;
case /*BLTU*/ 6: if(x[rs1] < x[rs2]) *pc += (i32)imm; break;
case /*BGEU*/ 7: if(x[rs1] >= x[rs2]) *pc += (i32)imm; break;
case /*BEQ*/ 0: if(x[rs1] == x[rs2]) *pc += (i32)imm - 4; break;
case /*BNE*/ 1: if(x[rs1] != x[rs2]) *pc += (i32)imm - 4; break;
case /*BLT*/ 4: if((i32)x[rs1] < (i32)x[rs2]) *pc += (i32)imm - 4; break;
case /*BGE*/ 5: if((i32)x[rs1] >= (i32)x[rs2]) *pc += (i32)imm - 4; break;
case /*BLTU*/ 6: if(x[rs1] < x[rs2]) *pc += (i32)imm - 4; break;
case /*BGEU*/ 7: if(x[rs1] >= x[rs2]) *pc += (i32)imm - 4; break;
}
}

Binary file not shown.

10
tests/1.c Normal file
View File

@@ -0,0 +1,10 @@
#include <stdint.h>
int main(){
uint8_t* ptr = 0x800000F0;
for(int i = 0; i < 16; i++){
*ptr = i;
ptr++;
}
}

40
tests/1.s Normal file
View File

@@ -0,0 +1,40 @@
.file "1.c"
.option nopic
.attribute arch, "rv32i2p1"
.attribute unaligned_access, 0
.attribute stack_align, 16
.text
.align 2
.globl main
.type main, @function
main:
addi sp,sp,-32
sw s0,28(sp)
addi s0,sp,32
li a5,-2147483648
addi a5,a5,240
sw a5,-20(s0)
sw zero,-24(s0)
j .L2
.L3:
lw a5,-24(s0)
andi a4,a5,0xff
lw a5,-20(s0)
sb a4,0(a5)
lw a5,-20(s0)
addi a5,a5,1
sw a5,-20(s0)
lw a5,-24(s0)
addi a5,a5,1
sw a5,-24(s0)
.L2:
lw a4,-24(s0)
li a5,15
ble a4,a5,.L3
li a5,0
mv a0,a5
lw s0,28(sp)
addi sp,sp,32
jr ra
.size main, .-main
.ident "GCC: () 13.2.0"

Binary file not shown.

View File

@@ -1,3 +0,0 @@
int main(){
}

View File

@@ -1,20 +0,0 @@
.file "main.c"
.option nopic
.attribute arch, "rv32i2p1"
.attribute unaligned_access, 0
.attribute stack_align, 16
.text
.align 2
.globl main
.type main, @function
main:
addi sp,sp,-16
sw s0,12(sp)
addi s0,sp,16
li a5,0
mv a0,a5
lw s0,12(sp)
addi sp,sp,16
jr ra
.size main, .-main
.ident "GCC: () 13.2.0"