summaryrefslogtreecommitdiff
path: root/src/common/swap.h
diff options
context:
space:
mode:
authorGravatar Lioncash2020-07-14 16:21:35 -0400
committerGravatar Lioncash2020-07-14 16:26:54 -0400
commit9f027b1af28ad125b32745049c2cd207b0da27b8 (patch)
tree7fc22397acf5fda1d4361b6d3f5f3fcd6b74d72f /src/common/swap.h
parentMerge pull request #4317 from lioncash/boost (diff)
downloadyuzu-9f027b1af28ad125b32745049c2cd207b0da27b8.tar.gz
yuzu-9f027b1af28ad125b32745049c2cd207b0da27b8.tar.xz
yuzu-9f027b1af28ad125b32745049c2cd207b0da27b8.zip
common/swap: Make use of std::endian
Allows removing a bunch of defines in favor of a two liner.
Diffstat (limited to 'src/common/swap.h')
-rw-r--r--src/common/swap.h46
1 files changed, 4 insertions, 42 deletions
diff --git a/src/common/swap.h b/src/common/swap.h
index 71932c2bb..7665942a2 100644
--- a/src/common/swap.h
+++ b/src/common/swap.h
@@ -17,43 +17,14 @@
17 17
18#pragma once 18#pragma once
19 19
20#include <type_traits>
21
22#if defined(_MSC_VER) 20#if defined(_MSC_VER)
23#include <cstdlib> 21#include <cstdlib>
24#endif 22#endif
23#include <bit>
25#include <cstring> 24#include <cstring>
25#include <type_traits>
26#include "common/common_types.h" 26#include "common/common_types.h"
27 27
28// GCC
29#ifdef __GNUC__
30
31#if __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && !defined(COMMON_LITTLE_ENDIAN)
32#define COMMON_LITTLE_ENDIAN 1
33#elif __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) && !defined(COMMON_BIG_ENDIAN)
34#define COMMON_BIG_ENDIAN 1
35#endif
36
37// LLVM/clang
38#elif defined(__clang__)
39
40#if __LITTLE_ENDIAN__ && !defined(COMMON_LITTLE_ENDIAN)
41#define COMMON_LITTLE_ENDIAN 1
42#elif __BIG_ENDIAN__ && !defined(COMMON_BIG_ENDIAN)
43#define COMMON_BIG_ENDIAN 1
44#endif
45
46// MSVC
47#elif defined(_MSC_VER) && !defined(COMMON_BIG_ENDIAN) && !defined(COMMON_LITTLE_ENDIAN)
48
49#define COMMON_LITTLE_ENDIAN 1
50#endif
51
52// Worst case, default to little endian.
53#if !COMMON_BIG_ENDIAN && !COMMON_LITTLE_ENDIAN
54#define COMMON_LITTLE_ENDIAN 1
55#endif
56
57namespace Common { 28namespace Common {
58 29
59#ifdef _MSC_VER 30#ifdef _MSC_VER
@@ -675,17 +646,8 @@ struct AddEndian<T, SwapTag> {
675}; 646};
676 647
677// Alias LETag/BETag as KeepTag/SwapTag depending on the system 648// Alias LETag/BETag as KeepTag/SwapTag depending on the system
678#if COMMON_LITTLE_ENDIAN 649using LETag = std::conditional_t<std::endian::native == std::endian::little, KeepTag, SwapTag>;
679 650using BETag = std::conditional_t<std::endian::native == std::endian::big, KeepTag, SwapTag>;
680using LETag = KeepTag;
681using BETag = SwapTag;
682
683#else
684
685using BETag = KeepTag;
686using LETag = SwapTag;
687
688#endif
689 651
690// Aliases for LE types 652// Aliases for LE types
691using u16_le = AddEndian<u16, LETag>::type; 653using u16_le = AddEndian<u16, LETag>::type;