A64/translate/branch: bug: Read-after-write error in BLR

This commit is contained in:
MerryMage
2018-01-17 00:34:33 +00:00
parent 9f57283a30
commit 19da68568e
3 changed files with 18 additions and 7 deletions

View File

@@ -39,10 +39,11 @@ bool TranslatorVisitor::BL(Imm<26> imm26) {
}
bool TranslatorVisitor::BLR(Reg Rn) {
auto target = X(64, Rn);
X(64, Reg::R30, ir.Imm64(ir.PC() + 4));
ir.PushRSB(ir.current_location.AdvancePC(4));
auto target = X(64, Rn);
ir.SetPC(target);
ir.SetTerm(IR::Term::ReturnToDispatch{});
return false;
@@ -50,6 +51,7 @@ bool TranslatorVisitor::BLR(Reg Rn) {
bool TranslatorVisitor::BR(Reg Rn) {
auto target = X(64, Rn);
ir.SetPC(target);
ir.SetTerm(IR::Term::ReturnToDispatch{});
return false;
@@ -57,6 +59,7 @@ bool TranslatorVisitor::BR(Reg Rn) {
bool TranslatorVisitor::RET(Reg Rn) {
auto target = X(64, Rn);
ir.SetPC(target);
ir.SetTerm(IR::Term::PopRSBHint{});
return false;