#include #include #include "common.h" #include "counts.h" void swap(char *a, char *b, size_t width) { counts[CURRENT].swap++; #ifdef __GNUC__ typedef uint32_t __attribute__((__may_alias__)) u32; if ((uintptr_t)a % 4 == 0 && (uintptr_t)b % 4 == 0) { for (; width >= 4; width -= 4) { uint32_t tmp = *((u32*)a); *((u32*)a) = *((u32*)b); *((u32*)b) = tmp; a += 4; b += 4; } } #endif while (width--) { char tmp = *a; *a++ = *b; *b++ = tmp; } }