Skip to content

Commit

Permalink
PPU LLVM: implement get_vrs<>() adaptor
Browse files Browse the repository at this point in the history
Make use of structured bindings
  • Loading branch information
Nekotekina committed Mar 29, 2019
1 parent 62a8089 commit 62f3361
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
4 changes: 2 additions & 2 deletions rpcs3/Emu/Cell/PPUTranslator.cpp
Expand Up @@ -1322,8 +1322,8 @@ void PPUTranslator::VRSQRTEFP(ppu_opcode_t op)

void PPUTranslator::VSEL(ppu_opcode_t op)
{
const auto abc = GetVrs(VrType::vi32, op.va, op.vb, op.vc);
SetVr(op.vd, m_ir->CreateOr(m_ir->CreateAnd(abc[1], abc[2]), m_ir->CreateAnd(abc[0], m_ir->CreateNot(abc[2]))));
const auto [a, b, c] = get_vrs<u32[4]>(op.va, op.vb, op.vc);
set_vr(op.vd, eval((b & c) | (a & ~c)));
}

void PPUTranslator::VSL(ppu_opcode_t op)
Expand Down
6 changes: 6 additions & 0 deletions rpcs3/Emu/Cell/PPUTranslator.h
Expand Up @@ -87,6 +87,12 @@ class PPUTranslator final : public cpu_translator
return result;
}

template <typename T, typename... Args>
std::tuple<std::conditional_t<false, Args, value_t<T>>...> get_vrs(const Args&... args)
{
return {get_vr<T>(args)...};
}

template <typename T>
void set_vr(u32 vr, value_t<T> v)
{
Expand Down

0 comments on commit 62f3361

Please sign in to comment.