mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
552c0d8404
This moves all the byte swapping utilities into a header named Swap.h. A dedicated header is much more preferable here due to the size of the code itself. In general usage throughout the codebase, CommonFuncs.h was generally only included for these functions anyway. These being in their own header avoids dumping the lesser used utilities into scope. As well as providing a localized area for more utilities related to byte swapping in the future (should they be needed). This also makes it nicer to identify which files depend on the byte swapping utilities in particular. Since this is a completely new header, moving the code uncovered a few indirect includes, as well as making some other inclusions unnecessary.
94 lines
2.4 KiB
C++
94 lines
2.4 KiB
C++
// Copyright 2009 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <string>
|
|
#include "Common/CommonTypes.h"
|
|
|
|
// Will fail to compile on a non-array:
|
|
template <typename T, size_t N>
|
|
constexpr size_t ArraySize(T (&arr)[N])
|
|
{
|
|
return N;
|
|
}
|
|
|
|
#define b2(x) ((x) | ((x) >> 1))
|
|
#define b4(x) (b2(x) | (b2(x) >> 2))
|
|
#define b8(x) (b4(x) | (b4(x) >> 4))
|
|
#define b16(x) (b8(x) | (b8(x) >> 8))
|
|
#define b32(x) (b16(x) | (b16(x) >> 16))
|
|
#define ROUND_UP_POW2(x) (b32(x - 1) + 1)
|
|
|
|
#ifndef _WIN32
|
|
|
|
// go to debugger mode
|
|
#define Crash() \
|
|
{ \
|
|
__builtin_trap(); \
|
|
}
|
|
|
|
// GCC 4.8 defines all the rotate functions now
|
|
// Small issue with GCC's lrotl/lrotr intrinsics is they are still 32bit while we require 64bit
|
|
#ifndef _rotl
|
|
inline u32 _rotl(u32 x, int shift)
|
|
{
|
|
shift &= 31;
|
|
if (!shift)
|
|
return x;
|
|
return (x << shift) | (x >> (32 - shift));
|
|
}
|
|
|
|
inline u32 _rotr(u32 x, int shift)
|
|
{
|
|
shift &= 31;
|
|
if (!shift)
|
|
return x;
|
|
return (x >> shift) | (x << (32 - shift));
|
|
}
|
|
#endif
|
|
|
|
inline u64 _rotl64(u64 x, unsigned int shift)
|
|
{
|
|
unsigned int n = shift % 64;
|
|
return (x << n) | (x >> (64 - n));
|
|
}
|
|
|
|
inline u64 _rotr64(u64 x, unsigned int shift)
|
|
{
|
|
unsigned int n = shift % 64;
|
|
return (x >> n) | (x << (64 - n));
|
|
}
|
|
|
|
#else // WIN32
|
|
// Function Cross-Compatibility
|
|
#define strcasecmp _stricmp
|
|
#define strncasecmp _strnicmp
|
|
#define unlink _unlink
|
|
#define vscprintf _vscprintf
|
|
|
|
// 64 bit offsets for Windows
|
|
#define fseeko _fseeki64
|
|
#define ftello _ftelli64
|
|
#define atoll _atoi64
|
|
#define stat _stat64
|
|
#define fstat _fstat64
|
|
#define fileno _fileno
|
|
|
|
extern "C" {
|
|
__declspec(dllimport) void __stdcall DebugBreak(void);
|
|
}
|
|
#define Crash() \
|
|
{ \
|
|
DebugBreak(); \
|
|
}
|
|
#endif // WIN32 ndef
|
|
|
|
// Generic function to get last error message.
|
|
// Call directly after the command or use the error num.
|
|
// This function might change the error code.
|
|
// Defined in Misc.cpp.
|
|
std::string GetLastErrorMsg();
|