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()9 CMipsArchitecture::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)19 std::unique_ptr<CAssemblerCommand> CMipsArchitecture::parseDirective(Parser& parser)
20 {
21 	MipsParser mipsParser;
22 	return mipsParser.parseDirective(parser);
23 }
24 
parseOpcode(Parser & parser)25 std::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()36 const ExpressionFunctionMap& CMipsArchitecture::getExpressionFunctions()
37 {
38 	return mipsExpressionFunctions;
39 }
40 
NextSection()41 void CMipsArchitecture::NextSection()
42 {
43 	LoadDelay = false;
44 	LoadDelayRegister = 0;
45 	DelaySlot = false;
46 }
47 
Revalidate()48 void CMipsArchitecture::Revalidate()
49 {
50 	LoadDelay = false;
51 	LoadDelayRegister = 0;
52 	DelaySlot = false;
53 }
54 
getElfRelocator()55 std::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)70 void CMipsArchitecture::SetLoadDelay(bool Delay, int Register)
71 {
72 	LoadDelay = Delay;
73 	LoadDelayRegister = Register;
74 }
75