OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |