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

Side by Side Diff: src/mips/constants-mips.h

Issue 1317253004: MIPS32: Simplify set of condition codes. Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_MIPS_CONSTANTS_H_ 5 #ifndef V8_MIPS_CONSTANTS_H_
6 #define V8_MIPS_CONSTANTS_H_ 6 #define V8_MIPS_CONSTANTS_H_
7 #include "src/globals.h" 7 #include "src/globals.h"
8 // UNIMPLEMENTED_ macro for MIPS. 8 // UNIMPLEMENTED_ macro for MIPS.
9 #ifdef DEBUG 9 #ifdef DEBUG
10 #define UNIMPLEMENTED_MIPS() \ 10 #define UNIMPLEMENTED_MIPS() \
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 601
602 // POP76 Encoding of rs Field. 602 // POP76 Encoding of rs Field.
603 JIALC = ((0 << 5) + 0), 603 JIALC = ((0 << 5) + 0),
604 604
605 NULLSF = 0 605 NULLSF = 0
606 }; 606 };
607 607
608 608
609 // ----- Emulated conditions. 609 // ----- Emulated conditions.
610 // On MIPS we use this enum to abstract from conditional branch instructions. 610 // On MIPS we use this enum to abstract from conditional branch instructions.
611 // The 'U' prefix is used to specify unsigned comparisons.
612 // Opposite conditions must be paired as odd/even numbers 611 // Opposite conditions must be paired as odd/even numbers
613 // because 'NegateCondition' function flips LSB to negate condition. 612 // because 'NegateCondition' function flips LSB to negate condition.
613 // CC values for any comparison involving equality has LS bit set.
614 // TODO(plind): remove unused conditions, and renumber.
614 enum Condition { 615 enum Condition {
615 // Any value < 0 is considered no_condition. 616 // Any value < 0 is considered no_condition.
616 kNoCondition = -1, 617 kNoCondition = -1,
617 overflow = 0, 618 // overflow = 0,
618 no_overflow = 1, 619 // no_overflow = 1,
619 Uless = 2, 620
620 Ugreater_equal = 3, 621 lo = 2, // Unsigned less than (lower)
621 Uless_equal = 4, 622 hs = 3, // Unsigned greater than or equal (higher or same).
622 Ugreater = 5, 623 hi = 4, // Unsigned greater than (higher).
623 equal = 6, 624 ls = 5, // Unsigned less than or equal (lower or same).
624 not_equal = 7, // Unordered or Not Equal. 625 ne = 6, // Unordered or Not Equal.
625 negative = 8, 626 eq = 7, // Equal.
626 positive = 9, 627 // mi = 8,
627 parity_even = 10, 628 // pl = 9,
628 parity_odd = 11, 629 // parity_even = 10,
629 less = 12, 630 // parity_odd = 11,
630 greater_equal = 13, 631 lt = 12, // Less than.
631 less_equal = 14, 632 ge = 13, // Great than or equal.
632 greater = 15, 633 gt = 14, // Greater than.
634 le = 15, // Less than or equal.
633 ueq = 16, // Unordered or Equal. 635 ueq = 16, // Unordered or Equal.
634 ogl = 17, // Ordered and Not Equal. 636 ogl = 17, // Ordered and Not Equal.
635 cc_always = 18, 637 cc_always = 18,
636 638
637 // Aliases. 639 // Aliases.
638 carry = Uless,
639 not_carry = Ugreater_equal,
640 zero = equal,
641 eq = equal,
642 not_zero = not_equal,
643 ne = not_equal,
644 nz = not_equal,
645 sign = negative,
646 not_sign = positive,
647 mi = negative,
648 pl = positive,
649 hi = Ugreater,
650 ls = Uless_equal,
651 ge = greater_equal,
652 lt = less,
653 gt = greater,
654 le = less_equal,
655 hs = Ugreater_equal,
656 lo = Uless,
657 al = cc_always, 640 al = cc_always,
658 ult = Uless, 641 nz = ne, // TODO(plind): consider deleting nz
659 uge = Ugreater_equal, 642
660 ule = Uless_equal, 643 // // TODO(plind): Currently unused aliases - delete.
661 ugt = Ugreater, 644 // carry = Uless,
645 // not_carry = Ugreater_equal,
646 // equal = eq,
647 // zero = equal,
648 // not_equal = ne,
649 // not_zero = not_equal,
650
651 // negative = mi,
652 // positive = pl,
653 // sign = negative,
654 // not_sign = positive,
655
656 // // TODO(plind): These aliases ARE used, and should likey be factored out.
657 Ugreater = hi,
658 Uless_equal = ls,
659 greater_equal = ge,
660 less = lt,
661 greater = gt,
662 less_equal = le,
663 Ugreater_equal = hs,
664 Uless = lo,
665
666 // TODO(plind): understand these aliases for FP, do we need them?
667 ult = lo,
668 uge = hs,
669 ule = ls,
670 ugt = hi,
671
662 cc_default = kNoCondition 672 cc_default = kNoCondition
663 }; 673 };
664 674
665 675
676 // Conditions are assigned so LSB is set for condition including equality.
677 inline bool ConditionIncludesEquality(Condition cc) {
678 DCHECK(cc != cc_always);
679 // TODO(plind): consider DCHECK to validate LSB set properly.
680 return (cc & 1);
681 }
682
paul.l... 2015/09/04 03:45:24 This function is no longer needed. I had thought t
balazs.kilvady 2015/09/04 09:27:45 I think the unsused function should be removed but
683
666 // Returns the equivalent of !cc. 684 // Returns the equivalent of !cc.
667 // Negation of the default kNoCondition (-1) results in a non-default 685 // Negation of the default kNoCondition (-1) results in a non-default
668 // no_condition value (-2). As long as tests for no_condition check 686 // no_condition value (-2). As long as tests for no_condition check
669 // for condition < 0, this will work as expected. 687 // for condition < 0, this will work as expected.
670 inline Condition NegateCondition(Condition cc) { 688 inline Condition NegateCondition(Condition cc) {
671 DCHECK(cc != cc_always); 689 DCHECK(cc != cc_always);
672 return static_cast<Condition>(cc ^ 1); 690 return static_cast<Condition>(cc ^ 1);
673 } 691 }
674 692
675 693
(...skipping 26 matching lines...) Expand all
702 return ueq; 720 return ueq;
703 default: 721 default:
704 return cc; 722 return cc;
705 } 723 }
706 } 724 }
707 725
708 726
709 // Commute a condition such that {a cond b == b cond' a}. 727 // Commute a condition such that {a cond b == b cond' a}.
710 inline Condition CommuteCondition(Condition cc) { 728 inline Condition CommuteCondition(Condition cc) {
711 switch (cc) { 729 switch (cc) {
712 case Uless: 730 case lo:
713 return Ugreater; 731 return hi;
714 case Ugreater: 732 case hi:
715 return Uless; 733 return lo;
716 case Ugreater_equal: 734 case hs:
717 return Uless_equal; 735 return ls;
718 case Uless_equal: 736 case ls:
719 return Ugreater_equal; 737 return hs;
720 case less: 738 case lt:
721 return greater; 739 return gt;
722 case greater: 740 case gt:
723 return less; 741 return lt;
724 case greater_equal: 742 case ge:
725 return less_equal; 743 return le;
726 case less_equal: 744 case le:
727 return greater_equal; 745 return ge;
728 default: 746 default:
729 return cc; 747 return cc;
730 } 748 }
731 } 749 }
732 750
733 751
734 // ----- Coprocessor conditions. 752 // ----- Coprocessor conditions.
735 enum FPUCondition { 753 enum FPUCondition {
736 kNoFPUCondition = -1, 754 kNoFPUCondition = -1,
737 755
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 // JS argument slots size. 1058 // JS argument slots size.
1041 const int kJSArgsSlotsSize = 0 * Instruction::kInstrSize; 1059 const int kJSArgsSlotsSize = 0 * Instruction::kInstrSize;
1042 // Assembly builtins argument slots size. 1060 // Assembly builtins argument slots size.
1043 const int kBArgsSlotsSize = 0 * Instruction::kInstrSize; 1061 const int kBArgsSlotsSize = 0 * Instruction::kInstrSize;
1044 1062
1045 const int kBranchReturnOffset = 2 * Instruction::kInstrSize; 1063 const int kBranchReturnOffset = 2 * Instruction::kInstrSize;
1046 1064
1047 } } // namespace v8::internal 1065 } } // namespace v8::internal
1048 1066
1049 #endif // #ifndef V8_MIPS_CONSTANTS_H_ 1067 #endif // #ifndef V8_MIPS_CONSTANTS_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698