Add qemu 2.4.0
[kvmfornfv.git] / qemu / tests / tcg / mips / mips64-dsp / dpsq_sa_l_w.c
1 #include "io.h"
2
3 int main(void)
4 {
5     long long rs, rt, dsp;
6     long long ach = 5, acl = 5;
7     long long resulth, resultl, resultdsp;
8
9     rs = 0xBC0123AD;
10     rt = 0x01643721;
11
12     resulth = 0xfffffffffdf4cbe0;
13     resultl = 0xFFFFFFFFd138776b;
14     resultdsp = 0x00;
15     __asm
16         ("mthi  %0, $ac1\n\t"
17          "mtlo  %1, $ac1\n\t"
18          "dpsq_sa.l.w $ac1, %3, %4\n\t"
19          "mfhi  %0, $ac1\n\t"
20          "mflo  %1, $ac1\n\t"
21          "rddsp %2\n\t"
22          : "+r"(ach), "+r"(acl), "=r"(dsp)
23          : "r"(rs), "r"(rt)
24         );
25     dsp = (dsp >> 17) & 0x01;
26     if ((dsp != resultdsp) || (ach != resulth) || (acl != resultl)) {
27         printf("1 dpsq_sa.l.w wrong\n");
28
29         return -1;
30     }
31
32     ach = 0x54321123;
33     acl = 5;
34     rs = 0x80000000;
35     rt = 0x80000000;
36
37     resulth = 0xffffffffd4321123;
38     resultl = 0x06;
39     resultdsp = 0x01;
40
41     __asm
42         ("mthi  %0, $ac1\n\t"
43          "mtlo  %1, $ac1\n\t"
44          "dpsq_sa.l.w $ac1, %3, %4\n\t"
45          "mfhi  %0, $ac1\n\t"
46          "mflo  %1, $ac1\n\t"
47          "rddsp %2\n\t"
48          : "+r"(ach), "+r"(acl), "=r"(dsp)
49          : "r"(rs), "r"(rt)
50         );
51     dsp = (dsp >> 17) & 0x01;
52     if ((dsp != resultdsp) || (ach != resulth) || (acl != resultl)) {
53         printf("2 dpsq_sa.l.w wrong\n");
54
55         return -1;
56     }
57
58     return 0;
59 }