| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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" // Needed here to get TARGET_ARCH_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
| 6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/intrinsifier.h" | 8 #include "vm/intrinsifier.h" |
| 9 | 9 |
| 10 #include "vm/assembler.h" | 10 #include "vm/assembler.h" |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 return false; | 488 return false; |
| 489 } | 489 } |
| 490 | 490 |
| 491 | 491 |
| 492 bool Intrinsifier::Integer_add(Assembler* assembler) { | 492 bool Intrinsifier::Integer_add(Assembler* assembler) { |
| 493 return false; | 493 return false; |
| 494 } | 494 } |
| 495 | 495 |
| 496 | 496 |
| 497 bool Intrinsifier::Integer_subFromInteger(Assembler* assembler) { | 497 bool Intrinsifier::Integer_subFromInteger(Assembler* assembler) { |
| 498 Label fall_through; |
| 499 TestBothArgumentsSmis(assembler, &fall_through); |
| 500 // RAX contains right argument, which is the actual minuend of subtraction. |
| 501 __ subq(RAX, Address(RSP, + 2 * kWordSize)); |
| 502 __ j(OVERFLOW, &fall_through, Assembler::kNearJump); |
| 503 // Result is in RAX. |
| 504 __ ret(); |
| 505 __ Bind(&fall_through); |
| 498 return false; | 506 return false; |
| 499 } | 507 } |
| 500 | 508 |
| 501 | 509 |
| 502 bool Intrinsifier::Integer_sub(Assembler* assembler) { | 510 bool Intrinsifier::Integer_sub(Assembler* assembler) { |
| 503 return false; | 511 return false; |
| 504 } | 512 } |
| 505 | 513 |
| 506 | 514 |
| 507 | 515 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 bool Intrinsifier::Integer_bitXor(Assembler* assembler) { | 595 bool Intrinsifier::Integer_bitXor(Assembler* assembler) { |
| 588 return false; | 596 return false; |
| 589 } | 597 } |
| 590 | 598 |
| 591 | 599 |
| 592 bool Intrinsifier::Integer_shl(Assembler* assembler) { | 600 bool Intrinsifier::Integer_shl(Assembler* assembler) { |
| 593 return false; | 601 return false; |
| 594 } | 602 } |
| 595 | 603 |
| 596 | 604 |
| 597 bool Intrinsifier::Integer_lessThan(Assembler* assembler) { | 605 static bool CompareIntegers(Assembler* assembler, Condition true_condition) { |
| 606 Label fall_through, true_label; |
| 607 const Bool& bool_true = Bool::ZoneHandle(Bool::True()); |
| 608 const Bool& bool_false = Bool::ZoneHandle(Bool::False()); |
| 609 TestBothArgumentsSmis(assembler, &fall_through); |
| 610 // RAX contains the right argument. |
| 611 __ cmpq(Address(RSP, + 2 * kWordSize), RAX); |
| 612 __ j(true_condition, &true_label, Assembler::kNearJump); |
| 613 __ LoadObject(RAX, bool_false); |
| 614 __ ret(); |
| 615 __ Bind(&true_label); |
| 616 __ LoadObject(RAX, bool_true); |
| 617 __ ret(); |
| 618 __ Bind(&fall_through); |
| 598 return false; | 619 return false; |
| 599 } | 620 } |
| 600 | 621 |
| 601 | 622 |
| 623 |
| 624 bool Intrinsifier::Integer_lessThan(Assembler* assembler) { |
| 625 return CompareIntegers(assembler, LESS); |
| 626 } |
| 627 |
| 628 |
| 602 bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) { | 629 bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) { |
| 603 return false; | 630 return CompareIntegers(assembler, LESS); |
| 604 } | 631 } |
| 605 | 632 |
| 606 | 633 |
| 607 bool Intrinsifier::Integer_greaterThan(Assembler* assembler) { | 634 bool Intrinsifier::Integer_greaterThan(Assembler* assembler) { |
| 608 return false; | 635 return CompareIntegers(assembler, GREATER); |
| 609 } | 636 } |
| 610 | 637 |
| 611 | 638 |
| 612 bool Intrinsifier::Integer_lessEqualThan(Assembler* assembler) { | 639 bool Intrinsifier::Integer_lessEqualThan(Assembler* assembler) { |
| 613 return false; | 640 return CompareIntegers(assembler, LESS_EQUAL); |
| 614 } | 641 } |
| 615 | 642 |
| 616 | 643 |
| 617 bool Intrinsifier::Integer_greaterEqualThan(Assembler* assembler) { | 644 bool Intrinsifier::Integer_greaterEqualThan(Assembler* assembler) { |
| 618 return false; | 645 return CompareIntegers(assembler, GREATER_EQUAL); |
| 619 } | 646 } |
| 620 | 647 |
| 621 | 648 |
| 622 bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) { | 649 bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
| 623 return false; | 650 return false; |
| 624 } | 651 } |
| 625 | 652 |
| 626 | 653 |
| 627 bool Intrinsifier::Integer_equal(Assembler* assembler) { | 654 bool Intrinsifier::Integer_equal(Assembler* assembler) { |
| 628 return false; | 655 return false; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 | 799 |
| 773 bool Intrinsifier::String_isEmpty(Assembler* assembler) { | 800 bool Intrinsifier::String_isEmpty(Assembler* assembler) { |
| 774 return false; | 801 return false; |
| 775 } | 802 } |
| 776 | 803 |
| 777 #undef __ | 804 #undef __ |
| 778 | 805 |
| 779 } // namespace dart | 806 } // namespace dart |
| 780 | 807 |
| 781 #endif // defined TARGET_ARCH_X64 | 808 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |