summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Lioncash2019-04-11 20:42:40 -0400
committerGravatar Lioncash2019-04-11 20:42:44 -0400
commit66b73fd39957f9d40dc2d2b05468bbd4d2a1347e (patch)
treed1fcbe18e413a1ffe09ea1cf74420c1074a71df5
parentcommon/swap: Simplify swap function ifdefs (diff)
downloadyuzu-66b73fd39957f9d40dc2d2b05468bbd4d2a1347e.tar.gz
yuzu-66b73fd39957f9d40dc2d2b05468bbd4d2a1347e.tar.xz
yuzu-66b73fd39957f9d40dc2d2b05468bbd4d2a1347e.zip
common/swap: Mark byte swapping free functions with [[nodiscard]] and noexcept
Allows the compiler to inform when the result of a swap function is being ignored (which is 100% a bug in all usage scenarios). We also mark them noexcept to allow other functions using them to be able to be marked as noexcept and play nicely with things that potentially inspect "nothrowability".
-rw-r--r--src/common/swap.h22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/common/swap.h b/src/common/swap.h
index fad0f35a7..086449028 100644
--- a/src/common/swap.h
+++ b/src/common/swap.h
@@ -57,13 +57,13 @@
57namespace Common { 57namespace Common {
58 58
59#ifdef _MSC_VER 59#ifdef _MSC_VER
60inline u16 swap16(u16 data) { 60[[nodiscard]] inline u16 swap16(u16 data) noexcept {
61 return _byteswap_ushort(data); 61 return _byteswap_ushort(data);
62} 62}
63inline u32 swap32(u32 data) { 63[[nodiscard]] inline u32 swap32(u32 data) noexcept {
64 return _byteswap_ulong(data); 64 return _byteswap_ulong(data);
65} 65}
66inline u64 swap64(u64 data) { 66[[nodiscard]] inline u64 swap64(u64 data) noexcept {
67 return _byteswap_uint64(data); 67 return _byteswap_uint64(data);
68} 68}
69#elif defined(__clang__) || defined(__GNUC__) 69#elif defined(__clang__) || defined(__GNUC__)
@@ -73,29 +73,29 @@ inline u64 swap64(u64 data) {
73#undef swap32 73#undef swap32
74#undef swap64 74#undef swap64
75#endif 75#endif
76inline u16 swap16(u16 data) { 76[[nodiscard]] inline u16 swap16(u16 data) noexcept {
77 return __builtin_bswap16(data); 77 return __builtin_bswap16(data);
78} 78}
79inline u32 swap32(u32 data) { 79[[nodiscard]] inline u32 swap32(u32 data) noexcept {
80 return __builtin_bswap32(data); 80 return __builtin_bswap32(data);
81} 81}
82inline u64 swap64(u64 data) { 82[[nodiscard]] inline u64 swap64(u64 data) noexcept {
83 return __builtin_bswap64(data); 83 return __builtin_bswap64(data);
84} 84}
85#else 85#else
86// Slow generic implementation. 86// Slow generic implementation.
87inline u16 swap16(u16 data) { 87[[nodiscard]] inline u16 swap16(u16 data) noexcept {
88 return (data >> 8) | (data << 8); 88 return (data >> 8) | (data << 8);
89} 89}
90inline u32 swap32(u32 data) { 90[[nodiscard]] inline u32 swap32(u32 data) noexcept {
91 return (swap16(data) << 16) | swap16(data >> 16); 91 return (swap16(data) << 16) | swap16(data >> 16);
92} 92}
93inline u64 swap64(u64 data) { 93[[nodiscard]] inline u64 swap64(u64 data) noexcept {
94 return ((u64)swap32(data) << 32) | swap32(data >> 32); 94 return ((u64)swap32(data) << 32) | swap32(data >> 32);
95} 95}
96#endif 96#endif
97 97
98inline float swapf(float f) { 98[[nodiscard]] inline float swapf(float f) noexcept {
99 static_assert(sizeof(u32) == sizeof(float), "float must be the same size as uint32_t."); 99 static_assert(sizeof(u32) == sizeof(float), "float must be the same size as uint32_t.");
100 100
101 u32 value; 101 u32 value;
@@ -107,7 +107,7 @@ inline float swapf(float f) {
107 return f; 107 return f;
108} 108}
109 109
110inline double swapd(double f) { 110[[nodiscard]] inline double swapd(double f) noexcept {
111 static_assert(sizeof(u64) == sizeof(double), "double must be the same size as uint64_t."); 111 static_assert(sizeof(u64) == sizeof(double), "double must be the same size as uint64_t.");
112 112
113 u64 value; 113 u64 value;