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

Side by Side Diff: src/IceInstX8632.cpp

Issue 1127963004: Subzero ARM: lowerArguments (GPR), basic legalize(), and lowerRet(i32, i64). (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fix warnings, etc Created 5 years, 7 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/IceInstX8632.h ('k') | src/IceOperand.h » ('j') | 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/IceInstX8632.cpp - X86-32 instruction implementation ---===// 1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===//
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 // This file implements the InstX8632 and OperandX8632 classes, 10 // This file implements the InstX8632 and OperandX8632 classes,
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 X8632::Address StackAddr(static_cast<TargetX8632 *>(Func->getTarget()) 882 X8632::Address StackAddr(static_cast<TargetX8632 *>(Func->getTarget())
883 ->stackVarToAsmOperand(Dest)); 883 ->stackVarToAsmOperand(Dest));
884 // Src must be a register in this case. 884 // Src must be a register in this case.
885 const auto SrcVar = llvm::cast<Variable>(Src); 885 const auto SrcVar = llvm::cast<Variable>(Src);
886 assert(SrcVar->hasReg()); 886 assert(SrcVar->hasReg());
887 (Asm->*(Emitter.AddrXmm))(StackAddr, 887 (Asm->*(Emitter.AddrXmm))(StackAddr,
888 RegX8632::getEncodedXmm(SrcVar->getRegNum())); 888 RegX8632::getEncodedXmm(SrcVar->getRegNum()));
889 } 889 }
890 } 890 }
891 891
892 bool checkForRedundantAssign(const Variable *Dest, const Operand *Source) {
893 const auto SrcVar = llvm::dyn_cast<const Variable>(Source);
894 if (!SrcVar)
895 return false;
896 if (Dest->hasReg() && Dest->getRegNum() == SrcVar->getRegNum()) {
897 // TODO: On x86-64, instructions like "mov eax, eax" are used to
898 // clear the upper 32 bits of rax. We need to recognize and
899 // preserve these.
900 return true;
901 }
902 if (!Dest->hasReg() && !SrcVar->hasReg() &&
903 Dest->getStackOffset() == SrcVar->getStackOffset())
904 return true;
905 return false;
906 }
907
908 // In-place ops 892 // In-place ops
909 template <> const char *InstX8632Bswap::Opcode = "bswap"; 893 template <> const char *InstX8632Bswap::Opcode = "bswap";
910 template <> const char *InstX8632Neg::Opcode = "neg"; 894 template <> const char *InstX8632Neg::Opcode = "neg";
911 // Unary ops 895 // Unary ops
912 template <> const char *InstX8632Bsf::Opcode = "bsf"; 896 template <> const char *InstX8632Bsf::Opcode = "bsf";
913 template <> const char *InstX8632Bsr::Opcode = "bsr"; 897 template <> const char *InstX8632Bsr::Opcode = "bsr";
914 template <> const char *InstX8632Lea::Opcode = "lea"; 898 template <> const char *InstX8632Lea::Opcode = "lea";
915 template <> const char *InstX8632Movd::Opcode = "movd"; 899 template <> const char *InstX8632Movd::Opcode = "movd";
916 template <> const char *InstX8632Movsx::Opcode = "movs"; 900 template <> const char *InstX8632Movsx::Opcode = "movs";
917 template <> const char *InstX8632Movzx::Opcode = "movz"; 901 template <> const char *InstX8632Movzx::Opcode = "movz";
(...skipping 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after
2999 } 2983 }
3000 Str << "("; 2984 Str << "(";
3001 if (Func) 2985 if (Func)
3002 Var->dump(Func); 2986 Var->dump(Func);
3003 else 2987 else
3004 Var->dump(Str); 2988 Var->dump(Str);
3005 Str << ")"; 2989 Str << ")";
3006 } 2990 }
3007 2991
3008 } // end of namespace Ice 2992 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceInstX8632.h ('k') | src/IceOperand.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698