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 | 996fe0102878d706d47a06bc78d21d1f38ed2aec (patch) | |
tree | 8449f4d70e68c16bcb8a5b6ba2dfe8d01c6095b8 /llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp | |
parent | a0d7b084ef7faab8739ef3e9186fdf9a94c3ed22 (diff) | |
download | llvm-996fe0102878d706d47a06bc78d21d1f38ed2aec.zip llvm-996fe0102878d706d47a06bc78d21d1f38ed2aec.tar.gz llvm-996fe0102878d706d47a06bc78d21d1f38ed2aec.tar.bz2 |
Initial checkin of new LLI with JIT compiler
llvm-svn: 5126
Diffstat (limited to 'llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp new file mode 100644 index 0000000..678c77a --- /dev/null +++ b/llvm/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; +} + |