Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: runtime/vm/assembler_mips_test.cc

Issue 20369003: Implements far branch targets for MIPS. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/assembler_mips.cc ('k') | runtime/vm/constants_mips.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_MIPS) 6 #if defined(TARGET_ARCH_MIPS)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/os.h" 9 #include "vm/os.h"
10 #include "vm/unit_test.h" 10 #include "vm/unit_test.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 47
48 ASSEMBLER_TEST_RUN(Addiu_overflow, test) { 48 ASSEMBLER_TEST_RUN(Addiu_overflow, test) {
49 typedef int (*SimpleCode)(); 49 typedef int (*SimpleCode)();
50 EXPECT_EQ(static_cast<int32_t>(0x80000000), 50 EXPECT_EQ(static_cast<int32_t>(0x80000000),
51 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 51 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
52 } 52 }
53 53
54 54
55 ASSEMBLER_TEST_GENERATE(Addu, assembler) { 55 ASSEMBLER_TEST_GENERATE(Addu, assembler) {
56 __ addiu(R2, ZR, Immediate(21)); 56 __ addiu(T2, ZR, Immediate(21));
57 __ addiu(R3, ZR, Immediate(21)); 57 __ addiu(T3, ZR, Immediate(21));
58 __ addu(V0, R2, R3); 58 __ addu(V0, T2, T3);
59 __ jr(RA); 59 __ jr(RA);
60 } 60 }
61 61
62 62
63 ASSEMBLER_TEST_RUN(Addu, test) { 63 ASSEMBLER_TEST_RUN(Addu, test) {
64 typedef int (*SimpleCode)(); 64 typedef int (*SimpleCode)();
65 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 65 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
66 } 66 }
67 67
68 68
69 ASSEMBLER_TEST_GENERATE(Addu_overflow, assembler) { 69 ASSEMBLER_TEST_GENERATE(Addu_overflow, assembler) {
70 __ LoadImmediate(R2, 0x7fffffff); 70 __ LoadImmediate(T2, 0x7fffffff);
71 __ addiu(R3, R0, Immediate(1)); 71 __ addiu(T3, R0, Immediate(1));
72 __ addu(V0, R2, R3); 72 __ addu(V0, T2, T3);
73 __ jr(RA); 73 __ jr(RA);
74 } 74 }
75 75
76 76
77 ASSEMBLER_TEST_RUN(Addu_overflow, test) { 77 ASSEMBLER_TEST_RUN(Addu_overflow, test) {
78 typedef int (*SimpleCode)(); 78 typedef int (*SimpleCode)();
79 EXPECT_EQ(static_cast<int32_t>(0x80000000), 79 EXPECT_EQ(static_cast<int32_t>(0x80000000),
80 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 80 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
81 } 81 }
82 82
83 83
84 ASSEMBLER_TEST_GENERATE(And, assembler) { 84 ASSEMBLER_TEST_GENERATE(And, assembler) {
85 __ addiu(R2, ZR, Immediate(42)); 85 __ addiu(T2, ZR, Immediate(42));
86 __ addiu(R3, ZR, Immediate(2)); 86 __ addiu(T3, ZR, Immediate(2));
87 __ and_(V0, R2, R3); 87 __ and_(V0, T2, T3);
88 __ jr(RA); 88 __ jr(RA);
89 } 89 }
90 90
91 91
92 ASSEMBLER_TEST_RUN(And, test) { 92 ASSEMBLER_TEST_RUN(And, test) {
93 typedef int (*SimpleCode)(); 93 typedef int (*SimpleCode)();
94 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 94 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
95 } 95 }
96 96
97 97
98 ASSEMBLER_TEST_GENERATE(Andi, assembler) { 98 ASSEMBLER_TEST_GENERATE(Andi, assembler) {
99 __ addiu(R1, ZR, Immediate(42)); 99 __ addiu(T1, ZR, Immediate(42));
100 __ andi(V0, R1, Immediate(2)); 100 __ andi(V0, T1, Immediate(2));
101 __ jr(RA); 101 __ jr(RA);
102 } 102 }
103 103
104 104
105 ASSEMBLER_TEST_RUN(Andi, test) { 105 ASSEMBLER_TEST_RUN(Andi, test) {
106 typedef int (*SimpleCode)(); 106 typedef int (*SimpleCode)();
107 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 107 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
108 } 108 }
109 109
110 110
111 ASSEMBLER_TEST_GENERATE(Clo, assembler) { 111 ASSEMBLER_TEST_GENERATE(Clo, assembler) {
112 __ addiu(R1, ZR, Immediate(-1)); 112 __ addiu(T1, ZR, Immediate(-1));
113 __ clo(V0, R1); 113 __ clo(V0, T1);
114 __ jr(RA); 114 __ jr(RA);
115 } 115 }
116 116
117 117
118 ASSEMBLER_TEST_RUN(Clo, test) { 118 ASSEMBLER_TEST_RUN(Clo, test) {
119 typedef int (*SimpleCode)(); 119 typedef int (*SimpleCode)();
120 EXPECT_EQ(32, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 120 EXPECT_EQ(32, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
121 } 121 }
122 122
123 123
124 ASSEMBLER_TEST_GENERATE(Clz, assembler) { 124 ASSEMBLER_TEST_GENERATE(Clz, assembler) {
125 __ addiu(R1, ZR, Immediate(0x7fff)); 125 __ addiu(T1, ZR, Immediate(0x7fff));
126 __ clz(V0, R1); 126 __ clz(V0, T1);
127 __ jr(RA); 127 __ jr(RA);
128 } 128 }
129 129
130 130
131 ASSEMBLER_TEST_RUN(Clz, test) { 131 ASSEMBLER_TEST_RUN(Clz, test) {
132 typedef int (*SimpleCode)(); 132 typedef int (*SimpleCode)();
133 EXPECT_EQ(17, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 133 EXPECT_EQ(17, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
134 } 134 }
135 135
136 136
(...skipping 19 matching lines...) Expand all
156 } 156 }
157 157
158 158
159 ASSEMBLER_TEST_RUN(MthiMfhi, test) { 159 ASSEMBLER_TEST_RUN(MthiMfhi, test) {
160 typedef int (*SimpleCode)(); 160 typedef int (*SimpleCode)();
161 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 161 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
162 } 162 }
163 163
164 164
165 ASSEMBLER_TEST_GENERATE(Divu, assembler) { 165 ASSEMBLER_TEST_GENERATE(Divu, assembler) {
166 __ addiu(R1, ZR, Immediate(27)); 166 __ addiu(T1, ZR, Immediate(27));
167 __ addiu(R2, ZR, Immediate(9)); 167 __ addiu(T2, ZR, Immediate(9));
168 __ divu(R1, R2); 168 __ divu(T1, T2);
169 __ mflo(V0); 169 __ mflo(V0);
170 __ jr(RA); 170 __ jr(RA);
171 } 171 }
172 172
173 173
174 ASSEMBLER_TEST_RUN(Divu, test) { 174 ASSEMBLER_TEST_RUN(Divu, test) {
175 typedef int (*SimpleCode)(); 175 typedef int (*SimpleCode)();
176 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 176 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
177 } 177 }
178 178
179 179
180 ASSEMBLER_TEST_GENERATE(Div, assembler) { 180 ASSEMBLER_TEST_GENERATE(Div, assembler) {
181 __ addiu(R1, ZR, Immediate(27)); 181 __ addiu(T1, ZR, Immediate(27));
182 __ addiu(R2, ZR, Immediate(9)); 182 __ addiu(T2, ZR, Immediate(9));
183 __ div(R1, R2); 183 __ div(T1, T2);
184 __ mflo(V0); 184 __ mflo(V0);
185 __ jr(RA); 185 __ jr(RA);
186 } 186 }
187 187
188 188
189 ASSEMBLER_TEST_RUN(Div, test) { 189 ASSEMBLER_TEST_RUN(Div, test) {
190 typedef int (*SimpleCode)(); 190 typedef int (*SimpleCode)();
191 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 191 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
192 } 192 }
193 193
194 194
195 ASSEMBLER_TEST_GENERATE(Divu_corner, assembler) { 195 ASSEMBLER_TEST_GENERATE(Divu_corner, assembler) {
196 __ LoadImmediate(R1, 0x80000000); 196 __ LoadImmediate(T1, 0x80000000);
197 __ LoadImmediate(R2, 0xffffffff); 197 __ LoadImmediate(T2, 0xffffffff);
198 __ divu(R1, R2); 198 __ divu(T1, T2);
199 __ mflo(V0); 199 __ mflo(V0);
200 __ jr(RA); 200 __ jr(RA);
201 } 201 }
202 202
203 203
204 ASSEMBLER_TEST_RUN(Divu_corner, test) { 204 ASSEMBLER_TEST_RUN(Divu_corner, test) {
205 typedef int (*SimpleCode)(); 205 typedef int (*SimpleCode)();
206 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 206 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
207 } 207 }
208 208
209 209
210 ASSEMBLER_TEST_GENERATE(Div_corner, assembler) { 210 ASSEMBLER_TEST_GENERATE(Div_corner, assembler) {
211 __ LoadImmediate(R1, 0x80000000); 211 __ LoadImmediate(T1, 0x80000000);
212 __ LoadImmediate(R2, 0xffffffff); 212 __ LoadImmediate(T2, 0xffffffff);
213 __ div(R1, R2); 213 __ div(T1, T2);
214 __ mflo(V0); 214 __ mflo(V0);
215 __ jr(RA); 215 __ jr(RA);
216 } 216 }
217 217
218 218
219 ASSEMBLER_TEST_RUN(Div_corner, test) { 219 ASSEMBLER_TEST_RUN(Div_corner, test) {
220 typedef int (*SimpleCode)(); 220 typedef int (*SimpleCode)();
221 EXPECT_EQ(static_cast<int32_t>(0x80000000), 221 EXPECT_EQ(static_cast<int32_t>(0x80000000),
222 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 222 EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
223 } 223 }
224 224
225 225
226 ASSEMBLER_TEST_GENERATE(Lb, assembler) { 226 ASSEMBLER_TEST_GENERATE(Lb, assembler) {
227 __ addiu(SP, SP, Immediate(-kWordSize * 30)); 227 __ addiu(SP, SP, Immediate(-kWordSize * 30));
228 __ LoadImmediate(R1, 0xff); 228 __ LoadImmediate(T1, 0xff);
229 __ sb(R1, Address(SP)); 229 __ sb(T1, Address(SP));
230 __ lb(V0, Address(SP)); 230 __ lb(V0, Address(SP));
231 __ addiu(SP, SP, Immediate(kWordSize * 30)); 231 __ addiu(SP, SP, Immediate(kWordSize * 30));
232 __ jr(RA); 232 __ jr(RA);
233 } 233 }
234 234
235 235
236 ASSEMBLER_TEST_RUN(Lb, test) { 236 ASSEMBLER_TEST_RUN(Lb, test) {
237 typedef int (*SimpleCode)(); 237 typedef int (*SimpleCode)();
238 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 238 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
239 } 239 }
240 240
241 241
242 ASSEMBLER_TEST_GENERATE(Lb_offset, assembler) { 242 ASSEMBLER_TEST_GENERATE(Lb_offset, assembler) {
243 __ addiu(SP, SP, Immediate(-kWordSize * 30)); 243 __ addiu(SP, SP, Immediate(-kWordSize * 30));
244 __ LoadImmediate(R1, 0xff); 244 __ LoadImmediate(T1, 0xff);
245 __ sb(R1, Address(SP, 1)); 245 __ sb(T1, Address(SP, 1));
246 __ lb(V0, Address(SP, 1)); 246 __ lb(V0, Address(SP, 1));
247 __ addiu(SP, SP, Immediate(kWordSize * 30)); 247 __ addiu(SP, SP, Immediate(kWordSize * 30));
248 __ jr(RA); 248 __ jr(RA);
249 } 249 }
250 250
251 251
252 ASSEMBLER_TEST_RUN(Lb_offset, test) { 252 ASSEMBLER_TEST_RUN(Lb_offset, test) {
253 typedef int (*SimpleCode)(); 253 typedef int (*SimpleCode)();
254 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 254 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
255 } 255 }
256 256
257 257
258 ASSEMBLER_TEST_GENERATE(Lbu, assembler) { 258 ASSEMBLER_TEST_GENERATE(Lbu, assembler) {
259 __ addiu(SP, SP, Immediate(-kWordSize * 30)); 259 __ addiu(SP, SP, Immediate(-kWordSize * 30));
260 __ LoadImmediate(R1, 0xff); 260 __ LoadImmediate(T1, 0xff);
261 __ sb(R1, Address(SP)); 261 __ sb(T1, Address(SP));
262 __ lbu(V0, Address(SP)); 262 __ lbu(V0, Address(SP));
263 __ addiu(SP, SP, Immediate(kWordSize * 30)); 263 __ addiu(SP, SP, Immediate(kWordSize * 30));
264 __ jr(RA); 264 __ jr(RA);
265 } 265 }
266 266
267 267
268 ASSEMBLER_TEST_RUN(Lbu, test) { 268 ASSEMBLER_TEST_RUN(Lbu, test) {
269 typedef int (*SimpleCode)(); 269 typedef int (*SimpleCode)();
270 EXPECT_EQ(255, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 270 EXPECT_EQ(255, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
271 } 271 }
272 272
273 273
274 ASSEMBLER_TEST_GENERATE(Lh, assembler) { 274 ASSEMBLER_TEST_GENERATE(Lh, assembler) {
275 __ addiu(SP, SP, Immediate(-kWordSize * 30)); 275 __ addiu(SP, SP, Immediate(-kWordSize * 30));
276 __ LoadImmediate(R1, 0xffff); 276 __ LoadImmediate(T1, 0xffff);
277 __ sh(R1, Address(SP)); 277 __ sh(T1, Address(SP));
278 __ lh(V0, Address(SP)); 278 __ lh(V0, Address(SP));
279 __ addiu(SP, SP, Immediate(kWordSize * 30)); 279 __ addiu(SP, SP, Immediate(kWordSize * 30));
280 __ jr(RA); 280 __ jr(RA);
281 } 281 }
282 282
283 283
284 ASSEMBLER_TEST_RUN(Lh, test) { 284 ASSEMBLER_TEST_RUN(Lh, test) {
285 typedef int (*SimpleCode)(); 285 typedef int (*SimpleCode)();
286 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 286 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
287 } 287 }
288 288
289 289
290 ASSEMBLER_TEST_GENERATE(Lhu, assembler) { 290 ASSEMBLER_TEST_GENERATE(Lhu, assembler) {
291 __ addiu(SP, SP, Immediate(-kWordSize * 30)); 291 __ addiu(SP, SP, Immediate(-kWordSize * 30));
292 __ LoadImmediate(R1, 0xffff); 292 __ LoadImmediate(T1, 0xffff);
293 __ sh(R1, Address(SP)); 293 __ sh(T1, Address(SP));
294 __ lhu(V0, Address(SP)); 294 __ lhu(V0, Address(SP));
295 __ addiu(SP, SP, Immediate(kWordSize * 30)); 295 __ addiu(SP, SP, Immediate(kWordSize * 30));
296 __ jr(RA); 296 __ jr(RA);
297 } 297 }
298 298
299 299
300 ASSEMBLER_TEST_RUN(Lhu, test) { 300 ASSEMBLER_TEST_RUN(Lhu, test) {
301 typedef int (*SimpleCode)(); 301 typedef int (*SimpleCode)();
302 EXPECT_EQ(65535, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 302 EXPECT_EQ(65535, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
303 } 303 }
304 304
305 305
306 ASSEMBLER_TEST_GENERATE(Lw, assembler) { 306 ASSEMBLER_TEST_GENERATE(Lw, assembler) {
307 __ addiu(SP, SP, Immediate(-kWordSize * 30)); 307 __ addiu(SP, SP, Immediate(-kWordSize * 30));
308 __ LoadImmediate(R1, -1); 308 __ LoadImmediate(T1, -1);
309 __ sw(R1, Address(SP)); 309 __ sw(T1, Address(SP));
310 __ lw(V0, Address(SP)); 310 __ lw(V0, Address(SP));
311 __ addiu(SP, SP, Immediate(kWordSize * 30)); 311 __ addiu(SP, SP, Immediate(kWordSize * 30));
312 __ jr(RA); 312 __ jr(RA);
313 } 313 }
314 314
315 315
316 ASSEMBLER_TEST_RUN(Lw, test) { 316 ASSEMBLER_TEST_RUN(Lw, test) {
317 typedef int (*SimpleCode)(); 317 typedef int (*SimpleCode)();
318 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 318 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
319 } 319 }
320 320
321 321
322 ASSEMBLER_TEST_GENERATE(Lui, assembler) { 322 ASSEMBLER_TEST_GENERATE(Lui, assembler) {
323 __ lui(V0, Immediate(42)); 323 __ lui(V0, Immediate(42));
324 __ jr(RA); 324 __ jr(RA);
325 } 325 }
326 326
327 327
328 ASSEMBLER_TEST_RUN(Lui, test) { 328 ASSEMBLER_TEST_RUN(Lui, test) {
329 typedef int (*SimpleCode)(); 329 typedef int (*SimpleCode)();
330 EXPECT_EQ(42 << 16, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 330 EXPECT_EQ(42 << 16, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
331 } 331 }
332 332
333 333
334 ASSEMBLER_TEST_GENERATE(Sll, assembler) { 334 ASSEMBLER_TEST_GENERATE(Sll, assembler) {
335 __ LoadImmediate(R1, 21); 335 __ LoadImmediate(T1, 21);
336 __ sll(V0, R1, 1); 336 __ sll(V0, T1, 1);
337 __ jr(RA); 337 __ jr(RA);
338 } 338 }
339 339
340 340
341 ASSEMBLER_TEST_RUN(Sll, test) { 341 ASSEMBLER_TEST_RUN(Sll, test) {
342 typedef int (*SimpleCode)(); 342 typedef int (*SimpleCode)();
343 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 343 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
344 } 344 }
345 345
346 346
347 ASSEMBLER_TEST_GENERATE(Srl, assembler) { 347 ASSEMBLER_TEST_GENERATE(Srl, assembler) {
348 __ LoadImmediate(R1, 84); 348 __ LoadImmediate(T1, 84);
349 __ srl(V0, R1, 1); 349 __ srl(V0, T1, 1);
350 __ jr(RA); 350 __ jr(RA);
351 } 351 }
352 352
353 353
354 ASSEMBLER_TEST_RUN(Srl, test) { 354 ASSEMBLER_TEST_RUN(Srl, test) {
355 typedef int (*SimpleCode)(); 355 typedef int (*SimpleCode)();
356 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 356 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
357 } 357 }
358 358
359 359
360 ASSEMBLER_TEST_GENERATE(LShifting, assembler) { 360 ASSEMBLER_TEST_GENERATE(LShifting, assembler) {
361 __ LoadImmediate(R1, 1); 361 __ LoadImmediate(T1, 1);
362 __ sll(R1, R1, 31); 362 __ sll(T1, T1, 31);
363 __ srl(V0, R1, 31); 363 __ srl(V0, T1, 31);
364 __ jr(RA); 364 __ jr(RA);
365 } 365 }
366 366
367 367
368 ASSEMBLER_TEST_RUN(LShifting, test) { 368 ASSEMBLER_TEST_RUN(LShifting, test) {
369 typedef int (*SimpleCode)(); 369 typedef int (*SimpleCode)();
370 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 370 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
371 } 371 }
372 372
373 373
374 ASSEMBLER_TEST_GENERATE(RShifting, assembler) { 374 ASSEMBLER_TEST_GENERATE(RShifting, assembler) {
375 __ LoadImmediate(R1, 1); 375 __ LoadImmediate(T1, 1);
376 __ sll(R1, R1, 31); 376 __ sll(T1, T1, 31);
377 __ sra(V0, R1, 31); 377 __ sra(V0, T1, 31);
378 __ jr(RA); 378 __ jr(RA);
379 } 379 }
380 380
381 381
382 ASSEMBLER_TEST_RUN(RShifting, test) { 382 ASSEMBLER_TEST_RUN(RShifting, test) {
383 typedef int (*SimpleCode)(); 383 typedef int (*SimpleCode)();
384 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 384 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
385 } 385 }
386 386
387 387
388 ASSEMBLER_TEST_GENERATE(Sllv, assembler) { 388 ASSEMBLER_TEST_GENERATE(Sllv, assembler) {
389 __ LoadImmediate(R1, 21); 389 __ LoadImmediate(T1, 21);
390 __ LoadImmediate(R2, 1); 390 __ LoadImmediate(T2, 1);
391 __ sllv(V0, R1, R2); 391 __ sllv(V0, T1, T2);
392 __ jr(RA); 392 __ jr(RA);
393 } 393 }
394 394
395 395
396 ASSEMBLER_TEST_RUN(Sllv, test) { 396 ASSEMBLER_TEST_RUN(Sllv, test) {
397 typedef int (*SimpleCode)(); 397 typedef int (*SimpleCode)();
398 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 398 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
399 } 399 }
400 400
401 401
402 ASSEMBLER_TEST_GENERATE(Srlv, assembler) { 402 ASSEMBLER_TEST_GENERATE(Srlv, assembler) {
403 __ LoadImmediate(R1, 84); 403 __ LoadImmediate(T1, 84);
404 __ LoadImmediate(R2, 1); 404 __ LoadImmediate(T2, 1);
405 __ srlv(V0, R1, R2); 405 __ srlv(V0, T1, T2);
406 __ jr(RA); 406 __ jr(RA);
407 } 407 }
408 408
409 409
410 ASSEMBLER_TEST_RUN(Srlv, test) { 410 ASSEMBLER_TEST_RUN(Srlv, test) {
411 typedef int (*SimpleCode)(); 411 typedef int (*SimpleCode)();
412 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 412 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
413 } 413 }
414 414
415 415
416 ASSEMBLER_TEST_GENERATE(LShiftingV, assembler) { 416 ASSEMBLER_TEST_GENERATE(LShiftingV, assembler) {
417 __ LoadImmediate(R1, 1); 417 __ LoadImmediate(T1, 1);
418 __ LoadImmediate(R2, 31); 418 __ LoadImmediate(T2, 31);
419 __ sllv(R1, R1, R2); 419 __ sllv(T1, T1, T2);
420 __ srlv(V0, R1, R2); 420 __ srlv(V0, T1, T2);
421 __ jr(RA); 421 __ jr(RA);
422 } 422 }
423 423
424 424
425 ASSEMBLER_TEST_RUN(LShiftingV, test) { 425 ASSEMBLER_TEST_RUN(LShiftingV, test) {
426 typedef int (*SimpleCode)(); 426 typedef int (*SimpleCode)();
427 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 427 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
428 } 428 }
429 429
430 430
431 ASSEMBLER_TEST_GENERATE(RShiftingV, assembler) { 431 ASSEMBLER_TEST_GENERATE(RShiftingV, assembler) {
432 __ LoadImmediate(R1, 1); 432 __ LoadImmediate(T1, 1);
433 __ LoadImmediate(R2, 31); 433 __ LoadImmediate(T2, 31);
434 __ sllv(R1, R1, R2); 434 __ sllv(T1, T1, T2);
435 __ srav(V0, R1, R2); 435 __ srav(V0, T1, T2);
436 __ jr(RA); 436 __ jr(RA);
437 } 437 }
438 438
439 439
440 ASSEMBLER_TEST_RUN(RShiftingV, test) { 440 ASSEMBLER_TEST_RUN(RShiftingV, test) {
441 typedef int (*SimpleCode)(); 441 typedef int (*SimpleCode)();
442 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 442 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
443 } 443 }
444 444
445 445
446 ASSEMBLER_TEST_GENERATE(Mult_pos, assembler) { 446 ASSEMBLER_TEST_GENERATE(Mult_pos, assembler) {
447 __ LoadImmediate(R1, 6); 447 __ LoadImmediate(T1, 6);
448 __ LoadImmediate(R2, 7); 448 __ LoadImmediate(T2, 7);
449 __ mult(R1, R2); 449 __ mult(T1, T2);
450 __ mflo(V0); 450 __ mflo(V0);
451 __ jr(RA); 451 __ jr(RA);
452 } 452 }
453 453
454 454
455 ASSEMBLER_TEST_RUN(Mult_pos, test) { 455 ASSEMBLER_TEST_RUN(Mult_pos, test) {
456 typedef int (*SimpleCode)(); 456 typedef int (*SimpleCode)();
457 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 457 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
458 } 458 }
459 459
460 460
461 ASSEMBLER_TEST_GENERATE(Mult_neg, assembler) { 461 ASSEMBLER_TEST_GENERATE(Mult_neg, assembler) {
462 __ LoadImmediate(R1, -6); 462 __ LoadImmediate(T1, -6);
463 __ LoadImmediate(R2, 7); 463 __ LoadImmediate(T2, 7);
464 __ mult(R1, R2); 464 __ mult(T1, T2);
465 __ mflo(V0); 465 __ mflo(V0);
466 __ jr(RA); 466 __ jr(RA);
467 } 467 }
468 468
469 469
470 ASSEMBLER_TEST_RUN(Mult_neg, test) { 470 ASSEMBLER_TEST_RUN(Mult_neg, test) {
471 typedef int (*SimpleCode)(); 471 typedef int (*SimpleCode)();
472 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 472 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
473 } 473 }
474 474
475 475
476 ASSEMBLER_TEST_GENERATE(Mult_neg_hi, assembler) { 476 ASSEMBLER_TEST_GENERATE(Mult_neg_hi, assembler) {
477 __ LoadImmediate(R1, -6); 477 __ LoadImmediate(T1, -6);
478 __ LoadImmediate(R2, 7); 478 __ LoadImmediate(T2, 7);
479 __ mult(R1, R2); 479 __ mult(T1, T2);
480 __ mfhi(V0); 480 __ mfhi(V0);
481 __ jr(RA); 481 __ jr(RA);
482 } 482 }
483 483
484 484
485 ASSEMBLER_TEST_RUN(Mult_neg_hi, test) { 485 ASSEMBLER_TEST_RUN(Mult_neg_hi, test) {
486 typedef int (*SimpleCode)(); 486 typedef int (*SimpleCode)();
487 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 487 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
488 } 488 }
489 489
490 490
491 ASSEMBLER_TEST_GENERATE(Multu_lo, assembler) { 491 ASSEMBLER_TEST_GENERATE(Multu_lo, assembler) {
492 __ LoadImmediate(R1, 6); 492 __ LoadImmediate(T1, 6);
493 __ LoadImmediate(R2, 7); 493 __ LoadImmediate(T2, 7);
494 __ multu(R1, R2); 494 __ multu(T1, T2);
495 __ mflo(V0); 495 __ mflo(V0);
496 __ jr(RA); 496 __ jr(RA);
497 } 497 }
498 498
499 499
500 ASSEMBLER_TEST_RUN(Multu_lo, test) { 500 ASSEMBLER_TEST_RUN(Multu_lo, test) {
501 typedef int (*SimpleCode)(); 501 typedef int (*SimpleCode)();
502 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 502 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
503 } 503 }
504 504
505 505
506 ASSEMBLER_TEST_GENERATE(Multu_hi, assembler) { 506 ASSEMBLER_TEST_GENERATE(Multu_hi, assembler) {
507 __ LoadImmediate(R1, 65536); 507 __ LoadImmediate(T1, 65536);
508 __ LoadImmediate(R2, 65536); 508 __ LoadImmediate(T2, 65536);
509 __ multu(R1, R2); 509 __ multu(T1, T2);
510 __ mfhi(V0); 510 __ mfhi(V0);
511 __ jr(RA); 511 __ jr(RA);
512 } 512 }
513 513
514 514
515 ASSEMBLER_TEST_RUN(Multu_hi, test) { 515 ASSEMBLER_TEST_RUN(Multu_hi, test) {
516 typedef int (*SimpleCode)(); 516 typedef int (*SimpleCode)();
517 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 517 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
518 } 518 }
519 519
520 520
521 ASSEMBLER_TEST_GENERATE(Madd_neg, assembler) { 521 ASSEMBLER_TEST_GENERATE(Madd_neg, assembler) {
522 __ LoadImmediate(R1, -6); 522 __ LoadImmediate(T1, -6);
523 __ LoadImmediate(R2, 7); 523 __ LoadImmediate(T2, 7);
524 __ mult(R1, R2); 524 __ mult(T1, T2);
525 __ madd(R1, R2); 525 __ madd(T1, T2);
526 __ mflo(V0); 526 __ mflo(V0);
527 __ mfhi(V1); 527 __ mfhi(V1);
528 __ jr(RA); 528 __ jr(RA);
529 } 529 }
530 530
531 531
532 ASSEMBLER_TEST_RUN(Madd_neg, test) { 532 ASSEMBLER_TEST_RUN(Madd_neg, test) {
533 typedef int (*SimpleCode)(); 533 typedef int (*SimpleCode)();
534 EXPECT_EQ(-84, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 534 EXPECT_EQ(-84, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
535 } 535 }
536 536
537 537
538 ASSEMBLER_TEST_GENERATE(Subu, assembler) { 538 ASSEMBLER_TEST_GENERATE(Subu, assembler) {
539 __ LoadImmediate(R1, 737); 539 __ LoadImmediate(T1, 737);
540 __ LoadImmediate(R2, 695); 540 __ LoadImmediate(T2, 695);
541 __ subu(V0, R1, R2); 541 __ subu(V0, T1, T2);
542 __ jr(RA); 542 __ jr(RA);
543 } 543 }
544 544
545 545
546 ASSEMBLER_TEST_RUN(Subu, test) { 546 ASSEMBLER_TEST_RUN(Subu, test) {
547 typedef int (*SimpleCode)(); 547 typedef int (*SimpleCode)();
548 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 548 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
549 } 549 }
550 550
551 551
552 ASSEMBLER_TEST_GENERATE(Or, assembler) { 552 ASSEMBLER_TEST_GENERATE(Or, assembler) {
553 __ LoadImmediate(R1, 34); 553 __ LoadImmediate(T1, 34);
554 __ LoadImmediate(R2, 8); 554 __ LoadImmediate(T2, 8);
555 __ or_(V0, R1, R2); 555 __ or_(V0, T1, T2);
556 __ jr(RA); 556 __ jr(RA);
557 } 557 }
558 558
559 559
560 ASSEMBLER_TEST_RUN(Or, test) { 560 ASSEMBLER_TEST_RUN(Or, test) {
561 typedef int (*SimpleCode)(); 561 typedef int (*SimpleCode)();
562 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 562 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
563 } 563 }
564 564
565 565
566 ASSEMBLER_TEST_GENERATE(Nor, assembler) { 566 ASSEMBLER_TEST_GENERATE(Nor, assembler) {
567 __ LoadImmediate(R1, -47); 567 __ LoadImmediate(T1, -47);
568 __ LoadImmediate(R2, -60); 568 __ LoadImmediate(T2, -60);
569 __ nor(V0, R1, R2); 569 __ nor(V0, T1, T2);
570 __ jr(RA); 570 __ jr(RA);
571 } 571 }
572 572
573 573
574 ASSEMBLER_TEST_RUN(Nor, test) { 574 ASSEMBLER_TEST_RUN(Nor, test) {
575 typedef int (*SimpleCode)(); 575 typedef int (*SimpleCode)();
576 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 576 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
577 } 577 }
578 578
579 579
580 ASSEMBLER_TEST_GENERATE(Xor, assembler) { 580 ASSEMBLER_TEST_GENERATE(Xor, assembler) {
581 __ LoadImmediate(R1, 51); 581 __ LoadImmediate(T1, 51);
582 __ LoadImmediate(R2, 25); 582 __ LoadImmediate(T2, 25);
583 __ xor_(V0, R1, R2); 583 __ xor_(V0, T1, T2);
584 __ jr(RA); 584 __ jr(RA);
585 } 585 }
586 586
587 587
588 ASSEMBLER_TEST_RUN(Xor, test) { 588 ASSEMBLER_TEST_RUN(Xor, test) {
589 typedef int (*SimpleCode)(); 589 typedef int (*SimpleCode)();
590 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 590 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
591 } 591 }
592 592
593 593
594 ASSEMBLER_TEST_GENERATE(Xori, assembler) { 594 ASSEMBLER_TEST_GENERATE(Xori, assembler) {
595 __ LoadImmediate(T0, 51); 595 __ LoadImmediate(T0, 51);
596 __ xori(V0, T0, Immediate(25)); 596 __ xori(V0, T0, Immediate(25));
597 __ jr(RA); 597 __ jr(RA);
598 } 598 }
599 599
600 600
601 ASSEMBLER_TEST_RUN(Xori, test) { 601 ASSEMBLER_TEST_RUN(Xori, test) {
602 typedef int (*SimpleCode)(); 602 typedef int (*SimpleCode)();
603 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 603 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
604 } 604 }
605 605
606 606
607 ASSEMBLER_TEST_GENERATE(Slt, assembler) { 607 ASSEMBLER_TEST_GENERATE(Slt, assembler) {
608 __ LoadImmediate(R1, -1); 608 __ LoadImmediate(T1, -1);
609 __ LoadImmediate(R2, 0); 609 __ LoadImmediate(T2, 0);
610 __ slt(V0, R1, R2); 610 __ slt(V0, T1, T2);
611 __ jr(RA); 611 __ jr(RA);
612 } 612 }
613 613
614 614
615 ASSEMBLER_TEST_RUN(Slt, test) { 615 ASSEMBLER_TEST_RUN(Slt, test) {
616 typedef int (*SimpleCode)(); 616 typedef int (*SimpleCode)();
617 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 617 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
618 } 618 }
619 619
620 620
621 ASSEMBLER_TEST_GENERATE(Sltu, assembler) { 621 ASSEMBLER_TEST_GENERATE(Sltu, assembler) {
622 __ LoadImmediate(R1, -1); 622 __ LoadImmediate(T1, -1);
623 __ LoadImmediate(R2, 0); 623 __ LoadImmediate(T2, 0);
624 __ sltu(V0, R1, R2); 624 __ sltu(V0, T1, T2);
625 __ jr(RA); 625 __ jr(RA);
626 } 626 }
627 627
628 628
629 ASSEMBLER_TEST_RUN(Sltu, test) { 629 ASSEMBLER_TEST_RUN(Sltu, test) {
630 typedef int (*SimpleCode)(); 630 typedef int (*SimpleCode)();
631 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 631 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
632 } 632 }
633 633
634 634
635 ASSEMBLER_TEST_GENERATE(Movz, assembler) { 635 ASSEMBLER_TEST_GENERATE(Movz, assembler) {
636 __ LoadImmediate(R1, 42); 636 __ LoadImmediate(T1, 42);
637 __ LoadImmediate(R2, 23); 637 __ LoadImmediate(T2, 23);
638 __ slt(R3, R1, R2); 638 __ slt(T3, T1, T2);
639 __ movz(V0, R1, R3); 639 __ movz(V0, T1, T3);
640 __ jr(RA); 640 __ jr(RA);
641 } 641 }
642 642
643 643
644 ASSEMBLER_TEST_RUN(Movz, test) { 644 ASSEMBLER_TEST_RUN(Movz, test) {
645 typedef int (*SimpleCode)(); 645 typedef int (*SimpleCode)();
646 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 646 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
647 } 647 }
648 648
649 649
650 ASSEMBLER_TEST_GENERATE(Movn, assembler) { 650 ASSEMBLER_TEST_GENERATE(Movn, assembler) {
651 __ LoadImmediate(R1, 42); 651 __ LoadImmediate(T1, 42);
652 __ LoadImmediate(R2, 23); 652 __ LoadImmediate(T2, 23);
653 __ slt(R3, R2, R1); 653 __ slt(T3, T2, T1);
654 __ movn(V0, R1, R3); 654 __ movn(V0, T1, T3);
655 __ jr(RA); 655 __ jr(RA);
656 } 656 }
657 657
658 658
659 ASSEMBLER_TEST_RUN(Movn, test) { 659 ASSEMBLER_TEST_RUN(Movn, test) {
660 typedef int (*SimpleCode)(); 660 typedef int (*SimpleCode)();
661 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 661 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
662 } 662 }
663 663
664 664
665 ASSEMBLER_TEST_GENERATE(Jr_delay, assembler) { 665 ASSEMBLER_TEST_GENERATE(Jr_delay, assembler) {
666 __ jr(RA); 666 __ jr(RA);
667 __ delay_slot()->ori(V0, ZR, Immediate(42)); 667 __ delay_slot()->ori(V0, ZR, Immediate(42));
668 } 668 }
669 669
670 670
671 ASSEMBLER_TEST_RUN(Jr_delay, test) { 671 ASSEMBLER_TEST_RUN(Jr_delay, test) {
672 typedef int (*SimpleCode)(); 672 typedef int (*SimpleCode)();
673 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 673 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
674 } 674 }
675 675
676 676
677 ASSEMBLER_TEST_GENERATE(Beq_backward, assembler) { 677 ASSEMBLER_TEST_GENERATE(Beq_backward, assembler) {
678 Label l; 678 Label l;
679 679
680 __ LoadImmediate(R1, 0); 680 __ LoadImmediate(T1, 0);
681 __ LoadImmediate(R2, 1); 681 __ LoadImmediate(T2, 1);
682 __ Bind(&l); 682 __ Bind(&l);
683 __ addiu(R1, R1, Immediate(1)); 683 __ addiu(T1, T1, Immediate(1));
684 __ beq(R1, R2, &l); 684 __ beq(T1, T2, &l);
685 __ ori(V0, R1, Immediate(0)); 685 __ ori(V0, T1, Immediate(0));
686 __ jr(RA); 686 __ jr(RA);
687 } 687 }
688 688
689 689
690 ASSEMBLER_TEST_RUN(Beq_backward, test) { 690 ASSEMBLER_TEST_RUN(Beq_backward, test) {
691 typedef int (*SimpleCode)(); 691 typedef int (*SimpleCode)();
692 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 692 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
693 } 693 }
694 694
695 695
696 ASSEMBLER_TEST_GENERATE(Beq_backward_delay, assembler) { 696 ASSEMBLER_TEST_GENERATE(Beq_backward_delay, assembler) {
697 Label l; 697 Label l;
698 698
699 __ LoadImmediate(R1, 0); 699 __ LoadImmediate(T1, 0);
700 __ LoadImmediate(R2, 1); 700 __ LoadImmediate(T2, 1);
701 __ Bind(&l); 701 __ Bind(&l);
702 __ addiu(R1, R1, Immediate(1)); 702 __ addiu(T1, T1, Immediate(1));
703 __ beq(R1, R2, &l); 703 __ beq(T1, T2, &l);
704 __ delay_slot()->addiu(R1, R1, Immediate(1)); 704 __ delay_slot()->addiu(T1, T1, Immediate(1));
705 __ ori(V0, R1, Immediate(0)); 705 __ ori(V0, T1, Immediate(0));
706 __ jr(RA); 706 __ jr(RA);
707 } 707 }
708 708
709 709
710 ASSEMBLER_TEST_RUN(Beq_backward_delay, test) { 710 ASSEMBLER_TEST_RUN(Beq_backward_delay, test) {
711 typedef int (*SimpleCode)(); 711 typedef int (*SimpleCode)();
712 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 712 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
713 } 713 }
714 714
715 715
716 ASSEMBLER_TEST_GENERATE(Beq_forward_taken, assembler) { 716 ASSEMBLER_TEST_GENERATE(Beq_forward_taken, assembler) {
717 Label l; 717 Label l;
718 718
719 __ LoadImmediate(R5, 1); 719 __ LoadImmediate(T5, 1);
720 __ LoadImmediate(R6, 1); 720 __ LoadImmediate(T6, 1);
721 721
722 __ LoadImmediate(V0, 42); 722 __ LoadImmediate(V0, 42);
723 __ beq(R5, R6, &l); 723 __ beq(T5, T6, &l);
724 __ LoadImmediate(V0, 0); 724 __ LoadImmediate(V0, 0);
725 __ Bind(&l); 725 __ Bind(&l);
726 __ jr(RA); 726 __ jr(RA);
727 } 727 }
728 728
729 729
730 ASSEMBLER_TEST_RUN(Beq_forward_taken, test) { 730 ASSEMBLER_TEST_RUN(Beq_forward_taken, test) {
731 typedef int (*SimpleCode)(); 731 typedef int (*SimpleCode)();
732 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 732 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
733 } 733 }
734 734
735 735
736 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) { 736 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) {
737 Label l; 737 Label l;
738 738
739 __ LoadImmediate(R5, 0); 739 __ LoadImmediate(T5, 0);
740 __ LoadImmediate(R6, 1); 740 __ LoadImmediate(T6, 1);
741 741
742 __ LoadImmediate(V0, 42); 742 __ LoadImmediate(V0, 42);
743 __ beq(R5, R6, &l); 743 __ beq(T5, T6, &l);
744 __ LoadImmediate(V0, 0); 744 __ LoadImmediate(V0, 0);
745 __ Bind(&l); 745 __ Bind(&l);
746 __ jr(RA); 746 __ jr(RA);
747 } 747 }
748 748
749 749
750 ASSEMBLER_TEST_RUN(Beq_forward_not_taken, test) { 750 ASSEMBLER_TEST_RUN(Beq_forward_not_taken, test) {
751 typedef int (*SimpleCode)(); 751 typedef int (*SimpleCode)();
752 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 752 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
753 } 753 }
754 754
755 755
756 ASSEMBLER_TEST_GENERATE(Beq_forward_taken2, assembler) { 756 ASSEMBLER_TEST_GENERATE(Beq_forward_taken2, assembler) {
757 Label l; 757 Label l;
758 758
759 __ LoadImmediate(R5, 1); 759 __ LoadImmediate(T5, 1);
760 __ LoadImmediate(R6, 1); 760 __ LoadImmediate(T6, 1);
761 761
762 __ LoadImmediate(V0, 42); 762 __ LoadImmediate(V0, 42);
763 __ beq(R5, R6, &l); 763 __ beq(T5, T6, &l);
764 __ nop(); 764 __ nop();
765 __ nop(); 765 __ nop();
766 __ LoadImmediate(V0, 0); 766 __ LoadImmediate(V0, 0);
767 __ Bind(&l); 767 __ Bind(&l);
768 __ jr(RA); 768 __ jr(RA);
769 } 769 }
770 770
771 771
772 ASSEMBLER_TEST_RUN(Beq_forward_taken2, test) { 772 ASSEMBLER_TEST_RUN(Beq_forward_taken2, test) {
773 typedef int (*SimpleCode)(); 773 typedef int (*SimpleCode)();
774 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 774 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
775 } 775 }
776 776
777 777
778 ASSEMBLER_TEST_GENERATE(Beq_forward_taken_delay, assembler) { 778 ASSEMBLER_TEST_GENERATE(Beq_forward_taken_delay, assembler) {
779 Label l; 779 Label l;
780 780
781 __ LoadImmediate(R5, 1); 781 __ LoadImmediate(T5, 1);
782 __ LoadImmediate(R6, 1); 782 __ LoadImmediate(T6, 1);
783 783
784 __ LoadImmediate(V0, 42); 784 __ LoadImmediate(V0, 42);
785 __ beq(R5, R6, &l); 785 __ beq(T5, T6, &l);
786 __ delay_slot()->ori(V0, V0, Immediate(1)); 786 __ delay_slot()->ori(V0, V0, Immediate(1));
787 __ LoadImmediate(V0, 0); 787 __ LoadImmediate(V0, 0);
788 __ Bind(&l); 788 __ Bind(&l);
789 __ jr(RA); 789 __ jr(RA);
790 } 790 }
791 791
792 792
793 ASSEMBLER_TEST_RUN(Beq_forward_taken_delay, test) { 793 ASSEMBLER_TEST_RUN(Beq_forward_taken_delay, test) {
794 typedef int (*SimpleCode)(); 794 typedef int (*SimpleCode)();
795 EXPECT_EQ(43, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 795 EXPECT_EQ(43, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
796 } 796 }
797 797
798 798
799 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_delay, assembler) { 799 ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_delay, assembler) {
800 Label l; 800 Label l;
801 801
802 __ LoadImmediate(R5, 0); 802 __ LoadImmediate(T5, 0);
803 __ LoadImmediate(R6, 1); 803 __ LoadImmediate(T6, 1);
804 804
805 __ LoadImmediate(V0, 42); 805 __ LoadImmediate(V0, 42);
806 __ beq(R5, R6, &l); 806 __ beq(T5, T6, &l);
807 __ delay_slot()->ori(V0, V0, Immediate(1)); 807 __ delay_slot()->ori(V0, V0, Immediate(1));
808 __ addiu(V0, V0, Immediate(1)); 808 __ addiu(V0, V0, Immediate(1));
809 __ Bind(&l); 809 __ Bind(&l);
810 __ jr(RA); 810 __ jr(RA);
811 } 811 }
812 812
813 813
814 ASSEMBLER_TEST_RUN(Beq_forward_not_taken_delay, test) { 814 ASSEMBLER_TEST_RUN(Beq_forward_not_taken_delay, test) {
815 typedef int (*SimpleCode)(); 815 typedef int (*SimpleCode)();
816 EXPECT_EQ(44, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 816 EXPECT_EQ(44, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
817 } 817 }
818 818
819 819
820 ASSEMBLER_TEST_GENERATE(Beql_backward_delay, assembler) { 820 ASSEMBLER_TEST_GENERATE(Beql_backward_delay, assembler) {
821 Label l; 821 Label l;
822 822
823 __ LoadImmediate(R5, 0); 823 __ LoadImmediate(T5, 0);
824 __ LoadImmediate(R6, 1); 824 __ LoadImmediate(T6, 1);
825 __ Bind(&l); 825 __ Bind(&l);
826 __ addiu(R5, R5, Immediate(1)); 826 __ addiu(T5, T5, Immediate(1));
827 __ beql(R5, R6, &l); 827 __ beql(T5, T6, &l);
828 __ delay_slot()->addiu(R5, R5, Immediate(1)); 828 __ delay_slot()->addiu(T5, T5, Immediate(1));
829 __ ori(V0, R5, Immediate(0)); 829 __ ori(V0, T5, Immediate(0));
830 __ jr(RA); 830 __ jr(RA);
831 } 831 }
832 832
833 833
834 ASSEMBLER_TEST_RUN(Beql_backward_delay, test) { 834 ASSEMBLER_TEST_RUN(Beql_backward_delay, test) {
835 typedef int (*SimpleCode)(); 835 typedef int (*SimpleCode)();
836 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 836 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
837 } 837 }
838 838
839 839
840 ASSEMBLER_TEST_GENERATE(Bgez, assembler) { 840 ASSEMBLER_TEST_GENERATE(Bgez, assembler) {
841 Label l; 841 Label l;
842 842
843 __ LoadImmediate(R5, 3); 843 __ LoadImmediate(T5, 3);
844 __ Bind(&l); 844 __ Bind(&l);
845 __ bgez(R5, &l); 845 __ bgez(T5, &l);
846 __ delay_slot()->addiu(R5, R5, Immediate(-1)); 846 __ delay_slot()->addiu(T5, T5, Immediate(-1));
847 __ ori(V0, R5, Immediate(0)); 847 __ ori(V0, T5, Immediate(0));
848 __ jr(RA); 848 __ jr(RA);
849 } 849 }
850 850
851 851
852 ASSEMBLER_TEST_RUN(Bgez, test) { 852 ASSEMBLER_TEST_RUN(Bgez, test) {
853 typedef int (*SimpleCode)(); 853 typedef int (*SimpleCode)();
854 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 854 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
855 } 855 }
856 856
857 857
858 ASSEMBLER_TEST_GENERATE(Bgezl, assembler) { 858 ASSEMBLER_TEST_GENERATE(Bgezl, assembler) {
859 Label l; 859 Label l;
860 860
861 __ LoadImmediate(R5, 3); 861 __ LoadImmediate(T5, 3);
862 __ Bind(&l); 862 __ Bind(&l);
863 __ bgezl(R5, &l); 863 __ bgezl(T5, &l);
864 __ delay_slot()->addiu(R5, R5, Immediate(-1)); 864 __ delay_slot()->addiu(T5, T5, Immediate(-1));
865 __ ori(V0, R5, Immediate(0)); 865 __ ori(V0, T5, Immediate(0));
866 __ jr(RA); 866 __ jr(RA);
867 } 867 }
868 868
869 869
870 ASSEMBLER_TEST_RUN(Bgezl, test) { 870 ASSEMBLER_TEST_RUN(Bgezl, test) {
871 typedef int (*SimpleCode)(); 871 typedef int (*SimpleCode)();
872 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 872 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
873 } 873 }
874 874
875 875
876 ASSEMBLER_TEST_GENERATE(Blez, assembler) { 876 ASSEMBLER_TEST_GENERATE(Blez, assembler) {
877 Label l; 877 Label l;
878 878
879 __ LoadImmediate(R5, -3); 879 __ LoadImmediate(T5, -3);
880 __ Bind(&l); 880 __ Bind(&l);
881 __ blez(R5, &l); 881 __ blez(T5, &l);
882 __ delay_slot()->addiu(R5, R5, Immediate(1)); 882 __ delay_slot()->addiu(T5, T5, Immediate(1));
883 __ ori(V0, R5, Immediate(0)); 883 __ ori(V0, T5, Immediate(0));
884 __ jr(RA); 884 __ jr(RA);
885 } 885 }
886 886
887 887
888 ASSEMBLER_TEST_RUN(Blez, test) { 888 ASSEMBLER_TEST_RUN(Blez, test) {
889 typedef int (*SimpleCode)(); 889 typedef int (*SimpleCode)();
890 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 890 EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
891 } 891 }
892 892
893 893
894 ASSEMBLER_TEST_GENERATE(Blezl, assembler) { 894 ASSEMBLER_TEST_GENERATE(Blezl, assembler) {
895 Label l; 895 Label l;
896 896
897 __ LoadImmediate(R5, -3); 897 __ LoadImmediate(T5, -3);
898 __ Bind(&l); 898 __ Bind(&l);
899 __ blezl(R5, &l); 899 __ blezl(T5, &l);
900 __ delay_slot()->addiu(R5, R5, Immediate(1)); 900 __ delay_slot()->addiu(T5, T5, Immediate(1));
901 __ ori(V0, R5, Immediate(0)); 901 __ ori(V0, T5, Immediate(0));
902 __ jr(RA); 902 __ jr(RA);
903 } 903 }
904 904
905 905
906 ASSEMBLER_TEST_RUN(Blezl, test) { 906 ASSEMBLER_TEST_RUN(Blezl, test) {
907 typedef int (*SimpleCode)(); 907 typedef int (*SimpleCode)();
908 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 908 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
909 } 909 }
910 910
911 911
912 ASSEMBLER_TEST_GENERATE(Bgtz, assembler) { 912 ASSEMBLER_TEST_GENERATE(Bgtz, assembler) {
913 Label l; 913 Label l;
914 914
915 __ LoadImmediate(R5, 3); 915 __ LoadImmediate(T5, 3);
916 __ Bind(&l); 916 __ Bind(&l);
917 __ bgtz(R5, &l); 917 __ bgtz(T5, &l);
918 __ delay_slot()->addiu(R5, R5, Immediate(-1)); 918 __ delay_slot()->addiu(T5, T5, Immediate(-1));
919 __ ori(V0, R5, Immediate(0)); 919 __ ori(V0, T5, Immediate(0));
920 __ jr(RA); 920 __ jr(RA);
921 } 921 }
922 922
923 923
924 ASSEMBLER_TEST_RUN(Bgtz, test) { 924 ASSEMBLER_TEST_RUN(Bgtz, test) {
925 typedef int (*SimpleCode)(); 925 typedef int (*SimpleCode)();
926 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 926 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
927 } 927 }
928 928
929 929
930 ASSEMBLER_TEST_GENERATE(Bgtzl, assembler) { 930 ASSEMBLER_TEST_GENERATE(Bgtzl, assembler) {
931 Label l; 931 Label l;
932 932
933 __ LoadImmediate(R5, 3); 933 __ LoadImmediate(T5, 3);
934 __ Bind(&l); 934 __ Bind(&l);
935 __ bgtzl(R5, &l); 935 __ bgtzl(T5, &l);
936 __ delay_slot()->addiu(R5, R5, Immediate(-1)); 936 __ delay_slot()->addiu(T5, T5, Immediate(-1));
937 __ ori(V0, R5, Immediate(0)); 937 __ ori(V0, T5, Immediate(0));
938 __ jr(RA); 938 __ jr(RA);
939 } 939 }
940 940
941 941
942 ASSEMBLER_TEST_RUN(Bgtzl, test) { 942 ASSEMBLER_TEST_RUN(Bgtzl, test) {
943 typedef int (*SimpleCode)(); 943 typedef int (*SimpleCode)();
944 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 944 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
945 } 945 }
946 946
947 947
948 ASSEMBLER_TEST_GENERATE(Bltz, assembler) { 948 ASSEMBLER_TEST_GENERATE(Bltz, assembler) {
949 Label l; 949 Label l;
950 950
951 __ LoadImmediate(R5, -3); 951 __ LoadImmediate(T5, -3);
952 __ Bind(&l); 952 __ Bind(&l);
953 __ bltz(R5, &l); 953 __ bltz(T5, &l);
954 __ delay_slot()->addiu(R5, R5, Immediate(1)); 954 __ delay_slot()->addiu(T5, T5, Immediate(1));
955 __ ori(V0, R5, Immediate(0)); 955 __ ori(V0, T5, Immediate(0));
956 __ jr(RA); 956 __ jr(RA);
957 } 957 }
958 958
959 959
960 ASSEMBLER_TEST_RUN(Bltz, test) { 960 ASSEMBLER_TEST_RUN(Bltz, test) {
961 typedef int (*SimpleCode)(); 961 typedef int (*SimpleCode)();
962 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 962 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
963 } 963 }
964 964
965 965
966 ASSEMBLER_TEST_GENERATE(Bltzl, assembler) { 966 ASSEMBLER_TEST_GENERATE(Bltzl, assembler) {
967 Label l; 967 Label l;
968 968
969 __ LoadImmediate(R5, -3); 969 __ LoadImmediate(T5, -3);
970 __ Bind(&l); 970 __ Bind(&l);
971 __ bltzl(R5, &l); 971 __ bltzl(T5, &l);
972 __ delay_slot()->addiu(R5, R5, Immediate(1)); 972 __ delay_slot()->addiu(T5, T5, Immediate(1));
973 __ ori(V0, R5, Immediate(0)); 973 __ ori(V0, T5, Immediate(0));
974 __ jr(RA); 974 __ jr(RA);
975 } 975 }
976 976
977 977
978 ASSEMBLER_TEST_RUN(Bltzl, test) { 978 ASSEMBLER_TEST_RUN(Bltzl, test) {
979 typedef int (*SimpleCode)(); 979 typedef int (*SimpleCode)();
980 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 980 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
981 } 981 }
982 982
983 983
984 ASSEMBLER_TEST_GENERATE(Bne, assembler) { 984 ASSEMBLER_TEST_GENERATE(Bne, assembler) {
985 Label l; 985 Label l;
986 986
987 __ LoadImmediate(R5, 3); 987 __ LoadImmediate(T5, 3);
988 __ Bind(&l); 988 __ Bind(&l);
989 __ bne(R5, R0, &l); 989 __ bne(T5, R0, &l);
990 __ delay_slot()->addiu(R5, R5, Immediate(-1)); 990 __ delay_slot()->addiu(T5, T5, Immediate(-1));
991 __ ori(V0, R5, Immediate(0)); 991 __ ori(V0, T5, Immediate(0));
992 __ jr(RA); 992 __ jr(RA);
993 } 993 }
994 994
995 995
996 ASSEMBLER_TEST_RUN(Bne, test) { 996 ASSEMBLER_TEST_RUN(Bne, test) {
997 typedef int (*SimpleCode)(); 997 typedef int (*SimpleCode)();
998 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 998 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
999 } 999 }
1000 1000
1001 1001
1002 ASSEMBLER_TEST_GENERATE(Bnel, assembler) { 1002 ASSEMBLER_TEST_GENERATE(Bnel, assembler) {
1003 Label l; 1003 Label l;
1004 1004
1005 __ LoadImmediate(R5, 3); 1005 __ LoadImmediate(T5, 3);
1006 __ Bind(&l); 1006 __ Bind(&l);
1007 __ bnel(R5, R0, &l); 1007 __ bnel(T5, R0, &l);
1008 __ delay_slot()->addiu(R5, R5, Immediate(-1)); 1008 __ delay_slot()->addiu(T5, T5, Immediate(-1));
1009 __ ori(V0, R5, Immediate(0)); 1009 __ ori(V0, T5, Immediate(0));
1010 __ jr(RA); 1010 __ jr(RA);
1011 } 1011 }
1012 1012
1013 1013
1014 ASSEMBLER_TEST_RUN(Bnel, test) { 1014 ASSEMBLER_TEST_RUN(Bnel, test) {
1015 typedef int (*SimpleCode)(); 1015 typedef int (*SimpleCode)();
1016 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1016 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1017 } 1017 }
1018 1018
1019 1019
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 } 1051 }
1052 1052
1053 1053
1054 ASSEMBLER_TEST_RUN(Label_link2, test) { 1054 ASSEMBLER_TEST_RUN(Label_link2, test) {
1055 typedef int (*SimpleCode)(); 1055 typedef int (*SimpleCode)();
1056 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1056 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1057 } 1057 }
1058 1058
1059 1059
1060 ASSEMBLER_TEST_GENERATE(Jalr_delay, assembler) { 1060 ASSEMBLER_TEST_GENERATE(Jalr_delay, assembler) {
1061 __ mov(R2, RA); 1061 __ mov(T2, RA);
1062 __ jalr(R2, RA); 1062 __ jalr(T2, RA);
1063 __ delay_slot()->ori(V0, ZR, Immediate(42)); 1063 __ delay_slot()->ori(V0, ZR, Immediate(42));
1064 } 1064 }
1065 1065
1066 1066
1067 ASSEMBLER_TEST_RUN(Jalr_delay, test) { 1067 ASSEMBLER_TEST_RUN(Jalr_delay, test) {
1068 typedef int (*SimpleCode)(); 1068 typedef int (*SimpleCode)();
1069 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1069 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1070 } 1070 }
1071 1071
1072 1072
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 A1); 1681 A1);
1682 __ lw(RA, Address(SP, 0 * kWordSize)); 1682 __ lw(RA, Address(SP, 0 * kWordSize));
1683 __ lw(CTX, Address(SP, 1 * kWordSize)); 1683 __ lw(CTX, Address(SP, 1 * kWordSize));
1684 __ addiu(SP, SP, Immediate(2 * kWordSize)); 1684 __ addiu(SP, SP, Immediate(2 * kWordSize));
1685 __ Ret(); 1685 __ Ret();
1686 } 1686 }
1687 1687
1688 } // namespace dart 1688 } // namespace dart
1689 1689
1690 #endif // defined TARGET_ARCH_MIPS 1690 #endif // defined TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « runtime/vm/assembler_mips.cc ('k') | runtime/vm/constants_mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698