|
|
1.1 root 1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <stdint.h>
4: #include "sys.h"
5: #include "crisutils.h"
6:
7: /* need to avoid acr as source here. */
8: extern inline int cris_addc_m(int a, const int *b) {
9: asm volatile ("addc [%1], %0\n" : "+r" (a) : "r" (b));
10: return a;
11: }
12:
13: /* 'b' is a crisv32 constrain to avoid postinc with $acr. */
14: extern inline int cris_addc_pi_m(int a, int **b) {
15: asm volatile ("addc [%1+], %0\n" : "+r" (a), "+b" (*b));
16: return a;
17: }
18:
19: #define verify_addc_m(a, b, res, n, z, v, c) \
20: { \
21: int r; \
22: r = cris_addc_m((a), (b)); \
23: cris_tst_cc((n), (z), (v), (c)); \
24: if (r != (res)) \
25: err(); \
26: }
27:
28: #define verify_addc_pi_m(a, b, res, n, z, v, c) \
29: { \
30: int r; \
31: r = cris_addc_pi_m((a), (b)); \
32: cris_tst_cc((n), (z), (v), (c)); \
33: if (r != (res)) \
34: err(); \
35: }
36:
37: int x[] = { 0, 0, 2, -1, 0xffff, -1, 0x5432f789};
38:
39: int main(void)
40: {
41: int *p = (void *)&x[0];
42: #if 1
43: cris_tst_cc_init();
44: asm volatile ("clearf cz");
45: verify_addc_m(0, p, 0, 0, 0, 0, 0);
46:
47: cris_tst_cc_init();
48: asm volatile ("setf z");
49: verify_addc_m(0, p, 0, 0, 1, 0, 0);
50:
51: cris_tst_cc_init();
52: asm volatile ("setf c");
53: verify_addc_m(0, p, 1, 0, 0, 0, 0);
54:
55: cris_tst_cc_init();
56: asm volatile ("clearf c");
57: verify_addc_pi_m(0, &p, 0, 0, 1, 0, 0);
58:
59: p = &x[1];
60: cris_tst_cc_init();
61: asm volatile ("setf c");
62: verify_addc_pi_m(0, &p, 1, 0, 0, 0, 0);
63:
64: if (p != &x[2])
65: err();
66:
67: cris_tst_cc_init();
68: asm volatile ("clearf c");
69: verify_addc_pi_m(-1, &p, 1, 0, 0, 0, 1);
70:
71: if (p != &x[3])
72: err();
73: #endif
74: p = &x[3];
75: /* TODO: investigate why this one fails. */
76: cris_tst_cc_init();
77: asm volatile ("setf c");
78: verify_addc_m(2, p, 2, 0, 0, 0, 1);
79: p += 4;
80:
81: pass();
82: return 0;
83: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.