From 30a7f9492e5e15f2d64dded11bc5080af6b54ec5 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sun, 29 Oct 2023 08:59:09 +0100 Subject: [PATCH] feat: add basic testing programs --- programs/add.c | 11 +++++++++++ programs/add.s | 46 ++++++++++++++++++++++++++++++++++++++++++++++ programs/link.ld | 21 +++++++++++++++++++++ programs/start.S | 8 ++++++++ programs/tests.c | 7 +++++++ 5 files changed, 93 insertions(+) create mode 100755 programs/add.c create mode 100755 programs/add.s create mode 100755 programs/link.ld create mode 100755 programs/start.S create mode 100755 programs/tests.c diff --git a/programs/add.c b/programs/add.c new file mode 100755 index 0000000..46b56a7 --- /dev/null +++ b/programs/add.c @@ -0,0 +1,11 @@ +int add(int a, int b) +{ + return a + b; +} + +void main() +{ + int a = 20; + int b = 30; + int c = add(a, b); +} diff --git a/programs/add.s b/programs/add.s new file mode 100755 index 0000000..2d7575a --- /dev/null +++ b/programs/add.s @@ -0,0 +1,46 @@ + .file "add.c" + .option nopic + .attribute arch, "rv32i2p1" + .attribute unaligned_access, 0 + .attribute stack_align, 16 + .text + .align 2 + .globl add + .type add, @function +add: + addi sp,sp,-32 + sw s0,28(sp) + addi s0,sp,32 + sw a0,-20(s0) + sw a1,-24(s0) + lw a4,-20(s0) + lw a5,-24(s0) + add a5,a4,a5 + mv a0,a5 + lw s0,28(sp) + addi sp,sp,32 + jr ra + .size add, .-add + .align 2 + .globl main + .type main, @function +main: + addi sp,sp,-32 + sw ra,28(sp) + sw s0,24(sp) + addi s0,sp,32 + li a5,20 + sw a5,-20(s0) + li a5,30 + sw a5,-24(s0) + lw a1,-24(s0) + lw a0,-20(s0) + call add + sw a0,-28(s0) + nop + lw ra,28(sp) + lw s0,24(sp) + addi sp,sp,32 + jr ra + .size main, .-main + .ident "GCC: (GNU) 12.2.0" diff --git a/programs/link.ld b/programs/link.ld new file mode 100755 index 0000000..6bdb55d --- /dev/null +++ b/programs/link.ld @@ -0,0 +1,21 @@ +MEMORY +{ + ram : ORIGIN = 0x00000000, LENGTH = 1K - 1 +} + +SECTIONS +{ + .text = 0x0; + .bss : { + __bss_start = .; + *(.bss) + *(COMMON) + __bss_end = .; + } > ram + .stack : { + __stack_start = .; + *(.stack) + __stack_end = .; + } > ram +} + diff --git a/programs/start.S b/programs/start.S new file mode 100755 index 0000000..85821c6 --- /dev/null +++ b/programs/start.S @@ -0,0 +1,8 @@ +.global _start + +.text +_start: + addi sp, x0, 127 + call main +_loop: + j _loop diff --git a/programs/tests.c b/programs/tests.c new file mode 100755 index 0000000..3b705b2 --- /dev/null +++ b/programs/tests.c @@ -0,0 +1,7 @@ +void main() +{ + signed char a = -10; + signed char b = a << 1; + unsigned char c = ((unsigned char)b) >> 1; + signed char d = b >> 1; +} -- 2.48.1