mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-25 04:02:42 +01:00
SPU TSX: implement Accurate PUTLLC option
Allow spurious PUTLLC failure if disabled (default).
This commit is contained in:
parent
b839cc9d5b
commit
71b71537a0
@ -133,7 +133,7 @@ namespace cfg
|
||||
return m_value;
|
||||
}
|
||||
|
||||
bool get() const
|
||||
const bool& get() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
@ -184,7 +184,7 @@ namespace cfg
|
||||
return m_value;
|
||||
}
|
||||
|
||||
T get() const
|
||||
const T& get() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
@ -247,7 +247,7 @@ namespace cfg
|
||||
return m_value;
|
||||
}
|
||||
|
||||
int_type get() const
|
||||
const int_type& get() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
@ -347,7 +347,7 @@ namespace cfg
|
||||
{
|
||||
}
|
||||
|
||||
std::set<std::string> get_set() const
|
||||
const std::set<std::string>& get_set() const
|
||||
{
|
||||
return m_set;
|
||||
}
|
||||
@ -382,7 +382,7 @@ namespace cfg
|
||||
{
|
||||
}
|
||||
|
||||
std::map<std::string, logs::level> get_map() const
|
||||
const std::map<std::string, logs::level>& get_map() const
|
||||
{
|
||||
return m_map;
|
||||
}
|
||||
|
@ -467,8 +467,12 @@ const auto spu_putllc_tx = build_function_asm<u64(*)(u32 raddr, u64 rtime, const
|
||||
c.mov(x86::rax, x86::qword_ptr(x86::rbx));
|
||||
c.and_(x86::rax, -128);
|
||||
c.cmp(x86::rax, x86::r13);
|
||||
c.je(retry);
|
||||
//c.jmp(fail);
|
||||
c.jne(fail);
|
||||
c.cmp(x86::r12, 16);
|
||||
c.jb(retry);
|
||||
c.mov(x86::rax, imm_ptr(&g_cfg.core.spu_accurate_putllc.get()));
|
||||
c.test(x86::byte_ptr(x86::rax), 1);
|
||||
c.jnz(retry);
|
||||
|
||||
c.bind(fail);
|
||||
build_transaction_abort(c, 0xff);
|
||||
|
@ -378,6 +378,7 @@ struct cfg_root : cfg::node
|
||||
cfg::_enum<spu_block_size_type> spu_block_size{this, "SPU Block Size", spu_block_size_type::safe};
|
||||
cfg::_bool spu_accurate_getllar{this, "Accurate GETLLAR", false};
|
||||
cfg::_bool spu_accurate_putlluc{this, "Accurate PUTLLUC", false};
|
||||
cfg::_bool spu_accurate_putllc{this, "Accurate PUTLLC", false};
|
||||
cfg::_bool spu_verification{this, "SPU Verification", true}; // Should be enabled
|
||||
cfg::_bool spu_cache{this, "SPU Cache", true};
|
||||
cfg::_enum<tsx_usage> enable_TSX{this, "Enable TSX", tsx_usage::enabled}; // Enable TSX. Forcing this on Haswell/Broadwell CPUs should be used carefully
|
||||
|
Loading…
Reference in New Issue
Block a user