diff --git a/r5dev/public/include/utility.h b/r5dev/public/include/utility.h index 2cfc21c8..a5fc974b 100644 --- a/r5dev/public/include/utility.h +++ b/r5dev/public/include/utility.h @@ -32,6 +32,11 @@ vector StringToBytes(const string& svInput, bool bNullTerminator); vector PatternToBytes(const string& svInput); vector IntToDigits(int value); +void PrintM128i8(__m128i in); +void PrintM128i16(__m128i in); +void PrintM128i32(__m128i in); +void PrintM128i64(__m128i in); + string PrintPercentageEscape(const string& svInput); ///////////////////////////////////////////////////////////////////////////// diff --git a/r5dev/public/utility.cpp b/r5dev/public/utility.cpp index f9dacd35..2b086537 100644 --- a/r5dev/public/utility.cpp +++ b/r5dev/public/utility.cpp @@ -489,6 +489,35 @@ vector IntToDigits(int value) return vDigits; } +/////////////////////////////////////////////////////////////////////////////// +// For printing __m128i datatypes. +void PrintM128i8(__m128i in) +{ + alignas(16) uint8_t v[16]; + _mm_store_si128(reinterpret_cast<__m128i*>(v), in); + printf("v16_u8: %x %x %x %x | %x %x %x %x | %x %x %x %x | %x %x %x %x\n", + v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], + v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15]); +} +void PrintM128i16(__m128i in) +{ + alignas(16) uint16_t v[8]; + _mm_store_si128(reinterpret_cast<__m128i*>(v), in); + printf("v8_u16: %x %x %x %x, %x %x %x %x\n", v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]); +} +void PrintM128i32(__m128i in) +{ + alignas(16) uint32_t v[4]; + _mm_store_si128(reinterpret_cast<__m128i*>(v), in); + printf("v4_u32: %x %x %x %x\n", v[0], v[1], v[2], v[3]); +} +void PrintM128i64(__m128i in) +{ + alignas(16) uint64_t v[2]; // uint64_t might give format-string warnings with %llx; it's just long in some ABIs + _mm_store_si128(reinterpret_cast<__m128i*>(v), in); + printf("v2_u64: %llx %llx\n", v[0], v[1]); +} + /////////////////////////////////////////////////////////////////////////////// // For escaping the '%' character for *rintf. string PrintPercentageEscape(const string& svInput)