diff options
author | Chris Lattner <sabre@nondot.org> | 2003-12-26 06:13:47 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-12-26 06:13:47 +0000 |
commit | ff0f1bb32a439cf82cb09ee29544c894a2bfe877 (patch) | |
tree | f681403fb0cf5080b4013e2625f286aec817fae1 /lib/ExecutionEngine/JIT/JIT.cpp | |
parent | 2cab55d7e1bde83cd5f5dccee9a331ada8c1a67c (diff) |
No longer run atExit functions from run()
rename run to runFunction
Genericize the runFunction code a little bit, though it still stinks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10610 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/JIT/JIT.cpp')
-rw-r--r-- | lib/ExecutionEngine/JIT/JIT.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp index d39741438a..6a067fd054 100644 --- a/lib/ExecutionEngine/JIT/JIT.cpp +++ b/lib/ExecutionEngine/JIT/JIT.cpp @@ -51,22 +51,31 @@ JIT::~JIT() { /// run - Start execution with the specified function and arguments. /// -GenericValue JIT::run(Function *F, const std::vector<GenericValue> &ArgValues) { +GenericValue JIT::runFunction(Function *F, + const std::vector<GenericValue> &ArgValues) { assert (F && "Function *F was null at entry to run()"); + GenericValue rv; + + if (ArgValues.size() == 3) { + int (*PF)(int, char **, const char **) = + (int(*)(int, char **, const char **))getPointerToFunction(F); + assert(PF && "Pointer to fn's code was null after getPointerToFunction"); + + // Call the function. + int ExitCode = PF(ArgValues[0].IntVal, (char **) GVTOP (ArgValues[1]), + (const char **) GVTOP (ArgValues[2])); + + rv.IntVal = ExitCode; + } else { + // FIXME: This code should handle a couple of common cases efficiently, but + // it should also implement the general case by code-gening a new anonymous + // nullary function to call. + assert(ArgValues.size() == 1); + void (*PF)(int) = (void(*)(int))getPointerToFunction(F); + assert(PF && "Pointer to fn's code was null after getPointerToFunction"); + PF(ArgValues[0].IntVal); + } - int (*PF)(int, char **, const char **) = - (int(*)(int, char **, const char **))getPointerToFunction(F); - assert(PF != 0 && "Pointer to fn's code was null after getPointerToFunction"); - - // Call the function. - int ExitCode = PF(ArgValues[0].IntVal, (char **) GVTOP (ArgValues[1]), - (const char **) GVTOP (ArgValues[2])); - - // Run any atexit handlers now! - runAtExitHandlers(); - - GenericValue rv; - rv.IntVal = ExitCode; return rv; } |