[llvm-commits] [llvm] r121209 - in /llvm/trunk/utils/TableGen: NeonEmitter.cpp NeonEmitter.h
Bob Wilson
bob.wilson at apple.com
Tue Dec 7 15:53:38 PST 2010
Author: bwilson
Date: Tue Dec 7 17:53:37 2010
New Revision: 121209
URL: http://llvm.org/viewvc/llvm-project?rev=121209&view=rev
Log:
Add operators for vmlal{_n,_lane} and vmlsl{_n,_lane}
so they can be implemented without clang builtins.
Modified:
llvm/trunk/utils/TableGen/NeonEmitter.cpp
llvm/trunk/utils/TableGen/NeonEmitter.h
Modified: llvm/trunk/utils/TableGen/NeonEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/NeonEmitter.cpp?rev=121209&r1=121208&r2=121209&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/NeonEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/NeonEmitter.cpp Tue Dec 7 17:53:37 2010
@@ -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;
Modified: llvm/trunk/utils/TableGen/NeonEmitter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/NeonEmitter.h?rev=121209&r1=121208&r2=121209&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/NeonEmitter.h (original)
+++ llvm/trunk/utils/TableGen/NeonEmitter.h Tue Dec 7 17:53:37 2010
@@ -28,15 +28,21 @@
OpMul,
OpMull,
OpMla,
+ OpMlal,
OpMls,
+ OpMlsl,
OpMulN,
OpMullN,
OpMlaN,
OpMlsN,
+ OpMlalN,
+ OpMlslN,
OpMulLane,
OpMullLane,
OpMlaLane,
OpMlsLane,
+ OpMlalLane,
+ OpMlslLane,
OpEq,
OpGe,
OpLe,
@@ -85,15 +91,21 @@
OpMap["OP_MUL"] = OpMul;
OpMap["OP_MULL"] = OpMull;
OpMap["OP_MLA"] = OpMla;
+ OpMap["OP_MLAL"] = OpMlal;
OpMap["OP_MLS"] = OpMls;
+ OpMap["OP_MLSL"] = OpMlsl;
OpMap["OP_MUL_N"] = OpMulN;
OpMap["OP_MULL_N"]= OpMullN;
OpMap["OP_MLA_N"] = OpMlaN;
OpMap["OP_MLS_N"] = OpMlsN;
+ OpMap["OP_MLAL_N"] = OpMlalN;
+ OpMap["OP_MLSL_N"] = OpMlslN;
OpMap["OP_MUL_LN"]= OpMulLane;
OpMap["OP_MULL_LN"] = OpMullLane;
OpMap["OP_MLA_LN"]= OpMlaLane;
OpMap["OP_MLS_LN"]= OpMlsLane;
+ OpMap["OP_MLAL_LN"] = OpMlalLane;
+ OpMap["OP_MLSL_LN"] = OpMlslLane;
OpMap["OP_EQ"] = OpEq;
OpMap["OP_GE"] = OpGe;
OpMap["OP_LE"] = OpLe;
More information about the llvm-commits
mailing list