root / tests / alpha / test-cond.c @ 9c9efb6b
History | View | Annotate | Download (1.3 kB)
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 |
} |