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