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

Side by Side Diff: src/IceTargetLoweringMIPS32.cpp

Issue 1661233002: Subzero: Prototype to simplify makereg calls (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: changes suggested by stichnot Created 4 years, 10 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 | « src/IceTargetLoweringMIPS32.h ('k') | 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 //===- subzero/src/IceTargetLoweringMIPS32.cpp - MIPS32 lowering ----------===// 1 //===- subzero/src/IceTargetLoweringMIPS32.cpp - MIPS32 lowering ----------===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 Variable *Src0LoR = legalizeToReg(loOperand(Src0)); 592 Variable *Src0LoR = legalizeToReg(loOperand(Src0));
593 Variable *Src1LoR = legalizeToReg(loOperand(Src1)); 593 Variable *Src1LoR = legalizeToReg(loOperand(Src1));
594 Variable *Src0HiR = legalizeToReg(hiOperand(Src0)); 594 Variable *Src0HiR = legalizeToReg(hiOperand(Src0));
595 Variable *Src1HiR = legalizeToReg(hiOperand(Src1)); 595 Variable *Src1HiR = legalizeToReg(hiOperand(Src1));
596 596
597 switch (Op) { 597 switch (Op) {
598 case InstArithmetic::_num: 598 case InstArithmetic::_num:
599 llvm::report_fatal_error("Unknown arithmetic operator"); 599 llvm::report_fatal_error("Unknown arithmetic operator");
600 return; 600 return;
601 case InstArithmetic::Add: { 601 case InstArithmetic::Add: {
602 Variable *T_Carry = makeReg(IceType_i32); 602 auto *T_Carry = I32Reg(), *T_Lo = I32Reg(), *T_Hi = I32Reg(),
603 Variable *T_Lo = makeReg(IceType_i32); 603 *T_Hi2 = I32Reg();
604 Variable *T_Hi = makeReg(IceType_i32);
605 Variable *T_Hi2 = makeReg(IceType_i32);
606 _addu(T_Lo, Src0LoR, Src1LoR); 604 _addu(T_Lo, Src0LoR, Src1LoR);
607 _mov(DestLo, T_Lo); 605 _mov(DestLo, T_Lo);
608 _sltu(T_Carry, T_Lo, Src0LoR); 606 _sltu(T_Carry, T_Lo, Src0LoR);
609 _addu(T_Hi, T_Carry, Src0HiR); 607 _addu(T_Hi, T_Carry, Src0HiR);
610 _addu(T_Hi2, Src1HiR, T_Hi); 608 _addu(T_Hi2, Src1HiR, T_Hi);
611 _mov(DestHi, T_Hi2); 609 _mov(DestHi, T_Hi2);
612 return; 610 return;
613 } 611 }
614 case InstArithmetic::And: { 612 case InstArithmetic::And: {
615 Variable *T_Lo = makeReg(IceType_i32); 613 auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
616 Variable *T_Hi = makeReg(IceType_i32);
617 _and(T_Lo, Src0LoR, Src1LoR); 614 _and(T_Lo, Src0LoR, Src1LoR);
618 _mov(DestLo, T_Lo); 615 _mov(DestLo, T_Lo);
619 _and(T_Hi, Src0HiR, Src1HiR); 616 _and(T_Hi, Src0HiR, Src1HiR);
620 _mov(DestHi, T_Hi); 617 _mov(DestHi, T_Hi);
621 return; 618 return;
622 } 619 }
623 case InstArithmetic::Sub: { 620 case InstArithmetic::Sub: {
624 Variable *T_Borrow = makeReg(IceType_i32); 621 auto *T_Borrow = I32Reg(), *T_Lo = I32Reg(), *T_Hi = I32Reg(),
625 Variable *T_Lo = makeReg(IceType_i32); 622 *T_Hi2 = I32Reg();
626 Variable *T_Hi = makeReg(IceType_i32);
627 Variable *T_Hi2 = makeReg(IceType_i32);
628 _subu(T_Lo, Src0LoR, Src1LoR); 623 _subu(T_Lo, Src0LoR, Src1LoR);
629 _mov(DestLo, T_Lo); 624 _mov(DestLo, T_Lo);
630 _sltu(T_Borrow, Src0LoR, Src1LoR); 625 _sltu(T_Borrow, Src0LoR, Src1LoR);
631 _addu(T_Hi, T_Borrow, Src1HiR); 626 _addu(T_Hi, T_Borrow, Src1HiR);
632 _subu(T_Hi2, Src0HiR, T_Hi); 627 _subu(T_Hi2, Src0HiR, T_Hi);
633 _mov(DestHi, T_Hi2); 628 _mov(DestHi, T_Hi2);
634 return; 629 return;
635 } 630 }
636 case InstArithmetic::Or: { 631 case InstArithmetic::Or: {
637 Variable *T_Lo = makeReg(IceType_i32); 632 auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
638 Variable *T_Hi = makeReg(IceType_i32);
639 _or(T_Lo, Src0LoR, Src1LoR); 633 _or(T_Lo, Src0LoR, Src1LoR);
640 _mov(DestLo, T_Lo); 634 _mov(DestLo, T_Lo);
641 _or(T_Hi, Src0HiR, Src1HiR); 635 _or(T_Hi, Src0HiR, Src1HiR);
642 _mov(DestHi, T_Hi); 636 _mov(DestHi, T_Hi);
643 return; 637 return;
644 } 638 }
645 case InstArithmetic::Xor: { 639 case InstArithmetic::Xor: {
646 Variable *T_Lo = makeReg(IceType_i32); 640 auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
647 Variable *T_Hi = makeReg(IceType_i32);
648 _xor(T_Lo, Src0LoR, Src1LoR); 641 _xor(T_Lo, Src0LoR, Src1LoR);
649 _mov(DestLo, T_Lo); 642 _mov(DestLo, T_Lo);
650 _xor(T_Hi, Src0HiR, Src1HiR); 643 _xor(T_Hi, Src0HiR, Src1HiR);
651 _mov(DestHi, T_Hi); 644 _mov(DestHi, T_Hi);
652 return; 645 return;
653 } 646 }
654 default: 647 default:
655 UnimplementedLoweringError(this, Instr); 648 UnimplementedLoweringError(this, Instr);
656 return; 649 return;
657 } 650 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 Variable *Dest = Instr->getDest(); 751 Variable *Dest = Instr->getDest();
759 Operand *Src0 = Instr->getSrc(0); 752 Operand *Src0 = Instr->getSrc(0);
760 assert(Dest->getType() == Src0->getType()); 753 assert(Dest->getType() == Src0->getType());
761 if (Dest->getType() == IceType_i64) { 754 if (Dest->getType() == IceType_i64) {
762 Src0 = legalizeUndef(Src0); 755 Src0 = legalizeUndef(Src0);
763 Operand *Src0Lo = legalize(loOperand(Src0), Legal_Reg); 756 Operand *Src0Lo = legalize(loOperand(Src0), Legal_Reg);
764 Operand *Src0Hi = legalize(hiOperand(Src0), Legal_Reg); 757 Operand *Src0Hi = legalize(hiOperand(Src0), Legal_Reg);
765 auto *DestLo = llvm::cast<Variable>(loOperand(Dest)); 758 auto *DestLo = llvm::cast<Variable>(loOperand(Dest));
766 auto *DestHi = llvm::cast<Variable>(hiOperand(Dest)); 759 auto *DestHi = llvm::cast<Variable>(hiOperand(Dest));
767 // Variable *T_Lo = nullptr, *T_Hi = nullptr; 760 // Variable *T_Lo = nullptr, *T_Hi = nullptr;
768 Variable *T_Lo = makeReg(IceType_i32); 761 auto *T_Lo = I32Reg(), *T_Hi = I32Reg();
769 Variable *T_Hi = makeReg(IceType_i32);
770 _mov(T_Lo, Src0Lo); 762 _mov(T_Lo, Src0Lo);
771 _mov(DestLo, T_Lo); 763 _mov(DestLo, T_Lo);
772 _mov(T_Hi, Src0Hi); 764 _mov(T_Hi, Src0Hi);
773 _mov(DestHi, T_Hi); 765 _mov(DestHi, T_Hi);
774 } else { 766 } else {
775 Operand *SrcR; 767 Operand *SrcR;
776 if (Dest->hasReg()) { 768 if (Dest->hasReg()) {
777 // If Dest already has a physical register, then legalize the Src operand 769 // If Dest already has a physical register, then legalize the Src operand
778 // into a Variable with the same register assignment. This especially 770 // into a Variable with the same register assignment. This especially
779 // helps allow the use of Flex operands. 771 // helps allow the use of Flex operands.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 return; 807 return;
816 case IceType_void: 808 case IceType_void:
817 break; 809 break;
818 case IceType_i1: 810 case IceType_i1:
819 case IceType_i8: 811 case IceType_i8:
820 case IceType_i16: 812 case IceType_i16:
821 case IceType_i32: 813 case IceType_i32:
822 ReturnReg = makeReg(Dest->getType(), RegMIPS32::Reg_V0); 814 ReturnReg = makeReg(Dest->getType(), RegMIPS32::Reg_V0);
823 break; 815 break;
824 case IceType_i64: 816 case IceType_i64:
825 ReturnReg = makeReg(IceType_i32, RegMIPS32::Reg_V0); 817 ReturnReg = I32Reg(RegMIPS32::Reg_V0);
826 ReturnRegHi = makeReg(IceType_i32, RegMIPS32::Reg_V1); 818 ReturnRegHi = I32Reg(RegMIPS32::Reg_V1);
827 break; 819 break;
828 case IceType_f32: 820 case IceType_f32:
829 case IceType_f64: 821 case IceType_f64:
830 UnimplementedLoweringError(this, Instr); 822 UnimplementedLoweringError(this, Instr);
831 return; 823 return;
832 case IceType_v4i1: 824 case IceType_v4i1:
833 case IceType_v8i1: 825 case IceType_v8i1:
834 case IceType_v16i1: 826 case IceType_v16i1:
835 case IceType_v16i8: 827 case IceType_v16i8:
836 case IceType_v8i16: 828 case IceType_v8i16:
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
1300 Str << "\t.set\t" 1292 Str << "\t.set\t"
1301 << "nomips16\n"; 1293 << "nomips16\n";
1302 } 1294 }
1303 1295
1304 llvm::SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; 1296 llvm::SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM];
1305 llvm::SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; 1297 llvm::SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM];
1306 llvm::SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; 1298 llvm::SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM];
1307 1299
1308 } // end of namespace MIPS32 1300 } // end of namespace MIPS32
1309 } // end of namespace Ice 1301 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceTargetLoweringMIPS32.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698