1 #include "stdafx.h" 2 #include "Mips.h" 3 #include "MipsParser.h" 4 #include "MipsExpressionFunctions.h" 5 #include "MipsElfRelocator.h" 6 7 CMipsArchitecture Mips; 8 CMipsArchitecture()9CMipsArchitecture::CMipsArchitecture() 10 { 11 FixLoadDelay = false; 12 IgnoreLoadDelay = false; 13 LoadDelay = false; 14 LoadDelayRegister = 0; 15 DelaySlot = false; 16 Version = MARCH_INVALID; 17 } 18 parseDirective(Parser & parser)19std::unique_ptr<CAssemblerCommand> CMipsArchitecture::parseDirective(Parser& parser) 20 { 21 MipsParser mipsParser; 22 return mipsParser.parseDirective(parser); 23 } 24 parseOpcode(Parser & parser)25std::unique_ptr<CAssemblerCommand> CMipsArchitecture::parseOpcode(Parser& parser) 26 { 27 MipsParser mipsParser; 28 29 std::unique_ptr<CAssemblerCommand> macro = mipsParser.parseMacro(parser); 30 if (macro != nullptr) 31 return macro; 32 33 return mipsParser.parseOpcode(parser); 34 } 35 getExpressionFunctions()36const ExpressionFunctionMap& CMipsArchitecture::getExpressionFunctions() 37 { 38 return mipsExpressionFunctions; 39 } 40 NextSection()41void CMipsArchitecture::NextSection() 42 { 43 LoadDelay = false; 44 LoadDelayRegister = 0; 45 DelaySlot = false; 46 } 47 Revalidate()48void CMipsArchitecture::Revalidate() 49 { 50 LoadDelay = false; 51 LoadDelayRegister = 0; 52 DelaySlot = false; 53 } 54 getElfRelocator()55std::unique_ptr<IElfRelocator> CMipsArchitecture::getElfRelocator() 56 { 57 switch (Version) 58 { 59 case MARCH_PS2: 60 case MARCH_PSP: 61 case MARCH_N64: 62 return make_unique<MipsElfRelocator>(); 63 case MARCH_PSX: 64 case MARCH_RSP: 65 default: 66 return nullptr; 67 } 68 } 69 SetLoadDelay(bool Delay,int Register)70void CMipsArchitecture::SetLoadDelay(bool Delay, int Register) 71 { 72 LoadDelay = Delay; 73 LoadDelayRegister = Register; 74 } 75