summaryrefslogtreecommitdiff
path: root/compare258.c
diff options
context:
space:
mode:
Diffstat (limited to 'compare258.c')
-rw-r--r--compare258.c62
1 files changed, 36 insertions, 26 deletions
diff --git a/compare258.c b/compare258.c
index 7763bb6..76d0627 100644
--- a/compare258.c
+++ b/compare258.c
@@ -10,25 +10,36 @@
/* ALIGNED, byte comparison */
static inline int32_t compare256_c_static(const unsigned char *src0, const unsigned char *src1) {
- const unsigned char *src0start = src0;
- const unsigned char *src0end = src0 + 256;
+ int32_t len = 0;
do {
if (*src0 != *src1)
- break;
- src0 += 1, src1 += 1;
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
+ if (*src0 != *src1)
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
+ if (*src0 != *src1)
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
+ if (*src0 != *src1)
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
if (*src0 != *src1)
- break;
- src0 += 1, src1 += 1;
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
if (*src0 != *src1)
- break;
- src0 += 1, src1 += 1;
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
if (*src0 != *src1)
- break;
- src0 += 1, src1 += 1;
- } while (src0 < src0end);
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
+ if (*src0 != *src1)
+ return len + (*src0 == *src1);
+ src0 += 1, src1 += 1, len += 1;
+ } while (len < 256);
- return (int32_t)(src0 - src0start);
+ return 256;
}
static inline int32_t compare258_c_static(const unsigned char *src0, const unsigned char *src1) {
@@ -55,25 +66,24 @@ int32_t compare258_c(const unsigned char *src0, const unsigned char *src1) {
#ifdef UNALIGNED_OK
/* UNALIGNED_OK, 16-bit integer comparison */
static inline int32_t compare256_unaligned_16_static(const unsigned char *src0, const unsigned char *src1) {
- const unsigned char *src0start = src0;
- const unsigned char *src0end = src0 + 256;
+ int32_t len = 0;
do {
if (*(uint16_t *)src0 != *(uint16_t *)src1)
- break;
- src0 += 2, src1 += 2;
+ return len + (*src0 == *src1);
+ src0 += 2, src1 += 2, len += 2;
if (*(uint16_t *)src0 != *(uint16_t *)src1)
- break;
- src0 += 2, src1 += 2;
+ return len + (*src0 == *src1);
+ src0 += 2, src1 += 2, len += 2;
if (*(uint16_t *)src0 != *(uint16_t *)src1)
- break;
- src0 += 2, src1 += 2;
+ return len + (*src0 == *src1);
+ src0 += 2, src1 += 2, len += 2;
if (*(uint16_t *)src0 != *(uint16_t *)src1)
- break;
- src0 += 2, src1 += 2;
- } while (src0 < src0end);
+ return len + (*src0 == *src1);
+ src0 += 2, src1 += 2, len += 2;
+ } while (len < 256);
- return (int32_t)(src0 - src0start) + (src0 < src0end && *src0 == *src1);
+ return 256;
}
static inline int32_t compare258_unaligned_16_static(const unsigned char *src0, const unsigned char *src1) {
@@ -111,7 +121,7 @@ static inline int32_t compare256_unaligned_32_static(const unsigned char *src0,
src0 += 4, src1 += 4, len += 4;
} while (len < 256);
- return len;
+ return 256;
}
static inline int32_t compare258_unaligned_32_static(const unsigned char *src0, const unsigned char *src1) {
@@ -151,7 +161,7 @@ static inline int32_t compare256_unaligned_64_static(const unsigned char *src0,
src0 += 8, src1 += 8, len += 8;
} while (len < 256);
- return len;
+ return 256;
}
static inline int32_t compare258_unaligned_64_static(const unsigned char *src0, const unsigned char *src1) {