1e584b0e99b31e6d257cc58c630cd6067550539e3sewardj#include <stdio.h>
2e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
3e584b0e99b31e6d257cc58c630cd6067550539e3sewardjunsigned int mem[] = {
4e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0x121f1e1f, 0, 3, -1,
5e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0x232f2e2f, 0x242c2b2b, 0x252a2e2b, 0x262d2d2a,
6e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0x3f343f3e, 0x3e353d3c, 0x363a3c3b, 0x3b373b3a,
7e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0x454f4e45, 0x4e464d46, 0x474d474c, 0x4a484a4c
8e584b0e99b31e6d257cc58c630cd6067550539e3sewardj};
9e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
10e584b0e99b31e6d257cc58c630cd6067550539e3sewardjunsigned int mem1[] = {
11e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0, 0, 0, 0,
12e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0, 0, 0, 0,
13e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0xffffffff, 0, 0, 0,
14e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   0, 0, 0, 0
15e584b0e99b31e6d257cc58c630cd6067550539e3sewardj};
16e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
17e584b0e99b31e6d257cc58c630cd6067550539e3sewardjunsigned int mem2[] = {
18e584b0e99b31e6d257cc58c630cd6067550539e3sewardj0x0000e680, 0x00010700, 0x0000e7dc, 0x0000b0d0,
19e584b0e99b31e6d257cc58c630cd6067550539e3sewardj0x2ab05fd0, 0x0000b6a0, 0x0000be80, 0x0000de10,
20e584b0e99b31e6d257cc58c630cd6067550539e3sewardj0x0000df20, 0x2ab05fe0, 0x0000dfd0, 0x00010300
21e584b0e99b31e6d257cc58c630cd6067550539e3sewardj};
22e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
23e584b0e99b31e6d257cc58c630cd6067550539e3sewardj// sb $t0, 0($t1)
24e584b0e99b31e6d257cc58c630cd6067550539e3sewardj#define TESTINST1(instruction, RTval, offset, RT, RS) \
25e584b0e99b31e6d257cc58c630cd6067550539e3sewardj{ \
26e584b0e99b31e6d257cc58c630cd6067550539e3sewardj    unsigned int out; \
27e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   __asm__ volatile( \
28e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "move $" #RS", %1\n\t" \
29e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "li $" #RT", " #RTval"\n\t" \
30e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     instruction "\n\t" \
31e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "lw %0, "#offset"($"#RS")\n\t" \
32e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     : "=&r" (out) \
33e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 : "r" (mem1), "r" (RTval) \
34e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 : #RT, "cc", "memory" \
35e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 ); \
36e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("%s :: RTval: 0x%x, out: 0x%x\n", \
37e584b0e99b31e6d257cc58c630cd6067550539e3sewardj          instruction, RTval, out); \
38e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   out = 0; \
39e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   __asm__ volatile( \
40e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "move $" #RS", %1\n\t" \
41e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "li $" #RT", " #RTval"\n\t" \
42e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     instruction "\n\t" \
43e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "lw %0, "#offset"($"#RS")\n\t" \
44e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     : "=&r" (out) \
45e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 : "r" (mem), "r" (RTval) \
46e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 : #RT, "cc", "memory" \
47e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 ); \
48e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("%s :: RTval: 0x%x, out: 0x%x\n", \
49e584b0e99b31e6d257cc58c630cd6067550539e3sewardj          instruction, RTval, out); \
50e584b0e99b31e6d257cc58c630cd6067550539e3sewardj}
51e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
52e584b0e99b31e6d257cc58c630cd6067550539e3sewardj// swl $t0, 3($t1)
53e584b0e99b31e6d257cc58c630cd6067550539e3sewardj// swr $t0, 0($t1)
54e584b0e99b31e6d257cc58c630cd6067550539e3sewardj#define TESTINSTsw(RTval, offset, RT, RS) \
55e584b0e99b31e6d257cc58c630cd6067550539e3sewardj{ \
56e584b0e99b31e6d257cc58c630cd6067550539e3sewardj    unsigned int out; \
57e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   __asm__ volatile( \
58e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "move $" #RS", %1\n\t" \
59e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "addiu $"#RS", $"#RS", "#offset"\n\t" \
60e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "li $" #RT", " #RTval"\n\t" \
61e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "swl $t0, 3($t1) \n\t" \
62e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "swr $t0, 0($t1) \n\t" \
63e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     "lw %0, 0($"#RS")\n\t" \
64e584b0e99b31e6d257cc58c630cd6067550539e3sewardj     : "=&r" (out) \
65e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 : "r" (mem2), "r" (RTval) \
66e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 : #RT, #RS, "cc", "memory" \
67e584b0e99b31e6d257cc58c630cd6067550539e3sewardj	 ); \
68e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("swl $t0, 3($t1)\nswr $t0, 0($t1)\n :: RTval: 0x%x, out: 0x%x\n", \
69e584b0e99b31e6d257cc58c630cd6067550539e3sewardj          RTval, out); \
70e584b0e99b31e6d257cc58c630cd6067550539e3sewardj}
71e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
72751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanjvoid ppMem(unsigned int* m, int len)
73e584b0e99b31e6d257cc58c630cd6067550539e3sewardj{
74e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   int i;
75e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("MEM1:\n");
76e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   for (i = 0; i < len; i=i+4)
77e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   {
78751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      printf("0x%x, 0x%x, 0x%x, 0x%x\n", m[i], m[i+1], m[i+2], m[i+3]);
79751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      m[i] = 0;
80751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      m[i+1] = 0;
81751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      m[i+2] = 0;
82751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      m[i+3] = 0;
8334ff174f3cef6e6058385c0a404572d5e8e5c67cdejanj      if (i == 2)
84e584b0e99b31e6d257cc58c630cd6067550539e3sewardj      {
85751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj         m[i] = 0xffffffff;
86751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj         m[i+1] = 0;
87751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj         m[i+2] = 0;
88751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj         m[i+3] = 0;
89e584b0e99b31e6d257cc58c630cd6067550539e3sewardj      }
90e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   }
91e584b0e99b31e6d257cc58c630cd6067550539e3sewardj}
92e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
93751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanjvoid ppMem1(unsigned int* m, int len)
94e584b0e99b31e6d257cc58c630cd6067550539e3sewardj{
95e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   int i;
96e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("MEM:\n");
97e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   for (i = 0; i < len; i=i+4)
98e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   {
99751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      printf("0x%x, 0x%x, 0x%x, 0x%x\n", m[i], m[i+1], m[i+2], m[i+3]);
100e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   }
101751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[0] = 0x121f1e1f;
102751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[1] = 0;
103751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[2] = 3;
104751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[3] = -1;
105751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[4] = 0x232f2e2f;
106751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[5] = 0x242c2b2b;
107751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[6] = 0x252a2e2b;
108751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[7] = 0x262d2d2a;
109751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[8] = 0x3f343f3e;
110751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[9] = 0x3e353d3c;
111751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[10] = 0x363a3c3b;
112751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[11] = 0x3b373b3a;
113751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[12] = 0x454f4e45;
114751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[13] = 0x4e464d46;
115751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[14] = 0x474d474c;
116751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[15] = 0x4a484a4c;
117e584b0e99b31e6d257cc58c630cd6067550539e3sewardj}
118e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
119751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanjvoid ppMem0(unsigned int* m, int len)
120e584b0e99b31e6d257cc58c630cd6067550539e3sewardj{
121e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   int i;
122e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("MEM:\n");
123e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   for (i = 0; i < len; i=i+4)
124e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   {
125751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj      printf("0x%x, 0x%x, 0x%x, 0x%x\n", m[i], m[i+1], m[i+2], m[i+3]);
126e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   }
127e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
128751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[0] = 0x0000e680;
129751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[1] = 0x00010700;
130751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[2] = 0x0000e7dc;
131751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[3] = 0x0000b0d0;
132751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[4] = 0x2ab05fd0;
133751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[5] = 0x0000b6a0;
134751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[6] = 0x0000be80;
135751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[7] = 0x0000de10;
136751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[8] = 0x0000df20;
137751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[9] = 0x2ab05fe0;
138751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[10] = 0x0000dfd0;
139751c1e6e1657cbafe30baaf36ad9bd011c3a179bdejanj   m[11] = 0x00010300;
140e584b0e99b31e6d257cc58c630cd6067550539e3sewardj}
141e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
142e584b0e99b31e6d257cc58c630cd6067550539e3sewardjint main()
143e584b0e99b31e6d257cc58c630cd6067550539e3sewardj{
144e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("sb\n");
145e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 0, 0, t0, t1);
146e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 0x31415927, 0, t0, t1);
147e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
148e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 0x80000000, 0, t0, t1);
149e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 2($t1)", 0x80000000, 2, t0, t1);
150e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
151e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
152e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 8($t1)", -1, 8, t0, t1);
153e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 0x31415927, 0, t0, t1);
154e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
155e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 655, 0, t0, t1);
156e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", -655, 0, t0, t1);
157e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 15, 0, t0, t1);
158e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 1, 0, t0, t1);
159e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 0($t1)", 53, 0, t0, t1);
160e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 2($t1)", 0xffffffff, 2, t0, t1);
161e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 2($t1)", 0xffffffff, 2, t0, t1);
162e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 32($t1)", 0xffffffff, 32, t0, t1);
163e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 36($t1)", 0xffffffff, 36, t0, t1);
164e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 40($t1)", 0x31415927, 40, t0, t1);
165e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
166e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 48($t1)", 0x80000000, 48, t0, t1);
167e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sb $t0, 52($t1)", 655, 52, t0, t1);
168e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
169e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
170e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
171e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("sh\n");
172e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 0, 0, t0, t1);
173e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 0x31415927, 0, t0, t1);
174e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
175e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 0x80000000, 0, t0, t1);
176e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 2($t1)", 0x80000000, 2, t0, t1);
177e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
178e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
179e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 8($t1)", -1, 8, t0, t1);
180e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 0x31415927, 0, t0, t1);
181e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
182e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 655, 0, t0, t1);
183e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", -655, 0, t0, t1);
184e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 15, 0, t0, t1);
185e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 1, 0, t0, t1);
186e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 0($t1)", 53, 0, t0, t1);
187e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 2($t1)", 0xffffffff, 2, t0, t1);
188e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 2($t1)", 0xffffffff, 2, t0, t1);
189e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 32($t1)", 0xffffffff, 32, t0, t1);
190e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 36($t1)", 0xffffffff, 36, t0, t1);
191e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 40($t1)", 0x31415927, 40, t0, t1);
192e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
193e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 48($t1)", 0x80000000, 48, t0, t1);
194e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sh $t0, 52($t1)", 655, 52, t0, t1);
195e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
196e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
197e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
198e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("sw\n");
199e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 0, 0, t0, t1);
200e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 0x31415927, 0, t0, t1);
201e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
202e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 0x80000000, 0, t0, t1);
203e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 2($t1)", 0x80000000, 2, t0, t1);
204e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
205e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
206e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 8($t1)", -1, 8, t0, t1);
207e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 0x31415927, 0, t0, t1);
208e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
209e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 655, 0, t0, t1);
210e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", -655, 0, t0, t1);
211e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 15, 0, t0, t1);
212e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 1, 0, t0, t1);
213e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 0($t1)", 53, 0, t0, t1);
214e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
215e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
216e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 32($t1)", 0xffffffff, 32, t0, t1);
217e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 36($t1)", 0xffffffff, 36, t0, t1);
218e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 40($t1)", 0x31415927, 40, t0, t1);
219e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
220e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 48($t1)", 0x80000000, 48, t0, t1);
221e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("sw $t0, 52($t1)", 655, 52, t0, t1);
222e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
223e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
224e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
225e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("swl\n");
226e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 0, 0, t0, t1);
227e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 0x31415927, 0, t0, t1);
228e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
229e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 0x80000000, 0, t0, t1);
230e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 2($t1)", 0x80000000, 2, t0, t1);
231e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
232e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
233e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 8($t1)", -1, 8, t0, t1);
234e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 0x31415927, 0, t0, t1);
235e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
236e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 655, 0, t0, t1);
237e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", -655, 0, t0, t1);
238e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 15, 0, t0, t1);
239e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 1, 0, t0, t1);
240e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 0($t1)", 53, 0, t0, t1);
241e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 2($t1)", 0xffffffff, 2, t0, t1);
242e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 2($t1)", 0xffffffff, 2, t0, t1);
243e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 32($t1)", 0xffffffff, 32, t0, t1);
244e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 36($t1)", 0xffffffff, 36, t0, t1);
245e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 40($t1)", 0x31415927, 40, t0, t1);
246e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
247e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 48($t1)", 0x80000000, 48, t0, t1);
248e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swl $t0, 52($t1)", 655, 52, t0, t1);
249e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
250e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
251e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
252e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("swr\n");
253e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 0, 0, t0, t1);
254e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 0x31415927, 0, t0, t1);
255e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
256e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 0x80000000, 0, t0, t1);
257e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 2($t1)", 0x80000000, 2, t0, t1);
258e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
259e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
260e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 8($t1)", -1, 8, t0, t1);
261e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 0x31415927, 0, t0, t1);
262e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
263e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 655, 0, t0, t1);
264e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", -655, 0, t0, t1);
265e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 15, 0, t0, t1);
266e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 1, 0, t0, t1);
267e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 0($t1)", 53, 0, t0, t1);
268e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 2($t1)", 0xffffffff, 2, t0, t1);
269e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 2($t1)", 0xffffffff, 2, t0, t1);
270e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 32($t1)", 0xffffffff, 32, t0, t1);
271e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 36($t1)", 0xffffffff, 36, t0, t1);
272e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 40($t1)", 0x31415927, 40, t0, t1);
273e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
274e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 48($t1)", 0x80000000, 48, t0, t1);
275e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("swr $t0, 52($t1)", 655, 52, t0, t1);
276e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
277e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
278e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
279e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("ulw\n");
280e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 0, 0, t0, t1);
281e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 0x31415927, 0, t0, t1);
282e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
283e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 0x80000000, 0, t0, t1);
284e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 2($t1)", 0x80000000, 2, t0, t1);
285e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
286e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
287e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 8($t1)", -1, 8, t0, t1);
288e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 0x31415927, 0, t0, t1);
289e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
290e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 655, 0, t0, t1);
291e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", -655, 0, t0, t1);
292e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 15, 0, t0, t1);
293e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 1, 0, t0, t1);
294e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 0($t1)", 53, 0, t0, t1);
295e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
296e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
297e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 32($t1)", 0xffffffff, 32, t0, t1);
298e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 36($t1)", 0xffffffff, 36, t0, t1);
299e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 40($t1)", 0x31415927, 40, t0, t1);
300e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
301e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 48($t1)", 0x80000000, 48, t0, t1);
302e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("ulw $t0, 52($t1)", 655, 52, t0, t1);
303e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
304e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
305e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
306e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("usw\n");
307e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 0, 0, t0, t1);
308e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 0x31415927, 0, t0, t1);
309e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 0x7fffffff, 0, t0, t1);
310e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 0x80000000, 0, t0, t1);
311e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 2($t1)", 0x80000000, 2, t0, t1);
312e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 6($t1)", 0x7fffffff, 6, t0, t1);
313e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 10($t1)", 0x7fffffff, 10, t0, t1);
314e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 8($t1)", -1, 8, t0, t1);
315e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 0x31415927, 0, t0, t1);
316e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 0x0dd00000, 0, t0, t1);
317e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 655, 0, t0, t1);
318e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", -655, 0, t0, t1);
319e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 15, 0, t0, t1);
320e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 1, 0, t0, t1);
321e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 0($t1)", 53, 0, t0, t1);
322e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
323e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 2($t1)", 0xffffffff, 2, t0, t1);
324e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 32($t1)", 0xffffffff, 32, t0, t1);
325e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 36($t1)", 0xffffffff, 36, t0, t1);
326e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 40($t1)", 0x31415927, 40, t0, t1);
327e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 44($t1)", 0x7fffffff, 44, t0, t1);
328e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 48($t1)", 0x80000000, 48, t0, t1);
329e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINST1("usw $t0, 52($t1)", 655, 52, t0, t1);
330e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem(mem1, 16);
331e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem1(mem, 16);
332e584b0e99b31e6d257cc58c630cd6067550539e3sewardj
333e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   printf("swl $t0, 3($t0)\nswr $t0, 0($t0)\n");
334e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x4853000, 0, t0, t1);
335e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
336e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x4853000, 4, t0, t1);
337e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
338e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x4863700, 8, t0, t1);
339e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
340e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x48aedd0, 12, t0, t1);
341e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
342e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x2aaee700, 16, t0, t1);
343e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
344e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x2aaee7ff, 20, t0, t1);
345e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
346e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x2aaeffff, 24, t0, t1);
347e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
348e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x4863700, 28, t0, t1);
349e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
350e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   TESTINSTsw(0x2aaee700, 32, t0, t1);
351e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   ppMem0(mem2, 12);
352e584b0e99b31e6d257cc58c630cd6067550539e3sewardj   return 0;
353e584b0e99b31e6d257cc58c630cd6067550539e3sewardj}
354