qemu/tests/tcg/cris/crisutils.h
<<
>>
Prefs
   1static char *tst_cc_loc = NULL;
   2
   3#define cris_tst_cc_init() \
   4do { tst_cc_loc = "test_cc failed at " CURRENT_LOCATION; } while(0)
   5
   6/* We need a real symbol to signal error.  */
   7void _err(void) {
   8        if (!tst_cc_loc)
   9                tst_cc_loc = "tst_cc_failed\n";
  10        _fail(tst_cc_loc);
  11}
  12
  13static inline void cris_tst_cc_n1(void)
  14{
  15        asm volatile ("bpl _err\n"
  16                      "nop\n");
  17}
  18static inline void cris_tst_cc_n0(void)
  19{
  20        asm volatile ("bmi _err\n"
  21                      "nop\n");
  22}
  23
  24static inline void cris_tst_cc_z1(void)
  25{
  26        asm volatile ("bne _err\n"
  27                      "nop\n");
  28}
  29static inline void cris_tst_cc_z0(void)
  30{
  31        asm volatile ("beq _err\n"
  32                      "nop\n");
  33}
  34static inline void cris_tst_cc_v1(void)
  35{
  36        asm volatile ("bvc _err\n"
  37                      "nop\n");
  38}
  39static inline void cris_tst_cc_v0(void)
  40{
  41        asm volatile ("bvs _err\n"
  42                      "nop\n");
  43}
  44
  45static inline void cris_tst_cc_c1(void)
  46{
  47        asm volatile ("bcc _err\n"
  48                      "nop\n");
  49}
  50static inline void cris_tst_cc_c0(void)
  51{
  52        asm volatile ("bcs _err\n"
  53                      "nop\n");
  54}
  55
  56static 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
  63static 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}
  72