mirror of
https://github.com/Noratrieb/rustv32i.git
synced 2026-01-14 13:25:01 +01:00
add more tests
This commit is contained in:
parent
0af012d43a
commit
72f74c972d
7 changed files with 123 additions and 31 deletions
|
|
@ -21,7 +21,7 @@ fn check() -> eyre::Result<()> {
|
||||||
|
|
||||||
let name = file.file_name();
|
let name = file.file_name();
|
||||||
let name = name.to_str().unwrap();
|
let name = name.to_str().unwrap();
|
||||||
if !name.ends_with(".s") {
|
if !name.ends_with(".S") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ fn check() -> eyre::Result<()> {
|
||||||
|
|
||||||
let status = rustv32i::execute_linux_elf(
|
let status = rustv32i::execute_linux_elf(
|
||||||
&content,
|
&content,
|
||||||
matches!(std::env::var("EMULATOR_DEBUG").as_deref(), Ok(v) if v != "0"),
|
true,
|
||||||
Box::new(|_, xreg| {
|
Box::new(|_, xreg| {
|
||||||
if xreg[Reg::A7.0 as usize] == u32::MAX {
|
if xreg[Reg::A7.0 as usize] == u32::MAX {
|
||||||
if xreg[Reg::A0.0 as usize] == 1 {
|
if xreg[Reg::A0.0 as usize] == 1 {
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
.section .text
|
|
||||||
.globl _start
|
|
||||||
_start:
|
|
||||||
li t0, 10
|
|
||||||
li t1, 20
|
|
||||||
add t2, t0, t1
|
|
||||||
li t3, 30
|
|
||||||
bne t2, t3, fail
|
|
||||||
|
|
||||||
li t0, 10
|
|
||||||
li t1, -2
|
|
||||||
add t2, t0, t1
|
|
||||||
li t3, 8
|
|
||||||
bne t2, t3, fail
|
|
||||||
|
|
||||||
li a7, -1
|
|
||||||
li a0, 1
|
|
||||||
ecall
|
|
||||||
|
|
||||||
fail:
|
|
||||||
li a7, -1
|
|
||||||
li a0, 0
|
|
||||||
ecall
|
|
||||||
6
tests/check/branch.S
Normal file
6
tests/check/branch.S
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Control transfer instructions
|
||||||
|
|
||||||
|
#include "../helper.S"
|
||||||
|
|
||||||
|
START_TEST
|
||||||
|
PASS
|
||||||
90
tests/check/int_comp.S
Normal file
90
tests/check/int_comp.S
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Integer computational register-register instruction.
|
||||||
|
|
||||||
|
#include "../helper.S"
|
||||||
|
|
||||||
|
.macro CASE_REG inst a b expected
|
||||||
|
li t0, \a
|
||||||
|
li t1, \b
|
||||||
|
\inst t2, t0, t1
|
||||||
|
ASSERT_EQ t2, \expected
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro CASE_IMM inst a b expected
|
||||||
|
li t0, \a
|
||||||
|
\inst t2, t0, \b
|
||||||
|
ASSERT_EQ t2, \expected
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro CASE_BOTH inst insti a b expected
|
||||||
|
CASE_REG \inst, \a, \b, \expected
|
||||||
|
|
||||||
|
CASE_IMM \insti, \a, \b, \expected
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
.macro CASE inst a b expected
|
||||||
|
CASE_BOTH \inst, \inst\()i, \a, \b, \expected
|
||||||
|
.endm
|
||||||
|
|
||||||
|
START_TEST
|
||||||
|
CASE add 10, 20, 30
|
||||||
|
CASE add 10, -2, 8
|
||||||
|
CASE add 10, 0, 10
|
||||||
|
CASE add 0, 0, 0
|
||||||
|
|
||||||
|
CASE slt 10 20 1
|
||||||
|
CASE slt 20 10 0
|
||||||
|
CASE slt, -1 0 1
|
||||||
|
CASE slt 0, -1 0
|
||||||
|
CASE slt, -1, -1, 0
|
||||||
|
CASE slt, -100, -1, 1
|
||||||
|
|
||||||
|
CASE_BOTH sltu sltiu 10 20 1
|
||||||
|
CASE_BOTH sltu sltiu 20 10 0
|
||||||
|
CASE_BOTH sltu sltiu, -1, 0, 0
|
||||||
|
CASE_BOTH sltu sltiu, -100, -1, 1
|
||||||
|
CASE_BOTH sltu sltiu, 100, -1, 1
|
||||||
|
|
||||||
|
CASE and 0b11, 0b11, 0b11
|
||||||
|
CASE and, -1, -1, -1
|
||||||
|
CASE and, -1, 0, 0
|
||||||
|
CASE and, -1, 40, 40
|
||||||
|
CASE and, 0b101, 0b100, 0b100
|
||||||
|
|
||||||
|
CASE or, -1, 0, -1
|
||||||
|
CASE or, -1, 40, -1
|
||||||
|
CASE or, 0, 0, 0
|
||||||
|
CASE or, 0b101, 0b110, 0b111
|
||||||
|
|
||||||
|
CASE xor, -1, 0, -1
|
||||||
|
CASE xor, -1, -1, 0
|
||||||
|
CASE xor 0b101, 0b100, 0b001
|
||||||
|
|
||||||
|
CASE sll, 2, 1, 4
|
||||||
|
CASE sll, 0, 10, 0
|
||||||
|
CASE sll, 10, 0, 10
|
||||||
|
CASE sll, -1, 31, -2147483648
|
||||||
|
CASE_REG sll, -1, 32, -1 # error for immediate
|
||||||
|
|
||||||
|
CASE srl, 4, 1, 2
|
||||||
|
CASE srl, 0, 10, 0
|
||||||
|
CASE srl, 10, 0, 10
|
||||||
|
CASE srl, -1, 1, 2147483647
|
||||||
|
CASE srl, 0b111, 2, 0b001
|
||||||
|
CASE_REG srl, -1, 32, -1 # error for immediate
|
||||||
|
|
||||||
|
CASE_REG sub, 10, 5, 5
|
||||||
|
CASE_REG sub, -1, 1, -2
|
||||||
|
CASE_REG sub, 1, 2, -1
|
||||||
|
CASE_REG sub, -1, -2, 1
|
||||||
|
CASE_REG sub, 0, 4294967295, 1
|
||||||
|
|
||||||
|
CASE sra, 4, 1, 2
|
||||||
|
CASE sra, 0, 10, 0
|
||||||
|
CASE sra, 10, 0, 10
|
||||||
|
CASE sra, -1, 1, -1
|
||||||
|
CASE sra, -1, 31, -1
|
||||||
|
CASE sra, 0b111, 2, 0b001
|
||||||
|
CASE_REG sra, 10, 32, 10 # error for immediate
|
||||||
|
|
||||||
|
PASS
|
||||||
4
tests/check/smoke.S
Normal file
4
tests/check/smoke.S
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#include "../helper.S"
|
||||||
|
|
||||||
|
START_TEST
|
||||||
|
PASS
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
.section .text
|
|
||||||
.globl _start
|
|
||||||
_start:
|
|
||||||
li a7, -1
|
|
||||||
li a0, 1
|
|
||||||
ecall
|
|
||||||
21
tests/helper.S
Normal file
21
tests/helper.S
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
.macro START_TEST
|
||||||
|
.section .text
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro ASSERT_EQ actual expected
|
||||||
|
li t6, \expected
|
||||||
|
bne \actual, t6, fail
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro PASS
|
||||||
|
li a7, -1
|
||||||
|
li a0, 1
|
||||||
|
ecall
|
||||||
|
.endm
|
||||||
|
|
||||||
|
fail:
|
||||||
|
li a7, -1
|
||||||
|
li a0, 0
|
||||||
|
ecall
|
||||||
Loading…
Add table
Add a link
Reference in a new issue