Annotation of qemu/tests/cris/check_addo.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: /* this would be better to do in asm, it's an orgy in GCC inline asm now.  */
                      8: 
                      9: #define cris_addo_b(o, v) \
                     10:        asm volatile ("addo.b\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
                     11: #define cris_addo_w(o, v) \
                     12:        asm volatile ("addo.w\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
                     13: #define cris_addo_d(o, v) \
                     14:        asm volatile ("addo.d\t[%0], %1, $acr\n" : : "r" (o), "r" (v) : "acr");
                     15: #define cris_addo_pi_b(o, v) \
                     16:        asm volatile ("addo.b\t[%0+], %1, $acr\n" \
                     17:                          : "+b" (o): "r" (v) : "acr");
                     18: #define cris_addo_pi_w(o, v) \
                     19:        asm volatile ("addo.w\t[%0+], %1, $acr\n" \
                     20:                          : "+b" (o): "r" (v) : "acr");
                     21: #define cris_addo_pi_d(o, v) \
                     22:        asm volatile ("addo.d\t[%0+], %1, $acr\n" \
                     23:                          : "+b" (o): "r" (v) : "acr");
                     24: 
                     25: struct {
                     26:        uint32_t v1;
                     27:        uint16_t v2;
                     28:        uint32_t v3;
                     29:        uint8_t v4;
                     30:        uint8_t v5;
                     31:        uint16_t v6;
                     32:        uint32_t v7;
                     33: } y = {
                     34:        32769,
                     35:        -1,
                     36:        5,
                     37:        3, -4,
                     38:        2,
                     39:        -76789887
                     40: };
                     41: 
                     42: static int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19};
                     43: 
                     44: int main(void)
                     45: {
                     46:        int *r;
                     47:        unsigned char *t, *p;
                     48: 
                     49:        /* Note, this test-case will trig an unaligned access, partly
                     50:           to x[0] and to [x1].  */
                     51:        t = (unsigned char *)x;
                     52:        t -= 32768;
                     53:        p = (unsigned char *) &y.v1;
                     54:        mb(); /* dont reorder anything beyond here.  */
                     55:        cris_tst_cc_init();
                     56:        asm volatile ("setf\tzvnc\n");
                     57:        cris_addo_pi_d(p, t);
                     58:        cris_tst_cc(1, 1, 1, 1);
                     59:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                     60:        if (*r != 0x4455aa77)
                     61:                err();
                     62: 
                     63: 
                     64:        t += 32770;
                     65:        mb(); /* dont reorder anything beyond here.  */
                     66:        cris_tst_cc_init();
                     67:        asm volatile ("setf\tzvnc\n");
                     68:        cris_addo_pi_w(p, t);
                     69:        cris_tst_cc(1, 1, 1, 1);
                     70:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                     71:        if (*r != 0x4455aa77)
                     72:                err();
                     73: 
                     74:        mb(); /* dont reorder anything beyond here.  */
                     75:        cris_tst_cc_init();
                     76:        asm volatile ("setf\tzvnc\n");
                     77:        cris_addo_d(p, r);
                     78:        cris_tst_cc(1, 1, 1, 1);
                     79:        p += 4;
                     80:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                     81:        if (*r != 0xee19ccff)
                     82:                err();
                     83: 
                     84:        mb(); /* dont reorder anything beyond here.  */
                     85:        cris_tst_cc_init();
                     86:        asm volatile ("setf\tzvnc\n");
                     87:        cris_addo_pi_b(p, t);
                     88:        cris_tst_cc(1, 1, 1, 1);
                     89:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                     90:        if (*(uint16_t*)r != 0xff22)
                     91:                err();
                     92: 
                     93:        mb(); /* dont reorder anything beyond here.  */
                     94:        cris_tst_cc_init();
                     95:        asm volatile ("setf\tzvnc\n");
                     96:        cris_addo_b(p, r);
                     97:        cris_tst_cc(1, 1, 1, 1);
                     98:        p += 1;
                     99:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                    100:        if (*r != 0x4455aa77)
                    101:                err();
                    102: 
                    103:        mb(); /* dont reorder anything beyond here.  */
                    104:        cris_tst_cc_init();
                    105:        asm volatile ("setf\tzvnc\n");
                    106:        cris_addo_w(p, r);
                    107:        cris_tst_cc(1, 1, 1, 1);
                    108:        p += 2;
                    109:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                    110:        if (*r != 0xff224455)
                    111:                err();
                    112: 
                    113:        mb(); /* dont reorder anything beyond here.  */
                    114:        cris_tst_cc_init();
                    115:        asm volatile ("setf\tzvnc\n");
                    116:        cris_addo_pi_d(p, t);
                    117:        cris_tst_cc(1, 1, 1, 1);
                    118:        asm volatile ("move.d\t$acr, %0\n" : "=r" (r));
                    119:        r = (void*)(((char *)r) + 76789885);
                    120:        if (*r != 0x55aa77ff)
                    121:                err();
                    122: 
                    123:        pass();
                    124:        return 0;
                    125: }

unix.superglobalmegacorp.com

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