parent
ce1729d5b1
commit
72dda9aaeb
@ -0,0 +1,22 @@ |
||||
AS=riscv32-elf-as
|
||||
LD=riscv32-elf-ld
|
||||
BUILD_DIR=../build/tests/
|
||||
|
||||
S_FILES := $(shell find ./ -name '*.s')
|
||||
NAMES = $(basename $(S_FILES))
|
||||
OBJECTS=$(patsubst %, $(BUILD_DIR)/%, $(NAMES))
|
||||
|
||||
all: $(OBJECTS) run |
||||
|
||||
$(BUILD_DIR): |
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(BUILD_DIR)/%.o: %.s | $(BUILD_DIR) |
||||
$(AS) $^ -o $@
|
||||
|
||||
$(BUILD_DIR)/%: $(BUILD_DIR)/%.o | $(BUILD_DIR) |
||||
$(LD) $^ -o $@ -nostdlib
|
||||
|
||||
.SILENT: run |
||||
run: |
||||
bash test.sh
|
@ -0,0 +1,4 @@ |
||||
.global _start
|
||||
_start: |
||||
addi a0, zero, 0xBA |
||||
ebreak |
@ -0,0 +1,31 @@ |
||||
.global _start
|
||||
_start: |
||||
# Set base value of a0 to 'test failed' |
||||
addi a0, zero, 1 |
||||
|
||||
# Set A, B values of t0/t1, to test equality |
||||
addi t0, zero, 0xA |
||||
addi t1, zero, 0xB |
||||
beq t0, t1, eq0 |
||||
|
||||
# Inequality passed, now test equality |
||||
addi t0, zero, 0xA |
||||
addi t1, zero, 0xA |
||||
beq t0, t1, eq1 |
||||
|
||||
# On failure, return |
||||
ebreak |
||||
|
||||
eqNeg: |
||||
# All passed |
||||
addi a0, zero, 0 |
||||
ebreak |
||||
|
||||
eq0: |
||||
# Inequality failed |
||||
ebreak |
||||
|
||||
eq1: |
||||
# Equality passed ; now try to test a negative offset case
|
||||
beq t0, t1, eqNeg |
||||
ebreak |
@ -0,0 +1,21 @@ |
||||
.global _start
|
||||
_start: |
||||
# Set base value of a0 to 'test failed' |
||||
addi a0, zero, 1 |
||||
|
||||
# Construct value that ra should have in t0 |
||||
auipc t0, 0 |
||||
addi t0, t0, 12 |
||||
# Jump and link |
||||
jal ra, fn0 |
||||
ebreak |
||||
|
||||
fn0: |
||||
# Check ra value with our t0 construct |
||||
beq t0, ra, eq0 |
||||
ebreak |
||||
|
||||
eq0: |
||||
# All good |
||||
addi a0, zero, 0 |
||||
ebreak |
@ -0,0 +1,46 @@ |
||||
.global _start
|
||||
_start: |
||||
# Set base value of a0 to 'test failed' |
||||
addi a0, zero, 1 |
||||
|
||||
# Setup a stack |
||||
addi sp, sp, 0x100 |
||||
|
||||
# Try to call a simple function |
||||
jal fn1 |
||||
|
||||
# Try to call two imbricated functions |
||||
jal fn0 |
||||
|
||||
auipc t0, 0 |
||||
jalr ra, 12(t0) |
||||
|
||||
ebreak |
||||
|
||||
# just_after : address is 12 bytes after auipc |
||||
just_after: |
||||
addi a0, zero, 0 |
||||
ret |
||||
ebreak |
||||
|
||||
# fn0 : function that calls fn1 and returns |
||||
fn0: |
||||
# Make space on the stack |
||||
addi sp, sp, -4 |
||||
# Save ra |
||||
sw ra, 0(sp) |
||||
|
||||
# Call fn1 |
||||
jal fn1 |
||||
|
||||
# Restore ra and stack |
||||
lw ra, 0(sp) |
||||
addi sp, sp, 4 |
||||
|
||||
ret |
||||
ebreak |
||||
|
||||
# fn1 : just return |
||||
fn1: |
||||
ret |
||||
ebreak |
@ -0,0 +1,5 @@ |
||||
.global _start
|
||||
_start: |
||||
addi a1, zero, 0xBA |
||||
mv a0, a1 |
||||
ebreak |
@ -0,0 +1,21 @@ |
||||
.global _start
|
||||
_start: |
||||
# Set base value of a0 to 'test failed' |
||||
addi a0, zero, 1 |
||||
|
||||
# Store Word 0xBA at 0x104 |
||||
addi t0, zero, 0x100 |
||||
addi t1, zero, 0xBA |
||||
sw t1, 4(t0) |
||||
|
||||
# Load Word at 0x104 in t0 |
||||
lw t0, 4(t0) |
||||
|
||||
# Compare |
||||
beq t0, t1, good |
||||
|
||||
ebreak |
||||
|
||||
good: |
||||
addi a0, zero, 0 |
||||
ebreak |
@ -0,0 +1,30 @@ |
||||
#!/bin/bash |
||||
|
||||
GREEN="\e[32m" |
||||
RED="\e[31m" |
||||
CEND="\e[39m" |
||||
|
||||
VRISCV=../build/vriscv |
||||
|
||||
# test executes a test |
||||
# Arguments: test(name, executable, expected) |
||||
test() { |
||||
NAME=$1 |
||||
TEST=$2 |
||||
RESULT=$3 |
||||
|
||||
echo -ne "${NAME}""\t\t\t\t\t\t" |
||||
$VRISCV $TEST >/dev/null 2>&1 |
||||
if [ $? -eq $RESULT ]; then |
||||
echo -e $GREEN"PASSED"$CEND |
||||
else |
||||
echo -e $RED"FAILED"$CEND |
||||
fi |
||||
} |
||||
|
||||
test "ADDI : Add Immediate " "../build/tests/addi " 186 |
||||
test "MV : Move registers " "../build/tests/mv " 186 |
||||
test "BEQ : Branch EQual " "../build/tests/beq " 0 |
||||
test "JAL : Jump And Link " "../build/tests/jal " 0 |
||||
test "SWLW : Store Word Load Word " "../build/tests/swlw " 0 |
||||
test "JALR : Jump And Link Register " "../build/tests/jalr " 0 |
Loading…
Reference in new issue