|
|
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. */ ! 7: static void _err(void) { ! 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.