diff options
author | Chris Lattner <sabre@nondot.org> | 2003-05-08 16:52:43 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-05-08 16:52:43 +0000 |
commit | 525e251c4ebaef26d3c5ed8316b985b00896e655 (patch) | |
tree | d2872b319544092442086f2b74e1a16f1f2be04f /llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | |
parent | 7f389e8cf9288eaef0d6d25426d64bca444fc969 (diff) | |
download | llvm-525e251c4ebaef26d3c5ed8316b985b00896e655.zip llvm-525e251c4ebaef26d3c5ed8316b985b00896e655.tar.gz llvm-525e251c4ebaef26d3c5ed8316b985b00896e655.tar.bz2 |
Implement varargs support for LLI!
llvm-svn: 6043
Diffstat (limited to 'llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp index ef81c12..88b994c 100644 --- a/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp +++ b/llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp @@ -695,6 +695,35 @@ GenericValue lle_X_fprintf(FunctionType *M, const vector<GenericValue> &Args) { return GV; } +//===----------------------------------------------------------------------===// +// LLVM Intrinsic Functions... +//===----------------------------------------------------------------------===// + +// void llvm.va_start(<va_list> *) - Implement the va_start operation... +GenericValue llvm_va_start(FunctionType *F, const vector<GenericValue> &Args) { + assert(Args.size() == 1); + GenericValue *VAListP = (GenericValue *)GVTOP(Args[0]); + GenericValue Val; + Val.UIntVal = 0; // Start at the first '...' argument... + TheInterpreter->StoreValueToMemory(Val, VAListP, Type::UIntTy); + return GenericValue(); +} + +// void llvm.va_end(<va_list> *) - Implement the va_end operation... +GenericValue llvm_va_end(FunctionType *F, const vector<GenericValue> &Args) { + assert(Args.size() == 1); + return GenericValue(); // Noop! +} + +// void llvm.va_copy(<va_list> *, <va_list>) - Implement the va_copy +// operation... +GenericValue llvm_va_copy(FunctionType *F, const vector<GenericValue> &Args) { + assert(Args.size() == 2); + GenericValue *DestVAList = (GenericValue*)GVTOP(Args[0]); + TheInterpreter->StoreValueToMemory(Args[1], DestVAList, Type::UIntTy); + return GenericValue(); +} + } // End extern "C" @@ -748,4 +777,8 @@ void Interpreter::initializeExternalFunctions() { FuncNames["lle_X_ungetc"] = lle_X_ungetc; FuncNames["lle_X_fprintf"] = lle_X_fprintf; FuncNames["lle_X_freopen"] = lle_X_freopen; + + FuncNames["lle_X_llvm.va_start"]= llvm_va_start; + FuncNames["lle_X_llvm.va_end"] = llvm_va_end; + FuncNames["lle_X_llvm.va_copy"] = llvm_va_copy; } |