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

Side by Side Diff: src/IceTargetLoweringMIPS32.h

Issue 2380023002: [SubZero] Vector types support for MIPS (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addressed review comments Created 4 years, 2 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
OLDNEW
1 //===- subzero/src/IceTargetLoweringMIPS32.h - MIPS32 lowering ---*- C++-*-===// 1 //===- subzero/src/IceTargetLoweringMIPS32.h - MIPS32 lowering ---*- C++-*-===//
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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 int32_t getFrameFixedAllocaOffset() const override { 104 int32_t getFrameFixedAllocaOffset() const override {
105 return FixedAllocaSizeBytes - (SpillAreaSizeBytes - MaxOutArgsSizeBytes); 105 return FixedAllocaSizeBytes - (SpillAreaSizeBytes - MaxOutArgsSizeBytes);
106 } 106 }
107 107
108 uint32_t maxOutArgsSizeBytes() const override { return MaxOutArgsSizeBytes; } 108 uint32_t maxOutArgsSizeBytes() const override { return MaxOutArgsSizeBytes; }
109 109
110 bool shouldSplitToVariable64On32(Type Ty) const override { 110 bool shouldSplitToVariable64On32(Type Ty) const override {
111 return Ty == IceType_i64; 111 return Ty == IceType_i64;
112 } 112 }
113 113
114 bool shouldSplitToVariableVecOn32(Type Ty) const override {
115 return isVectorType(Ty);
116 }
117
114 // TODO(ascull): what is the best size of MIPS? 118 // TODO(ascull): what is the best size of MIPS?
115 SizeT getMinJumpTableSize() const override { return 3; } 119 SizeT getMinJumpTableSize() const override { return 3; }
116 void emitJumpTable(const Cfg *Func, 120 void emitJumpTable(const Cfg *Func,
117 const InstJumpTable *JumpTable) const override; 121 const InstJumpTable *JumpTable) const override;
118 122
119 void emitVariable(const Variable *Var) const override; 123 void emitVariable(const Variable *Var) const override;
120 124
121 void emit(const ConstantInteger32 *C) const final { 125 void emit(const ConstantInteger32 *C) const final {
122 if (!BuildDefs::dump()) 126 if (!BuildDefs::dump())
123 return; 127 return;
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 606
603 void addProlog(CfgNode *Node) override; 607 void addProlog(CfgNode *Node) override;
604 void addEpilog(CfgNode *Node) override; 608 void addEpilog(CfgNode *Node) override;
605 609
606 // Ensure that a 64-bit Variable has been split into 2 32-bit 610 // Ensure that a 64-bit Variable has been split into 2 32-bit
607 // Variables, creating them if necessary. This is needed for all 611 // Variables, creating them if necessary. This is needed for all
608 // I64 operations. 612 // I64 operations.
609 void split64(Variable *Var); 613 void split64(Variable *Var);
610 Operand *loOperand(Operand *Operand); 614 Operand *loOperand(Operand *Operand);
611 Operand *hiOperand(Operand *Operand); 615 Operand *hiOperand(Operand *Operand);
616 Operand *getOperandAtIndex(Operand *Operand, Type BaseType, uint32_t Index);
612 617
613 void finishArgumentLowering(Variable *Arg, Variable *FramePtr, 618 void finishArgumentLowering(Variable *Arg, bool PartialOnStack,
614 size_t BasicFrameOffset, size_t *InArgsSizeBytes); 619 Variable *FramePtr, size_t BasicFrameOffset,
620 size_t *InArgsSizeBytes);
615 621
616 Operand *legalizeUndef(Operand *From, RegNumT RegNum = RegNumT()); 622 Operand *legalizeUndef(Operand *From, RegNumT RegNum = RegNumT());
617 623
618 /// Helper class that understands the Calling Convention and register 624 /// Helper class that understands the Calling Convention and register
619 /// assignments as per MIPS O32 abi. 625 /// assignments as per MIPS O32 abi.
620 class CallingConv { 626 class CallingConv {
621 CallingConv(const CallingConv &) = delete; 627 CallingConv(const CallingConv &) = delete;
622 CallingConv &operator=(const CallingConv &) = delete; 628 CallingConv &operator=(const CallingConv &) = delete;
623 629
624 public: 630 public:
625 CallingConv(); 631 CallingConv();
626 ~CallingConv() = default; 632 ~CallingConv() = default;
627 633
628 /// argInReg returns true if there is a Register available for the requested 634 /// argInReg returns true if there is a Register available for the requested
629 /// type, and false otherwise. If it returns true, Reg is set to the 635 /// type, and false otherwise. If it returns true, Reg is set to the
630 /// appropriate register number. Note that, when Ty == IceType_i64, Reg will 636 /// appropriate register number. Note that, when Ty == IceType_i64, Reg will
631 /// be an I64 register pair. 637 /// be an I64 register pair.
632 bool argInReg(Type Ty, uint32_t ArgNo, RegNumT *Reg); 638 bool argInReg(Type Ty, uint32_t ArgNo, RegNumT *Reg);
639 void discardReg(RegNumT Reg) { GPRegsUsed |= RegisterAliases[Reg]; }
633 640
634 private: 641 private:
635 // argInGPR is used to find if any GPR register is available for argument of 642 // argInGPR is used to find if any GPR register is available for argument of
636 // type Ty 643 // type Ty
637 bool argInGPR(Type Ty, RegNumT *Reg); 644 bool argInGPR(Type Ty, RegNumT *Reg);
638 /// argInVFP is to floating-point/vector types what argInGPR is for integer 645 /// argInVFP is to floating-point/vector types what argInGPR is for integer
639 /// types. 646 /// types.
640 bool argInVFP(Type Ty, RegNumT *Reg); 647 bool argInVFP(Type Ty, RegNumT *Reg);
641 inline void discardNextGPRAndItsAliases(CfgVector<RegNumT> *Regs); 648 inline void discardNextGPRAndItsAliases(CfgVector<RegNumT> *Regs);
642 inline void alignGPR(CfgVector<RegNumT> *Regs); 649 inline void alignGPR(CfgVector<RegNumT> *Regs);
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 explicit TargetHeaderMIPS32(GlobalContext *Ctx); 856 explicit TargetHeaderMIPS32(GlobalContext *Ctx);
850 857
851 private: 858 private:
852 ~TargetHeaderMIPS32() = default; 859 ~TargetHeaderMIPS32() = default;
853 }; 860 };
854 861
855 } // end of namespace MIPS32 862 } // end of namespace MIPS32
856 } // end of namespace Ice 863 } // end of namespace Ice
857 864
858 #endif // SUBZERO_SRC_ICETARGETLOWERINGMIPS32_H 865 #endif // SUBZERO_SRC_ICETARGETLOWERINGMIPS32_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698