From 367a0bb672807927e22aadac9d4fa8c96c3b922e Mon Sep 17 00:00:00 2001 From: MerryMage Date: Mon, 15 Oct 2018 21:00:48 +0100 Subject: [PATCH] JitRegCache: Add RCOpArg::ExtractWithByteOffset --- .../Core/PowerPC/Jit64/RegCache/JitRegCache.cpp | 13 +++++++++++++ .../Core/Core/PowerPC/Jit64/RegCache/JitRegCache.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.cpp b/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.cpp index 94aad4e9e1..4add2997a5 100644 --- a/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.cpp +++ b/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.cpp @@ -110,6 +110,19 @@ OpArg RCOpArg::Location() const return {}; } +OpArg RCOpArg::ExtractWithByteOffset(int offset) +{ + if (offset == 0) + return Location(); + + ASSERT(rc); + const preg_t preg = std::get(contents); + rc->StoreFromRegister(preg, RegCache::FlushMode::MaintainState); + OpArg result = rc->GetDefaultLocation(preg); + result.AddMemOffset(offset); + return result; +} + void RCOpArg::Unlock() { if (const preg_t* preg = std::get_if(&contents)) diff --git a/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.h b/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.h index adf8eaa438..0499bc070c 100644 --- a/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.h +++ b/Source/Core/Core/PowerPC/Jit64/RegCache/JitRegCache.h @@ -47,6 +47,9 @@ public: bool IsSimpleReg(Gen::X64Reg reg) const { return Location().IsSimpleReg(reg); } Gen::X64Reg GetSimpleReg() const { return Location().GetSimpleReg(); } + // Use to extract bytes from a register using the regcache. offset is in bytes. + Gen::OpArg ExtractWithByteOffset(int offset); + void Unlock(); bool IsImm() const;