+static inline int memcmp_different_len(const void *s1, size_t n1, const void *s2, size_t n2)
+{
+ size_t shared_len = min(n1, n2);
+ if (shared_len >= 8) {
+ uint64_t a1 = *(const uint64_t *)s1;
+ uint64_t a2 = *(const uint64_t *)s2;
+ if (a1 != a2) {
+ a1 = __builtin_bswap64(a1);
+ a2 = __builtin_bswap64(a2);
+ return (a1 < a2) ? -1 : 1;
+ }
+ }
+
+ int s = memcmp(s1, s2, shared_len);
+ if (s != 0) {
+ return s;
+ }
+
+ return n2 - n1;
+}