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

Side by Side Diff: src/IceInstX8632.cpp

Issue 1559243002: Suzero. X8664. NaCl Sandboxing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fixes filetype=asm; addresses comments. Created 4 years, 11 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/IceInst.cpp ('k') | src/IceInstX8664.cpp » ('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 /// \file 10 /// \file
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 #undef X 69 #undef X
70 }; 70 };
71 71
72 void TargetX8632Traits::X86Operand::dump(const Cfg *, Ostream &Str) const { 72 void TargetX8632Traits::X86Operand::dump(const Cfg *, Ostream &Str) const {
73 if (BuildDefs::dump()) 73 if (BuildDefs::dump())
74 Str << "<OperandX8632>"; 74 Str << "<OperandX8632>";
75 } 75 }
76 76
77 TargetX8632Traits::X86OperandMem::X86OperandMem( 77 TargetX8632Traits::X86OperandMem::X86OperandMem(
78 Cfg *Func, Type Ty, Variable *Base, Constant *Offset, Variable *Index, 78 Cfg *Func, Type Ty, Variable *Base, Constant *Offset, Variable *Index,
79 uint16_t Shift, SegmentRegisters SegmentReg, bool IsPIC) 79 uint16_t Shift, SegmentRegisters SegmentReg, bool IsRebased)
80 : X86Operand(kMem, Ty), Base(Base), Offset(Offset), Index(Index), 80 : X86Operand(kMem, Ty), Base(Base), Offset(Offset), Index(Index),
81 Shift(Shift), SegmentReg(SegmentReg), IsPIC(IsPIC) { 81 Shift(Shift), SegmentReg(SegmentReg), IsRebased(IsRebased) {
82 assert(Shift <= 3); 82 assert(Shift <= 3);
83 Vars = nullptr; 83 Vars = nullptr;
84 NumVars = 0; 84 NumVars = 0;
85 if (Base) 85 if (Base)
86 ++NumVars; 86 ++NumVars;
87 if (Index) 87 if (Index)
88 ++NumVars; 88 ++NumVars;
89 if (NumVars) { 89 if (NumVars) {
90 Vars = Func->allocateArrayOf<Variable *>(NumVars); 90 Vars = Func->allocateArrayOf<Variable *>(NumVars);
91 SizeT I = 0; 91 SizeT I = 0;
(...skipping 19 matching lines...) Expand all
111 return Disp; 111 return Disp;
112 } 112 }
113 113
114 void validateMemOperandPIC(const TargetX8632Traits::X86OperandMem *Mem, 114 void validateMemOperandPIC(const TargetX8632Traits::X86OperandMem *Mem,
115 bool UseNonsfi) { 115 bool UseNonsfi) {
116 if (!BuildDefs::asserts()) 116 if (!BuildDefs::asserts())
117 return; 117 return;
118 const bool HasCR = 118 const bool HasCR =
119 Mem->getOffset() && llvm::isa<ConstantRelocatable>(Mem->getOffset()); 119 Mem->getOffset() && llvm::isa<ConstantRelocatable>(Mem->getOffset());
120 (void)HasCR; 120 (void)HasCR;
121 const bool IsPIC = Mem->getIsPIC(); 121 const bool IsRebased = Mem->getIsRebased();
122 (void)IsPIC; 122 (void)IsRebased;
123 if (UseNonsfi) 123 if (UseNonsfi)
124 assert(HasCR == IsPIC); 124 assert(HasCR == IsRebased);
125 else 125 else
126 assert(!IsPIC); 126 assert(!IsRebased);
127 } 127 }
128 128
129 } // end of anonymous namespace 129 } // end of anonymous namespace
130 130
131 void TargetX8632Traits::X86OperandMem::emit(const Cfg *Func) const { 131 void TargetX8632Traits::X86OperandMem::emit(const Cfg *Func) const {
132 if (!BuildDefs::dump()) 132 if (!BuildDefs::dump())
133 return; 133 return;
134 const bool UseNonsfi = Func->getContext()->getFlags().getUseNonsfi(); 134 const bool UseNonsfi = Func->getContext()->getFlags().getUseNonsfi();
135 validateMemOperandPIC(this, UseNonsfi); 135 validateMemOperandPIC(this, UseNonsfi);
136 const auto *Target = 136 const auto *Target =
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 void TargetX8632Traits::X86OperandMem::emitSegmentOverride( 253 void TargetX8632Traits::X86OperandMem::emitSegmentOverride(
254 TargetX8632Traits::Assembler *Asm) const { 254 TargetX8632Traits::Assembler *Asm) const {
255 if (SegmentReg != DefaultSegment) { 255 if (SegmentReg != DefaultSegment) {
256 assert(SegmentReg >= 0 && SegmentReg < SegReg_NUM); 256 assert(SegmentReg >= 0 && SegmentReg < SegReg_NUM);
257 Asm->emitSegmentOverride(X8632::Traits::InstSegmentPrefixes[SegmentReg]); 257 Asm->emitSegmentOverride(X8632::Traits::InstSegmentPrefixes[SegmentReg]);
258 } 258 }
259 } 259 }
260 260
261 TargetX8632Traits::Address TargetX8632Traits::X86OperandMem::toAsmAddress( 261 TargetX8632Traits::Address TargetX8632Traits::X86OperandMem::toAsmAddress(
262 TargetX8632Traits::Assembler *Asm, 262 TargetX8632Traits::Assembler *Asm,
263 const Ice::TargetLowering *TargetLowering) const { 263 const Ice::TargetLowering *TargetLowering, bool /*IsLeaAddr*/) const {
264 const auto *Target = 264 const auto *Target =
265 static_cast<const ::Ice::X8632::TargetX8632 *>(TargetLowering); 265 static_cast<const ::Ice::X8632::TargetX8632 *>(TargetLowering);
266 const bool UseNonsfi = Target->getGlobalContext()->getFlags().getUseNonsfi(); 266 const bool UseNonsfi = Target->getGlobalContext()->getFlags().getUseNonsfi();
267 validateMemOperandPIC(this, UseNonsfi); 267 validateMemOperandPIC(this, UseNonsfi);
268 int32_t Disp = 0; 268 int32_t Disp = 0;
269 if (getBase() && getBase()->isRematerializable()) { 269 if (getBase() && getBase()->isRematerializable()) {
270 Disp += GetRematerializableOffset(getBase(), Target); 270 Disp += GetRematerializableOffset(getBase(), Target);
271 } 271 }
272 // The index should never be rematerializable. But if we ever allow it, then 272 // The index should never be rematerializable. But if we ever allow it, then
273 // we should make sure the rematerialization offset is shifted by the Shift 273 // we should make sure the rematerialization offset is shifted by the Shift
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 Var->dump(Func); 346 Var->dump(Func);
347 else 347 else
348 Var->dump(Str); 348 Var->dump(Str);
349 Str << ")"; 349 Str << ")";
350 } 350 }
351 351
352 } // namespace X8632 352 } // namespace X8632
353 } // end of namespace Ice 353 } // end of namespace Ice
354 354
355 X86INSTS_DEFINE_STATIC_DATA(X8632, X8632::Traits) 355 X86INSTS_DEFINE_STATIC_DATA(X8632, X8632::Traits)
OLDNEW
« no previous file with comments | « src/IceInst.cpp ('k') | src/IceInstX8664.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698