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

Side by Side Diff: src/IceInstX86Base.h

Issue 1537703002: Subzero. x8664. Resurrects the Target. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments Created 5 years 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/IceInstX86Base.h - Generic x86 instructions -*- C++ -*--===// 1 //===- subzero/src/IceInstX86Base.h - Generic x86 instructions -*- 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 944 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 using Base = InstX86BaseMovlike<Machine, K>; 955 using Base = InstX86BaseMovlike<Machine, K>;
956 956
957 bool isRedundantAssign() const override { 957 bool isRedundantAssign() const override {
958 if (const auto *SrcVar = llvm::dyn_cast<const Variable>(this->getSrc(0))) { 958 if (const auto *SrcVar = llvm::dyn_cast<const Variable>(this->getSrc(0))) {
959 if (SrcVar->hasReg() && this->Dest->hasReg()) { 959 if (SrcVar->hasReg() && this->Dest->hasReg()) {
960 // An assignment between physical registers is considered redundant if 960 // An assignment between physical registers is considered redundant if
961 // they have the same base register and the same encoding. E.g.: 961 // they have the same base register and the same encoding. E.g.:
962 // mov cl, ecx ==> redundant 962 // mov cl, ecx ==> redundant
963 // mov ch, ecx ==> not redundant due to different encodings 963 // mov ch, ecx ==> not redundant due to different encodings
964 // mov ch, ebp ==> not redundant due to different base registers 964 // mov ch, ebp ==> not redundant due to different base registers
965 // TODO(stichnot): Don't consider "mov eax, eax" to be redundant when 965 // mov ecx, ecx ==> redundant, and dangerous in x86-64. i64 zexting
966 // used in 64-bit mode to clear the upper half of rax. 966 // is handled by Inst86Zext.
967 int32_t SrcReg = SrcVar->getRegNum(); 967 const int32_t SrcReg = SrcVar->getRegNum();
968 int32_t DestReg = this->Dest->getRegNum(); 968 const int32_t DestReg = this->Dest->getRegNum();
969 return (InstX86Base<Machine>::Traits::getEncoding(SrcReg) == 969 return (InstX86Base<Machine>::Traits::getEncoding(SrcReg) ==
970 InstX86Base<Machine>::Traits::getEncoding(DestReg)) && 970 InstX86Base<Machine>::Traits::getEncoding(DestReg)) &&
971 (InstX86Base<Machine>::Traits::getBaseReg(SrcReg) == 971 (InstX86Base<Machine>::Traits::getBaseReg(SrcReg) ==
972 InstX86Base<Machine>::Traits::getBaseReg(DestReg)); 972 InstX86Base<Machine>::Traits::getBaseReg(DestReg));
973 } 973 }
974 } 974 }
975 return checkForRedundantAssign(this->getDest(), this->getSrc(0)); 975 return checkForRedundantAssign(this->getDest(), this->getSrc(0));
976 } 976 }
977 bool isVarAssign() const override { 977 bool isVarAssign() const override {
978 return llvm::isa<Variable>(this->getSrc(0)); 978 return llvm::isa<Variable>(this->getSrc(0));
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 : InstX86BaseUnaryopXmm<Machine, InstX86Base<Machine>::Sqrtss>(Func, Dest, 1162 : InstX86BaseUnaryopXmm<Machine, InstX86Base<Machine>::Sqrtss>(Func, Dest,
1163 Src) {} 1163 Src) {}
1164 }; 1164 };
1165 1165
1166 /// Move/assignment instruction - wrapper for mov/movss/movsd. 1166 /// Move/assignment instruction - wrapper for mov/movss/movsd.
1167 template <class Machine> 1167 template <class Machine>
1168 class InstX86Mov 1168 class InstX86Mov
1169 : public InstX86BaseMovlike<Machine, InstX86Base<Machine>::Mov> { 1169 : public InstX86BaseMovlike<Machine, InstX86Base<Machine>::Mov> {
1170 public: 1170 public:
1171 static InstX86Mov *create(Cfg *Func, Variable *Dest, Operand *Source) { 1171 static InstX86Mov *create(Cfg *Func, Variable *Dest, Operand *Source) {
1172 assert(!isScalarIntegerType(Dest->getType()) ||
1173 (typeWidthInBytes(Dest->getType()) <=
1174 typeWidthInBytes(Source->getType())));
1172 return new (Func->allocate<InstX86Mov>()) InstX86Mov(Func, Dest, Source); 1175 return new (Func->allocate<InstX86Mov>()) InstX86Mov(Func, Dest, Source);
1173 } 1176 }
1174 1177
1175 void emit(const Cfg *Func) const override; 1178 void emit(const Cfg *Func) const override;
1176 void emitIAS(const Cfg *Func) const override; 1179 void emitIAS(const Cfg *Func) const override;
1177 1180
1178 private: 1181 private:
1179 InstX86Mov(Cfg *Func, Variable *Dest, Operand *Source) 1182 InstX86Mov(Cfg *Func, Variable *Dest, Operand *Source)
1180 : InstX86BaseMovlike<Machine, InstX86Base<Machine>::Mov>(Func, Dest, 1183 : InstX86BaseMovlike<Machine, InstX86Base<Machine>::Mov>(Func, Dest,
1181 Source) {} 1184 Source) {}
(...skipping 2183 matching lines...) Expand 10 before | Expand all | Expand 10 after
3365 &InstX86Base<Machine>::Traits::Assembler::psrl}; \ 3368 &InstX86Base<Machine>::Traits::Assembler::psrl}; \
3366 } \ 3369 } \
3367 } 3370 }
3368 3371
3369 } // end of namespace X86Internal 3372 } // end of namespace X86Internal
3370 } // end of namespace Ice 3373 } // end of namespace Ice
3371 3374
3372 #include "IceInstX86BaseImpl.h" 3375 #include "IceInstX86BaseImpl.h"
3373 3376
3374 #endif // SUBZERO_SRC_ICEINSTX86BASE_H 3377 #endif // SUBZERO_SRC_ICEINSTX86BASE_H
OLDNEW
« src/IceAssemblerX86Base.h ('K') | « src/IceInstX8664.def ('k') | src/IceInstX86BaseImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698