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