|
|
1.1 root 1: static char *tst_cc_loc = NULL;
2:
3: #define cris_tst_cc_init() \
4: do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0)
5:
6: /* We need a real symbol to signal error. */
1.1.1.2 ! root 7: void _err(void) {
1.1 root 8: if (!tst_cc_loc)
9: tst_cc_loc = "tst_cc_failed\n";
10: _fail(tst_cc_loc);
11: }
12:
13: extern inline void cris_tst_cc_n1(void)
14: {
15: asm volatile ("bpl _err\n"
16: "nop\n");
17: }
18: extern inline void cris_tst_cc_n0(void)
19: {
20: asm volatile ("bmi _err\n"
21: "nop\n");
22: }
23:
24: extern inline void cris_tst_cc_z1(void)
25: {
26: asm volatile ("bne _err\n"
27: "nop\n");
28: }
29: extern inline void cris_tst_cc_z0(void)
30: {
31: asm volatile ("beq _err\n"
32: "nop\n");
33: }
34: extern inline void cris_tst_cc_v1(void)
35: {
36: asm volatile ("bvc _err\n"
37: "nop\n");
38: }
39: extern inline void cris_tst_cc_v0(void)
40: {
41: asm volatile ("bvs _err\n"
42: "nop\n");
43: }
44:
45: extern inline void cris_tst_cc_c1(void)
46: {
47: asm volatile ("bcc _err\n"
48: "nop\n");
49: }
50: extern inline void cris_tst_cc_c0(void)
51: {
52: asm volatile ("bcs _err\n"
53: "nop\n");
54: }
55:
56: extern inline void cris_tst_mov_cc(int n, int z)
57: {
58: if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
59: if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
60: asm volatile ("" : : "g" (_err));
61: }
62:
63: extern inline void cris_tst_cc(const int n, const int z,
64: const int v, const int c)
65: {
66: if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
67: if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
68: if (v) cris_tst_cc_v1(); else cris_tst_cc_v0();
69: if (c) cris_tst_cc_c1(); else cris_tst_cc_c0();
70: asm volatile ("" : : "g" (_err));
71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.