// SPDX-FileCopyrightText: 2002-2024 PCSX2 Dev Team // SPDX-License-Identifier: GPL-3.0+ #pragma once #include <cstdint> #include <type_traits> #ifdef _MSC_VER #include <stdlib.h> #endif template <typename T> T ByteSwap(T value) { if constexpr (std::is_signed_v<T>) { return static_cast<T>(ByteSwap(std::make_unsigned_t<T>(value))); } else if constexpr (std::is_same_v<T, std::uint16_t>) { #ifdef _MSC_VER return _byteswap_ushort(value); #else return __builtin_bswap16(value); #endif } else if constexpr (std::is_same_v<T, std::uint32_t>) { #ifdef _MSC_VER return _byteswap_ulong(value); #else return __builtin_bswap32(value); #endif } else if constexpr (std::is_same_v<T, std::uint64_t>) { #ifdef _MSC_VER return _byteswap_uint64(value); #else return __builtin_bswap64(value); #endif } }