1663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdio.h>
2663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
3663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengunsigned int mem[] = {
4663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0x121f1e1f, 0, 3, -1,
5663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0x232f2e2f, 0x242c2b2b, 0x252a2e2b, 0x262d2d2a,
6663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0x3f343f3e, 0x3e353d3c, 0x363a3c3b, 0x3b373b3a,
7663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0x454f4e45, 0x4e464d46, 0x474d474c, 0x4a484a4c
8663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
9663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
10663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengunsigned int mem1[] = {
11663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0, 0, 0, 0,
12663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0, 0, 0, 0,
13663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0xffffffff, 0, 0, 0,
14663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   0, 0, 0, 0
15663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
16663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
17663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengunsigned int mem2[] = {
18663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng0x0000e680, 0x00010700, 0x0000e7dc, 0x0000b0d0,
19663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng0x2ab05fd0, 0x0000b6a0, 0x0000be80, 0x0000de10,
20663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng0x0000df20, 0x2ab05fe0, 0x0000dfd0, 0x00010300
21663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
22663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
23663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng// sb $t0, 0($t1)
24663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define TESTINST1(instruction, RTval, offset, RT, RS) \
25663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ \
26663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    unsigned int out; \
27663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ volatile( \
28663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "move $" #RS", %1\n\t" \
29663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "li $" #RT", " #RTval"\n\t" \
30663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     instruction "\n\t" \
31663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "lw %0, "#offset"($"#RS")\n\t" \
32663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     : "=&r" (out) \
33663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 : "r" (mem1), "r" (RTval) \
34663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 : #RT, "cc", "memory" \
35663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 ); \
36663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("%s :: RTval: 0x%x, out: 0x%x\n", \
37663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng          instruction, RTval, out); \
38663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   out = 0; \
39663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ volatile( \
40663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "move $" #RS", %1\n\t" \
41663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "li $" #RT", " #RTval"\n\t" \
42663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     instruction "\n\t" \
43663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "lw %0, "#offset"($"#RS")\n\t" \
44663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     : "=&r" (out) \
45663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 : "r" (mem), "r" (RTval) \
46663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 : #RT, "cc", "memory" \
47663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 ); \
48663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("%s :: RTval: 0x%x, out: 0x%x\n", \
49663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng          instruction, RTval, out); \
50663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
51663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
52663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng// swl $t0, 3($t1)
53663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng// swr $t0, 0($t1)
54663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define TESTINSTsw(RTval, offset, RT, RS) \
55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ \
56663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng    unsigned int out; \
57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   __asm__ volatile( \
58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "move $" #RS", %1\n\t" \
59663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "addiu $"#RS", $"#RS", "#offset"\n\t" \
60663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "li $" #RT", " #RTval"\n\t" \
61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "swl $t0, 3($t1) \n\t" \
62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "swr $t0, 0($t1) \n\t" \
63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     "lw %0, 0($"#RS")\n\t" \
64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng     : "=&r" (out) \
65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 : "r" (mem2), "r" (RTval) \
66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 : #RT, #RS, "cc", "memory" \
67663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	 ); \
68663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("swl $t0, 3($t1)\nswr $t0, 0($t1)\n :: RTval: 0x%x, out: 0x%x\n", \
69663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng          RTval, out); \
70663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
71663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid ppMem(unsigned int* m, int len)
73663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
74663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i;
75663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("MEM1:\n");
76663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < len; i=i+4)
77663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   {
78436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      printf("0x%x, 0x%x, 0x%x, 0x%x\n", m[i], m[i+1], m[i+2], m[i+3]);
79436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      m[i] = 0;
80436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      m[i+1] = 0;
81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      m[i+2] = 0;
82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      m[i+3] = 0;
83436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      if (i == 2)
84663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      {
85436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         m[i] = 0xffffffff;
86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         m[i+1] = 0;
87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         m[i+2] = 0;
88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         m[i+3] = 0;
89663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng      }
90663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
91663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
92663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
93436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid ppMem1(unsigned int* m, int len)
94663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
95663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i;
96663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("MEM:\n");
97663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < len; i=i+4)
98663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   {
99436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      printf("0x%x, 0x%x, 0x%x, 0x%x\n", m[i], m[i+1], m[i+2], m[i+3]);
100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
101436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[0] = 0x121f1e1f;
102436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[1] = 0;
103436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[2] = 3;
104436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[3] = -1;
105436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[4] = 0x232f2e2f;
106436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[5] = 0x242c2b2b;
107436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[6] = 0x252a2e2b;
108436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[7] = 0x262d2d2a;
109436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[8] = 0x3f343f3e;
110436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[9] = 0x3e353d3c;
111436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[10] = 0x363a3c3b;
112436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[11] = 0x3b373b3a;
113436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[12] = 0x454f4e45;
114436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[13] = 0x4e464d46;
115436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[14] = 0x474d474c;
116436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[15] = 0x4a484a4c;
117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
119436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid ppMem0(unsigned int* m, int len)
120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   int i;
122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("MEM:\n");
123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   for (i = 0; i < len; i=i+4)
124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   {
125436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      printf("0x%x, 0x%x, 0x%x, 0x%x\n", m[i], m[i+1], m[i+2], m[i+3]);
126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   }
127663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
128436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[0] = 0x0000e680;
129436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[1] = 0x00010700;
130436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[2] = 0x0000e7dc;
131436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[3] = 0x0000b0d0;
132436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[4] = 0x2ab05fd0;
133436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[5] = 0x0000b6a0;
134436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[6] = 0x0000be80;
135436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[7] = 0x0000de10;
136436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[8] = 0x0000df20;
137436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[9] = 0x2ab05fe0;
138436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[10] = 0x0000dfd0;
139436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   m[11] = 0x00010300;
140663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
141663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
142663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengint main()
143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{
144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("sb\n");
145663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 0, 0, t0, t1);
146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 0x31415927, 0, t0, t1);
147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 0x80000000, 0, t0, t1);
149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 2($t1)", 0x80000000, 2, t0, t1);
150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 8($t1)", -1, 8, t0, t1);
153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 0x31415927, 0, t0, t1);
154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
155663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 655, 0, t0, t1);
156663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", -655, 0, t0, t1);
157663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 15, 0, t0, t1);
158663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 1, 0, t0, t1);
159663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 0($t1)", 53, 0, t0, t1);
160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 2($t1)", 0xffffffff, 2, t0, t1);
161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 2($t1)", 0xffffffff, 2, t0, t1);
162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 32($t1)", 0xffffffff, 32, t0, t1);
163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 36($t1)", 0xffffffff, 36, t0, t1);
164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 40($t1)", 0x31415927, 40, t0, t1);
165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 48($t1)", 0x80000000, 48, t0, t1);
167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sb $t0, 52($t1)", 655, 52, t0, t1);
168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("sh\n");
172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 0, 0, t0, t1);
173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 0x31415927, 0, t0, t1);
174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 0x80000000, 0, t0, t1);
176663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 2($t1)", 0x80000000, 2, t0, t1);
177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 8($t1)", -1, 8, t0, t1);
180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 0x31415927, 0, t0, t1);
181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 655, 0, t0, t1);
183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", -655, 0, t0, t1);
184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 15, 0, t0, t1);
185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 1, 0, t0, t1);
186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 0($t1)", 53, 0, t0, t1);
187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 2($t1)", 0xffffffff, 2, t0, t1);
188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 2($t1)", 0xffffffff, 2, t0, t1);
189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 32($t1)", 0xffffffff, 32, t0, t1);
190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 36($t1)", 0xffffffff, 36, t0, t1);
191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 40($t1)", 0x31415927, 40, t0, t1);
192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 48($t1)", 0x80000000, 48, t0, t1);
194663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sh $t0, 52($t1)", 655, 52, t0, t1);
195663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
196663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
197663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
198663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("sw\n");
199663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 0, 0, t0, t1);
200663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 0x31415927, 0, t0, t1);
201663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
202663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 0x80000000, 0, t0, t1);
203663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 2($t1)", 0x80000000, 2, t0, t1);
204663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
205663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
206663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 8($t1)", -1, 8, t0, t1);
207663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 0x31415927, 0, t0, t1);
208663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
209663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 655, 0, t0, t1);
210663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", -655, 0, t0, t1);
211663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 15, 0, t0, t1);
212663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 1, 0, t0, t1);
213663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 0($t1)", 53, 0, t0, t1);
214663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
215663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
216663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 32($t1)", 0xffffffff, 32, t0, t1);
217663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 36($t1)", 0xffffffff, 36, t0, t1);
218663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 40($t1)", 0x31415927, 40, t0, t1);
219663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
220663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 48($t1)", 0x80000000, 48, t0, t1);
221663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("sw $t0, 52($t1)", 655, 52, t0, t1);
222663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
223663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
224663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
225663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("swl\n");
226663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 0, 0, t0, t1);
227663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 0x31415927, 0, t0, t1);
228663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
229663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 0x80000000, 0, t0, t1);
230663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 2($t1)", 0x80000000, 2, t0, t1);
231663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
232663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
233663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 8($t1)", -1, 8, t0, t1);
234663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 0x31415927, 0, t0, t1);
235663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
236663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 655, 0, t0, t1);
237663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", -655, 0, t0, t1);
238663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 15, 0, t0, t1);
239663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 1, 0, t0, t1);
240663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 0($t1)", 53, 0, t0, t1);
241663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 2($t1)", 0xffffffff, 2, t0, t1);
242663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 2($t1)", 0xffffffff, 2, t0, t1);
243663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 32($t1)", 0xffffffff, 32, t0, t1);
244663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 36($t1)", 0xffffffff, 36, t0, t1);
245663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 40($t1)", 0x31415927, 40, t0, t1);
246663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
247663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 48($t1)", 0x80000000, 48, t0, t1);
248663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swl $t0, 52($t1)", 655, 52, t0, t1);
249663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
250663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
251663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
252663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("swr\n");
253663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 0, 0, t0, t1);
254663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 0x31415927, 0, t0, t1);
255663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
256663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 0x80000000, 0, t0, t1);
257663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 2($t1)", 0x80000000, 2, t0, t1);
258663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
259663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
260663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 8($t1)", -1, 8, t0, t1);
261663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 0x31415927, 0, t0, t1);
262663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
263663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 655, 0, t0, t1);
264663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", -655, 0, t0, t1);
265663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 15, 0, t0, t1);
266663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 1, 0, t0, t1);
267663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 0($t1)", 53, 0, t0, t1);
268663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 2($t1)", 0xffffffff, 2, t0, t1);
269663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 2($t1)", 0xffffffff, 2, t0, t1);
270663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 32($t1)", 0xffffffff, 32, t0, t1);
271663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 36($t1)", 0xffffffff, 36, t0, t1);
272663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 40($t1)", 0x31415927, 40, t0, t1);
273663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
274663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 48($t1)", 0x80000000, 48, t0, t1);
275663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("swr $t0, 52($t1)", 655, 52, t0, t1);
276663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
277663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
278663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
279663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("ulw\n");
280663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 0, 0, t0, t1);
281663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 0x31415927, 0, t0, t1);
282663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
283663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 0x80000000, 0, t0, t1);
284663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 2($t1)", 0x80000000, 2, t0, t1);
285663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
286663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
287663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 8($t1)", -1, 8, t0, t1);
288663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 0x31415927, 0, t0, t1);
289663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
290663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 655, 0, t0, t1);
291663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", -655, 0, t0, t1);
292663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 15, 0, t0, t1);
293663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 1, 0, t0, t1);
294663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 0($t1)", 53, 0, t0, t1);
295663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
296663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
297663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 32($t1)", 0xffffffff, 32, t0, t1);
298663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 36($t1)", 0xffffffff, 36, t0, t1);
299663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 40($t1)", 0x31415927, 40, t0, t1);
300663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
301663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 48($t1)", 0x80000000, 48, t0, t1);
302663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("ulw $t0, 52($t1)", 655, 52, t0, t1);
303663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
304663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
305663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
306663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("usw\n");
307663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 0, 0, t0, t1);
308663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 0x31415927, 0, t0, t1);
309663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
310663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 0x80000000, 0, t0, t1);
311663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 2($t1)", 0x80000000, 2, t0, t1);
312663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
313663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
314663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 8($t1)", -1, 8, t0, t1);
315663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 0x31415927, 0, t0, t1);
316663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
317663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 655, 0, t0, t1);
318663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", -655, 0, t0, t1);
319663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 15, 0, t0, t1);
320663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 1, 0, t0, t1);
321663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 0($t1)", 53, 0, t0, t1);
322663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
323663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
324663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 32($t1)", 0xffffffff, 32, t0, t1);
325663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 36($t1)", 0xffffffff, 36, t0, t1);
326663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 40($t1)", 0x31415927, 40, t0, t1);
327663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
328663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 48($t1)", 0x80000000, 48, t0, t1);
329663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINST1("usw $t0, 52($t1)", 655, 52, t0, t1);
330663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem(mem1, 16);
331663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem1(mem, 16);
332663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
333663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   printf("swl $t0, 3($t0)\nswr $t0, 0($t0)\n");
334663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x4853000, 0, t0, t1);
335663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
336663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x4853000, 4, t0, t1);
337663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
338663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x4863700, 8, t0, t1);
339663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
340663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x48aedd0, 12, t0, t1);
341663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
342663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x2aaee700, 16, t0, t1);
343663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
344663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x2aaee7ff, 20, t0, t1);
345663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
346663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x2aaeffff, 24, t0, t1);
347663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
348663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x4863700, 28, t0, t1);
349663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
350663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   TESTINSTsw(0x2aaee700, 32, t0, t1);
351663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   ppMem0(mem2, 12);
352663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   return 0;
353663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng}
354