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

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

Issue 12837009: Adds MIPS SPECIAL instructions to simulator, assembler, debugger. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 9 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
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"
11 #include "vm/virtual_memory.h" 11 #include "vm/virtual_memory.h"
12 12
13 namespace dart { 13 namespace dart {
14 14
15 #define __ assembler-> 15 #define __ assembler->
16 16
17 ASSEMBLER_TEST_GENERATE(Simple, assembler) {
18 __ LoadImmediate(V0, 42);
19 __ jr(RA);
20 }
21
22
23 ASSEMBLER_TEST_RUN(Simple, test) {
24 typedef int (*SimpleCode)();
25 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
26 }
27
17 28
18 ASSEMBLER_TEST_GENERATE(Addiu, assembler) { 29 ASSEMBLER_TEST_GENERATE(Addiu, assembler) {
19 __ addiu(V0, ZR, Immediate(42)); 30 __ addiu(V0, ZR, Immediate(42));
20 __ jr(RA); 31 __ jr(RA);
21 } 32 }
22 33
23 34
24 ASSEMBLER_TEST_RUN(Addiu, test) { 35 ASSEMBLER_TEST_RUN(Addiu, test) {
25 typedef int (*SimpleCode)(); 36 typedef int (*SimpleCode)();
26 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 37 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 __ jr(RA); 326 __ jr(RA);
316 } 327 }
317 328
318 329
319 ASSEMBLER_TEST_RUN(Lui, test) { 330 ASSEMBLER_TEST_RUN(Lui, test) {
320 typedef int (*SimpleCode)(); 331 typedef int (*SimpleCode)();
321 EXPECT_EQ(42 << 16, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 332 EXPECT_EQ(42 << 16, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
322 } 333 }
323 334
324 335
325 ASSEMBLER_TEST_GENERATE(Simple, assembler) { 336 ASSEMBLER_TEST_GENERATE(Sll, assembler) {
337 __ LoadImmediate(R1, 21);
338 __ sll(V0, R1, 1);
339 __ jr(RA);
340 }
341
342
343 ASSEMBLER_TEST_RUN(Sll, test) {
344 typedef int (*SimpleCode)();
345 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
346 }
347
348
349 ASSEMBLER_TEST_GENERATE(Srl, assembler) {
350 __ LoadImmediate(R1, 84);
351 __ srl(V0, R1, 1);
352 __ jr(RA);
353 }
354
355
356 ASSEMBLER_TEST_RUN(Srl, test) {
357 typedef int (*SimpleCode)();
358 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
359 }
360
361
362 ASSEMBLER_TEST_GENERATE(LShifting, assembler) {
363 __ LoadImmediate(R1, 1);
364 __ sll(R1, R1, 31);
365 __ srl(V0, R1, 31);
366 __ jr(RA);
367 }
368
369
370 ASSEMBLER_TEST_RUN(LShifting, test) {
371 typedef int (*SimpleCode)();
372 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
373 }
374
375
376 ASSEMBLER_TEST_GENERATE(RShifting, assembler) {
377 __ LoadImmediate(R1, 1);
378 __ sll(R1, R1, 31);
379 __ sra(V0, R1, 31);
380 __ jr(RA);
381 }
382
383
384 ASSEMBLER_TEST_RUN(RShifting, test) {
385 typedef int (*SimpleCode)();
386 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
387 }
388
389
390 ASSEMBLER_TEST_GENERATE(Sllv, assembler) {
391 __ LoadImmediate(R1, 21);
392 __ LoadImmediate(R2, 1);
393 __ sllv(V0, R1, R2);
394 __ jr(RA);
395 }
396
397
398 ASSEMBLER_TEST_RUN(Sllv, test) {
399 typedef int (*SimpleCode)();
400 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
401 }
402
403
404 ASSEMBLER_TEST_GENERATE(Srlv, assembler) {
405 __ LoadImmediate(R1, 84);
406 __ LoadImmediate(R2, 1);
407 __ srlv(V0, R1, R2);
408 __ jr(RA);
409 }
410
411
412 ASSEMBLER_TEST_RUN(Srlv, test) {
413 typedef int (*SimpleCode)();
414 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
415 }
416
417
418 ASSEMBLER_TEST_GENERATE(LShiftingV, assembler) {
419 __ LoadImmediate(R1, 1);
420 __ LoadImmediate(R2, 31);
421 __ sllv(R1, R1, R2);
422 __ srlv(V0, R1, R2);
423 __ jr(RA);
424 }
425
426
427 ASSEMBLER_TEST_RUN(LShiftingV, test) {
428 typedef int (*SimpleCode)();
429 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
430 }
431
432
433 ASSEMBLER_TEST_GENERATE(RShiftingV, assembler) {
434 __ LoadImmediate(R1, 1);
435 __ LoadImmediate(R2, 31);
436 __ sllv(R1, R1, R2);
437 __ srav(V0, R1, R2);
438 __ jr(RA);
439 }
440
441
442 ASSEMBLER_TEST_RUN(RShiftingV, test) {
443 typedef int (*SimpleCode)();
444 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
445 }
446
447
448 ASSEMBLER_TEST_GENERATE(Mult_pos, assembler) {
449 __ LoadImmediate(R1, 6);
450 __ LoadImmediate(R2, 7);
451 __ mult(R1, R2);
452 __ mflo(V0);
453 __ jr(RA);
454 }
455
456
457 ASSEMBLER_TEST_RUN(Mult_pos, test) {
458 typedef int (*SimpleCode)();
459 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
460 }
461
462
463 ASSEMBLER_TEST_GENERATE(Mult_neg, assembler) {
464 __ LoadImmediate(R1, -6);
465 __ LoadImmediate(R2, 7);
466 __ mult(R1, R2);
467 __ mflo(V0);
468 __ jr(RA);
469 }
470
471
472 ASSEMBLER_TEST_RUN(Mult_neg, test) {
473 typedef int (*SimpleCode)();
474 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
475 }
476
477
478 ASSEMBLER_TEST_GENERATE(Mult_neg_hi, assembler) {
479 __ LoadImmediate(R1, -6);
480 __ LoadImmediate(R2, 7);
481 __ mult(R1, R2);
482 __ mfhi(V0);
483 __ jr(RA);
484 }
485
486
487 ASSEMBLER_TEST_RUN(Mult_neg_hi, test) {
488 typedef int (*SimpleCode)();
489 EXPECT_EQ(-1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
490 }
491
492
493 ASSEMBLER_TEST_GENERATE(Multu_lo, assembler) {
494 __ LoadImmediate(R1, 6);
495 __ LoadImmediate(R2, 7);
496 __ multu(R1, R2);
497 __ mflo(V0);
498 __ jr(RA);
499 }
500
501
502 ASSEMBLER_TEST_RUN(Multu_lo, test) {
503 typedef int (*SimpleCode)();
504 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
505 }
506
507
508 ASSEMBLER_TEST_GENERATE(Multu_hi, assembler) {
509 __ LoadImmediate(R1, 65536);
510 __ LoadImmediate(R2, 65536);
511 __ multu(R1, R2);
512 __ mfhi(V0);
513 __ jr(RA);
514 }
515
516
517 ASSEMBLER_TEST_RUN(Multu_hi, test) {
518 typedef int (*SimpleCode)();
519 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
520 }
521
522
523 ASSEMBLER_TEST_GENERATE(Subu, assembler) {
524 __ LoadImmediate(R1, 737);
525 __ LoadImmediate(R2, 695);
526 __ subu(V0, R1, R2);
527 __ jr(RA);
528 }
529
530
531 ASSEMBLER_TEST_RUN(Subu, test) {
532 typedef int (*SimpleCode)();
533 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
534 }
535
536
537 ASSEMBLER_TEST_GENERATE(Or, assembler) {
538 __ LoadImmediate(R1, 34);
539 __ LoadImmediate(R2, 8);
540 __ or_(V0, R1, R2);
541 __ jr(RA);
542 }
543
544
545 ASSEMBLER_TEST_RUN(Or, test) {
546 typedef int (*SimpleCode)();
547 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
548 }
549
550
551 ASSEMBLER_TEST_GENERATE(Nor, assembler) {
552 __ LoadImmediate(R1, -47);
553 __ LoadImmediate(R2, -60);
554 __ nor(V0, R1, R2);
555 __ jr(RA);
556 }
557
558
559 ASSEMBLER_TEST_RUN(Nor, test) {
560 typedef int (*SimpleCode)();
561 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
562 }
563
564
565 ASSEMBLER_TEST_GENERATE(Xor, assembler) {
566 __ LoadImmediate(R1, 51);
567 __ LoadImmediate(R2, 25);
568 __ xor_(V0, R1, R2);
569 __ jr(RA);
570 }
571
572
573 ASSEMBLER_TEST_RUN(Xor, test) {
574 typedef int (*SimpleCode)();
575 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
576 }
577
578
579 ASSEMBLER_TEST_GENERATE(Slt, assembler) {
580 __ LoadImmediate(R1, -1);
581 __ LoadImmediate(R2, 0);
582 __ slt(V0, R1, R2);
583 __ jr(RA);
584 }
585
586
587 ASSEMBLER_TEST_RUN(Slt, test) {
588 typedef int (*SimpleCode)();
589 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
590 }
591
592
593 ASSEMBLER_TEST_GENERATE(Sltu, assembler) {
594 __ LoadImmediate(R1, -1);
595 __ LoadImmediate(R2, 0);
596 __ sltu(V0, R1, R2);
597 __ jr(RA);
598 }
599
600
601 ASSEMBLER_TEST_RUN(Sltu, test) {
602 typedef int (*SimpleCode)();
603 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
604 }
605
606
607 ASSEMBLER_TEST_GENERATE(Movz, assembler) {
608 __ LoadImmediate(R1, 42);
609 __ LoadImmediate(R2, 23);
610 __ slt(R3, R1, R2);
611 __ movz(V0, R1, R3);
612 __ jr(RA);
613 }
614
615
616 ASSEMBLER_TEST_RUN(Movz, test) {
617 typedef int (*SimpleCode)();
618 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
619 }
620
621
622 ASSEMBLER_TEST_GENERATE(Movn, assembler) {
623 __ LoadImmediate(R1, 42);
624 __ LoadImmediate(R2, 23);
625 __ slt(R3, R2, R1);
626 __ movn(V0, R1, R3);
627 __ jr(RA);
628 }
629
630
631 ASSEMBLER_TEST_RUN(Movn, test) {
632 typedef int (*SimpleCode)();
633 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
634 }
635
636
637 ASSEMBLER_TEST_GENERATE(Jr_delay, assembler) {
326 __ jr(RA); 638 __ jr(RA);
327 __ delay_slot()->ori(V0, ZR, Immediate(42)); 639 __ delay_slot()->ori(V0, ZR, Immediate(42));
328 } 640 }
329 641
330 642
331 ASSEMBLER_TEST_RUN(Simple, test) { 643 ASSEMBLER_TEST_RUN(Jr_delay, test) {
644 typedef int (*SimpleCode)();
645 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
646 }
647
648
649 ASSEMBLER_TEST_GENERATE(Jalr_delay, assembler) {
650 __ Mov(R2, RA);
651 __ jalr(R2);
Ivan Posva 2013/03/20 01:54:51 Why are you not using RA here?
zra 2013/03/20 15:53:50 For jalr, rs and rd can't be the same. So, you can
652 __ delay_slot()->ori(V0, ZR, Immediate(42));
653 }
654
655
656 ASSEMBLER_TEST_RUN(Jalr_delay, test) {
332 typedef int (*SimpleCode)(); 657 typedef int (*SimpleCode)();
333 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 658 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
334 } 659 }
335 660
336 } // namespace dart 661 } // namespace dart
337 662
338 #endif // defined TARGET_ARCH_MIPS 663 #endif // defined TARGET_ARCH_MIPS
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698