root / tests / tcg / cris / check_addc.c @ c09015dd
History | View | Annotate | Download (1.3 kB)
1 |
#include <stdio.h> |
---|---|
2 |
#include <stdlib.h> |
3 |
#include <stdint.h> |
4 |
#include "sys.h" |
5 |
#include "crisutils.h" |
6 |
|
7 |
static inline int cris_addc(int a, const int b) |
8 |
{ |
9 |
asm ("addc\t%1, %0\n" : "+r" (a) : "r" (b)); |
10 |
return a;
|
11 |
} |
12 |
|
13 |
#define verify_addc(a, b, res, n, z, v, c) \
|
14 |
{ \ |
15 |
int r; \
|
16 |
r = cris_addc((a), (b)); \ |
17 |
cris_tst_cc((n), (z), (v), (c)); \ |
18 |
if (r != (res)) \
|
19 |
err(); \ |
20 |
} |
21 |
|
22 |
int main(void) |
23 |
{ |
24 |
cris_tst_cc_init(); |
25 |
asm volatile ("clearf cz"); |
26 |
verify_addc(0, 0, 0, 0, 0, 0, 0); |
27 |
|
28 |
cris_tst_cc_init(); |
29 |
asm volatile ("setf z"); |
30 |
verify_addc(0, 0, 0, 0, 1, 0, 0); |
31 |
|
32 |
cris_tst_cc_init(); |
33 |
asm volatile ("setf cz"); |
34 |
verify_addc(0, 0, 1, 0, 0, 0, 0); |
35 |
cris_tst_cc_init(); |
36 |
asm volatile ("clearf c"); |
37 |
verify_addc(-1, 2, 1, 0, 0, 0, 1); |
38 |
|
39 |
cris_tst_cc_init(); |
40 |
asm volatile ("clearf nzv"); |
41 |
asm volatile ("setf c"); |
42 |
verify_addc(-1, 2, 2, 0, 0, 0, 1); |
43 |
|
44 |
cris_tst_cc_init(); |
45 |
asm volatile ("setf c"); |
46 |
verify_addc(0xffff, 0xffff, 0x1ffff, 0, 0, 0, 0); |
47 |
|
48 |
cris_tst_cc_init(); |
49 |
asm volatile ("clearf nzvc"); |
50 |
verify_addc(-1, -1, 0xfffffffe, 1, 0, 0, 1); |
51 |
|
52 |
cris_tst_cc_init(); |
53 |
asm volatile ("setf c"); |
54 |
verify_addc(0x78134452, 0x5432f789, 0xcc463bdc, 1, 0, 1, 0); |
55 |
|
56 |
pass(); |
57 |
return 0; |
58 |
} |