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

Side by Side Diff: src/IceTargetLoweringX8632.cpp

Issue 396993009: Lower stacksave and restore intrinsics. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: line em up Created 6 years, 5 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/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// 1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 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 // This file implements the TargetLoweringX8632 class, which 10 // This file implements the TargetLoweringX8632 class, which
(...skipping 2173 matching lines...) Expand 10 before | Expand all | Expand 10 after
2184 case Intrinsics::Memmove: { 2184 case Intrinsics::Memmove: {
2185 InstCall *Call = makeHelperCall("memmove", NULL, 3); 2185 InstCall *Call = makeHelperCall("memmove", NULL, 3);
2186 Call->addArg(Instr->getArg(0)); 2186 Call->addArg(Instr->getArg(0));
2187 Call->addArg(Instr->getArg(1)); 2187 Call->addArg(Instr->getArg(1));
2188 Call->addArg(Instr->getArg(2)); 2188 Call->addArg(Instr->getArg(2));
2189 lowerCall(Call); 2189 lowerCall(Call);
2190 return; 2190 return;
2191 } 2191 }
2192 case Intrinsics::Memset: { 2192 case Intrinsics::Memset: {
2193 // The value operand needs to be extended to a stack slot size 2193 // The value operand needs to be extended to a stack slot size
2194 // because we "push" only works for a specific operand size. 2194 // because "push" only works for a specific operand size.
2195 Operand *ValOp = Instr->getArg(1); 2195 Operand *ValOp = Instr->getArg(1);
2196 assert(ValOp->getType() == IceType_i8); 2196 assert(ValOp->getType() == IceType_i8);
2197 Variable *ValExt = makeReg(stackSlotType()); 2197 Variable *ValExt = makeReg(stackSlotType());
2198 _movzx(ValExt, ValOp); 2198 _movzx(ValExt, ValOp);
2199 InstCall *Call = makeHelperCall("memset", NULL, 3); 2199 InstCall *Call = makeHelperCall("memset", NULL, 3);
2200 Call->addArg(Instr->getArg(0)); 2200 Call->addArg(Instr->getArg(0));
2201 Call->addArg(ValExt); 2201 Call->addArg(ValExt);
2202 Call->addArg(Instr->getArg(2)); 2202 Call->addArg(Instr->getArg(2));
2203 lowerCall(Call); 2203 lowerCall(Call);
2204 return; 2204 return;
(...skipping 15 matching lines...) Expand all
2220 return; 2220 return;
2221 } 2221 }
2222 case Intrinsics::Sqrt: { 2222 case Intrinsics::Sqrt: {
2223 Operand *Src = legalize(Instr->getArg(0)); 2223 Operand *Src = legalize(Instr->getArg(0));
2224 Variable *Dest = Instr->getDest(); 2224 Variable *Dest = Instr->getDest();
2225 Variable *T = makeReg(Dest->getType()); 2225 Variable *T = makeReg(Dest->getType());
2226 _sqrtss(T, Src); 2226 _sqrtss(T, Src);
2227 _mov(Dest, T); 2227 _mov(Dest, T);
2228 return; 2228 return;
2229 } 2229 }
2230 case Intrinsics::Stacksave: 2230 case Intrinsics::Stacksave: {
2231 case Intrinsics::Stackrestore: 2231 Variable *esp = Func->getTarget()->getPhysicalRegister(Reg_esp);
2232 // TODO(jvoung): fill it in. 2232 Variable *Dest = Instr->getDest();
2233 Func->setError("Unhandled intrinsic"); 2233 _mov(Dest, esp);
2234 return; 2234 return;
2235 }
2236 case Intrinsics::Stackrestore: {
2237 Variable *esp = Func->getTarget()->getPhysicalRegister(Reg_esp);
2238 _mov(esp, Instr->getArg(0));
2239 return;
2240 }
2235 case Intrinsics::Trap: 2241 case Intrinsics::Trap:
2236 _ud2(); 2242 _ud2();
2237 return; 2243 return;
2238 case Intrinsics::UnknownIntrinsic: 2244 case Intrinsics::UnknownIntrinsic:
2239 Func->setError("Should not be lowering UnknownIntrinsic"); 2245 Func->setError("Should not be lowering UnknownIntrinsic");
2240 return; 2246 return;
2241 } 2247 }
2242 return; 2248 return;
2243 } 2249 }
2244 2250
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after
3199 for (SizeT i = 0; i < Size; ++i) { 3205 for (SizeT i = 0; i < Size; ++i) {
3200 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; 3206 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n";
3201 } 3207 }
3202 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; 3208 Str << "\t.size\t" << MangledName << ", " << Size << "\n";
3203 } 3209 }
3204 Str << "\t" << (IsInternal ? ".local" : ".global") << "\t" << MangledName 3210 Str << "\t" << (IsInternal ? ".local" : ".global") << "\t" << MangledName
3205 << "\n"; 3211 << "\n";
3206 } 3212 }
3207 3213
3208 } // end of namespace Ice 3214 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698