mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 18:53:28 +01:00
ppu_iname: refactor to use actual strings
This commit is contained in:
parent
8d1a9dce91
commit
fa29c5aa94
@ -36,19 +36,6 @@ void fmt_class_string<bs_t<ppu_attr>>::format(std::string& out, u64 arg)
|
||||
format_bitset(out, arg, "[", ",", "]", &fmt_class_string<ppu_attr>::format);
|
||||
}
|
||||
|
||||
template <>
|
||||
void fmt_class_string<ppu_iname::type>::format(std::string& out, u64 arg)
|
||||
{
|
||||
// Decode instruction name from the enum value
|
||||
for (u32 i = 0; i < 10; i++)
|
||||
{
|
||||
if (u64 value = (arg >> (54 - i * 6)) & 0x3f)
|
||||
{
|
||||
out += static_cast<char>(value + 0x20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ppu_module::validate(u32 reloc)
|
||||
{
|
||||
// Load custom PRX configuration if available
|
||||
|
@ -554,18 +554,9 @@ struct ppu_itype
|
||||
}
|
||||
};
|
||||
|
||||
// Encode instruction name: 6 bits per character (0x20..0x5f), max 10
|
||||
static constexpr u64 ppu_iname_encode(const char* ptr, u64 value = 0)
|
||||
{
|
||||
return *ptr == '\0' ? value : ppu_iname_encode(ptr + 1, (*ptr - 0x20) | (value << 6));
|
||||
}
|
||||
|
||||
struct ppu_iname
|
||||
{
|
||||
#define NAME(x) x = ppu_iname_encode(#x),
|
||||
|
||||
enum type : u64
|
||||
{
|
||||
#define NAME(x) static constexpr const char& x = *#x;
|
||||
NAME(UNK)
|
||||
NAME(MFVSCR)
|
||||
NAME(MTVSCR)
|
||||
@ -946,15 +937,7 @@ struct ppu_iname
|
||||
NAME(FCTID)
|
||||
NAME(FCTIDZ)
|
||||
NAME(FCFID)
|
||||
};
|
||||
|
||||
#undef NAME
|
||||
|
||||
// Enable address-of operator for ppu_decoder<>
|
||||
friend constexpr type operator &(type value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
// PPU Analyser Context
|
||||
|
@ -10,6 +10,7 @@
|
||||
using namespace llvm;
|
||||
|
||||
constexpr ppu_decoder<PPUTranslator> s_ppu_decoder;
|
||||
constexpr ppu_decoder<ppu_iname> s_ppu_iname;
|
||||
|
||||
PPUTranslator::PPUTranslator(LLVMContext& context, Module* module, const ppu_module& info, ExecutionEngine& engine)
|
||||
: cpu_translator(module, false)
|
||||
@ -200,7 +201,7 @@ Function* PPUTranslator::Translate(const ppu_function& info)
|
||||
if (m_rel)
|
||||
{
|
||||
// This is very bad. m_rel is normally set to nullptr after a relocation is handled (so it wasn't)
|
||||
ppu_log.error("LLVM: [0x%x] Unsupported relocation(%u) in '%s' (opcode=0x%x). Please report.", rel_found->first, m_rel->type, m_info.name, op);
|
||||
ppu_log.error("LLVM: [0x%x] Unsupported relocation(%u) in '%s' (opcode=0x%x '%s'). Please report.", rel_found->first, m_rel->type, m_info.name, op, s_ppu_iname.decode(op));
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user