| OLD | NEW |
| 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 Loading... |
| 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 __ Move(R2, RA); |
| 651 __ jalr(R2, RA); |
| 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 |
| OLD | NEW |