summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2010-12-08 00:14:04 +0000
committerBob Wilson <bob.wilson@apple.com>2010-12-08 00:14:04 +0000
commite113ae56d9ee2fddce14f5caaae1229e70ee0a00 (patch)
treeadb056e7f2dc693a7f4b294188a516ffb3e7ee7b /utils
parent94541efd9238ee0ab615d22dcd6182199490ae61 (diff)
downloadllvm-e113ae56d9ee2fddce14f5caaae1229e70ee0a00.tar.gz
llvm-e113ae56d9ee2fddce14f5caaae1229e70ee0a00.tar.bz2
llvm-e113ae56d9ee2fddce14f5caaae1229e70ee0a00.tar.xz
Add operators for vadd[lw] and vsub[lw]
so they can be implemented without clang builtins. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121213 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/NeonEmitter.cpp14
-rw-r--r--utils/TableGen/NeonEmitter.h8
2 files changed, 22 insertions, 0 deletions
diff --git a/utils/TableGen/NeonEmitter.cpp b/utils/TableGen/NeonEmitter.cpp
index c7b3ec55a6..7a623583f3 100644
--- a/utils/TableGen/NeonEmitter.cpp
+++ b/utils/TableGen/NeonEmitter.cpp
@@ -584,9 +584,23 @@ static std::string GenOpString(OpKind op, const std::string &proto,
case OpAdd:
s += "__a + __b;";
break;
+ case OpAddl:
+ s += Extend(proto, typestr, "__a") + " + "
+ + Extend(proto, typestr, "__b") + ";";
+ break;
+ case OpAddw:
+ s += "__a + " + Extend(proto, typestr, "__b") + ";";
+ break;
case OpSub:
s += "__a - __b;";
break;
+ case OpSubl:
+ s += Extend(proto, typestr, "__a") + " - "
+ + Extend(proto, typestr, "__b") + ";";
+ break;
+ case OpSubw:
+ s += "__a - " + Extend(proto, typestr, "__b") + ";";
+ break;
case OpMulN:
s += "__a * " + Duplicate(nElts, typestr, "__b") + ";";
break;
diff --git a/utils/TableGen/NeonEmitter.h b/utils/TableGen/NeonEmitter.h
index 4c5889388b..6c0937b357 100644
--- a/utils/TableGen/NeonEmitter.h
+++ b/utils/TableGen/NeonEmitter.h
@@ -24,7 +24,11 @@
enum OpKind {
OpNone,
OpAdd,
+ OpAddl,
+ OpAddw,
OpSub,
+ OpSubl,
+ OpSubw,
OpMul,
OpMull,
OpMla,
@@ -87,7 +91,11 @@ namespace llvm {
NeonEmitter(RecordKeeper &R) : Records(R) {
OpMap["OP_NONE"] = OpNone;
OpMap["OP_ADD"] = OpAdd;
+ OpMap["OP_ADDL"] = OpAddl;
+ OpMap["OP_ADDW"] = OpAddw;
OpMap["OP_SUB"] = OpSub;
+ OpMap["OP_SUBL"] = OpSubl;
+ OpMap["OP_SUBW"] = OpSubw;
OpMap["OP_MUL"] = OpMul;
OpMap["OP_MULL"] = OpMull;
OpMap["OP_MLA"] = OpMla;