summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Morph2023-03-07 22:42:19 -0500
committerGravatar GitHub2023-03-07 22:42:19 -0500
commitb014fdacdbb19491b9169df7e987293b4e851481 (patch)
treea5ceb18ca49f21fa1c8dc4872b6f7b154fd73ca6
parentinput_common: Minor typo issues (#9922) (diff)
parentcommon: make BitCast constexpr (diff)
downloadyuzu-b014fdacdbb19491b9169df7e987293b4e851481.tar.gz
yuzu-b014fdacdbb19491b9169df7e987293b4e851481.tar.xz
yuzu-b014fdacdbb19491b9169df7e987293b4e851481.zip
Merge pull request #9920 from liamwhite/constexpr-bit-cast
common: make BitCast constexpr
-rw-r--r--src/common/bit_cast.h20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/common/bit_cast.h b/src/common/bit_cast.h
index 535148b4d..c6110c542 100644
--- a/src/common/bit_cast.h
+++ b/src/common/bit_cast.h
@@ -3,19 +3,21 @@
3 3
4#pragma once 4#pragma once
5 5
6#include <cstring> 6#include <version>
7#include <type_traits> 7
8#ifdef __cpp_lib_bit_cast
9#include <bit>
10#endif
8 11
9namespace Common { 12namespace Common {
10 13
11template <typename To, typename From> 14template <typename To, typename From>
12[[nodiscard]] std::enable_if_t<sizeof(To) == sizeof(From) && std::is_trivially_copyable_v<From> && 15constexpr inline To BitCast(const From& from) {
13 std::is_trivially_copyable_v<To>, 16#ifdef __cpp_lib_bit_cast
14 To> 17 return std::bit_cast<To>(from);
15BitCast(const From& src) noexcept { 18#else
16 To dst; 19 return __builtin_bit_cast(To, from);
17 std::memcpy(&dst, &src, sizeof(To)); 20#endif
18 return dst;
19} 21}
20 22
21} // namespace Common 23} // namespace Common