diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-11-29 19:32:59 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-11-29 19:32:59 -0800 |
commit | 6288df128312ece48313f463ec8ce75738bb04b4 (patch) | |
tree | ce23f52fb17ed473da908123826ec10d98e4257f | |
parent | ed1a15edbef7a8b4c03903f04b7c918a7b876391 (diff) |
handle memmove intrinsic
-rw-r--r-- | lib/Target/CppBackend/CPPBackend.cpp | 10 | ||||
-rw-r--r-- | lib/Target/CppBackend/CallHandlers.h | 8 |
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) { |