OLD | NEW |
1 //===- subzero/src/IceInstARM32.cpp - ARM32 instruction implementation ----===// | 1 //===- subzero/src/IceInstARM32.cpp - ARM32 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 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1207 // TODO(jpp): Improve FP register save/restore. | 1207 // TODO(jpp): Improve FP register save/restore. |
1208 if (!BuildDefs::dump()) | 1208 if (!BuildDefs::dump()) |
1209 return; | 1209 return; |
1210 SizeT IntegerCount = 0; | 1210 SizeT IntegerCount = 0; |
1211 for (SizeT i = 0; i < getSrcSize(); ++i) { | 1211 for (SizeT i = 0; i < getSrcSize(); ++i) { |
1212 if (isScalarIntegerType(getSrc(i)->getType())) { | 1212 if (isScalarIntegerType(getSrc(i)->getType())) { |
1213 ++IntegerCount; | 1213 ++IntegerCount; |
1214 } | 1214 } |
1215 } | 1215 } |
1216 Ostream &Str = Func->getContext()->getStrEmit(); | 1216 Ostream &Str = Func->getContext()->getStrEmit(); |
| 1217 bool NeedNewline = false; |
1217 for (SizeT i = getSrcSize(); i > 0; --i) { | 1218 for (SizeT i = getSrcSize(); i > 0; --i) { |
1218 Operand *Op = getSrc(i - 1); | 1219 Operand *Op = getSrc(i - 1); |
1219 if (isScalarIntegerType(Op->getType())) | 1220 if (isScalarIntegerType(Op->getType())) |
1220 continue; | 1221 continue; |
1221 Str << "\t" | 1222 Str << "\t" |
1222 << "vpush" | 1223 << "vpush" |
1223 << "\t{"; | 1224 << "\t{"; |
1224 Op->emit(Func); | 1225 Op->emit(Func); |
1225 Str << "}\n"; | 1226 Str << "}"; |
| 1227 NeedNewline = true; |
1226 } | 1228 } |
1227 if (IntegerCount != 0) { | 1229 if (IntegerCount != 0) { |
1228 startNextInst(Func); | 1230 startNextInst(Func); |
| 1231 if (NeedNewline) { |
| 1232 Str << "\n"; |
| 1233 NeedNewline = false; |
| 1234 } |
1229 Str << "\t" | 1235 Str << "\t" |
1230 << "push" | 1236 << "push" |
1231 << "\t{"; | 1237 << "\t{"; |
1232 bool PrintComma = false; | 1238 bool PrintComma = false; |
1233 for (SizeT i = 0; i < getSrcSize(); ++i) { | 1239 for (SizeT i = 0; i < getSrcSize(); ++i) { |
1234 Operand *Op = getSrc(i); | 1240 Operand *Op = getSrc(i); |
1235 if (isScalarIntegerType(Op->getType())) { | 1241 if (isScalarIntegerType(Op->getType())) { |
1236 if (PrintComma) | 1242 if (PrintComma) |
1237 Str << ", "; | 1243 Str << ", "; |
1238 Op->emit(Func); | 1244 Op->emit(Func); |
1239 PrintComma = true; | 1245 PrintComma = true; |
1240 } | 1246 } |
1241 } | 1247 } |
1242 Str << "}\n"; | 1248 Str << "}"; |
| 1249 NeedNewline = true; |
1243 } | 1250 } |
| 1251 assert(NeedNewline); // caller will add the newline |
1244 } | 1252 } |
1245 | 1253 |
1246 void InstARM32Push::emitIAS(const Cfg *Func) const { | 1254 void InstARM32Push::emitIAS(const Cfg *Func) const { |
1247 SizeT IntegerCount = 0; | 1255 SizeT IntegerCount = 0; |
1248 ARM32::IValueT GPRegisters = 0; | 1256 ARM32::IValueT GPRegisters = 0; |
1249 const Variable *LastSrc = nullptr; | 1257 const Variable *LastSrc = nullptr; |
1250 for (SizeT Index = 0; Index < getSrcSize(); ++Index) { | 1258 for (SizeT Index = 0; Index < getSrcSize(); ++Index) { |
1251 if (!isScalarIntegerType(getSrc(Index)->getType())) | 1259 if (!isScalarIntegerType(getSrc(Index)->getType())) |
1252 // TODO(kschimpf) Implement vpush. | 1260 // TODO(kschimpf) Implement vpush. |
1253 return emitUsingTextFixup(Func); | 1261 return emitUsingTextFixup(Func); |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1746 template class InstARM32UnaryopGPR<InstARM32::Uxt, true>; | 1754 template class InstARM32UnaryopGPR<InstARM32::Uxt, true>; |
1747 template class InstARM32UnaryopFP<InstARM32::Vsqrt>; | 1755 template class InstARM32UnaryopFP<InstARM32::Vsqrt>; |
1748 | 1756 |
1749 template class InstARM32FourAddrGPR<InstARM32::Mla>; | 1757 template class InstARM32FourAddrGPR<InstARM32::Mla>; |
1750 template class InstARM32FourAddrGPR<InstARM32::Mls>; | 1758 template class InstARM32FourAddrGPR<InstARM32::Mls>; |
1751 | 1759 |
1752 template class InstARM32CmpLike<InstARM32::Cmp>; | 1760 template class InstARM32CmpLike<InstARM32::Cmp>; |
1753 template class InstARM32CmpLike<InstARM32::Tst>; | 1761 template class InstARM32CmpLike<InstARM32::Tst>; |
1754 | 1762 |
1755 } // end of namespace Ice | 1763 } // end of namespace Ice |
OLD | NEW |