~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to tests/cris/check_addo.c

  • Committer: pbrook
  • Date: 2007-03-06 23:52:01 UTC
  • Revision ID: git-v1:1c7b3754f68382941a1921e578ead25d97d116fb
Simple u-boot image loading support.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2472 c046a42c-6fe2-441c-8c8c-71466251a162

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
}