-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmipsCode.h
More file actions
65 lines (59 loc) · 1.72 KB
/
mipsCode.h
File metadata and controls
65 lines (59 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#pragma once
#include<vector>
#include<string>
#include<map>
#include<utility>
#include<algorithm>
#include "outputHandler.h"
using namespace std;
class mipsCode
{
public:
mipsCode(vector<vector<string>> midCode,string filename,bool opMark);
private:
vector<vector<string>> midCode;
vector<string> mipsCodes;
string filename;
vector<string> freeRegs;
vector<string> busyRegs;
map<string, string> registers;//register, variable
map<string, string> variables;//variable, register
map<string, int> variableAdd;//global variable, address
vector<pair<map<string, int>,int>> localVarAdd;
map<string, int> funcScope;
int dataPosition;
int heapPosition;
int scopeNum;
int scopeSize;
bool saveMark;
vector<int> ParaNumList;
//use to mark if it is the first parameter when we call a function
void inlineOptimal();
void outputNewMidCode();
vector<vector<string>> newMidCode;
map<string,int> noRecursionFuncs;
map<string, vector<vector<string>>> inlineFuncs;
void activeVariable();
map<int, map<string, vector<map<string, int>>>> scopeSets;
//scopeNum, (blockName, (precursor,succeed,def,use,in,out))
string nowLabel;
void addMaps(string label);
void conflictMap();
map<string, int> conflictVars;
vector<pair<string, int>> conflictVarPair;
static int mySort(const pair<string,int> &var1, const pair<string,int> &var2);
void allocGlobalRge();
void addGlobalReg();
map<string, string> globalReg;
map<string, int> dirtyMap;
void initRegisters();
void clearRegisters();
void output();
void transfer(vector<vector<string>> midCode);
void allocFreeReg(string varName, bool useMark);
void allocBusyReg(string varName, bool useMark);
void release();
void releaseAllChanged();
void releaseWithoutSave();
void swap(string reg);
};