#include <iostream>
#include <immintrin.h>
#pragma GCC target("fma")
void my_memset(char *a, char c, unsigned n)
{
size_t begin = reinterpret_cast<size_t>(a) % 32;
std::cout << begin << "\n";
char *p = a;
while (p < a + begin && p < a + n)
{
*p = c;
p++;
}
if (a + n - p >= 32)
{
__m256i data;
static char ary[32] = {c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c};
data = *(__m256i *)ary;
size_t end = n - (n - begin) % 32;
char *end_ptr = a + end;
while (p < end_ptr)
{
_mm256_storeu_si256((__m256i *)p, data);
p += 32;
}
}
while (p < a + n)
{
*p = c;
p++;
}
}
Compilation | N/A | N/A | Compile Error | Score: N/A | 显示更多 |