mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-31 08:16:47 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5126 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //===- 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;
 | |
| }
 | |
| 
 |