Checkpoint; handle 'int' and 'void' correctly

llvm-svn: 105316
This commit is contained in:
Nate Begeman 2010-06-02 07:14:28 +00:00
parent d86d60f91d
commit 68d0518b92
1 changed files with 52 additions and 25 deletions

View File

@ -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 @@ static std::string TypeString(const char mod, StringRef typestr) {
// 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 @@ static std::string TypeString(const char mod, StringRef typestr) {
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 @@ static std::string TypeString(const char mod, StringRef typestr) {
break;
s += quad ? "x4" : "x2";
break;
case 'v':
s += "void";
break;
default:
throw "unhandled type!";
break;
@ -284,6 +296,18 @@ static std::string GenArgs(const std::string &proto, StringRef typestr) {
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 @@ void NeonEmitter::run(raw_ostream &OS) {
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 @@ void NeonEmitter::run(raw_ostream &OS) {
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";
}