mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
Unexpected bugfixes
Mostly unaligned memory access. Also includes workarounds for ubsan execution.
This commit is contained in:
parent
7d1c18a569
commit
ae809ad320
8 changed files with 26 additions and 27 deletions
|
@ -1038,7 +1038,7 @@ void ppu_thread::dump_regs(std::string& ret) const
|
|||
return addr % 4 == 0 && vm::check_addr(addr, vm::page_executable) && g_ppu_itype.decode(*vm::get_super_ptr<u32>(addr)) != ppu_itype::UNK;
|
||||
};
|
||||
|
||||
if (const u32 reg_ptr = *vm::get_super_ptr<u32>(static_cast<u32>(reg));
|
||||
if (const u32 reg_ptr = *vm::get_super_ptr<be_t<u32, 1>>(static_cast<u32>(reg));
|
||||
vm::check_addr<8>(reg_ptr) && !vm::check_addr(toc, vm::page_executable))
|
||||
{
|
||||
// Check executability and alignment
|
||||
|
|
|
@ -534,7 +534,7 @@ Value* PPUTranslator::Shuffle(Value* left, Value* right, std::initializer_list<u
|
|||
// Transform indices (works for vectors with size 2^N)
|
||||
for (usz i = 0; i < indices.size(); i++)
|
||||
{
|
||||
data.push_back(indices.end()[~i] ^ mask);
|
||||
data.push_back(*(indices.begin() + indices.size() - 1 - i) ^ mask);
|
||||
}
|
||||
|
||||
return m_ir->CreateShuffleVector(left, right, ConstantDataVector::get(m_context, data));
|
||||
|
|
|
@ -829,7 +829,7 @@ lv2_file::open_result_t lv2_file::open(std::string_view vpath, s32 flags, s32 mo
|
|||
if (size == 8)
|
||||
{
|
||||
// see lv2_file::open_raw
|
||||
switch (*static_cast<const be_t<u64>*>(arg))
|
||||
switch (*static_cast<const be_t<u64, 1>*>(arg))
|
||||
{
|
||||
case 0x18000000010: type = lv2_file_type::sdata; break;
|
||||
case 0x2: type = lv2_file_type::edata; break;
|
||||
|
|
|
@ -413,7 +413,7 @@ namespace rsx
|
|||
{
|
||||
for (auto &e : memory_tag_samples)
|
||||
{
|
||||
e.second = *reinterpret_cast<u64*>(vm::g_sudo_addr + e.first);
|
||||
e.second = *reinterpret_cast<nse_t<u64, 1>*>(vm::g_sudo_addr + e.first);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -426,7 +426,7 @@ namespace rsx
|
|||
{
|
||||
for (auto &e : memory_tag_samples)
|
||||
{
|
||||
if (e.second != *reinterpret_cast<u64*>(vm::g_sudo_addr + e.first))
|
||||
if (e.second != *reinterpret_cast<nse_t<u64, 1>*>(vm::g_sudo_addr + e.first))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -557,27 +557,26 @@ namespace glsl
|
|||
|
||||
if (props.require_texture_ops)
|
||||
{
|
||||
OS <<
|
||||
// Declare special texture control flags
|
||||
"#define GAMMA_R_MASK (1 << " << rsx::texture_control_bits::GAMMA_R << ")\n"
|
||||
"#define GAMMA_G_MASK (1 << " << rsx::texture_control_bits::GAMMA_G << ")\n"
|
||||
"#define GAMMA_B_MASK (1 << " << rsx::texture_control_bits::GAMMA_B << ")\n"
|
||||
"#define GAMMA_A_MASK (1 << " << rsx::texture_control_bits::GAMMA_A << ")\n"
|
||||
"#define EXPAND_R_MASK (1 << " << rsx::texture_control_bits::EXPAND_R << ")\n"
|
||||
"#define EXPAND_G_MASK (1 << " << rsx::texture_control_bits::EXPAND_G << ")\n"
|
||||
"#define EXPAND_B_MASK (1 << " << rsx::texture_control_bits::EXPAND_B << ")\n"
|
||||
"#define EXPAND_A_MASK (1 << " << rsx::texture_control_bits::EXPAND_A << ")\n\n"
|
||||
OS << "#define GAMMA_R_MASK (1 << " << rsx::texture_control_bits::GAMMA_R << ")\n";
|
||||
OS << "#define GAMMA_G_MASK (1 << " << rsx::texture_control_bits::GAMMA_G << ")\n";
|
||||
OS << "#define GAMMA_B_MASK (1 << " << rsx::texture_control_bits::GAMMA_B << ")\n";
|
||||
OS << "#define GAMMA_A_MASK (1 << " << rsx::texture_control_bits::GAMMA_A << ")\n";
|
||||
OS << "#define EXPAND_R_MASK (1 << " << rsx::texture_control_bits::EXPAND_R << ")\n";
|
||||
OS << "#define EXPAND_G_MASK (1 << " << rsx::texture_control_bits::EXPAND_G << ")\n";
|
||||
OS << "#define EXPAND_B_MASK (1 << " << rsx::texture_control_bits::EXPAND_B << ")\n";
|
||||
OS << "#define EXPAND_A_MASK (1 << " << rsx::texture_control_bits::EXPAND_A << ")\n\n";
|
||||
|
||||
"#define ALPHAKILL " << rsx::texture_control_bits::ALPHAKILL << "\n"
|
||||
"#define RENORMALIZE " << rsx::texture_control_bits::RENORMALIZE << "\n"
|
||||
"#define DEPTH_FLOAT " << rsx::texture_control_bits::DEPTH_FLOAT << "\n"
|
||||
"#define DEPTH_COMPARE " << rsx::texture_control_bits::DEPTH_COMPARE_OP << "\n"
|
||||
"#define FILTERED_MAG_BIT " << rsx::texture_control_bits::FILTERED_MAG << "\n"
|
||||
"#define FILTERED_MIN_BIT " << rsx::texture_control_bits::FILTERED_MIN << "\n"
|
||||
"#define INT_COORDS_BIT " << rsx::texture_control_bits::UNNORMALIZED_COORDS << "\n"
|
||||
"#define GAMMA_CTRL_MASK (GAMMA_R_MASK|GAMMA_G_MASK|GAMMA_B_MASK|GAMMA_A_MASK)\n"
|
||||
"#define SIGN_EXPAND_MASK (EXPAND_R_MASK|EXPAND_G_MASK|EXPAND_B_MASK|EXPAND_A_MASK)\n"
|
||||
"#define FILTERED_MASK (FILTERED_MAG_BIT|FILTERED_MIN_BIT)\n\n";
|
||||
OS << "#define ALPHAKILL " << rsx::texture_control_bits::ALPHAKILL << "\n";
|
||||
OS << "#define RENORMALIZE " << rsx::texture_control_bits::RENORMALIZE << "\n";
|
||||
OS << "#define DEPTH_FLOAT " << rsx::texture_control_bits::DEPTH_FLOAT << "\n";
|
||||
OS << "#define DEPTH_COMPARE " << rsx::texture_control_bits::DEPTH_COMPARE_OP << "\n";
|
||||
OS << "#define FILTERED_MAG_BIT " << rsx::texture_control_bits::FILTERED_MAG << "\n";
|
||||
OS << "#define FILTERED_MIN_BIT " << rsx::texture_control_bits::FILTERED_MIN << "\n";
|
||||
OS << "#define INT_COORDS_BIT " << rsx::texture_control_bits::UNNORMALIZED_COORDS << "\n";
|
||||
OS << "#define GAMMA_CTRL_MASK (GAMMA_R_MASK|GAMMA_G_MASK|GAMMA_B_MASK|GAMMA_A_MASK)\n";
|
||||
OS << "#define SIGN_EXPAND_MASK (EXPAND_R_MASK|EXPAND_G_MASK|EXPAND_B_MASK|EXPAND_A_MASK)\n";
|
||||
OS << "#define FILTERED_MASK (FILTERED_MAG_BIT|FILTERED_MIN_BIT)\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -661,7 +661,7 @@ rpcn_account_edit_dialog::rpcn_account_edit_dialog(QWidget* parent)
|
|||
rpcn_ask_password_dialog ask_pass(this, tr("Please enter your password:"));
|
||||
ask_pass.exec();
|
||||
|
||||
auto password = ask_pass.get_password();
|
||||
auto& password = ask_pass.get_password();
|
||||
if (!password)
|
||||
return;
|
||||
|
||||
|
|
|
@ -244,7 +244,7 @@ namespace stx
|
|||
});
|
||||
|
||||
for (pos = 0; pos < stx::typelist<typeinfo>().count(); pos++)
|
||||
{
|
||||
{
|
||||
const auto& type = *order[pos].second;
|
||||
|
||||
const u32 id = type.index();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace stx
|
|||
class init_mutex
|
||||
{
|
||||
// Set after initialization and removed before finalization
|
||||
static const u32 c_init_bit = 0x8000'0000;
|
||||
static constexpr u32 c_init_bit = 0x8000'0000;
|
||||
|
||||
// Contains "reader" count and init bit
|
||||
atomic_t<u32> m_state = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue