OLD | NEW |
1 // | 1 // |
2 // The Subzero Code Generator | 2 // The Subzero Code Generator |
3 // | 3 // |
4 // This file is distributed under the University of Illinois Open Source | 4 // This file is distributed under the University of Illinois Open Source |
5 // License. See LICENSE.TXT for details. | 5 // License. See LICENSE.TXT for details. |
6 // | 6 // |
7 //===----------------------------------------------------------------------===// | 7 //===----------------------------------------------------------------------===// |
8 /// | 8 /// |
9 /// \file | 9 /// \file |
10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost | 10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 lowerInt64Arithmetic(Instr, Instr->getDest(), Src0, Src1); | 685 lowerInt64Arithmetic(Instr, Instr->getDest(), Src0, Src1); |
686 return; | 686 return; |
687 } | 687 } |
688 if (isVectorType(Dest->getType())) { | 688 if (isVectorType(Dest->getType())) { |
689 UnimplementedLoweringError(this, Instr); | 689 UnimplementedLoweringError(this, Instr); |
690 return; | 690 return; |
691 } | 691 } |
692 switch (Instr->getOp()) { | 692 switch (Instr->getOp()) { |
693 default: | 693 default: |
694 break; | 694 break; |
695 case InstArithmetic::Udiv: | |
696 case InstArithmetic::Sdiv: | |
697 case InstArithmetic::Urem: | |
698 case InstArithmetic::Srem: | |
699 case InstArithmetic::Fadd: | 695 case InstArithmetic::Fadd: |
700 case InstArithmetic::Fsub: | 696 case InstArithmetic::Fsub: |
701 case InstArithmetic::Fmul: | 697 case InstArithmetic::Fmul: |
702 case InstArithmetic::Fdiv: | 698 case InstArithmetic::Fdiv: |
703 case InstArithmetic::Frem: | 699 case InstArithmetic::Frem: |
704 UnimplementedLoweringError(this, Instr); | 700 UnimplementedLoweringError(this, Instr); |
705 return; | 701 return; |
706 } | 702 } |
707 | 703 |
708 // At this point Dest->getType() is non-i64 scalar | 704 // At this point Dest->getType() is non-i64 scalar |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 case InstArithmetic::Lshr: { | 743 case InstArithmetic::Lshr: { |
748 _srlv(T, Src0R, Src1R); | 744 _srlv(T, Src0R, Src1R); |
749 _mov(Dest, T); | 745 _mov(Dest, T); |
750 return; | 746 return; |
751 } | 747 } |
752 case InstArithmetic::Ashr: { | 748 case InstArithmetic::Ashr: { |
753 _srav(T, Src0R, Src1R); | 749 _srav(T, Src0R, Src1R); |
754 _mov(Dest, T); | 750 _mov(Dest, T); |
755 return; | 751 return; |
756 } | 752 } |
757 case InstArithmetic::Udiv: | 753 case InstArithmetic::Udiv: { |
758 break; | 754 auto *T_Zero = I32Reg(RegMIPS32::Reg_ZERO); |
759 case InstArithmetic::Sdiv: | 755 _divu(T_Zero, Src0R, Src1R); |
760 break; | 756 _mflo(T, T_Zero); |
761 case InstArithmetic::Urem: | 757 _mov(Dest, T); |
762 break; | 758 return; |
763 case InstArithmetic::Srem: | 759 } |
764 break; | 760 case InstArithmetic::Sdiv: { |
| 761 auto *T_Zero = I32Reg(RegMIPS32::Reg_ZERO); |
| 762 _div(T_Zero, Src0R, Src1R); |
| 763 _mflo(T, T_Zero); |
| 764 _mov(Dest, T); |
| 765 return; |
| 766 } |
| 767 case InstArithmetic::Urem: { |
| 768 auto *T_Zero = I32Reg(RegMIPS32::Reg_ZERO); |
| 769 _divu(T_Zero, Src0R, Src1R); |
| 770 _mfhi(T, T_Zero); |
| 771 _mov(Dest, T); |
| 772 return; |
| 773 } |
| 774 case InstArithmetic::Srem: { |
| 775 auto *T_Zero = I32Reg(RegMIPS32::Reg_ZERO); |
| 776 _div(T_Zero, Src0R, Src1R); |
| 777 _mfhi(T, T_Zero); |
| 778 _mov(Dest, T); |
| 779 return; |
| 780 } |
765 case InstArithmetic::Fadd: | 781 case InstArithmetic::Fadd: |
766 break; | 782 break; |
767 case InstArithmetic::Fsub: | 783 case InstArithmetic::Fsub: |
768 break; | 784 break; |
769 case InstArithmetic::Fmul: | 785 case InstArithmetic::Fmul: |
770 break; | 786 break; |
771 case InstArithmetic::Fdiv: | 787 case InstArithmetic::Fdiv: |
772 break; | 788 break; |
773 case InstArithmetic::Frem: | 789 case InstArithmetic::Frem: |
774 break; | 790 break; |
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1486 Str << "\t.set\t" | 1502 Str << "\t.set\t" |
1487 << "nomips16\n"; | 1503 << "nomips16\n"; |
1488 } | 1504 } |
1489 | 1505 |
1490 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; | 1506 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; |
1491 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; | 1507 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; |
1492 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; | 1508 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; |
1493 | 1509 |
1494 } // end of namespace MIPS32 | 1510 } // end of namespace MIPS32 |
1495 } // end of namespace Ice | 1511 } // end of namespace Ice |
OLD | NEW |