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) {
95 EmitEnum(OS, N, Opcode);
96 EmitInterp(OS, N, Opcode);
97 EmitDisasm(OS, N, Opcode);
98 EmitProto(OS, N, Opcode);
99 EmitGroup(OS, N, Opcode);
100 EmitEmitter(OS, N, Opcode);
101 EmitEval(OS, N, Opcode);
105 void ClangOpcodesEmitter::EmitEnum(raw_ostream &OS, StringRef N, Record *R) {
106 OS << "#ifdef GET_OPCODE_NAMES\n";
107 Enumerate(R, N, [&OS](ArrayRef<Record *>, const Twine &ID) {
108 OS << "OP_" << ID << ",\n";
110 OS << "#endif\n";
113 void ClangOpcodesEmitter::EmitInterp(raw_ostream &OS, StringRef N, Record *R) {
114 OS << "#ifdef GET_INTERP\n";
116 Enumerate(R, N, [this, R, &OS, &N](ArrayRef<Record *> TS, const Twine &ID) {
121 OS << "case OP_" << ID << ": {\n";
125 OS << "\tauto V" << I;
126 OS << " = ";
127 OS << "PC.read<" << Args[I]->getValueAsString("Name") << ">();\n";
131 OS << "\tif (!" << N;
132 PrintTypes(OS, TS);
133 OS << "(S";
135 OS << ", PC";
137 OS << ", OpPC";
139 OS << ", Result";
141 OS << ", V" << I;
142 OS << "))\n";
143 OS << "\t\treturn false;\n";
147 OS << "\tif (!S.Current || S.Current->isRoot())\n";
148 OS << "\t\treturn true;\n";
151 OS << "\tcontinue;\n";
152 OS << "}\n";
154 OS << "#endif\n";
157 void ClangOpcodesEmitter::EmitDisasm(raw_ostream &OS, StringRef N, Record *R) {
158 OS << "#ifdef GET_DISASM\n";
159 Enumerate(R, N, [R, &OS](ArrayRef<Record *>, const Twine &ID) {
160 OS << "case OP_" << ID << ":\n";
161 OS << "\tPrintName(\"" << ID << "\");\n";
162 OS << "\tOS << \"\\t\"";
165 OS << " << PC.read<" << Arg->getValueAsString("Name") << ">() << \" \"";
167 OS << "<< \"\\n\";\n";
168 OS << "\tcontinue;\n";
170 OS << "#endif\n";
173 void ClangOpcodesEmitter::EmitEmitter(raw_ostream &OS, StringRef N, Record *R) {
177 OS << "#ifdef GET_LINK_IMPL\n";
178 Enumerate(R, N, [R, &OS](ArrayRef<Record *>, const Twine &ID) {
182 OS << "bool ByteCodeEmitter::emit" << ID << "(";
184 OS << Args[I]->getValueAsString("Name") << " A" << I << ",";
185 OS << "const SourceInfo &L) {\n";
188 OS << "\treturn emitOp<";
191 OS << ", ";
192 OS << Args[I]->getValueAsString("Name");
194 OS << ">(OP_" << ID;
196 OS << ", A" << I;
197 OS << ", L);\n";
198 OS << "}\n";
200 OS << "#endif\n";
203 void ClangOpcodesEmitter::EmitProto(raw_ostream &OS, StringRef N, Record *R) {
204 OS << "#if defined(GET_EVAL_PROTO) || defined(GET_LINK_PROTO)\n";
206 Enumerate(R, N, [&OS, &Args](ArrayRef<Record *> TS, const Twine &ID) {
207 OS << "bool emit" << ID << "(";
209 OS << Arg->getValueAsString("Name") << ", ";
210 OS << "const SourceInfo &);\n";
216 OS << "#if defined(GET_EVAL_PROTO)\n";
217 OS << "template<";
220 OS << ", ";
221 OS << "PrimType";
223 OS << ">\n";
224 OS << "bool emit" << N << "(";
226 OS << Arg->getValueAsString("Name") << ", ";
227 OS << "const SourceInfo &);\n";
228 OS << "#endif\n";
231 OS << "#endif\n";
234 void ClangOpcodesEmitter::EmitGroup(raw_ostream &OS, StringRef N, Record *R) {
242 OS << "#if defined(GET_EVAL_PROTO) || defined(GET_LINK_PROTO)\n";
243 OS << "bool emit" << N << "(";
245 OS << "PrimType, ";
247 OS << Arg->getValueAsString("Name") << ", ";
248 OS << "const SourceInfo &I);\n";
249 OS << "#endif\n";
252 OS << "#if defined(GET_EVAL_IMPL) || defined(GET_LINK_IMPL)\n";
253 OS << "bool \n";
254 OS << "#if defined(GET_EVAL_IMPL)\n";
255 OS << "EvalEmitter\n";
256 OS << "#else\n";
257 OS << "ByteCodeEmitter\n";
258 OS << "#endif\n";
259 OS << "::emit" << N << "(";
261 OS << "PrimType T" << I << ", ";
263 OS << Args[I]->getValueAsString("Name") << " A" << I << ", ";
264 OS << "const SourceInfo &I) {\n";
268 Rec = [this, &Rec, &OS, Types, &Args, R, &TS, N](size_t I, const Twine &ID) {
273 OS << "#ifdef GET_LINK_IMPL\n";
274 OS << "return emit" << ID << "\n";
275 OS << "#else\n";
276 OS << "return emit" << N;
277 PrintTypes(OS, TS);
278 OS << "\n#endif\n";
280 OS << "return emit" << ID;
283 OS << "(";
285 OS << "A" << I << ", ";
287 OS << "I);\n";
293 OS << "switch (T" << I << "){\n";
296 OS << "case PT_" << Case->getName() << ":\n";
303 OS << "default: llvm_unreachable(\"invalid type\");\n";
304 OS << "}\n";
305 OS << "llvm_unreachable(\"invalid enum value\");\n";
312 OS << "}\n";
313 OS << "#endif\n";
316 void ClangOpcodesEmitter::EmitEval(raw_ostream &OS, StringRef N, Record *R) {
320 OS << "#ifdef GET_EVAL_IMPL\n";
321 Enumerate(R, N, [this, R, &N, &OS](ArrayRef<Record *> TS, const Twine &ID) {
324 OS << "bool EvalEmitter::emit" << ID << "(";
326 OS << Args[I]->getValueAsString("Name") << " A" << I << ",";
327 OS << "const SourceInfo &L) {\n";
328 OS << "if (!isActive()) return true;\n";
329 OS << "CurrentSource = L;\n";
331 OS << "return " << N;
332 PrintTypes(OS, TS);
333 OS << "(S, OpPC";
335 OS << ", A" << I;
336 OS << ");\n";
337 OS << "}\n";
340 OS << "#endif\n";
343 void ClangOpcodesEmitter::PrintTypes(raw_ostream &OS, ArrayRef<Record *> Types) {
346 OS << "<";
349 OS << ", ";
350 OS << "PT_" << Types[I]->getName();
352 OS << ">";
355 void clang::EmitClangOpcodes(RecordKeeper &Records, raw_ostream &OS) {
356 ClangOpcodesEmitter(Records).run(OS);