1#include "io.h"
2
3int 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
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}
80