[llvm-commits] [llvm] r105316 - /llvm/trunk/utils/TableGen/NeonEmitter.cpp
Nate Begeman
natebegeman at mac.com
Wed Jun 2 00:14:28 PDT 2010
Author: sampo
Date: Wed Jun 2 02:14:28 2010
New Revision: 105316
URL: http://llvm.org/viewvc/llvm-project?rev=105316&view=rev
Log:
Checkpoint; handle 'int' and 'void' correctly
Modified:
llvm/trunk/utils/TableGen/NeonEmitter.cpp
Modified: llvm/trunk/utils/TableGen/NeonEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/NeonEmitter.cpp?rev=105316&r1=105315&r2=105316&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/NeonEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/NeonEmitter.cpp Wed Jun 2 02:14:28 2010
@@ -23,6 +23,27 @@
using namespace llvm;
+enum OpKind {
+ OpNone,
+ OpAdd,
+ OpSub,
+ OpMul,
+ OpMla,
+ OpMls,
+ OpEq,
+ OpGe,
+ OpLe,
+ OpGt,
+ OpLt,
+ OpNeg,
+ OpNot,
+ OpAnd,
+ OpOr,
+ OpXor,
+ OpAndNot,
+ OpOrNot
+};
+
static void ParseTypes(Record *r, std::string &s,
SmallVectorImpl<StringRef> &TV) {
const char *data = s.data();
@@ -103,10 +124,9 @@
// Based on the modifying character, change the type and width if necessary.
switch (mod) {
case 'v':
- type = 'v';
- scal = true;
- usgn = false;
- break;
+ return "void";
+ case 'i':
+ return "int";
case 't':
if (poly) {
poly = false;
@@ -128,11 +148,6 @@
case 'n':
type = Widen(type);
break;
- case 'i':
- type = 'i';
- scal = true;
- usgn = false;
- break;
case 'l':
type = 'l';
scal = true;
@@ -196,9 +211,6 @@
break;
s += quad ? "x4" : "x2";
break;
- case 'v':
- s += "void";
- break;
default:
throw "unhandled type!";
break;
@@ -284,6 +296,18 @@
return s;
}
+static OpKind ParseOp(Record *R) {
+ return OpNone;
+}
+
+static std::string GenOpstring(OpKind op) {
+ return "";
+}
+
+static std::string GenBuiltin(std::string &name) {
+ return "";
+}
+
void NeonEmitter::run(raw_ostream &OS) {
EmitSourceFileHeader("ARM NEON Header", OS);
@@ -302,8 +326,6 @@
std::vector<Record*> RV = Records.getAllDerivedDefinitions("Inst");
- // Initialize Type Map
-
// Unique the return+pattern types, and assign them.
for (unsigned i = 0, e = RV.size(); i != e; ++i) {
Record *R = RV[i];
@@ -314,24 +336,29 @@
SmallVector<StringRef, 16> TypeVec;
ParseTypes(R, Types, TypeVec);
+ OpKind k = ParseOp(R);
+
for (unsigned ti = 0, te = TypeVec.size(); ti != te; ++ti) {
assert(!Proto.empty() && "");
- SmallString<128> Prototype;
- Prototype += TypeString(Proto[0], TypeVec[ti]);
- Prototype += " ";
- Prototype += MangleName(name, TypeVec[ti]);
- Prototype += GenArgs(Proto, TypeVec[ti]);
+ // Return type
+ OS << TypeString(Proto[0], TypeVec[ti]);
- OS << Prototype << ";\n";
+ // Function name with type suffix
+ OS << " " << MangleName(name, TypeVec[ti]);
- // gen definition
-
- // if (opcode)
+ // Function arguments
+ OS << GenArgs(Proto, TypeVec[ti]);
- // gen opstring
+ // Definition.
+ OS << " { ";
- // gen builtin (args)
+ if (k != OpNone)
+ OS << GenOpstring(k);
+ else
+ OS << GenBuiltin(name);
+
+ OS << "}\n";
}
OS << "\n";
}
More information about the llvm-commits
mailing list