mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-16 06:22:14 +00:00
alpha: add tests
This patch creates tests/alpha directory and adds an "hello world" program as well as two tests. Signed-off-by: Tristan Gingold <gingold@adacore.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5216 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
bbc0d79cb7
commit
df0fc998b8
29
tests/alpha/Makefile
Normal file
29
tests/alpha/Makefile
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
CROSS=alpha-linux-gnu-
|
||||||
|
CC=$(CROSS)gcc
|
||||||
|
AS=$(CROSS)as
|
||||||
|
|
||||||
|
SIM=../../alpha-linux-user/qemu-alpha
|
||||||
|
|
||||||
|
CFLAGS=-O
|
||||||
|
LINK=$(CC) -v -o $@ crt.o $< -nostdlib
|
||||||
|
|
||||||
|
TESTS=test-cond test-cmov
|
||||||
|
|
||||||
|
all: hello-alpha $(TESTS)
|
||||||
|
|
||||||
|
hello-alpha: hello-alpha.o crt.o
|
||||||
|
$(LINK)
|
||||||
|
|
||||||
|
test-cond: test-cond.o crt.o
|
||||||
|
$(LINK)
|
||||||
|
|
||||||
|
test-cmov.o: test-cond.c
|
||||||
|
$(CC) -c $(CFLAGS) -DTEST_CMOV -o $@ $<
|
||||||
|
|
||||||
|
test-cmov: test-cmov.o crt.o
|
||||||
|
$(LINK)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o *~ hello-alpha $(TESTS)
|
||||||
|
|
||||||
|
.PHONY: clean all
|
23
tests/alpha/crt.s
Normal file
23
tests/alpha/crt.s
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
.text
|
||||||
|
|
||||||
|
.globl _start
|
||||||
|
.ent _start,0
|
||||||
|
_start:
|
||||||
|
.frame $15,0,$15
|
||||||
|
br $29,1f
|
||||||
|
1: ldgp $29, 0($29)
|
||||||
|
.prologue 0
|
||||||
|
ldq $27,main($29) !literal!1
|
||||||
|
jsr $26,($27)
|
||||||
|
|
||||||
|
lda $0,1
|
||||||
|
callsys
|
||||||
|
|
||||||
|
call_pal 0
|
||||||
|
.end _start
|
||||||
|
|
||||||
|
.globl write
|
||||||
|
write:
|
||||||
|
lda $0,4
|
||||||
|
callsys
|
||||||
|
ret
|
5
tests/alpha/hello-alpha.c
Normal file
5
tests/alpha/hello-alpha.c
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
write (1, "hello\n", 6);
|
||||||
|
return 0;
|
||||||
|
}
|
87
tests/alpha/test-cond.c
Normal file
87
tests/alpha/test-cond.c
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
|
||||||
|
#ifdef TEST_CMOV
|
||||||
|
|
||||||
|
#define TEST_COND(N) \
|
||||||
|
int test_##N (long a) \
|
||||||
|
{ \
|
||||||
|
int res = 1; \
|
||||||
|
\
|
||||||
|
asm ("cmov"#N" %1,$31,%0" \
|
||||||
|
: "+r" (res) : "r" (a)); \
|
||||||
|
return !res; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define TEST_COND(N) \
|
||||||
|
int test_##N (long a) \
|
||||||
|
{ \
|
||||||
|
int res = 1; \
|
||||||
|
\
|
||||||
|
asm ("b"#N" %1,1f\n\t" \
|
||||||
|
"addq $31,$31,%0\n\t" \
|
||||||
|
"1: unop\n" \
|
||||||
|
: "+r" (res) : "r" (a)); \
|
||||||
|
return res; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TEST_COND(eq)
|
||||||
|
TEST_COND(ne)
|
||||||
|
TEST_COND(ge)
|
||||||
|
TEST_COND(gt)
|
||||||
|
TEST_COND(lbc)
|
||||||
|
TEST_COND(lbs)
|
||||||
|
TEST_COND(le)
|
||||||
|
TEST_COND(lt)
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
int (*func)(long);
|
||||||
|
long v;
|
||||||
|
int r;
|
||||||
|
} vectors[] =
|
||||||
|
{
|
||||||
|
{test_eq, 0, 1},
|
||||||
|
{test_eq, 1, 0},
|
||||||
|
|
||||||
|
{test_ne, 0, 0},
|
||||||
|
{test_ne, 1, 1},
|
||||||
|
|
||||||
|
{test_ge, 0, 1},
|
||||||
|
{test_ge, 1, 1},
|
||||||
|
{test_ge, -1, 0},
|
||||||
|
|
||||||
|
{test_gt, 0, 0},
|
||||||
|
{test_gt, 1, 1},
|
||||||
|
{test_gt, -1, 0},
|
||||||
|
|
||||||
|
{test_lbc, 0, 1},
|
||||||
|
{test_lbc, 1, 0},
|
||||||
|
{test_lbc, -1, 0},
|
||||||
|
|
||||||
|
{test_lbs, 0, 0},
|
||||||
|
{test_lbs, 1, 1},
|
||||||
|
{test_lbs, -1, 1},
|
||||||
|
|
||||||
|
{test_le, 0, 1},
|
||||||
|
{test_le, 1, 0},
|
||||||
|
{test_le, -1, 1},
|
||||||
|
|
||||||
|
{test_lt, 0, 0},
|
||||||
|
{test_lt, 1, 0},
|
||||||
|
{test_lt, -1, 1},
|
||||||
|
};
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof (vectors)/sizeof(vectors[0]); i++)
|
||||||
|
if ((*vectors[i].func)(vectors[i].v) != vectors[i].r) {
|
||||||
|
write(1, "Failed\n", 7);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
write(1, "OK\n", 3);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user