crisutils.h (1629B)
1#ifndef CRISUTILS_H 2#define CRISUTILS_H 1 3 4static char *tst_cc_loc = NULL; 5 6#define cris_tst_cc_init() \ 7do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0) 8 9/* We need a real symbol to signal error. */ 10void _err(void) { 11 if (!tst_cc_loc) 12 tst_cc_loc = "tst_cc_failed\n"; 13 _fail(tst_cc_loc); 14} 15 16static always_inline void cris_tst_cc_n1(void) 17{ 18 asm volatile ("bpl _err\n" 19 "nop\n"); 20} 21static always_inline void cris_tst_cc_n0(void) 22{ 23 asm volatile ("bmi _err\n" 24 "nop\n"); 25} 26 27static always_inline void cris_tst_cc_z1(void) 28{ 29 asm volatile ("bne _err\n" 30 "nop\n"); 31} 32static always_inline void cris_tst_cc_z0(void) 33{ 34 asm volatile ("beq _err\n" 35 "nop\n"); 36} 37static always_inline void cris_tst_cc_v1(void) 38{ 39 asm volatile ("bvc _err\n" 40 "nop\n"); 41} 42static always_inline void cris_tst_cc_v0(void) 43{ 44 asm volatile ("bvs _err\n" 45 "nop\n"); 46} 47 48static always_inline void cris_tst_cc_c1(void) 49{ 50 asm volatile ("bcc _err\n" 51 "nop\n"); 52} 53static always_inline void cris_tst_cc_c0(void) 54{ 55 asm volatile ("bcs _err\n" 56 "nop\n"); 57} 58 59static always_inline void cris_tst_mov_cc(int n, int z) 60{ 61 if (n) cris_tst_cc_n1(); else cris_tst_cc_n0(); 62 if (z) cris_tst_cc_z1(); else cris_tst_cc_z0(); 63 asm volatile ("" : : "g" (_err)); 64} 65 66static always_inline void cris_tst_cc(const int n, const int z, 67 const int v, const int c) 68{ 69 if (n) cris_tst_cc_n1(); else cris_tst_cc_n0(); 70 if (z) cris_tst_cc_z1(); else cris_tst_cc_z0(); 71 if (v) cris_tst_cc_v1(); else cris_tst_cc_v0(); 72 if (c) cris_tst_cc_c1(); else cris_tst_cc_c0(); 73 asm volatile ("" : : "g" (_err)); 74} 75 76#endif