diff options
Diffstat (limited to 'Source/Core/Common/Arm64Emitter.cpp')
| -rw-r--r-- | Source/Core/Common/Arm64Emitter.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/Source/Core/Common/Arm64Emitter.cpp b/Source/Core/Common/Arm64Emitter.cpp index 16031372f4..6546686716 100644 --- a/Source/Core/Common/Arm64Emitter.cpp +++ b/Source/Core/Common/Arm64Emitter.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include <algorithm> +#include <cstring> #include <vector> #include "Common/Arm64Emitter.h" @@ -312,6 +313,12 @@ const u8* ARM64XEmitter::AlignCodePage() return m_code; } +void ARM64XEmitter::Write32(u32 value) +{ + std::memcpy(m_code, &value, sizeof(u32)); + m_code += sizeof(u32); +} + void ARM64XEmitter::FlushIcache() { FlushIcacheSection(m_lastCacheFlushEnd, m_code); @@ -815,32 +822,32 @@ void ARM64XEmitter::EncodeLoadStoreUnscaled(u32 size, u32 op, ARM64Reg Rt, ARM64 Write32((size << 30) | (0b111 << 27) | (op << 22) | ((imm & 0x1FF) << 12) | (Rn << 5) | Rt); } -static inline bool IsInRangeImm19(s64 distance) +static constexpr bool IsInRangeImm19(s64 distance) { return (distance >= -0x40000 && distance <= 0x3FFFF); } -static inline bool IsInRangeImm14(s64 distance) +static constexpr bool IsInRangeImm14(s64 distance) { return (distance >= -0x2000 && distance <= 0x1FFF); } -static inline bool IsInRangeImm26(s64 distance) +static constexpr bool IsInRangeImm26(s64 distance) { return (distance >= -0x2000000 && distance <= 0x1FFFFFF); } -static inline u32 MaskImm19(s64 distance) +static constexpr u32 MaskImm19(s64 distance) { return distance & 0x7FFFF; } -static inline u32 MaskImm14(s64 distance) +static constexpr u32 MaskImm14(s64 distance) { return distance & 0x3FFF; } -static inline u32 MaskImm26(s64 distance) +static constexpr u32 MaskImm26(s64 distance) { return distance & 0x3FFFFFF; } |
