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;
+}
+
