Statistics
| Branch: | Revision:

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
}