Build transactions at runtime

Drop _xbegin family intrinsics due to bad codegen
Implemented `notifier` class, replacing vm::notify
Minor optimization: detach transactions from global mutex on TSX path
Minor optimization: don't acquire vm::passive_lock on PPU on TSX path
This commit is contained in:
Nekotekina 2018-05-14 23:07:36 +03:00
parent fd525ae1cf
commit 367f039523
14 changed files with 529 additions and 339 deletions

View file

@ -118,16 +118,20 @@ namespace rsx
rsx->sync_point_request = true;
const u32 addr = get_address(method_registers.semaphore_offset_406e(), method_registers.semaphore_context_dma_406e());
if (addr >> 28 == 0x4)
if (g_use_rtm || addr >> 28 == 0x4)
{
// TODO: check no reservation area instead
vm::write32(addr, arg);
return;
}
else
{
vm::reader_lock lock;
vm::write32(addr, arg);
}
vm::reader_lock lock;
vm::write32(addr, arg);
vm::notify(addr, 4);
if (addr >> 28 != 0x4)
{
vm::reservation_notifier(addr, 4).notify_all();
}
}
}
@ -1051,7 +1055,7 @@ namespace rsx
}
LOG_SUCCESS(RSX, "capture successful: %s", filePath.c_str());
frame_capture.reset();
Emu.Pause();
}