Lines Matching refs:OS

30   void run(raw_ostream &OS);
35 void EmitEnum(raw_ostream &OS, StringRef N, const Record *R);
38 void EmitInterp(raw_ostream &OS, StringRef N, const Record *R);
41 void EmitDisasm(raw_ostream &OS, StringRef N, const Record *R);
44 void EmitEmitter(raw_ostream &OS, StringRef N, const Record *R);
47 void EmitProto(raw_ostream &OS, StringRef N, const Record *R);
50 void EmitGroup(raw_ostream &OS, StringRef N, const Record *R);
53 void EmitEval(raw_ostream &OS, StringRef N, const Record *R);
55 void PrintTypes(raw_ostream &OS, ArrayRef<const Record *> Types);
86 void ClangOpcodesEmitter::run(raw_ostream &OS) { in run() argument
93 EmitEnum(OS, N, Opcode); in run()
94 EmitInterp(OS, N, Opcode); in run()
95 EmitDisasm(OS, N, Opcode); in run()
96 EmitProto(OS, N, Opcode); in run()
97 EmitGroup(OS, N, Opcode); in run()
98 EmitEmitter(OS, N, Opcode); in run()
99 EmitEval(OS, N, Opcode); in run()
103 void ClangOpcodesEmitter::EmitEnum(raw_ostream &OS, StringRef N, in EmitEnum() argument
105 OS << "#ifdef GET_OPCODE_NAMES\n"; in EmitEnum()
106 Enumerate(R, N, [&OS](ArrayRef<const Record *>, const Twine &ID) { in EmitEnum()
107 OS << "OP_" << ID << ",\n"; in EmitEnum()
109 OS << "#endif\n"; in EmitEnum()
112 void ClangOpcodesEmitter::EmitInterp(raw_ostream &OS, StringRef N, in EmitInterp() argument
114 OS << "#ifdef GET_INTERP\n"; in EmitInterp()
117 [this, R, &OS, &N](ArrayRef<const Record *> TS, const Twine &ID) { in EmitInterp()
122 OS << "case OP_" << ID << ": {\n"; in EmitInterp()
125 OS << " bool DoReturn = (S.Current == StartFrame);\n"; in EmitInterp()
133 OS << " const auto &V" << I; in EmitInterp()
135 OS << " const auto V" << I; in EmitInterp()
136 OS << " = "; in EmitInterp()
137 OS << "ReadArg<" << Arg->getValueAsString("Name") in EmitInterp()
142 OS << " if (!" << N; in EmitInterp()
143 PrintTypes(OS, TS); in EmitInterp()
144 OS << "(S"; in EmitInterp()
146 OS << ", PC"; in EmitInterp()
148 OS << ", OpPC"; in EmitInterp()
150 OS << ", Result"; in EmitInterp()
152 OS << ", V" << I; in EmitInterp()
153 OS << "))\n"; in EmitInterp()
154 OS << " return false;\n"; in EmitInterp()
158 OS << " if (!S.Current || S.Current->isRoot())\n"; in EmitInterp()
159 OS << " return true;\n"; in EmitInterp()
161 OS << " if (DoReturn)\n"; in EmitInterp()
162 OS << " return true;\n"; in EmitInterp()
165 OS << " continue;\n"; in EmitInterp()
166 OS << "}\n"; in EmitInterp()
168 OS << "#endif\n"; in EmitInterp()
171 void ClangOpcodesEmitter::EmitDisasm(raw_ostream &OS, StringRef N, in EmitDisasm() argument
173 OS << "#ifdef GET_DISASM\n"; in EmitDisasm()
174 Enumerate(R, N, [R, &OS](ArrayRef<const Record *>, const Twine &ID) { in EmitDisasm()
175 OS << "case OP_" << ID << ":\n"; in EmitDisasm()
176 OS << " PrintName(\"" << ID << "\");\n"; in EmitDisasm()
177 OS << " OS << \"\\t\""; in EmitDisasm()
180 OS << " << ReadArg<" << Arg->getValueAsString("Name") << ">(P, PC)"; in EmitDisasm()
181 OS << " << \" \""; in EmitDisasm()
184 OS << " << \"\\n\";\n"; in EmitDisasm()
185 OS << " continue;\n"; in EmitDisasm()
187 OS << "#endif\n"; in EmitDisasm()
190 void ClangOpcodesEmitter::EmitEmitter(raw_ostream &OS, StringRef N, in EmitEmitter() argument
195 OS << "#ifdef GET_LINK_IMPL\n"; in EmitEmitter()
196 Enumerate(R, N, [R, &OS](ArrayRef<const Record *>, const Twine &ID) { in EmitEmitter()
200 OS << "bool ByteCodeEmitter::emit" << ID << "("; in EmitEmitter()
206 OS << (AsRef ? "const " : " ") << Name << " " << (AsRef ? "&" : "") << "A" in EmitEmitter()
209 OS << "const SourceInfo &L) {\n"; in EmitEmitter()
212 OS << " return emitOp<"; in EmitEmitter()
215 OS << ", "; in EmitEmitter()
216 OS << Args[I]->getValueAsString("Name"); in EmitEmitter()
218 OS << ">(OP_" << ID; in EmitEmitter()
220 OS << ", A" << I; in EmitEmitter()
221 OS << ", L);\n"; in EmitEmitter()
222 OS << "}\n"; in EmitEmitter()
224 OS << "#endif\n"; in EmitEmitter()
227 void ClangOpcodesEmitter::EmitProto(raw_ostream &OS, StringRef N, in EmitProto() argument
229 OS << "#if defined(GET_EVAL_PROTO) || defined(GET_LINK_PROTO)\n"; in EmitProto()
231 Enumerate(R, N, [&OS, &Args](ArrayRef<const Record *> TS, const Twine &ID) { in EmitProto()
232 OS << "bool emit" << ID << "("; in EmitProto()
238 OS << (AsRef ? "const " : " ") << Name << " " << (AsRef ? "&" : "") in EmitProto()
241 OS << "const SourceInfo &);\n"; in EmitProto()
247 OS << "#if defined(GET_EVAL_PROTO)\n"; in EmitProto()
248 OS << "template<"; in EmitProto()
251 OS << ", "; in EmitProto()
252 OS << "PrimType"; in EmitProto()
254 OS << ">\n"; in EmitProto()
255 OS << "bool emit" << N << "("; in EmitProto()
257 OS << Arg->getValueAsString("Name") << ", "; in EmitProto()
258 OS << "const SourceInfo &);\n"; in EmitProto()
259 OS << "#endif\n"; in EmitProto()
262 OS << "#endif\n"; in EmitProto()
265 void ClangOpcodesEmitter::EmitGroup(raw_ostream &OS, StringRef N, in EmitGroup() argument
276 OS << "#if defined(GET_EVAL_PROTO) || defined(GET_LINK_PROTO)\n"; in EmitGroup()
277 OS << "[[nodiscard]] bool " << EmitFuncName << "("; in EmitGroup()
279 OS << "PrimType, "; in EmitGroup()
281 OS << Arg->getValueAsString("Name") << ", "; in EmitGroup()
282 OS << "const SourceInfo &I);\n"; in EmitGroup()
283 OS << "#endif\n"; in EmitGroup()
286 OS << "#if defined(GET_EVAL_IMPL) || defined(GET_LINK_IMPL)\n"; in EmitGroup()
287 OS << "bool\n"; in EmitGroup()
288 OS << "#if defined(GET_EVAL_IMPL)\n"; in EmitGroup()
289 OS << "EvalEmitter\n"; in EmitGroup()
290 OS << "#else\n"; in EmitGroup()
291 OS << "ByteCodeEmitter\n"; in EmitGroup()
292 OS << "#endif\n"; in EmitGroup()
293 OS << "::" << EmitFuncName << "("; in EmitGroup()
295 OS << "PrimType T" << I << ", "; in EmitGroup()
301 OS << (AsRef ? "const " : " ") << Name << " " << (AsRef ? "&" : "") << "A" in EmitGroup()
304 OS << "const SourceInfo &I) {\n"; in EmitGroup()
308 Rec = [this, &Rec, &OS, Types, &Args, R, &TS, N, in EmitGroup()
314 OS << "#ifdef GET_LINK_IMPL\n"; in EmitGroup()
315 OS << " return emit" << ID << "\n"; in EmitGroup()
316 OS << "#else\n"; in EmitGroup()
317 OS << " return emit" << N; in EmitGroup()
318 PrintTypes(OS, TS); in EmitGroup()
319 OS << "\n#endif\n"; in EmitGroup()
320 OS << " "; in EmitGroup()
322 OS << " return emit" << ID; in EmitGroup()
325 OS << "("; in EmitGroup()
327 OS << "A" << I << ", "; in EmitGroup()
329 OS << "I);\n"; in EmitGroup()
335 OS << " switch (T" << I << ") {\n"; in EmitGroup()
338 OS << " case PT_" << Case->getName() << ":\n"; in EmitGroup()
345 OS << " default: llvm_unreachable(\"invalid type: " << EmitFuncName in EmitGroup()
347 OS << " }\n"; in EmitGroup()
348 OS << " llvm_unreachable(\"invalid enum value\");\n"; in EmitGroup()
355 OS << "}\n"; in EmitGroup()
356 OS << "#endif\n"; in EmitGroup()
359 void ClangOpcodesEmitter::EmitEval(raw_ostream &OS, StringRef N, in EmitEval() argument
364 OS << "#ifdef GET_EVAL_IMPL\n"; in EmitEval()
366 [this, R, &N, &OS](ArrayRef<const Record *> TS, const Twine &ID) { in EmitEval()
369 OS << "bool EvalEmitter::emit" << ID << "("; in EmitEval()
375 OS << (AsRef ? "const " : " ") << Name << " " in EmitEval()
378 OS << "const SourceInfo &L) {\n"; in EmitEval()
379 OS << " if (!isActive()) return true;\n"; in EmitEval()
380 OS << " CurrentSource = L;\n"; in EmitEval()
382 OS << " return " << N; in EmitEval()
383 PrintTypes(OS, TS); in EmitEval()
384 OS << "(S, OpPC"; in EmitEval()
386 OS << ", A" << I; in EmitEval()
387 OS << ");\n"; in EmitEval()
388 OS << "}\n"; in EmitEval()
391 OS << "#endif\n"; in EmitEval()
394 void ClangOpcodesEmitter::PrintTypes(raw_ostream &OS, in PrintTypes() argument
398 OS << "<"; in PrintTypes()
401 OS << ", "; in PrintTypes()
402 OS << "PT_" << Types[I]->getName(); in PrintTypes()
404 OS << ">"; in PrintTypes()
407 void clang::EmitClangOpcodes(RecordKeeper &Records, raw_ostream &OS) { in EmitClangOpcodes() argument
408 ClangOpcodesEmitter(Records).run(OS); in EmitClangOpcodes()