1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "const.h"
2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST1(instruction, offset, mem)        \
4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                              \
5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long out = 0;                      \
6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                       \
7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0, %1"        "\n\t"      \
8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, %2"        "\n\t"      \
9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0, $t0, $t1"  "\n\t"      \
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, $zero"     "\n\t"      \
11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $t1, 0($t0)"    "\n\t"      \
12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        %0,  $t1"       "\n\t"      \
13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                             \
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (mem), "r" (offset)                \
15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1"                             \
16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                          \
17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%lx\n",  \
18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);           \
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST2(instruction, offset)                           \
22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                                            \
23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long out = 0;                                    \
24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long outHI = 0;                                  \
25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                                     \
26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0, %2"          "\n\t"                  \
27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, %4"          "\n\t"                  \
28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0, $t0, $t1"    "\n\t"                  \
29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          $t3, 0($t0)"      "\n\t"                  \
30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, %3"          "\n\t"                  \
31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t2, %4"          "\n\t"                  \
32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t1, $t1, $t2"    "\n\t"                  \
33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $t3, 0($t1)"      "\n\t"                  \
34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "li          $t2, 7"           "\n\t"                  \
35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "nor         $t2, $t2, $zero"  "\n\t"                  \
36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "and         $t1, $t1, $t2"    "\n\t"                  \
37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          %0,  0($t1)"      "\n\t"                  \
38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          %1,  8($t1)"      "\n\t"                  \
39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out), "=r" (outHI)                             \
40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (reg_val2) , "r" (reg_val_zero), "r" (offset)    \
41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "t2", "t3"                               \
42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                                        \
43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%lx, outHI: 0x%lx\n",  \
44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out, outHI);                  \
45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST3(instruction, offset, mem)         \
48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                               \
49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long long out = 0;                  \
50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                        \
51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0,   %1"        "\n\t"     \
52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1,   %2"        "\n\t"     \
53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0,   $t0, $t1"  "\n\t"     \
54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmtc1       $zero, $f0"       "\n\t"     \
55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $f0,  0($t0)"     "\n\t"     \
56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmfc1       %0,    $f0"       "\n\t"     \
57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                              \
58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (mem) , "r" (offset)                \
59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "$f0"                       \
60436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                           \
61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%llx\n",  \
62436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);            \
63436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
64436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
65436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST3w(instruction, offset, mem)      \
66436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                             \
67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned int out = 0;                      \
68436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                      \
69436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0,   %1"        "\n\t"   \
70436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1,   %2"        "\n\t"   \
71436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0,   $t0, $t1"  "\n\t"   \
72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmtc1       $zero, $f0"       "\n\t"   \
73436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $f0,  0($t0)"     "\n\t"   \
74436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "mfc1        %0,    $f0"       "\n\t"   \
75436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                            \
76436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (mem) , "r" (offset)              \
77436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "$f0"                     \
78436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                         \
79436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%x\n",  \
80436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);          \
81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
83436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST4(instruction, offset)                         \
84436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                                          \
85436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long long out = 0;                             \
86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                                   \
87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0, %1"        "\n\t"                  \
88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, %3"        "\n\t"                  \
89436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0, $t0, $t1"  "\n\t"                  \
90436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          $t2, 0($t0)"    "\n\t"                  \
91436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0, %2"        "\n\t"                  \
92436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0, $t0, $t1"  "\n\t"                  \
93436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmtc1       $t2, $f0"       "\n\t"                  \
94436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $f0, 0($t0)"    "\n\t"                  \
95436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          %0,  0($t0)"    "\n\t"                  \
96436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                                         \
97436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (reg_val1) , "r" (reg_val_zero), "r" (offset)  \
98436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "t2", "$f0"                            \
99436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                                      \
100436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%llx\n",             \
101436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);                       \
102436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
103436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
104436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST5(instruction, offset, mem)         \
105436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                               \
106436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long long out = 0;                  \
107436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                        \
108436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0,   %1"        "\n\t"     \
109436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1,   %2"        "\n\t"     \
110436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmtc1       $zero, $f0"       "\n\t"     \
111436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $f0,   $t1($t0)"  "\n\t"     \
112436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmfc1       %0,    $f0"       "\n\t"     \
113436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                              \
114436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (mem) , "r" (offset)                \
115436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "$f0"                       \
116436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                           \
117436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%llx\n",  \
118436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);            \
119436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
120436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
121436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST5w(instruction, offset, mem)      \
122436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                             \
123436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned int out = 0;                      \
124436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                      \
125436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0,   %1"        "\n\t"   \
126436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1,   %2"        "\n\t"   \
127436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmtc1       $zero, $f0"       "\n\t"   \
128436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $f0,   $t1($t0)"  "\n\t"   \
129436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "mfc1        %0,    $f0"       "\n\t"   \
130436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                            \
131436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (mem) , "r" (offset)              \
132436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "$f0"                     \
133436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                         \
134436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%x\n",  \
135436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);          \
136436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
137436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
138436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define TEST6(instruction, offset)                         \
139436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{                                                          \
140436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   unsigned long long out = 0;                             \
141436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   __asm__ __volatile__(                                   \
142436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0, %1"        "\n\t"                  \
143436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, %3"        "\n\t"                  \
144436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t0, $t0, $t1"  "\n\t"                  \
145436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          $t3, 0($t0)"    "\n\t"                  \
146436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t1, %2"        "\n\t"                  \
147436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t2, %3"        "\n\t"                  \
148436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "daddu       $t1, $t1, $t2"  "\n\t"                  \
149436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "dmtc1       $t3, $f3"       "\n\t"                  \
150436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "move        $t0, %3"        "\n\t"                  \
151436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      instruction" $f3, $t0($t1)"  "\n\t"                  \
152436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      "ld          %0,  0($t1)"    "\n\t"                  \
153436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "=r" (out)                                         \
154436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "r" (reg_val2) , "r" (reg_val_zero), "r" (offset)  \
155436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      : "t0", "t1", "t2", "t3"                             \
156436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   );                                                      \
157436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   printf("%s :: offset: 0x%x, out: 0x%llx\n",             \
158436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov          instruction, offset, out);                       \
159436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
160