Add an operator for vmull_lane so it can be implemented without a clang builtin.
authorBob Wilson <bob.wilson@apple.com>
Tue, 7 Dec 2010 22:02:48 +0000 (22:02 +0000)
committerBob Wilson <bob.wilson@apple.com>
Tue, 7 Dec 2010 22:02:48 +0000 (22:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121187 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/NeonEmitter.cpp
utils/TableGen/NeonEmitter.h

index 7fdc1cacd69b434688440a8632b15819d0077536..d3a068091ce080c849a604547e5cc583f7e4cca6 100644 (file)
@@ -601,6 +601,11 @@ static std::string GenOpString(OpKind op, const std::string &proto,
       Extend(proto, typestr,
              Duplicate(nElts << (int)quad, typestr, "__b")) + ";";
     break;
+  case OpMullLane:
+    s += Extend(proto, typestr, "__a") + " * " +
+      Extend(proto, typestr,
+             SplatLane(nElts, "__b", "__c")) + ";";
+    break;
   case OpMull:
     s += Extend(proto, typestr, "__a") + " * " +
       Extend(proto, typestr, "__b") + ";";
index 0ee856c26bdffebfc66554b0e7d2a04180df8793..5351bbe75cd3a6df5c9ed4295d765abaa08908f1 100644 (file)
@@ -34,6 +34,7 @@ enum OpKind {
   OpMlaN,
   OpMlsN,
   OpMulLane,
+  OpMullLane,
   OpMlaLane,
   OpMlsLane,
   OpEq,
@@ -89,6 +90,7 @@ namespace llvm {
       OpMap["OP_MLA_N"] = OpMlaN;
       OpMap["OP_MLS_N"] = OpMlsN;
       OpMap["OP_MUL_LN"]= OpMulLane;
+      OpMap["OP_MULL_LN"] = OpMullLane;
       OpMap["OP_MLA_LN"]= OpMlaLane;
       OpMap["OP_MLS_LN"]= OpMlsLane;
       OpMap["OP_EQ"]    = OpEq;