Annotation of qemu/tests/cris/check_swap.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <stdlib.h>
                      3: #include <stdint.h>
                      4: #include "sys.h"
                      5: #include "crisutils.h"
                      6: 
                      7: #define N 8
                      8: #define W 4
                      9: #define B 2
                     10: #define R 1
                     11: 
                     12: extern inline int cris_swap(const int mode, int x)
                     13: {
                     14:        switch (mode)
                     15:        {
                     16:                case N: asm ("swapn\t%0\n" : "+r" (x) : "0" (x)); break;
                     17:                case W: asm ("swapw\t%0\n" : "+r" (x) : "0" (x)); break;
                     18:                case B: asm ("swapb\t%0\n" : "+r" (x) : "0" (x)); break;
                     19:                case R: asm ("swapr\t%0\n" : "+r" (x) : "0" (x)); break;
                     20:                case B|R: asm ("swapbr\t%0\n" : "+r" (x) : "0" (x)); break;
                     21:                case W|R: asm ("swapwr\t%0\n" : "+r" (x) : "0" (x)); break;
                     22:                case W|B: asm ("swapwb\t%0\n" : "+r" (x) : "0" (x)); break;
                     23:                case W|B|R: asm ("swapwbr\t%0\n" : "+r" (x) : "0" (x)); break;
                     24:                case N|R: asm ("swapnr\t%0\n" : "+r" (x) : "0" (x)); break;
                     25:                case N|B: asm ("swapnb\t%0\n" : "+r" (x) : "0" (x)); break;
                     26:                case N|B|R: asm ("swapnbr\t%0\n" : "+r" (x) : "0" (x)); break;
                     27:                case N|W: asm ("swapnw\t%0\n" : "+r" (x) : "0" (x)); break;
                     28:                default:
                     29:                        err();
                     30:                        break;
                     31:        }
                     32:        return x;
                     33: }
                     34: 
                     35: /* Made this a macro to be able to pick up the location of the errors.  */
                     36: #define verify_swap(mode, val, expected, n, z)          \
                     37: do {                                                    \
                     38:         int r;                                          \
                     39:         cris_tst_cc_init();                             \
                     40:        r = cris_swap(mode, val);                       \
                     41:         cris_tst_mov_cc(n, z);                          \
                     42:        if (r != expected)                              \
                     43:                err();                                  \
                     44: } while(0);
                     45: 
                     46: void check_swap(void)
                     47: {
                     48:        /* Some of these numbers are borrowed from GDB's cris sim
                     49:           testsuite.  */
                     50:        if (cris_swap(N, 0) != 0xffffffff)
                     51:                err();
                     52:        if (cris_swap(W, 0x12345678) != 0x56781234)
                     53:                err();
                     54:        if (cris_swap(B, 0x12345678) != 0x34127856)
                     55:                err();
                     56: 
                     57:        verify_swap(R, 0x78134452, 0x1ec8224a, 0, 0);
                     58:        verify_swap(B, 0x78134452, 0x13785244, 0, 0);
                     59:        verify_swap(B|R, 0x78134452, 0xc81e4a22, 1, 0);
                     60:        verify_swap(W, 0x78134452, 0x44527813, 0, 0);
                     61:        verify_swap(W|R, 0x78134452, 0x224a1ec8, 0, 0);
                     62:        verify_swap(W|B|R, 0x78134452, 0x4a22c81e, 0, 0);
                     63:        verify_swap(N, 0x78134452, 0x87ecbbad, 1, 0);
                     64:        verify_swap(N|R, 0x78134452, 0xe137ddb5, 1, 0);
                     65:        verify_swap(N|B, 0x78134452, 0xec87adbb, 1, 0);
                     66:        verify_swap(N|B|R, 0x78134452, 0x37e1b5dd, 0, 0);
                     67:        verify_swap(N|W, 0x78134452, 0xbbad87ec, 1, 0);
                     68:        verify_swap(N|B|R, 0xffffffff, 0, 0, 1);
                     69: }
                     70: 
                     71: int main(void)
                     72: {
                     73:        check_swap();
                     74:        pass();
                     75: }

unix.superglobalmegacorp.com

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