Leverage new bswap functions to the fullest

This commit is contained in:
SimoneN64
2024-09-25 22:18:57 +02:00
parent 2744de8d3e
commit 521cd7c2e0
4 changed files with 24 additions and 46 deletions

View File

@@ -91,37 +91,23 @@ static FORCE_INLINE void WriteAccess(u8 *data, const u32 index, const T val) {
}
}
FORCE_INLINE void SwapBuffer32(std::vector<u8> &data) {
for (size_t i = 0; i < data.size(); i += 4) {
const u32 original = *reinterpret_cast<u32 *>(&data[i]);
*reinterpret_cast<u32 *>(&data[i]) = bswap(original);
template <typename T>
static FORCE_INLINE void SwapBuffer(std::vector<u8> &data) {
for (size_t i = 0; i < data.size(); i += sizeof(T)) {
const T original = *reinterpret_cast<T *>(&data[i]);
*reinterpret_cast<T *>(&data[i]) = bswap(original);
}
}
FORCE_INLINE void SwapBuffer16(std::vector<u8> &data) {
for (size_t i = 0; i < data.size(); i += 2) {
const u16 original = *reinterpret_cast<u16 *>(&data[i]);
*reinterpret_cast<u16 *>(&data[i]) = bswap(original);
template <typename T, size_t Size>
static FORCE_INLINE void SwapBuffer(std::array<u8, Size> &data) {
for (size_t i = 0; i < data.size(); i += sizeof(T)) {
const T original = *reinterpret_cast<T *>(&data[i]);
*reinterpret_cast<T *>(&data[i]) = bswap(original);
}
}
template <size_t Size>
FORCE_INLINE void SwapBuffer32(std::array<u8, Size> &data) {
for (size_t i = 0; i < Size; i += 4) {
const u32 original = *static_cast<u32 *>(&data[i]);
*static_cast<u32 *>(&data[i]) = bswap(original);
}
}
template <size_t Size>
FORCE_INLINE void SwapBuffer16(std::array<u8, Size> &data) {
for (size_t i = 0; i < Size; i += 2) {
const u16 original = *static_cast<u16 *>(&data[i]);
*static_cast<u16 *>(&data[i]) = bswap(original);
}
}
FORCE_INLINE u32 crc32(u32 crc, const u8 *buf, const size_t len) {
static FORCE_INLINE u32 crc32(u32 crc, const u8 *buf, const size_t len) {
static u32 table[256];
static int have_table = 0;

View File

@@ -1,21 +1,13 @@
#pragma once
#include <common.hpp>
template <typename T>
T bswap(T);
static FORCE_INLINE u16 bswap(const u16 x) { return (x & 0xFF00u) >> 8 | (x & 0x00FFu) << 8; }
template <>
inline u16 bswap(const u16 x) {
return (x & 0xFF00u) >> 8 | (x & 0x00FFu) << 8;
}
template <>
inline u32 bswap(const u32 x) {
static FORCE_INLINE u32 bswap(const u32 x) {
return (x & 0xFF000000u) >> 24u | (x & 0x00FF0000u) >> 8u | (x & 0x0000FF00u) << 8u | (x & 0x000000FFu) << 24u;
}
template <>
inline u64 bswap(const u64 x) {
static FORCE_INLINE u64 bswap(const u64 x) {
return (x & 0xFF00000000000000u) >> 56u | (x & 0x00FF000000000000u) >> 40u | (x & 0x0000FF0000000000u) >> 24u |
(x & 0x000000FF00000000u) >> 8u | (x & 0x00000000FF000000u) << 8u | (x & 0x0000000000FF0000u) << 24u |
(x & 0x000000000000FF00u) << 40u | (x & 0x00000000000000FFu) << 56u;