diff options
author | Chris Lattner <sabre@nondot.org> | 2003-08-24 19:50:53 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-08-24 19:50:53 +0000 |
commit | 4d4f424f0ca9b69428ecda479a8501357c98b546 (patch) | |
tree | d5e230ba7636e108d3930dec2ccc195632f4b7ad /llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp | |
parent | 9cb8d7d0acfc1889276f706c4ad8a589439b41fa (diff) | |
download | bcm5719-llvm-4d4f424f0ca9b69428ecda479a8501357c98b546.tar.gz bcm5719-llvm-4d4f424f0ca9b69428ecda479a8501357c98b546.zip |
Targets now configure themselves based on the source module, not on the
ad-hoc "Config" flags
llvm-svn: 8134
Diffstat (limited to 'llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp index 4fdd6a1be7f..950e6a57273 100644 --- a/llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp +++ b/llvm/lib/ExecutionEngine/Interpreter/Interpreter.cpp @@ -7,27 +7,44 @@ //===----------------------------------------------------------------------===// #include "Interpreter.h" -#include "llvm/Target/TargetMachineImpls.h" +#include "llvm/Module.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); + bool isLittleEndian; + switch (M->getEndianness()) { + case Module::LittleEndian: isLittleEndian = true; break; + case Module::BigEndian: isLittleEndian = false; break; + case Module::AnyPointerSize: + int Test = 0; + *(char*)&Test = 1; // Return true if the host is little endian + isLittleEndian = (Test == 1); + break; + } + + bool isLongPointer; + switch (M->getPointerSize()) { + case Module::Pointer32: isLongPointer = false; break; + case Module::Pointer64: isLongPointer = true; break; + case Module::AnyPointerSize: + isLongPointer = (sizeof(void*) == 8); // Follow host + break; + } + + return new Interpreter(M, isLittleEndian, isLongPointer, DebugMode,TraceMode); } //===----------------------------------------------------------------------===// // Interpreter ctor - Initialize stuff // -Interpreter::Interpreter(Module *M, unsigned Config, - bool DebugMode, bool TraceMode) +Interpreter::Interpreter(Module *M, bool isLittleEndian, bool isLongPointer, + bool DebugMode, bool TraceMode) : ExecutionEngine(M), ExitCode(0), Debug(DebugMode), Trace(TraceMode), - CurFrame(-1), TD("lli", (Config & TM::EndianMask) == TM::LittleEndian, - (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4, - (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4, - (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4) { + CurFrame(-1), TD("lli", isLittleEndian, isLongPointer ? 8 : 4, + isLongPointer ? 8 : 4, isLongPointer ? 8 : 4) { setTargetData(TD); // Initialize the "backend" |