aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-11-29 19:32:59 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-11-29 19:32:59 -0800
commit6288df128312ece48313f463ec8ce75738bb04b4 (patch)
treece23f52fb17ed473da908123826ec10d98e4257f
parented1a15edbef7a8b4c03903f04b7c918a7b876391 (diff)
handle memmove intrinsic
-rw-r--r--lib/Target/CppBackend/CPPBackend.cpp10
-rw-r--r--lib/Target/CppBackend/CallHandlers.h8
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp
index 8bdbc5852f..f43530e8b8 100644
--- a/lib/Target/CppBackend/CPPBackend.cpp
+++ b/lib/Target/CppBackend/CPPBackend.cpp
@@ -139,6 +139,7 @@ namespace {
HeapData GlobalData64;
GlobalAddressMap GlobalAddresses;
NameSet Externals;
+ NameSet Declares;
std::string PostSets;
#include "CallHandlers.h"
@@ -2282,6 +2283,15 @@ void CppWriter::printModuleBody() {
Out << "\"" + I->getName() + "\"";
}
}
+ for (NameSet::iterator I = Declares.begin(), E = Declares.end();
+ I != E; ++I) {
+ if (first) {
+ first = false;
+ } else {
+ Out << ", ";
+ }
+ Out << "\"" + *I + "\"";
+ }
Out << "],";
Out << "\"externs\": [";
first = true;
diff --git a/lib/Target/CppBackend/CallHandlers.h b/lib/Target/CppBackend/CallHandlers.h
index 3fc7d9a875..34c8c9b9d0 100644
--- a/lib/Target/CppBackend/CallHandlers.h
+++ b/lib/Target/CppBackend/CallHandlers.h
@@ -30,13 +30,20 @@ DEF_CALL_HANDLER(llvm_nacl_atomic_store_i32, {
})
DEF_CALL_HANDLER(llvm_memcpy_p0i8_p0i8_i32, {
+ Declares.insert("memcpy");
return CH___default__(CI, "_memcpy", 3) + "|0";
})
DEF_CALL_HANDLER(llvm_memset_p0i8_i32, {
+ Declares.insert("memmset");
return CH___default__(CI, "_memset", 3) + "|0";
})
+DEF_CALL_HANDLER(llvm_memmove_p0i8_p0i8_i32, {
+ Declares.insert("memmove");
+ return CH___default__(CI, "_memmove", 3) + "|0";
+})
+
// Setups
void setupCallHandlers() {
@@ -48,6 +55,7 @@ void setupCallHandlers() {
SETUP_CALL_HANDLER(llvm_nacl_atomic_store_i32);
SETUP_CALL_HANDLER(llvm_memcpy_p0i8_p0i8_i32);
SETUP_CALL_HANDLER(llvm_memset_p0i8_i32);
+ SETUP_CALL_HANDLER(llvm_memmove_p0i8_p0i8_i32);
}
std::string handleCall(const CallInst *CI) {