Add print functions for printing '__m128i' datatypes

This commit is contained in:
Kawe Mazidjatari 2022-05-10 23:36:01 +02:00
parent 452c8afcf3
commit 27c3ed0365
2 changed files with 34 additions and 0 deletions

View File

@ -32,6 +32,11 @@ vector<int> StringToBytes(const string& svInput, bool bNullTerminator);
vector<int> PatternToBytes(const string& svInput);
vector<int> IntToDigits(int value);
void PrintM128i8(__m128i in);
void PrintM128i16(__m128i in);
void PrintM128i32(__m128i in);
void PrintM128i64(__m128i in);
string PrintPercentageEscape(const string& svInput);
/////////////////////////////////////////////////////////////////////////////

View File

@ -489,6 +489,35 @@ vector<int> 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)