Add operators for vmlal{_n,_lane} and vmlsl{_n,_lane}
so they can be implemented without clang builtins.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121209 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/TableGen/NeonEmitter.cpp b/utils/TableGen/NeonEmitter.cpp
index 935f7af..c7b3ec5 100644
--- a/utils/TableGen/NeonEmitter.cpp
+++ b/utils/TableGen/NeonEmitter.cpp
@@ -603,8 +603,7 @@
     break;
   case OpMullLane:
     s += Extend(proto, typestr, "__a") + " * " +
-      Extend(proto, typestr,
-             SplatLane(nElts, "__b", "__c")) + ";";
+      Extend(proto, typestr, SplatLane(nElts, "__b", "__c")) + ";";
     break;
   case OpMull:
     s += Extend(proto, typestr, "__a") + " * " +
@@ -619,6 +618,18 @@
   case OpMla:
     s += "__a + (__b * __c);";
     break;
+  case OpMlalN:
+    s += "__a + (" + Extend(proto, typestr, "__b") + " * " +
+      Extend(proto, typestr, Duplicate(nElts, typestr, "__c")) + ");";
+    break;
+  case OpMlalLane:
+    s += "__a + (" + Extend(proto, typestr, "__b") + " * " +
+      Extend(proto, typestr, SplatLane(nElts, "__c", "__d")) + ");";
+    break;
+  case OpMlal:
+    s += "__a + (" + Extend(proto, typestr, "__b") + " * " +
+      Extend(proto, typestr, "__c") + ");";
+    break;
   case OpMlsN:
     s += "__a - (__b * " + Duplicate(nElts, typestr, "__c") + ");";
     break;
@@ -628,6 +639,18 @@
   case OpMls:
     s += "__a - (__b * __c);";
     break;
+  case OpMlslN:
+    s += "__a - (" + Extend(proto, typestr, "__b") + " * " +
+      Extend(proto, typestr, Duplicate(nElts, typestr, "__c")) + ");";
+    break;
+  case OpMlslLane:
+    s += "__a - (" + Extend(proto, typestr, "__b") + " * " +
+      Extend(proto, typestr, SplatLane(nElts, "__c", "__d")) + ");";
+    break;
+  case OpMlsl:
+    s += "__a - (" + Extend(proto, typestr, "__b") + " * " +
+      Extend(proto, typestr, "__c") + ");";
+    break;
   case OpEq:
     s += "(" + ts + ")(__a == __b);";
     break;