tests/tcg/e2k: remove C tests, add simple assembler add test
This commit is contained in:
parent
71c53a3825
commit
d48d9d62c6
@ -1,15 +1,23 @@
|
|||||||
# -*- Mode: makefile -*-
|
# -*- Mode: makefile -*-
|
||||||
#
|
#
|
||||||
# Elbrus 2000 tests
|
# E2K tests
|
||||||
|
|
||||||
E2K_SRC=$(SRC_PATH)/tests/tcg/e2k
|
|
||||||
VPATH+=$(E2K_SRC)
|
|
||||||
|
|
||||||
E2K_TESTS=hello-e2k
|
|
||||||
TESTS+=$(E2K_TESTS)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# hello-e2k is a barebones app
|
|
||||||
#
|
E2K_SRC = $(SRC_PATH)/tests/tcg/e2k
|
||||||
hello-e2k: CFLAGS+=-ffreestanding
|
E2K_ALL = $(wildcard $(E2K_SRC)/*.s)
|
||||||
hello-e2k: LDFLAGS+=-nostdlib
|
|
||||||
|
TESTS = $(patsubst $(E2K_SRC)/%.s, %, $(E2K_ALL))
|
||||||
|
VPATH = $(E2K_SRC)
|
||||||
|
|
||||||
|
CROSS = e2k-linux-
|
||||||
|
AS = $(CROSS)as
|
||||||
|
LD = $(CROSS)ld
|
||||||
|
|
||||||
|
ASFLAGS = -mcpu=elbrus-v4 -g -I$(E2K_SRC)
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
%.o: %.s
|
||||||
|
$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
|
||||||
|
%: %.o
|
||||||
|
$(LD) $(LDFLAGS) $< -o $@
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
#include <asm/e2k_api.h>
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
|
|
||||||
#define MSG "Hello, world!\n"
|
|
||||||
|
|
||||||
void _start(void) {
|
|
||||||
__E2K_SYSCALL_3(LINUX_SYSCALL64_TRAPNUM, __NR_write, 1, MSG, sizeof(MSG));
|
|
||||||
__E2K_SYSCALL_1(LINUX_SYSCALL64_TRAPNUM, __NR_exit, 0);
|
|
||||||
}
|
|
123
tests/tcg/e2k/macros.inc
Normal file
123
tests/tcg/e2k/macros.inc
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
.set SYSCALL32_TRAPNUM, 0x1
|
||||||
|
.set SYSCALL64_TRAPNUM, 0x3
|
||||||
|
|
||||||
|
.set __NR_exit, 0x1
|
||||||
|
.set __NR_write, 0x4
|
||||||
|
|
||||||
|
.macro e2k_syscall_1 trapnum sysnum v1
|
||||||
|
{
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
}
|
||||||
|
{
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro e2k_syscall_2 trapnum sysnum v1 v2
|
||||||
|
{
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
addd 0x0, \v2, %b[2]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro e2k_syscall_3 trapnum sysnum v1 v2 v3
|
||||||
|
{
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
addd 0x0, \v2, %b[2]
|
||||||
|
addd 0x0, \v3, %b[3]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro e2k_syscall_4 trapnum sysnum v1 v2 v3 v4
|
||||||
|
{
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
addd 0x0, \v2, %b[2]
|
||||||
|
addd 0x0, \v3, %b[3]
|
||||||
|
addd 0x0, \v4, %b[4]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro e2k_syscall_5 trapnum sysnum v1 v2 v3 v4 v5
|
||||||
|
{
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
addd 0x0, \v2, %b[2]
|
||||||
|
addd 0x0, \v3, %b[3]
|
||||||
|
addd 0x0, \v4, %b[4]
|
||||||
|
addd 0x0, \v5, %b[5]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro e2k_syscall_6 trapnum sysnum v1 v2 v3 v4 v5 v6
|
||||||
|
{
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
addd 0x0, \v2, %b[2]
|
||||||
|
addd 0x0, \v3, %b[3]
|
||||||
|
addd 0x0, \v4, %b[4]
|
||||||
|
addd 0x0, \v5, %b[5]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd 0x0, \v6, %b[5]
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro e2k_syscall_7 trapnum sysnum v1 v2 v3 v4 v5 v6 v7
|
||||||
|
{
|
||||||
|
sdisp %ctpr1, \trapnum
|
||||||
|
addd 0x0, \sysnum, %b[0]
|
||||||
|
addd 0x0, \v1, %b[1]
|
||||||
|
addd 0x0, \v2, %b[2]
|
||||||
|
addd 0x0, \v3, %b[3]
|
||||||
|
addd 0x0, \v4, %b[4]
|
||||||
|
addd 0x0, \v5, %b[5]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd 0x0, \v6, %b[6]
|
||||||
|
addd 0x0, \v7, %b[7]
|
||||||
|
call %ctpr1, wbs = 0x4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro assert op reg1 reg2 counter_reg
|
||||||
|
{
|
||||||
|
\op \reg1, \reg2, %pred0
|
||||||
|
addd 0x0, \counter_reg, %b[0]
|
||||||
|
disp %ctpr1, _test_fail
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd 0x1, \counter_reg, \counter_reg
|
||||||
|
call %ctpr1, wbs = 0x4 ? ~%pred0
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
|
_test_fail:
|
||||||
|
{
|
||||||
|
setwd wsz = 0x8, nfx = 0x0, dbl = 0x0
|
||||||
|
setbn rsz = 0x3, rbs = 0x4, rcur = 0x0
|
||||||
|
}
|
||||||
|
e2k_syscall_3 SYSCALL64_TRAPNUM, __NR_write, 0, [ _test_failed_str ], _test_failed_strlen
|
||||||
|
e2k_syscall_1 SYSCALL64_TRAPNUM, __NR_exit, %dr0
|
6
tests/tcg/e2k/macros_end.inc
Normal file
6
tests/tcg/e2k/macros_end.inc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
_stop:
|
||||||
|
e2k_syscall_1 SYSCALL64_TRAPNUM, __NR_exit, 0
|
||||||
|
|
||||||
|
_test_failed_str:
|
||||||
|
.ascii "TEST FAILED\n\0"
|
||||||
|
.set _test_failed_strlen, . - _test_failed_str
|
23
tests/tcg/e2k/test_addd.s
Normal file
23
tests/tcg/e2k/test_addd.s
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
.global _start
|
||||||
|
.include "macros.inc"
|
||||||
|
|
||||||
|
_start:
|
||||||
|
{
|
||||||
|
setwd wsz=0x8, nfx=1
|
||||||
|
setbn rbs=0x4, rsz=0x3, rcur=0
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd 0x0, 0x0, %r0 ! counter
|
||||||
|
addd 0x2, 0xFFFFFFFFFFFFFFFF, %r1
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd 0x2, 0x2, %r2
|
||||||
|
adds 0x2, 0x2, %r3
|
||||||
|
adds 0x2, 0xFFFFFFFF, %r4
|
||||||
|
}
|
||||||
|
assert cmpedb, %r1, 0x1, %r0
|
||||||
|
assert cmpedb, %r2, 0x4, %r0
|
||||||
|
assert cmpesb, %r3, 0x4, %r0
|
||||||
|
assert cmpesb, %r4, 0x1, %r0
|
||||||
|
|
||||||
|
.include "macros_end.inc"
|
Loading…
Reference in New Issue
Block a user