Annotation of qemu/tests/alpha/test-cond.c, revision 1.1.1.1

1.1       root        1: 
                      2: #ifdef TEST_CMOV
                      3: 
                      4: #define TEST_COND(N)                           \
                      5: int test_##N (long a)                          \
                      6: {                                              \
                      7:   int res = 1;                                 \
                      8:                                                \
                      9:   asm ("cmov"#N" %1,$31,%0"                    \
                     10:        : "+r" (res) : "r" (a));                        \
                     11:   return !res;                                 \
                     12: }
                     13: 
                     14: #else
                     15: 
                     16: #define TEST_COND(N)                           \
                     17: int test_##N (long a)                          \
                     18: {                                              \
                     19:   int res = 1;                                 \
                     20:                                                \
                     21:   asm ("b"#N" %1,1f\n\t"                       \
                     22:        "addq $31,$31,%0\n\t"                   \
                     23:        "1: unop\n"                             \
                     24:        : "+r" (res) : "r" (a));                        \
                     25:   return res;                                  \
                     26: }
                     27: 
                     28: #endif
                     29: 
                     30: TEST_COND(eq)
                     31: TEST_COND(ne)
                     32: TEST_COND(ge)
                     33: TEST_COND(gt)
                     34: TEST_COND(lbc)
                     35: TEST_COND(lbs)
                     36: TEST_COND(le)
                     37: TEST_COND(lt)
                     38: 
                     39: static struct {
                     40:   int (*func)(long);
                     41:   long v;
                     42:   int r;
                     43: } vectors[] =
                     44:   {
                     45:     {test_eq, 0, 1},
                     46:     {test_eq, 1, 0},
                     47: 
                     48:     {test_ne, 0, 0},
                     49:     {test_ne, 1, 1},
                     50: 
                     51:     {test_ge, 0, 1},
                     52:     {test_ge, 1, 1},
                     53:     {test_ge, -1, 0},
                     54: 
                     55:     {test_gt, 0, 0},
                     56:     {test_gt, 1, 1},
                     57:     {test_gt, -1, 0},
                     58: 
                     59:     {test_lbc, 0, 1},
                     60:     {test_lbc, 1, 0},
                     61:     {test_lbc, -1, 0},
                     62: 
                     63:     {test_lbs, 0, 0},
                     64:     {test_lbs, 1, 1},
                     65:     {test_lbs, -1, 1},
                     66: 
                     67:     {test_le, 0, 1},
                     68:     {test_le, 1, 0},
                     69:     {test_le, -1, 1},
                     70: 
                     71:     {test_lt, 0, 0},
                     72:     {test_lt, 1, 0},
                     73:     {test_lt, -1, 1},
                     74:   };
                     75: 
                     76: int main (void)
                     77: {
                     78:   int i;
                     79: 
                     80:   for (i = 0; i < sizeof (vectors)/sizeof(vectors[0]); i++)
                     81:     if ((*vectors[i].func)(vectors[i].v) != vectors[i].r) {
                     82:       write(1, "Failed\n", 7);
                     83:       return 1;
                     84:     }
                     85:   write(1, "OK\n", 3);
                     86:   return 0;
                     87: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.