Add qemu 2.4.0
[kvmfornfv.git] / qemu / tests / tcg / mips / mips64-dsp / extrv_s_h.c
1 #include "io.h"
2
3 int main(void)
4 {
5     long long rt, rs, ach, acl, dsp;
6     long long result;
7
8     ach = 0x05;
9     acl = 0xB4CB;
10     dsp = 0x07;
11     rs  = 0x03;
12     result = 0x00007FFF;
13
14     __asm
15         ("wrdsp %1, 0x01\n\t"
16          "mthi %3, $ac1\n\t"
17          "mtlo %4, $ac1\n\t"
18          "extrv_s.h %0, $ac1, %2\n\t"
19          "rddsp %1\n\t"
20          : "=r"(rt), "+r"(dsp)
21          : "r"(rs), "r"(ach), "r"(acl)
22         );
23     dsp = (dsp >> 23) & 0x01;
24     if ((dsp != 1) || (result != rt)) {
25         printf("extrv_s.h wrong\n");
26
27         return -1;
28     }
29
30     rs = 0x08;
31     ach = 0xffffffff;
32     acl = 0x12344321;
33     result = 0xffffffffFFFF8000;
34     __asm
35         ("wrdsp %1, 0x01\n\t"
36          "mthi %3, $ac1\n\t"
37          "mtlo %4, $ac1\n\t"
38          "extrv_s.h %0, $ac1, %2\n\t"
39          "rddsp %1\n\t"
40          : "=r"(rt), "+r"(dsp)
41          : "r"(rs), "r"(ach), "r"(acl)
42         );
43     dsp = (dsp >> 23) & 0x01;
44     if ((dsp != 1) || (result != rt)) {
45         printf("extrv_s.h wrong\n");
46
47         return -1;
48     }
49
50     /* Clear dsp */
51     dsp = 0;
52     __asm
53         ("wrdsp %0\n\t"
54          :
55          : "r"(dsp)
56         );
57
58     rs = 0x04;
59     ach = 0x00;
60     acl = 0x4321;
61     result = 0x432;
62     __asm
63         ("wrdsp %1, 0x01\n\t"
64          "mthi %3, $ac1\n\t"
65          "mtlo %4, $ac1\n\t"
66          "extrv_s.h %0, $ac1, %2\n\t"
67          "rddsp %1\n\t"
68          : "=r"(rt), "+r"(dsp)
69          : "r"(rs), "r"(ach), "r"(acl)
70         );
71     dsp = (dsp >> 23) & 0x01;
72     if ((dsp != 0) || (result != rt)) {
73         printf("extrv_s.h wrong\n");
74
75         return -1;
76     }
77
78     return 0;
79 }