-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharmplat.cpp
42 lines (36 loc) · 859 Bytes
/
armplat.cpp
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
#include "armplat.h"
const char* regName[8] = {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7"};
void ARM::rotateRight(unsigned int &num)
{
num = ((num & 3) << 30) | (num >> 2);
}
bool ARM::validConst(unsigned int num)
{
for(int i = 0; i < 16; i ++)
{
if(num <= 0xff) return true;
rotateRight(num);
}
return false;
}
bool ARM::validConstExpr(int num)
{
return validConst(num) || validConst(-num);
}
bool ARM::validOffset(int num)
{
return (num > -4096 && num < 4096);
}
bool ARM::validReg(string reg)
{
if(reg == "fp" || reg == "sp" || reg == "ip" || reg =="pc")
return true;
for(int i = 0; i <= 10; i ++)
{
stringstream ss;
ss << i;
string rg = "r" + ss.str();
if(reg == rg) return true;
}
return false;
}