1 //
2 // Copyright 2017 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // sys_byteorder.h: Compatiblity hacks for importing Chromium's base/SHA1.
7 
8 #ifndef ANGLEBASE_SYS_BYTEORDER_H_
9 #define ANGLEBASE_SYS_BYTEORDER_H_
10 
11 namespace angle
12 {
13 
14 namespace base
15 {
16 
17 // Returns a value with all bytes in |x| swapped, i.e. reverses the endianness.
ByteSwap(uint16_t x)18 inline uint16_t ByteSwap(uint16_t x)
19 {
20 #if defined(_MSC_VER)
21     return _byteswap_ushort(x);
22 #else
23     return __builtin_bswap16(x);
24 #endif
25 }
26 
ByteSwap(uint32_t x)27 inline uint32_t ByteSwap(uint32_t x)
28 {
29 #if defined(_MSC_VER)
30     return _byteswap_ulong(x);
31 #else
32     return __builtin_bswap32(x);
33 #endif
34 }
35 
ByteSwap(uint64_t x)36 inline uint64_t ByteSwap(uint64_t x)
37 {
38 #if defined(_MSC_VER)
39     return _byteswap_uint64(x);
40 #else
41     return __builtin_bswap64(x);
42 #endif
43 }
44 
45 }  // namespace base
46 
47 }  // namespace angle
48 
49 #endif  // ANGLEBASE_SYS_BYTEORDER_H_
50