diff options
author | Chris Lattner <sabre@nondot.org> | 2002-12-24 00:01:05 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-12-24 00:01:05 +0000 |
commit | bd199fb1148b9e16c4e6f3d0ee386c2505a55b71 (patch) | |
tree | 226f64cc95160ebd8da8d2ec4cfaf2babf7c3879 /lib/ExecutionEngine/Interpreter/Interpreter.cpp | |
parent | fe11a97fcde7c63109c3ad36570657807d0cd6ef (diff) | |
download | external_llvm-bd199fb1148b9e16c4e6f3d0ee386c2505a55b71.zip external_llvm-bd199fb1148b9e16c4e6f3d0ee386c2505a55b71.tar.gz external_llvm-bd199fb1148b9e16c4e6f3d0ee386c2505a55b71.tar.bz2 |
Initial checkin of new LLI with JIT compiler
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5126 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/Interpreter/Interpreter.cpp')
-rw-r--r-- | lib/ExecutionEngine/Interpreter/Interpreter.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp new file mode 100644 index 0000000..678c77a --- /dev/null +++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp @@ -0,0 +1,56 @@ +//===- Interpreter.cpp - Top-Level LLVM Interpreter Implementation --------===// +// +// This file implements the top-level functionality for the LLVM interpreter. +// This interpreter is designed to be a very simple, portable, inefficient +// interpreter. +// +//===----------------------------------------------------------------------===// + +#include "Interpreter.h" +#include "llvm/Target/TargetMachineImpls.h" + +/// createInterpreter - Create a new interpreter object. This can never fail. +/// +ExecutionEngine *ExecutionEngine::createInterpreter(Module *M, + unsigned Config, + bool DebugMode, + bool TraceMode) { + return new Interpreter(M, Config, DebugMode, TraceMode); +} + +//===----------------------------------------------------------------------===// +// Interpreter ctor - Initialize stuff +// +Interpreter::Interpreter(Module *M, unsigned Config, + bool DebugMode, bool TraceMode) + : ExecutionEngine(M), ExitCode(0), Debug(DebugMode), Trace(TraceMode), + CurFrame(-1), TD("lli", (Config & TM::EndianMask) == TM::LittleEndian, + 1, 4, + (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4, + (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4) { + + setTargetData(TD); + // Initialize the "backend" + initializeExecutionEngine(); + initializeExternalMethods(); + CW.setModule(M); // Update Writer +} + +/// run - Start execution with the specified function and arguments. +/// +int Interpreter::run(const std::string &MainFunction, + const std::vector<std::string> &Args) { + // Start interpreter into the main function... + // + if (!callMainMethod(MainFunction, Args) && !Debug) { + // If not in debug mode and if the call succeeded, run the code now... + run(); + } + + // If debug mode, allow the user to interact... also, if the user pressed + // ctrl-c or execution hit an error, enter the event loop... + if (Debug || isStopped()) + handleUserInput(); + return ExitCode; +} + |