diff options
| author | Léo Lam <leo@innovatetechnologi.es> | 2016-11-27 11:56:22 +0100 |
|---|---|---|
| committer | Léo Lam <leo@innovatetechnologi.es> | 2016-12-06 20:33:53 +0100 |
| commit | 31ccfffd386cdf7bfafdccda240a179431ecc98c (patch) | |
| tree | 820bdb640091e5726e4c52d42f819956f82bfd28 /Source/Core/Common | |
| parent | 7192789c1162e2deb5923151d05158f459448ab9 (diff) | |
Common: Add alignment header
Gets rid of duplicated alignment code.
Diffstat (limited to 'Source/Core/Common')
| -rw-r--r-- | Source/Core/Common/Align.h | 24 | ||||
| -rw-r--r-- | Source/Core/Common/Arm64Emitter.cpp | 6 | ||||
| -rw-r--r-- | Source/Core/Common/Common.vcxproj | 3 | ||||
| -rw-r--r-- | Source/Core/Common/Common.vcxproj.filters | 3 | ||||
| -rw-r--r-- | Source/Core/Common/MathUtil.h | 3 |
5 files changed, 31 insertions, 8 deletions
diff --git a/Source/Core/Common/Align.h b/Source/Core/Common/Align.h new file mode 100644 index 0000000000..40c45766d3 --- /dev/null +++ b/Source/Core/Common/Align.h @@ -0,0 +1,24 @@ +// This file is under the public domain. + +#pragma once + +#include <cstddef> +#include <type_traits> + +namespace Common +{ +template <typename T> +constexpr T AlignUp(T value, size_t size) +{ + static_assert(std::is_unsigned<T>(), "T must be an unsigned value."); + return static_cast<T>(value + (size - value % size) % size); +} + +template <typename T> +constexpr T AlignDown(T value, size_t size) +{ + static_assert(std::is_unsigned<T>(), "T must be an unsigned value."); + return static_cast<T>(value - value % size); +} + +} // namespace Common diff --git a/Source/Core/Common/Arm64Emitter.cpp b/Source/Core/Common/Arm64Emitter.cpp index 3b5a662d70..4fe3b6f0b3 100644 --- a/Source/Core/Common/Arm64Emitter.cpp +++ b/Source/Core/Common/Arm64Emitter.cpp @@ -7,10 +7,10 @@ #include <cstring> #include <vector> +#include "Common/Align.h" #include "Common/Arm64Emitter.h" #include "Common/Assert.h" #include "Common/CommonTypes.h" -#include "Common/MathUtil.h" namespace Arm64Gen { @@ -2079,14 +2079,14 @@ bool ARM64XEmitter::MOVI2R2(ARM64Reg Rd, u64 imm1, u64 imm2) void ARM64XEmitter::ABI_PushRegisters(BitSet32 registers) { - int num_regs = registers.Count(); + unsigned int num_regs = registers.Count(); if (num_regs % 2) { bool first = true; // Stack is required to be quad-word aligned. - u32 stack_size = ROUND_UP(num_regs * 8, 16); + u32 stack_size = Common::AlignUp(num_regs * 8, 16); u32 current_offset = 0; std::vector<ARM64Reg> reg_pair; diff --git a/Source/Core/Common/Common.vcxproj b/Source/Core/Common/Common.vcxproj index b6cb26cf94..1e88bd5e33 100644 --- a/Source/Core/Common/Common.vcxproj +++ b/Source/Core/Common/Common.vcxproj @@ -35,6 +35,7 @@ </ImportGroup> <PropertyGroup Label="UserMacros" /> <ItemGroup> + <ClInclude Include="Align.h" /> <ClInclude Include="Analytics.h" /> <ClInclude Include="Assert.h" /> <ClInclude Include="Atomic.h" /> @@ -211,4 +212,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project>
\ No newline at end of file +</Project> diff --git a/Source/Core/Common/Common.vcxproj.filters b/Source/Core/Common/Common.vcxproj.filters index 8b4876f638..3ad3825e23 100644 --- a/Source/Core/Common/Common.vcxproj.filters +++ b/Source/Core/Common/Common.vcxproj.filters @@ -18,6 +18,7 @@ </Filter> </ItemGroup> <ItemGroup> + <ClInclude Include="Align.h" /> <ClInclude Include="Atomic.h" /> <ClInclude Include="Atomic_GCC.h" /> <ClInclude Include="Atomic_Win32.h" /> @@ -293,4 +294,4 @@ <ItemGroup> <Natvis Include="BitField.natvis" /> </ItemGroup> -</Project>
\ No newline at end of file +</Project> diff --git a/Source/Core/Common/MathUtil.h b/Source/Core/Common/MathUtil.h index a38e49bf6d..71bc985456 100644 --- a/Source/Core/Common/MathUtil.h +++ b/Source/Core/Common/MathUtil.h @@ -180,9 +180,6 @@ struct Rectangle float MathFloatVectorSum(const std::vector<float>&); -#define ROUND_UP(x, a) (((x) + (a)-1) & ~((a)-1)) -#define ROUND_DOWN(x, a) ((x) & ~((a)-1)) - // Rounds down. 0 -> undefined inline int IntLog2(u64 val) { |
