Chromium Code Reviews| 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); | |
|
siva
2012/07/10 01:03:00
probably document
// RAX contains ....
like the do
srdjan
2012/07/10 01:11:29
Done.
| |
| 500 __ subq(RAX, Address(RSP, + 2 * kWordSize)); | |
| 501 __ j(OVERFLOW, &fall_through, Assembler::kNearJump); | |
| 502 // Result is in RAX. | |
| 503 __ ret(); | |
| 504 __ Bind(&fall_through); | |
| 498 return false; | 505 return false; |
| 499 } | 506 } |
| 500 | 507 |
| 501 | 508 |
| 502 bool Intrinsifier::Integer_sub(Assembler* assembler) { | 509 bool Intrinsifier::Integer_sub(Assembler* assembler) { |
| 503 return false; | 510 return false; |
| 504 } | 511 } |
| 505 | 512 |
| 506 | 513 |
| 507 | 514 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 587 bool Intrinsifier::Integer_bitXor(Assembler* assembler) { | 594 bool Intrinsifier::Integer_bitXor(Assembler* assembler) { |
| 588 return false; | 595 return false; |
| 589 } | 596 } |
| 590 | 597 |
| 591 | 598 |
| 592 bool Intrinsifier::Integer_shl(Assembler* assembler) { | 599 bool Intrinsifier::Integer_shl(Assembler* assembler) { |
| 593 return false; | 600 return false; |
| 594 } | 601 } |
| 595 | 602 |
| 596 | 603 |
| 597 bool Intrinsifier::Integer_lessThan(Assembler* assembler) { | 604 static bool CompareIntegers(Assembler* assembler, Condition true_condition) { |
| 605 Label fall_through, true_label; | |
| 606 const Bool& bool_true = Bool::ZoneHandle(Bool::True()); | |
| 607 const Bool& bool_false = Bool::ZoneHandle(Bool::False()); | |
| 608 TestBothArgumentsSmis(assembler, &fall_through); | |
| 609 // RAX contains the right argument. | |
| 610 __ cmpq(Address(RSP, + 2 * kWordSize), RAX); | |
| 611 __ j(true_condition, &true_label, Assembler::kNearJump); | |
| 612 __ LoadObject(RAX, bool_false); | |
| 613 __ ret(); | |
| 614 __ Bind(&true_label); | |
| 615 __ LoadObject(RAX, bool_true); | |
| 616 __ ret(); | |
| 617 __ Bind(&fall_through); | |
| 598 return false; | 618 return false; |
| 599 } | 619 } |
| 600 | 620 |
| 601 | 621 |
| 622 | |
| 623 bool Intrinsifier::Integer_lessThan(Assembler* assembler) { | |
| 624 return CompareIntegers(assembler, LESS); | |
| 625 } | |
| 626 | |
| 627 | |
| 602 bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) { | 628 bool Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) { |
| 603 return false; | 629 return CompareIntegers(assembler, LESS); |
| 604 } | 630 } |
| 605 | 631 |
| 606 | 632 |
| 607 bool Intrinsifier::Integer_greaterThan(Assembler* assembler) { | 633 bool Intrinsifier::Integer_greaterThan(Assembler* assembler) { |
| 608 return false; | 634 return CompareIntegers(assembler, GREATER); |
| 609 } | 635 } |
| 610 | 636 |
| 611 | 637 |
| 612 bool Intrinsifier::Integer_lessEqualThan(Assembler* assembler) { | 638 bool Intrinsifier::Integer_lessEqualThan(Assembler* assembler) { |
| 613 return false; | 639 return CompareIntegers(assembler, LESS_EQUAL); |
| 614 } | 640 } |
| 615 | 641 |
| 616 | 642 |
| 617 bool Intrinsifier::Integer_greaterEqualThan(Assembler* assembler) { | 643 bool Intrinsifier::Integer_greaterEqualThan(Assembler* assembler) { |
| 618 return false; | 644 return CompareIntegers(assembler, GREATER_EQUAL); |
| 619 } | 645 } |
| 620 | 646 |
| 621 | 647 |
| 622 bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) { | 648 bool Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
| 623 return false; | 649 return false; |
| 624 } | 650 } |
| 625 | 651 |
| 626 | 652 |
| 627 bool Intrinsifier::Integer_equal(Assembler* assembler) { | 653 bool Intrinsifier::Integer_equal(Assembler* assembler) { |
| 628 return false; | 654 return false; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 772 | 798 |
| 773 bool Intrinsifier::String_isEmpty(Assembler* assembler) { | 799 bool Intrinsifier::String_isEmpty(Assembler* assembler) { |
| 774 return false; | 800 return false; |
| 775 } | 801 } |
| 776 | 802 |
| 777 #undef __ | 803 #undef __ |
| 778 | 804 |
| 779 } // namespace dart | 805 } // namespace dart |
| 780 | 806 |
| 781 #endif // defined TARGET_ARCH_X64 | 807 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |