Add asm parsing support w/ testcases for strex/ldrex family of instructions
[oota-llvm.git] / utils / TableGen / NeonEmitter.cpp
index 4864db436213584f7a7703faac01be88eacdf96f..64224d9e51d0b79e78944b5144dfc7050899ab38 100644 (file)
@@ -576,9 +576,7 @@ static std::string GenOpString(OpKind op, const std::string &proto,
 
   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 ";
   }
 
@@ -727,10 +725,12 @@ static std::string GenOpString(OpKind op, const std::string &proto,
     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:
-    s += "(((float64x2_t)__a)[0]);";
+    s += "(" + ts +
+      ")__builtin_shufflevector((int64x2_t)__a, (int64x2_t)__a, 0);";
     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;
   }
-  if (op == OpHi || op == OpLo) {
-    if (!define)
-      s += " return";
-    s += " u.r;";
-  }
   return s;
 }
 
@@ -1135,11 +1130,6 @@ void NeonEmitter::run(raw_ostream &OS) {
     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) {
@@ -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"
-    "// RUN:  -target-cpu cortex-a8 -ffreestanding -S -o - %s | FileCheck %s\n"
+    "// RUN:  -target-cpu cortex-a9 -ffreestanding -S -o - %s | FileCheck %s\n"
     "\n"
     "#include <arm_neon.h>\n"
     "\n";