Commit df0fc998b8139b916c2b268870b74849ca3f34d7
1 parent
bbc0d79c
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
Showing
4 changed files
with
144 additions
and
0 deletions
tests/alpha/Makefile
0 → 100644
1 | +CROSS=alpha-linux-gnu- | |
2 | +CC=$(CROSS)gcc | |
3 | +AS=$(CROSS)as | |
4 | + | |
5 | +SIM=../../alpha-linux-user/qemu-alpha | |
6 | + | |
7 | +CFLAGS=-O | |
8 | +LINK=$(CC) -v -o $@ crt.o $< -nostdlib | |
9 | + | |
10 | +TESTS=test-cond test-cmov | |
11 | + | |
12 | +all: hello-alpha $(TESTS) | |
13 | + | |
14 | +hello-alpha: hello-alpha.o crt.o | |
15 | + $(LINK) | |
16 | + | |
17 | +test-cond: test-cond.o crt.o | |
18 | + $(LINK) | |
19 | + | |
20 | +test-cmov.o: test-cond.c | |
21 | + $(CC) -c $(CFLAGS) -DTEST_CMOV -o $@ $< | |
22 | + | |
23 | +test-cmov: test-cmov.o crt.o | |
24 | + $(LINK) | |
25 | + | |
26 | +clean: | |
27 | + $(RM) *.o *~ hello-alpha $(TESTS) | |
28 | + | |
29 | +.PHONY: clean all | ... | ... |
tests/alpha/crt.s
0 → 100644
1 | + .text | |
2 | + | |
3 | + .globl _start | |
4 | + .ent _start,0 | |
5 | +_start: | |
6 | + .frame $15,0,$15 | |
7 | + br $29,1f | |
8 | +1: ldgp $29, 0($29) | |
9 | + .prologue 0 | |
10 | + ldq $27,main($29) !literal!1 | |
11 | + jsr $26,($27) | |
12 | + | |
13 | + lda $0,1 | |
14 | + callsys | |
15 | + | |
16 | + call_pal 0 | |
17 | + .end _start | |
18 | + | |
19 | + .globl write | |
20 | +write: | |
21 | + lda $0,4 | |
22 | + callsys | |
23 | + ret | ... | ... |
tests/alpha/hello-alpha.c
0 → 100644
tests/alpha/test-cond.c
0 → 100644
1 | + | |
2 | +#ifdef TEST_CMOV | |
3 | + | |
4 | +#define TEST_COND(N) \ | |
5 | +int test_##N (long a) \ | |
6 | +{ \ | |
7 | + int res = 1; \ | |
8 | + \ | |
9 | + asm ("cmov"#N" %1,$31,%0" \ | |
10 | + : "+r" (res) : "r" (a)); \ | |
11 | + return !res; \ | |
12 | +} | |
13 | + | |
14 | +#else | |
15 | + | |
16 | +#define TEST_COND(N) \ | |
17 | +int test_##N (long a) \ | |
18 | +{ \ | |
19 | + int res = 1; \ | |
20 | + \ | |
21 | + asm ("b"#N" %1,1f\n\t" \ | |
22 | + "addq $31,$31,%0\n\t" \ | |
23 | + "1: unop\n" \ | |
24 | + : "+r" (res) : "r" (a)); \ | |
25 | + return res; \ | |
26 | +} | |
27 | + | |
28 | +#endif | |
29 | + | |
30 | +TEST_COND(eq) | |
31 | +TEST_COND(ne) | |
32 | +TEST_COND(ge) | |
33 | +TEST_COND(gt) | |
34 | +TEST_COND(lbc) | |
35 | +TEST_COND(lbs) | |
36 | +TEST_COND(le) | |
37 | +TEST_COND(lt) | |
38 | + | |
39 | +static struct { | |
40 | + int (*func)(long); | |
41 | + long v; | |
42 | + int r; | |
43 | +} vectors[] = | |
44 | + { | |
45 | + {test_eq, 0, 1}, | |
46 | + {test_eq, 1, 0}, | |
47 | + | |
48 | + {test_ne, 0, 0}, | |
49 | + {test_ne, 1, 1}, | |
50 | + | |
51 | + {test_ge, 0, 1}, | |
52 | + {test_ge, 1, 1}, | |
53 | + {test_ge, -1, 0}, | |
54 | + | |
55 | + {test_gt, 0, 0}, | |
56 | + {test_gt, 1, 1}, | |
57 | + {test_gt, -1, 0}, | |
58 | + | |
59 | + {test_lbc, 0, 1}, | |
60 | + {test_lbc, 1, 0}, | |
61 | + {test_lbc, -1, 0}, | |
62 | + | |
63 | + {test_lbs, 0, 0}, | |
64 | + {test_lbs, 1, 1}, | |
65 | + {test_lbs, -1, 1}, | |
66 | + | |
67 | + {test_le, 0, 1}, | |
68 | + {test_le, 1, 0}, | |
69 | + {test_le, -1, 1}, | |
70 | + | |
71 | + {test_lt, 0, 0}, | |
72 | + {test_lt, 1, 0}, | |
73 | + {test_lt, -1, 1}, | |
74 | + }; | |
75 | + | |
76 | +int main (void) | |
77 | +{ | |
78 | + int i; | |
79 | + | |
80 | + for (i = 0; i < sizeof (vectors)/sizeof(vectors[0]); i++) | |
81 | + if ((*vectors[i].func)(vectors[i].v) != vectors[i].r) { | |
82 | + write(1, "Failed\n", 7); | |
83 | + return 1; | |
84 | + } | |
85 | + write(1, "OK\n", 3); | |
86 | + return 0; | |
87 | +} | ... | ... |