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