Skip to content
Snippets Groups Projects
Commit e946e23b authored by Anh Nguyen-Tuong's avatar Anh Nguyen-Tuong
Browse files

Use r15 as default free register

parent cd3926ba
No related branches found
No related tags found
No related merge requests found
...@@ -134,19 +134,20 @@ int ConstantUnroll_t::execute() ...@@ -134,19 +134,20 @@ int ConstantUnroll_t::execute()
auto init_sequence = string(); auto init_sequence = string();
// need a free register // need a free register
string free_reg = "eax"; string free_reg = "r15d"; // use STARS dead regs annotation?
if (d_c.getOperand(0).isRegister()) if (d_c.getOperand(0).isRegister())
{ {
// cmp eax, 0x12345678 // cmp eax, 0x12345678
stringstream ss; stringstream ss;
if (d_c.getOperand(0).getString() == "eax") if (d_c.getOperand(0).getString().find("r15") != string::npos)
{ {
free_reg = "ebx"; cerr << "Skip instruction: " << c->getDisassembly() << " as r15 is used in cmp" << endl;
ss << "mov " << free_reg << ", eax"; return;
} }
else else
{ {
ss << "mov eax, " << d_c.getOperand(0).getString(); ss << "mov " << free_reg << ", " << d_c.getOperand(0).getString();
} }
init_sequence = ss.str(); init_sequence = ss.str();
} }
...@@ -156,6 +157,7 @@ int ConstantUnroll_t::execute() ...@@ -156,6 +157,7 @@ int ConstantUnroll_t::execute()
init_sequence = "mov " + free_reg + ", dword [ " + memop.getString() + " ]"; init_sequence = "mov " + free_reg + ", dword [ " + memop.getString() + " ]";
} }
// @todo: save/restore free register r15d
cout << "unroll sequence: assume free register: " << free_reg << endl; cout << "unroll sequence: assume free register: " << free_reg << endl;
cout << "init sequence is: " << init_sequence << endl; cout << "init sequence is: " << init_sequence << endl;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment