diff options
Diffstat (limited to 'src/DSi_AES.h')
-rw-r--r-- | src/DSi_AES.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/DSi_AES.h b/src/DSi_AES.h index d8ef98a..9baf747 100644 --- a/src/DSi_AES.h +++ b/src/DSi_AES.h @@ -22,6 +22,25 @@ #include "types.h" #include "Savestate.h" +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wattributes" +#if defined(__GNUC__) && (__GNUC__ >= 11) // gcc 11.* +// NOTE: Yes, the compiler does *not* recognize this code pattern, so it is indeed an optimization. +__attribute((always_inline)) static void Bswap128(void* Dst, void* Src) +{ + *(__int128*)&Dst = __builtin_bswap128(*(__int128*)&Src); +} +#else +__attribute((always_inline)) static void Bswap128(void* Dst, void* Src) +{ + for (int i = 0; i < 16; ++i) + { + ((char*)Src)[i] = ((char*)Src)[15 - i]; + } +} +#endif +#pragma GCC diagnostic pop + namespace DSi_AES { @@ -49,7 +68,6 @@ void WriteKeyNormal(u32 slot, u32 offset, u32 val, u32 mask); void WriteKeyX(u32 slot, u32 offset, u32 val, u32 mask); void WriteKeyY(u32 slot, u32 offset, u32 val, u32 mask); -void Swap16(u8* dst, u8* src); void DeriveNormalKey(u8* keyX, u8* keyY, u8* normalkey); } |