diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-12-01 23:34:11 -0500 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-12-01 23:34:11 -0500 |
commit | 7c8ec41d5fea9846493dbe27e8cabc2ac03d0534 (patch) | |
tree | 4ba4f4bd35d5a792b3401ca383eafd40bb7a5024 | |
parent | 692bf73a7a379229dd55bb596a620693c20b5a42 (diff) |
redirect putc->fputc
-rw-r--r-- | lib/Target/CppBackend/CallHandlers.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/Target/CppBackend/CallHandlers.h b/lib/Target/CppBackend/CallHandlers.h index 34c8c9b9d0..77461b220d 100644 --- a/lib/Target/CppBackend/CallHandlers.h +++ b/lib/Target/CppBackend/CallHandlers.h @@ -2,19 +2,20 @@ // // Each handler needs DEF_CALL_HANDLER and SETUP_CALL_HANDLER -typedef std::string (CppWriter::*CallHandler)(const CallInst*, std::string Name, unsigned NumArgs); +typedef std::string (CppWriter::*CallHandler)(const CallInst*, std::string Name, int NumArgs); typedef std::map<std::string, CallHandler> CallHandlerMap; CallHandlerMap *CallHandlers; // Definitions #define DEF_CALL_HANDLER(Ident, Code) \ - std::string CH_##Ident(const CallInst *CI, std::string Name, unsigned NumArgs) { Code } + std::string CH_##Ident(const CallInst *CI, std::string Name, int NumArgs=-1) { Code } DEF_CALL_HANDLER(__default__, { Type *RT = CI->getType(); std::string text = Name + "("; - for (unsigned i = 0; i < NumArgs; i++) { + if (NumArgs == -1) NumArgs = CI->getNumOperands(); + for (int i = 0; i < NumArgs; i++) { text += getValueAsCastStr(CI->getArgOperand(i)); // FIXME: differentiate ffi calls if (i < NumArgs - 1) text += ", "; } @@ -35,7 +36,7 @@ DEF_CALL_HANDLER(llvm_memcpy_p0i8_p0i8_i32, { }) DEF_CALL_HANDLER(llvm_memset_p0i8_i32, { - Declares.insert("memmset"); + Declares.insert("memset"); return CH___default__(CI, "_memset", 3) + "|0"; }) @@ -44,6 +45,14 @@ DEF_CALL_HANDLER(llvm_memmove_p0i8_p0i8_i32, { return CH___default__(CI, "_memmove", 3) + "|0"; }) +#define DEF_REDIRECT_HANDLER_i(name, to) \ +DEF_CALL_HANDLER(name, { \ + Declares.insert(#to); \ + return CH___default__(CI, "_" #to) + "|0"; \ +}) + +DEF_REDIRECT_HANDLER_i(putc, fputc); + // Setups void setupCallHandlers() { @@ -56,6 +65,7 @@ void setupCallHandlers() { SETUP_CALL_HANDLER(llvm_memcpy_p0i8_p0i8_i32); SETUP_CALL_HANDLER(llvm_memset_p0i8_i32); SETUP_CALL_HANDLER(llvm_memmove_p0i8_p0i8_i32); + SETUP_CALL_HANDLER(putc); } std::string handleCall(const CallInst *CI) { |