Я написал функцию int compare_16bytes(__m128i lhs, __m128i rhs)
, чтобы сравнить два 16 байтовых номера с помощью инструкций SSE: эта функция возвращает количество байтов, равное после выполнения сравнения.
Теперь я хотел бы использовать указанную выше функцию для сравнения двух байтовых массивов произвольной длины: длина не может быть кратной 16 байтам, поэтому мне нужно иметь дело с этой проблемой. Как я могу завершить выполнение функции ниже? Как я могу улучшить функцию ниже?
int fast_compare(const char* s, const char* t, int length)
{
int result = 0;
const char* sPtr = s;
const char* tPtr = t;
while(...)
{
const __m128i* lhs = (const __m128i*)sPtr;
const __m128i* rhs = (const __m128i*)tPtr;
// compare the next 16 bytes of s and t
result += compare_16bytes(*lhs,*rhs);
sPtr += 16;
tPtr += 16;
}
return result;
}