projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add asm parsing support w/ testcases for strex/ldrex family of instructions
[oota-llvm.git]
/
utils
/
TableGen
/
NeonEmitter.cpp
diff --git
a/utils/TableGen/NeonEmitter.cpp
b/utils/TableGen/NeonEmitter.cpp
index 4864db436213584f7a7703faac01be88eacdf96f..64224d9e51d0b79e78944b5144dfc7050899ab38 100644
(file)
--- a/
utils/TableGen/NeonEmitter.cpp
+++ b/
utils/TableGen/NeonEmitter.cpp
@@
-576,9
+576,7
@@
static std::string GenOpString(OpKind op, const std::string &proto,
std::string ts = TypeString(proto[0], typestr);
std::string s;
std::string ts = TypeString(proto[0], typestr);
std::string s;
- if (op == OpHi || op == OpLo) {
- s = "union { " + ts + " r; double d; } u; u.d = ";
- } else if (!define) {
+ if (!define) {
s = "return ";
}
s = "return ";
}
@@
-727,10
+725,12
@@
static std::string GenOpString(OpKind op, const std::string &proto,
s += ", (int64x1_t)__b, 0, 1);";
break;
case OpHi:
s += ", (int64x1_t)__b, 0, 1);";
break;
case OpHi:
- s += "(((float64x2_t)__a)[1]);";
+ s += "(" + ts +
+ ")__builtin_shufflevector((int64x2_t)__a, (int64x2_t)__a, 1);";
break;
case OpLo:
break;
case OpLo:
- s += "(((float64x2_t)__a)[0]);";
+ s += "(" + ts +
+ ")__builtin_shufflevector((int64x2_t)__a, (int64x2_t)__a, 0);";
break;
case OpDup:
s += Duplicate(nElts, typestr, "__a") + ";";
break;
case OpDup:
s += Duplicate(nElts, typestr, "__a") + ";";
@@
-804,11
+804,6
@@
static std::string GenOpString(OpKind op, const std::string &proto,
throw "unknown OpKind!";
break;
}
throw "unknown OpKind!";
break;
}
- if (op == OpHi || op == OpLo) {
- if (!define)
- s += " return";
- s += " u.r;";
- }
return s;
}
return s;
}
@@
-1135,11
+1130,6
@@
void NeonEmitter::run(raw_ostream &OS) {
OS << " " << TypeString('d', TDTypeVec[i]) << ";\n";
}
OS << "\n";
OS << " " << TypeString('d', TDTypeVec[i]) << ";\n";
}
OS << "\n";
- OS << "typedef __attribute__((__vector_size__(8))) "
- "double float64x1_t;\n";
- OS << "typedef __attribute__((__vector_size__(16))) "
- "double float64x2_t;\n";
- OS << "\n";
// Emit struct typedefs.
for (unsigned vi = 2; vi != 5; ++vi) {
// Emit struct typedefs.
for (unsigned vi = 2; vi != 5; ++vi) {
@@
-1492,7
+1482,7
@@
static std::string GenTest(const std::string &name,
void NeonEmitter::runTests(raw_ostream &OS) {
OS <<
"// RUN: %clang_cc1 -triple thumbv7-apple-darwin \\\n"
void NeonEmitter::runTests(raw_ostream &OS) {
OS <<
"// RUN: %clang_cc1 -triple thumbv7-apple-darwin \\\n"
- "// RUN: -target-cpu cortex-a
8
-ffreestanding -S -o - %s | FileCheck %s\n"
+ "// RUN: -target-cpu cortex-a
9
-ffreestanding -S -o - %s | FileCheck %s\n"
"\n"
"#include <arm_neon.h>\n"
"\n";
"\n"
"#include <arm_neon.h>\n"
"\n";