Lines Matching refs:OS
32 void run(raw_ostream &OS);
37 void EmitEnum(raw_ostream &OS, StringRef N, Record *R);
40 void EmitInterp(raw_ostream &OS, StringRef N, Record *R);
43 void EmitDisasm(raw_ostream &OS, StringRef N, Record *R);
46 void EmitEmitter(raw_ostream &OS, StringRef N, Record *R);
49 void EmitProto(raw_ostream &OS, StringRef N, Record *R);
52 void EmitGroup(raw_ostream &OS, StringRef N, Record *R);
55 void EmitEval(raw_ostream &OS, StringRef N, Record *R);
57 void PrintTypes(raw_ostream &OS, ArrayRef<Record *> Types);
88 void ClangOpcodesEmitter::run(raw_ostream &OS) { in run() argument
95 EmitEnum(OS, N, Opcode); in run()
96 EmitInterp(OS, N, Opcode); in run()
97 EmitDisasm(OS, N, Opcode); in run()
98 EmitProto(OS, N, Opcode); in run()
99 EmitGroup(OS, N, Opcode); in run()
100 EmitEmitter(OS, N, Opcode); in run()
101 EmitEval(OS, N, Opcode); in run()
105 void ClangOpcodesEmitter::EmitEnum(raw_ostream &OS, StringRef N, Record *R) { in EmitEnum() argument
106 OS << "#ifdef GET_OPCODE_NAMES\n"; in EmitEnum()
107 Enumerate(R, N, [&OS](ArrayRef<Record *>, const Twine &ID) { in EmitEnum()
108 OS << "OP_" << ID << ",\n"; in EmitEnum()
110 OS << "#endif\n"; in EmitEnum()
113 void ClangOpcodesEmitter::EmitInterp(raw_ostream &OS, StringRef N, Record *R) { in EmitInterp() argument
114 OS << "#ifdef GET_INTERP\n"; in EmitInterp()
116 Enumerate(R, N, [this, R, &OS, &N](ArrayRef<Record *> TS, const Twine &ID) { in EmitInterp()
121 OS << "case OP_" << ID << ": {\n"; in EmitInterp()
125 OS << " auto V" << I; in EmitInterp()
126 OS << " = "; in EmitInterp()
127 OS << "ReadArg<" << Args[I]->getValueAsString("Name") << ">(S, PC);\n"; in EmitInterp()
131 OS << " if (!" << N; in EmitInterp()
132 PrintTypes(OS, TS); in EmitInterp()
133 OS << "(S"; in EmitInterp()
135 OS << ", PC"; in EmitInterp()
137 OS << ", OpPC"; in EmitInterp()
139 OS << ", Result"; in EmitInterp()
141 OS << ", V" << I; in EmitInterp()
142 OS << "))\n"; in EmitInterp()
143 OS << " return false;\n"; in EmitInterp()
147 OS << " if (!S.Current || S.Current->isRoot())\n"; in EmitInterp()
148 OS << " return true;\n"; in EmitInterp()
151 OS << " continue;\n"; in EmitInterp()
152 OS << "}\n"; in EmitInterp()
154 OS << "#endif\n"; in EmitInterp()
157 void ClangOpcodesEmitter::EmitDisasm(raw_ostream &OS, StringRef N, Record *R) { in EmitDisasm() argument
158 OS << "#ifdef GET_DISASM\n"; in EmitDisasm()
159 Enumerate(R, N, [R, &OS](ArrayRef<Record *>, const Twine &ID) { in EmitDisasm()
160 OS << "case OP_" << ID << ":\n"; in EmitDisasm()
161 OS << " PrintName(\"" << ID << "\");\n"; in EmitDisasm()
162 OS << " OS << \"\\t\""; in EmitDisasm()
165 OS << " << ReadArg<" << Arg->getValueAsString("Name") << ">(P, PC)"; in EmitDisasm()
166 OS << " << \" \""; in EmitDisasm()
169 OS << " << \"\\n\";\n"; in EmitDisasm()
170 OS << " continue;\n"; in EmitDisasm()
172 OS << "#endif\n"; in EmitDisasm()
175 void ClangOpcodesEmitter::EmitEmitter(raw_ostream &OS, StringRef N, Record *R) { in EmitEmitter() argument
179 OS << "#ifdef GET_LINK_IMPL\n"; in EmitEmitter()
180 Enumerate(R, N, [R, &OS](ArrayRef<Record *>, const Twine &ID) { in EmitEmitter()
184 OS << "bool ByteCodeEmitter::emit" << ID << "("; in EmitEmitter()
186 OS << Args[I]->getValueAsString("Name") << " A" << I << ", "; in EmitEmitter()
187 OS << "const SourceInfo &L) {\n"; in EmitEmitter()
190 OS << " return emitOp<"; in EmitEmitter()
193 OS << ", "; in EmitEmitter()
194 OS << Args[I]->getValueAsString("Name"); in EmitEmitter()
196 OS << ">(OP_" << ID; in EmitEmitter()
198 OS << ", A" << I; in EmitEmitter()
199 OS << ", L);\n"; in EmitEmitter()
200 OS << "}\n"; in EmitEmitter()
202 OS << "#endif\n"; in EmitEmitter()
205 void ClangOpcodesEmitter::EmitProto(raw_ostream &OS, StringRef N, Record *R) { in EmitProto() argument
206 OS << "#if defined(GET_EVAL_PROTO) || defined(GET_LINK_PROTO)\n"; in EmitProto()
208 Enumerate(R, N, [&OS, &Args](ArrayRef<Record *> TS, const Twine &ID) { in EmitProto()
209 OS << "bool emit" << ID << "("; in EmitProto()
211 OS << Arg->getValueAsString("Name") << ", "; in EmitProto()
212 OS << "const SourceInfo &);\n"; in EmitProto()
218 OS << "#if defined(GET_EVAL_PROTO)\n"; in EmitProto()
219 OS << "template<"; in EmitProto()
222 OS << ", "; in EmitProto()
223 OS << "PrimType"; in EmitProto()
225 OS << ">\n"; in EmitProto()
226 OS << "bool emit" << N << "("; in EmitProto()
228 OS << Arg->getValueAsString("Name") << ", "; in EmitProto()
229 OS << "const SourceInfo &);\n"; in EmitProto()
230 OS << "#endif\n"; in EmitProto()
233 OS << "#endif\n"; in EmitProto()
236 void ClangOpcodesEmitter::EmitGroup(raw_ostream &OS, StringRef N, Record *R) { in EmitGroup() argument
244 OS << "#if defined(GET_EVAL_PROTO) || defined(GET_LINK_PROTO)\n"; in EmitGroup()
245 OS << "bool emit" << N << "("; in EmitGroup()
247 OS << "PrimType, "; in EmitGroup()
249 OS << Arg->getValueAsString("Name") << ", "; in EmitGroup()
250 OS << "const SourceInfo &I);\n"; in EmitGroup()
251 OS << "#endif\n"; in EmitGroup()
254 OS << "#if defined(GET_EVAL_IMPL) || defined(GET_LINK_IMPL)\n"; in EmitGroup()
255 OS << "bool\n"; in EmitGroup()
256 OS << "#if defined(GET_EVAL_IMPL)\n"; in EmitGroup()
257 OS << "EvalEmitter\n"; in EmitGroup()
258 OS << "#else\n"; in EmitGroup()
259 OS << "ByteCodeEmitter\n"; in EmitGroup()
260 OS << "#endif\n"; in EmitGroup()
261 OS << "::emit" << N << "("; in EmitGroup()
263 OS << "PrimType T" << I << ", "; in EmitGroup()
265 OS << Args[I]->getValueAsString("Name") << " A" << I << ", "; in EmitGroup()
266 OS << "const SourceInfo &I) {\n"; in EmitGroup()
270 Rec = [this, &Rec, &OS, Types, &Args, R, &TS, N](size_t I, const Twine &ID) { in EmitGroup()
275 OS << "#ifdef GET_LINK_IMPL\n"; in EmitGroup()
276 OS << " return emit" << ID << "\n"; in EmitGroup()
277 OS << "#else\n"; in EmitGroup()
278 OS << " return emit" << N; in EmitGroup()
279 PrintTypes(OS, TS); in EmitGroup()
280 OS << "\n#endif\n"; in EmitGroup()
281 OS << " "; in EmitGroup()
283 OS << " return emit" << ID; in EmitGroup()
286 OS << "("; in EmitGroup()
288 OS << "A" << I << ", "; in EmitGroup()
290 OS << "I);\n"; in EmitGroup()
296 OS << " switch (T" << I << ") {\n"; in EmitGroup()
299 OS << " case PT_" << Case->getName() << ":\n"; in EmitGroup()
306 OS << " default: llvm_unreachable(\"invalid type\");\n"; in EmitGroup()
307 OS << " }\n"; in EmitGroup()
308 OS << " llvm_unreachable(\"invalid enum value\");\n"; in EmitGroup()
315 OS << "}\n"; in EmitGroup()
316 OS << "#endif\n"; in EmitGroup()
319 void ClangOpcodesEmitter::EmitEval(raw_ostream &OS, StringRef N, Record *R) { in EmitEval() argument
323 OS << "#ifdef GET_EVAL_IMPL\n"; in EmitEval()
324 Enumerate(R, N, [this, R, &N, &OS](ArrayRef<Record *> TS, const Twine &ID) { in EmitEval()
327 OS << "bool EvalEmitter::emit" << ID << "("; in EmitEval()
329 OS << Args[I]->getValueAsString("Name") << " A" << I << ", "; in EmitEval()
330 OS << "const SourceInfo &L) {\n"; in EmitEval()
331 OS << " if (!isActive()) return true;\n"; in EmitEval()
332 OS << " CurrentSource = L;\n"; in EmitEval()
334 OS << " return " << N; in EmitEval()
335 PrintTypes(OS, TS); in EmitEval()
336 OS << "(S, OpPC"; in EmitEval()
338 OS << ", A" << I; in EmitEval()
339 OS << ");\n"; in EmitEval()
340 OS << "}\n"; in EmitEval()
343 OS << "#endif\n"; in EmitEval()
346 void ClangOpcodesEmitter::PrintTypes(raw_ostream &OS, ArrayRef<Record *> Types) { in PrintTypes() argument
349 OS << "<"; in PrintTypes()
352 OS << ", "; in PrintTypes()
353 OS << "PT_" << Types[I]->getName(); in PrintTypes()
355 OS << ">"; in PrintTypes()
358 void clang::EmitClangOpcodes(RecordKeeper &Records, raw_ostream &OS) { in EmitClangOpcodes() argument
359 ClangOpcodesEmitter(Records).run(OS); in EmitClangOpcodes()