#include #include #define aliases __attribute__((__may_alias__)) #define byte_repeat(x) ((size_t)~0 / 0xff * (x)) #define word_has_zero(x) (((x) - byte_repeat(0x01)) & ~(x) & byte_repeat(0x80)) int strcmp(const char *_l, const char *_r) { const unsigned char *l = (const void *)_l, *r = (const void *)_r; const size_t aliases *wl, aliases *wr; if (((uintptr_t)l | (uintptr_t)r) & sizeof(size_t) - 1) goto bytewise; for (; (uintptr_t)l & sizeof(size_t) - 1 && *l && *l == *r; l++, r++); if ((uintptr_t)l & sizeof(size_t) - 1) return *l - *r; wl = (const void *)l; wr = (const void *)r; for (; !word_has_zero(*wl) && *wl == *wr; wl++, wr++); l = (const void *)wl; r = (const void *)wr; bytewise: for (; *l && *l == *r; l++, r++); return *l - *r; }