[PATCH v3] aarch64: Optimize memcmp for Kunpeng 950 with SVE

Weihong Ye yeweihong@huawei.com
Fri May 8 10:32:03 GMT 2026


Key optimizations:
- Use SVE predication for branch-free handling of short inputs and tails
- Use 4-way loop unrolling to maximize pipeline utilization
- Optimize mismatch detection with early exit logic

Benchmark (bench-memcmp, generic -> this patch):
- Small (0-128B): 15% - 50% speedup
- Medium (129-1024B): 21% - 50% speedup
- Large (2048-4096B): 28% - 50% speedup

Note: regressions may be observed in edge cases where offsets
are near 4K boundaries. These instances are rare and the overall
performance gain remains significantly positive.

Also add IFUNC support for memcmp and correct the first-line
comment in memcpy_kunpeng950.S.
---
Changes since v2:
- Replace brkb+lasta+sub with cmphi+cneg to avoid lasta scalar-vector
  conversion. cmphi sets N flag when first active element is true
  (src2 > src1), and cneg/mi uses it to negate the return value.
- Reuse cnt instead of dedicated left register to reduce register pressure.

Overall ~0.3% geomean improvement compared to v2.

 sysdeps/aarch64/memcmp.S                      |  13 +-
 sysdeps/aarch64/multiarch/Makefile            |   2 +
 sysdeps/aarch64/multiarch/ifunc-impl-list.c   |   5 +-
 sysdeps/aarch64/multiarch/memcmp.c            |  54 +++++++
 sysdeps/aarch64/multiarch/memcmp_generic.S    |  42 +++++
 sysdeps/aarch64/multiarch/memcmp_kunpeng950.S | 145 ++++++++++++++++++
 sysdeps/aarch64/multiarch/memcpy_kunpeng950.S |   2 +-
 7 files changed, 256 insertions(+), 7 deletions(-)
 create mode 100644 sysdeps/aarch64/multiarch/memcmp.c
 create mode 100644 sysdeps/aarch64/multiarch/memcmp_generic.S
 create mode 100644 sysdeps/aarch64/multiarch/memcmp_kunpeng950.S

diff --git a/sysdeps/aarch64/memcmp.S b/sysdeps/aarch64/memcmp.S
index f177520d63..e33086b4eb 100644
--- a/sysdeps/aarch64/memcmp.S
+++ b/sysdeps/aarch64/memcmp.S
@@ -42,8 +42,11 @@
 #define src1end	x7
 #define src2end	x8
 
+#ifndef MEMCMP
+# define MEMCMP memcmp
+#endif
 
-ENTRY (memcmp)
+ENTRY (MEMCMP)
 	cmp	limit, 16
 	b.lo	L(less16)
 	ldp	data1, data3, [src1]
@@ -197,10 +200,10 @@ L(loop64):
 	cneg	result, result, lo
 	ret
 
-END (memcmp)
+END (MEMCMP)
 #undef bcmp
-weak_alias (memcmp, bcmp)
+weak_alias (MEMCMP, bcmp)
 #undef __memcmpeq
-strong_alias (memcmp, __memcmpeq)
-libc_hidden_builtin_def (memcmp)
+strong_alias (MEMCMP, __memcmpeq)
+libc_hidden_builtin_def (MEMCMP)
 libc_hidden_def (__memcmpeq)
diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile
index 988f7cec25..38952655b1 100644
--- a/sysdeps/aarch64/multiarch/Makefile
+++ b/sysdeps/aarch64/multiarch/Makefile
@@ -1,5 +1,7 @@
 ifeq ($(subdir),string)
 sysdep_routines += \
+  memcmp_generic \
+  memcmp_kunpeng950 \
   memcpy_a64fx \
   memcpy_generic \
   memcpy_kunpeng950 \
diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c
index ea5f5853c3..d43f6b58ee 100644
--- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c
@@ -33,7 +33,10 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   INIT_ARCH ();
 
-  /* Support sysdeps/aarch64/multiarch/memcpy.c, memmove.c and memset.c.  */
+  /* Support sysdeps/aarch64/multiarch/memcmp.c, memcpy.c, memmove.c and memset.c.  */
+  IFUNC_IMPL (i, name, memcmp,
+	      IFUNC_IMPL_ADD (array, i, memcmp, sve, __memcmp_kunpeng950)
+	      IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_generic))
   IFUNC_IMPL (i, name, memcpy,
 	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_oryon1)
 	      IFUNC_IMPL_ADD (array, i, memcpy, sve, __memcpy_a64fx)
diff --git a/sysdeps/aarch64/multiarch/memcmp.c b/sysdeps/aarch64/multiarch/memcmp.c
new file mode 100644
index 0000000000..5c3dc63068
--- /dev/null
+++ b/sysdeps/aarch64/multiarch/memcmp.c
@@ -0,0 +1,54 @@
+/* Multiple versions of memcmp. AARCH64 version.
+   Copyright (C) 2026 Free Software Foundation, Inc.
+   Copyright The GNU Toolchain Authors.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* Define multiple versions only for the definition in libc.  */
+
+#if IS_IN (libc)
+/* Redefine memcmp so that the compiler won't complain about the type
+   mismatch with the IFUNC selector in strong_alias, below.  */
+# undef memcmp
+# define memcmp __redirect_memcmp
+# include <string.h>
+# include <init-arch.h>
+
+extern __typeof (__redirect_memcmp) __libc_memcmp;
+
+extern __typeof (__redirect_memcmp) __memcmp_generic attribute_hidden;
+extern __typeof (__redirect_memcmp) __memcmp_kunpeng950 attribute_hidden;
+
+static inline __typeof (__redirect_memcmp) *
+select_memcmp_ifunc (void)
+{
+  INIT_ARCH ();
+
+  if (sve)
+  {
+    if (IS_KUNPENG950 (midr))
+    {
+      return __memcmp_kunpeng950;
+    }
+  }
+  return __memcmp_generic;
+}
+
+libc_ifunc (__libc_memcmp, select_memcmp_ifunc ());
+
+# undef memcmp
+strong_alias (__libc_memcmp, memcmp);
+#endif
diff --git a/sysdeps/aarch64/multiarch/memcmp_generic.S b/sysdeps/aarch64/multiarch/memcmp_generic.S
new file mode 100644
index 0000000000..9b24610814
--- /dev/null
+++ b/sysdeps/aarch64/multiarch/memcmp_generic.S
@@ -0,0 +1,42 @@
+/* A Generic Optimized memcmp implementation for AARCH64.
+   Copyright (C) 2026 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* The actual memcmp code is in ../memcmp.S.  If we are
+   building libc this file defines __memcmp_generic. Otherwise
+   the include of ../memcmp.S will define the normal __memcmp
+   entry points.  */
+
+#include <sysdep.h>
+
+#if IS_IN (libc)
+
+# define MEMCMP __memcmp_generic
+
+/* Do not hide the generic versions of memcmp, we use them
+   internally.  */
+# undef libc_hidden_builtin_def
+# define libc_hidden_builtin_def(name)
+
+# ifdef SHARED
+/* It doesn't make sense to send libc-internal memcmp calls through a PLT. */
+	.globl __GI_memcmp; __GI_memcmp = __memcmp_generic
+# endif
+
+#endif
+
+#include "../memcmp.S"
diff --git a/sysdeps/aarch64/multiarch/memcmp_kunpeng950.S b/sysdeps/aarch64/multiarch/memcmp_kunpeng950.S
new file mode 100644
index 0000000000..b5fb59ebcf
--- /dev/null
+++ b/sysdeps/aarch64/multiarch/memcmp_kunpeng950.S
@@ -0,0 +1,145 @@
+/* Optimized memcmp for Huawei Kunpeng 950 processor.
+   Copyright (C) 2026 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* Assumptions:
+ *
+ * ARMv8.2-a, AArch64, Advanced SIMD, SVE, unaligned accesses
+ *
+ */
+
+.arch armv8.2-a+sve
+
+#define src1    x0
+#define src2    x1
+#define cnt     x2
+#define result  w0
+#define off_vl      x3
+#define off_vlx2    x4
+#define off_vlx3    x5
+#define off_vlx4    x6
+
+ENTRY (__memcmp_kunpeng950)
+    whilelo p0.b, xzr, cnt
+    b.none  L(equal)
+    cntb    off_vl
+    ld1b    z0.b, p0/z, [src1]
+    ld1b    z1.b, p0/z, [src2]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    whilelo p0.b, off_vl, cnt
+    b.none  L(equal)
+    cntb    off_vlx2, all, mul #2
+    ld1b    z0.b, p0/z, [src1, 1, mul vl]
+    ld1b    z1.b, p0/z, [src2, 1, mul vl]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    whilelo p0.b, off_vlx2, cnt
+    b.none  L(equal)
+    cntb    off_vlx3, all, mul #3
+    ld1b    z0.b, p0/z, [src1, 2, mul vl]
+    ld1b    z1.b, p0/z, [src2, 2, mul vl]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    whilelo p0.b, off_vlx3, cnt
+    b.none  L(equal)
+    cntb    off_vlx4, all, mul #4
+    ld1b    z0.b, p0/z, [src1, 3, mul vl]
+    ld1b    z1.b, p0/z, [src2, 3, mul vl]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    subs    cnt, cnt, off_vlx4
+    b.ls    L(equal)
+    add     src1, src1, off_vlx4
+    add     src2, src2, off_vlx4
+    cmp     cnt, off_vlx4
+    b.lo    L(tail_4xvl)
+
+    .p2align 4
+L(loop_full):
+    ld1b    z0.b, p0/z, [src1]
+    ld1b    z1.b, p0/z, [src2]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    ld1b    z0.b, p0/z, [src1, off_vl]
+    ld1b    z1.b, p0/z, [src2, off_vl]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    ld1b    z0.b, p0/z, [src1, off_vlx2]
+    ld1b    z1.b, p0/z, [src2, off_vlx2]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    ld1b    z0.b, p0/z, [src1, off_vlx3]
+    ld1b    z1.b, p0/z, [src2, off_vlx3]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    add     src1, src1, off_vlx4
+    add     src2, src2, off_vlx4
+    subs    cnt, cnt, off_vlx4
+    cmp     cnt, off_vlx4
+    b.hs    L(loop_full)
+
+L(tail_4xvl):
+    whilelo p0.b, xzr, cnt
+    b.none  L(equal)
+    ld1b    z0.b, p0/z, [src1]
+    ld1b    z1.b, p0/z, [src2]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    whilelo p0.b, off_vl, cnt
+    b.none  L(equal)
+    ld1b    z0.b, p0/z, [src1, off_vl]
+    ld1b    z1.b, p0/z, [src2, off_vl]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    whilelo p0.b, off_vlx2, cnt
+    b.none  L(equal)
+    ld1b    z0.b, p0/z, [src1, off_vlx2]
+    ld1b    z1.b, p0/z, [src2, off_vlx2]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+    whilelo p0.b, off_vlx3, cnt
+    b.none  L(equal)
+    ld1b    z0.b, p0/z, [src1, off_vlx3]
+    ld1b    z1.b, p0/z, [src2, off_vlx3]
+    cmpne   p1.b, p0/z, z0.b, z1.b
+    b.any   L(mismatch)
+
+L(equal):
+    mov     result, #0
+    ret
+
+L(mismatch):
+    mov     result, #1
+    cmphi   p2.b, p1/z, z1.b, z0.b
+    cneg    result, result, mi
+    ret
+END (__memcmp_kunpeng950)
diff --git a/sysdeps/aarch64/multiarch/memcpy_kunpeng950.S b/sysdeps/aarch64/multiarch/memcpy_kunpeng950.S
index 82534f9c18..38a56303de 100644
--- a/sysdeps/aarch64/multiarch/memcpy_kunpeng950.S
+++ b/sysdeps/aarch64/multiarch/memcpy_kunpeng950.S
@@ -1,4 +1,4 @@
-/* Optimized memcpy for Huawei Kupeng 950 processor.
+/* Optimized memcpy for Huawei Kunpeng 950 processor.
    Copyright (C) 2026 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.
-- 
2.39.5

Function: memcmp
Variant: default
                                            __memcmp_kunpeng950	 __memcmp_generic
========================================================================================================================
        length=0, align1=0, align2=0:         1.54 ( 49.92%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.95%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.94%)	        3.08	
        length=1, align1=1, align2=1:         1.54 ( 42.77%)	        2.70	
        length=1, align1=1, align2=1:         1.54 ( 42.76%)	        2.70	
        length=1, align1=1, align2=1:         1.54 ( 44.41%)	        2.77	
        length=2, align1=2, align2=2:         1.54 ( 42.78%)	        2.70	
        length=2, align1=2, align2=2:         1.54 ( 42.81%)	        2.70	
        length=2, align1=2, align2=2:         1.54 ( 42.80%)	        2.70	
        length=3, align1=3, align2=3:         1.54 ( 33.31%)	        2.31	
        length=3, align1=3, align2=3:         1.54 ( 33.32%)	        2.31	
        length=3, align1=3, align2=3:         1.54 ( 33.32%)	        2.31	
        length=4, align1=4, align2=4:         1.54 ( 33.31%)	        2.31	
        length=4, align1=4, align2=4:         1.54 ( 33.30%)	        2.31	
        length=4, align1=4, align2=4:         1.54 ( 33.33%)	        2.31	
        length=5, align1=5, align2=5:         1.54 ( 33.31%)	        2.31	
        length=5, align1=5, align2=5:         1.54 ( 33.29%)	        2.31	
        length=5, align1=5, align2=5:         1.54 ( 33.33%)	        2.31	
        length=6, align1=6, align2=6:         1.54 ( 33.27%)	        2.31	
        length=6, align1=6, align2=6:         1.54 ( 33.31%)	        2.31	
        length=6, align1=6, align2=6:         1.54 ( 49.86%)	        3.08	
        length=7, align1=7, align2=7:         1.54 ( 33.27%)	        2.31	
        length=7, align1=7, align2=7:         1.54 ( 33.28%)	        2.31	
        length=7, align1=7, align2=7:         1.54 ( 33.31%)	        2.31	
        length=8, align1=8, align2=8:         1.54 ( 19.90%)	        1.93	
        length=8, align1=8, align2=8:         1.54 ( 20.00%)	        1.93	
        length=8, align1=8, align2=8:         1.54 ( 19.90%)	        1.93	
        length=9, align1=9, align2=9:         1.54 ( 19.90%)	        1.93	
        length=9, align1=9, align2=9:         1.61 ( 16.53%)	        1.92	
        length=9, align1=9, align2=9:         1.54 ( 19.89%)	        1.93	
     length=10, align1=10, align2=10:         1.54 ( 19.85%)	        1.92	
     length=10, align1=10, align2=10:         1.54 ( 19.85%)	        1.92	
     length=10, align1=10, align2=10:         1.54 ( 19.88%)	        1.92	
     length=11, align1=11, align2=11:         1.54 ( 19.92%)	        1.93	
     length=11, align1=11, align2=11:         1.54 ( 19.84%)	        1.92	
     length=11, align1=11, align2=11:         1.54 ( 19.91%)	        1.93	
     length=12, align1=12, align2=12:         1.60 ( 17.18%)	        1.93	
     length=12, align1=12, align2=12:         1.55 ( 19.62%)	        1.93	
     length=12, align1=12, align2=12:         1.54 ( 19.89%)	        1.93	
     length=13, align1=13, align2=13:         1.54 ( 19.86%)	        1.93	
     length=13, align1=13, align2=13:         1.54 ( 19.87%)	        1.93	
     length=13, align1=13, align2=13:         1.55 ( 19.57%)	        1.92	
     length=14, align1=14, align2=14:         1.54 ( 19.88%)	        1.93	
     length=14, align1=14, align2=14:         1.54 ( 19.89%)	        1.93	
     length=14, align1=14, align2=14:         1.54 ( 23.12%)	        2.01	
     length=15, align1=15, align2=15:         1.54 ( 19.90%)	        1.93	
     length=15, align1=15, align2=15:         1.54 ( 19.87%)	        1.92	
     length=15, align1=15, align2=15:         1.68 ( 12.99%)	        1.93	
     length=16, align1=16, align2=16:         1.54 ( 19.94%)	        1.93	
     length=16, align1=16, align2=16:         1.54 ( 19.92%)	        1.93	
     length=16, align1=16, align2=16:         1.54 ( 19.96%)	        1.93	
     length=17, align1=17, align2=17:         1.54 ( 25.39%)	        2.07	
     length=17, align1=17, align2=17:         1.54 ( 27.66%)	        2.13	
     length=17, align1=17, align2=17:         1.54 ( 24.41%)	        2.04	
     length=18, align1=18, align2=18:         1.54 ( 24.39%)	        2.04	
     length=18, align1=18, align2=18:         1.54 ( 24.62%)	        2.05	
     length=18, align1=18, align2=18:         1.54 ( 24.61%)	        2.05	
     length=19, align1=19, align2=19:         1.54 ( 24.40%)	        2.04	
     length=19, align1=19, align2=19:         1.54 ( 25.32%)	        2.07	
     length=19, align1=19, align2=19:         1.54 ( 24.65%)	        2.05	
     length=20, align1=20, align2=20:         1.54 ( 27.75%)	        2.13	
     length=20, align1=20, align2=20:         1.54 ( 25.21%)	        2.06	
     length=20, align1=20, align2=20:         1.54 ( 25.05%)	        2.06	
     length=21, align1=21, align2=21:         1.54 ( 24.90%)	        2.05	
     length=21, align1=21, align2=21:         1.54 ( 25.67%)	        2.07	
     length=21, align1=21, align2=21:         1.54 ( 24.88%)	        2.05	
     length=22, align1=22, align2=22:         1.54 ( 24.91%)	        2.05	
     length=22, align1=22, align2=22:         1.54 ( 25.00%)	        2.06	
     length=22, align1=22, align2=22:         1.54 ( 29.80%)	        2.20	
     length=23, align1=23, align2=23:         1.54 ( 25.04%)	        2.06	
     length=23, align1=23, align2=23:         1.54 ( 24.89%)	        2.05	
     length=23, align1=23, align2=23:         1.54 ( 25.61%)	        2.07	
     length=24, align1=24, align2=24:         1.54 ( 25.69%)	        2.07	
     length=24, align1=24, align2=24:         1.54 ( 25.64%)	        2.07	
     length=24, align1=24, align2=24:         1.54 ( 25.64%)	        2.07	
     length=25, align1=25, align2=25:         1.54 ( 26.71%)	        2.10	
     length=25, align1=25, align2=25:         1.59 ( 34.41%)	        2.43	
     length=25, align1=25, align2=25:         1.54 ( 26.80%)	        2.11	
     length=26, align1=26, align2=26:         1.54 ( 26.16%)	        2.09	
     length=26, align1=26, align2=26:         1.54 ( 26.80%)	        2.11	
     length=26, align1=26, align2=26:         1.54 ( 26.81%)	        2.11	
     length=27, align1=27, align2=27:         1.72 ( 18.93%)	        2.12	
     length=27, align1=27, align2=27:         1.54 ( 26.81%)	        2.11	
     length=27, align1=27, align2=27:         1.54 ( 27.08%)	        2.12	
     length=28, align1=28, align2=28:         1.65 ( 21.72%)	        2.11	
     length=28, align1=28, align2=28:         1.54 ( 27.02%)	        2.11	
     length=28, align1=28, align2=28:         1.54 ( 28.47%)	        2.16	
     length=29, align1=29, align2=29:         1.54 ( 28.31%)	        2.15	
     length=29, align1=29, align2=29:         1.54 ( 26.83%)	        2.11	
     length=29, align1=29, align2=29:         1.54 ( 26.84%)	        2.11	
     length=30, align1=30, align2=30:         1.54 ( 28.49%)	        2.16	
     length=30, align1=30, align2=30:         1.54 ( 28.87%)	        2.17	
     length=30, align1=30, align2=30:         1.54 ( 26.76%)	        2.11	
     length=31, align1=31, align2=31:         1.54 ( 26.77%)	        2.11	
     length=31, align1=31, align2=31:         1.54 ( 26.83%)	        2.11	
     length=31, align1=31, align2=31:         1.54 ( 28.37%)	        2.15	
        length=0, align1=0, align2=0:         1.54 ( 49.93%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.94%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.94%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.95%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.95%)	        3.08	
        length=0, align1=0, align2=0:         1.54 ( 49.95%)	        3.08	
        length=1, align1=0, align2=0:         1.54 ( 42.80%)	        2.70	
        length=1, align1=0, align2=0:         1.54 ( 42.80%)	        2.70	
        length=1, align1=0, align2=0:         1.54 ( 42.80%)	        2.70	
     length=1, align1=4095, align2=0:         4.66 (-72.94%)	        2.70	
     length=1, align1=4095, align2=0:         4.49 (-66.39%)	        2.70	
     length=1, align1=4095, align2=0:         4.47 (-65.62%)	        2.70	
        length=2, align1=0, align2=0:         1.54 ( 42.80%)	        2.70	
        length=2, align1=0, align2=0:         1.54 ( 42.81%)	        2.70	
        length=2, align1=0, align2=0:         1.65 ( 38.96%)	        2.70	
     length=2, align1=4094, align2=0:         4.62 (-71.41%)	        2.70	
     length=2, align1=4094, align2=0:         4.47 (-65.59%)	        2.70	
     length=2, align1=4094, align2=0:         4.49 (-66.46%)	        2.70	
        length=3, align1=0, align2=0:         1.54 ( 33.27%)	        2.31	
        length=3, align1=0, align2=0:         1.59 ( 31.25%)	        2.31	
        length=3, align1=0, align2=0:         1.54 ( 33.28%)	        2.31	
     length=3, align1=4093, align2=0:         4.62 (-99.80%)	        2.31	
     length=3, align1=4093, align2=0:         4.45 (-92.43%)	        2.31	
     length=3, align1=4093, align2=0:         4.48 (-94.00%)	        2.31	
        length=4, align1=0, align2=0:         1.54 ( 34.76%)	        2.37	
        length=4, align1=0, align2=0:         1.54 ( 33.29%)	        2.31	
        length=4, align1=0, align2=0:         1.54 ( 33.25%)	        2.31	
     length=4, align1=4092, align2=0:         4.54 (-96.38%)	        2.31	
     length=4, align1=4092, align2=0:         4.45 (-92.49%)	        2.31	
     length=4, align1=4092, align2=0:         4.48 (-87.74%)	        2.39	
        length=5, align1=0, align2=0:         1.54 ( 33.27%)	        2.31	
        length=5, align1=0, align2=0:         1.54 ( 33.23%)	        2.31	
        length=5, align1=0, align2=0:         1.54 ( 33.27%)	        2.31	
     length=5, align1=4091, align2=0:         4.62 (-99.85%)	        2.31	
     length=5, align1=4091, align2=0:         4.46 (-93.05%)	        2.31	
     length=5, align1=4091, align2=0:         4.54 (-96.32%)	        2.31	
        length=6, align1=0, align2=0:         1.54 ( 33.22%)	        2.31	
        length=6, align1=0, align2=0:         1.54 ( 33.25%)	        2.31	
        length=6, align1=0, align2=0:         1.54 ( 33.28%)	        2.31	
     length=6, align1=4090, align2=0:         4.54 (-96.34%)	        2.31	
     length=6, align1=4090, align2=0:         4.50 (-94.62%)	        2.31	
     length=6, align1=4090, align2=0:         4.51 (-95.13%)	        2.31	
        length=7, align1=0, align2=0:         1.54 ( 33.26%)	        2.31	
        length=7, align1=0, align2=0:         1.54 ( 33.23%)	        2.31	
        length=7, align1=0, align2=0:         1.54 ( 33.27%)	        2.31	
     length=7, align1=4089, align2=0:         4.62 (-99.73%)	        2.31	
     length=7, align1=4089, align2=0:         5.14 (-122.28%)	        2.31	
     length=7, align1=4089, align2=0:         4.45 (-92.39%)	        2.31	
        length=8, align1=0, align2=0:         1.54 ( 19.85%)	        1.93	
        length=8, align1=0, align2=0:         1.54 ( 19.90%)	        1.93	
        length=8, align1=0, align2=0:         1.54 ( 19.83%)	        1.93	
     length=8, align1=4088, align2=0:         4.62 (-139.84%)	        1.93	
     length=8, align1=4088, align2=0:         4.50 (-133.77%)	        1.93	
     length=8, align1=4088, align2=0:         4.46 (-131.81%)	        1.93	
        length=9, align1=0, align2=0:         1.54 ( 19.81%)	        1.92	
        length=9, align1=0, align2=0:         1.54 ( 19.86%)	        1.93	
        length=9, align1=0, align2=0:         1.54 ( 19.84%)	        1.92	
     length=9, align1=4087, align2=0:         4.62 (-139.91%)	        1.93	
     length=9, align1=4087, align2=0:         4.53 (-135.33%)	        1.93	
     length=9, align1=4087, align2=0:         4.45 (-131.07%)	        1.93	
       length=10, align1=0, align2=0:         1.54 ( 19.82%)	        1.92	
       length=10, align1=0, align2=0:         1.54 ( 19.85%)	        1.92	
       length=10, align1=0, align2=0:         1.54 ( 19.83%)	        1.92	
    length=10, align1=4086, align2=0:         4.62 (-139.96%)	        1.93	
    length=10, align1=4086, align2=0:         4.55 (-136.19%)	        1.93	
    length=10, align1=4086, align2=0:         4.48 (-132.99%)	        1.92	
       length=11, align1=0, align2=0:         1.54 ( 19.80%)	        1.92	
       length=11, align1=0, align2=0:         1.54 ( 19.86%)	        1.92	
       length=11, align1=0, align2=0:         1.54 ( 19.86%)	        1.92	
    length=11, align1=4085, align2=0:         4.62 (-139.99%)	        1.93	
    length=11, align1=4085, align2=0:         4.49 (-133.16%)	        1.92	
    length=11, align1=4085, align2=0:         4.46 (-131.93%)	        1.93	
       length=12, align1=0, align2=0:         1.54 ( 19.82%)	        1.92	
       length=12, align1=0, align2=0:         1.54 ( 19.84%)	        1.92	
       length=12, align1=0, align2=0:         1.54 ( 19.81%)	        1.92	
    length=12, align1=4084, align2=0:         4.62 (-132.98%)	        1.98	
    length=12, align1=4084, align2=0:         4.48 (-132.82%)	        1.93	
    length=12, align1=4084, align2=0:         4.45 (-131.06%)	        1.93	
       length=13, align1=0, align2=0:         1.54 ( 19.83%)	        1.92	
       length=13, align1=0, align2=0:         1.54 ( 19.85%)	        1.92	
       length=13, align1=0, align2=0:         1.54 ( 19.85%)	        1.92	
    length=13, align1=4083, align2=0:         4.61 (-72.32%)	        2.68	
    length=13, align1=4083, align2=0:         4.48 (-132.92%)	        1.93	
    length=13, align1=4083, align2=0:         4.48 (-133.01%)	        1.92	
       length=14, align1=0, align2=0:         1.54 ( 19.84%)	        1.92	
       length=14, align1=0, align2=0:         1.54 ( 19.84%)	        1.92	
       length=14, align1=0, align2=0:         1.54 ( 19.85%)	        1.92	
    length=14, align1=4082, align2=0:         4.69 (-143.49%)	        1.93	
    length=14, align1=4082, align2=0:         4.45 (-130.97%)	        1.93	
    length=14, align1=4082, align2=0:         4.48 (-132.99%)	        1.92	
       length=15, align1=0, align2=0:         1.54 ( 19.85%)	        1.92	
       length=15, align1=0, align2=0:         1.54 ( 19.84%)	        1.92	
       length=15, align1=0, align2=0:         1.54 ( 19.84%)	        1.92	
    length=15, align1=4081, align2=0:         4.67 (-142.35%)	        1.93	
    length=15, align1=4081, align2=0:         4.45 (-130.98%)	        1.93	
    length=15, align1=4081, align2=0:         4.45 (-131.04%)	        1.93	
       length=16, align1=0, align2=0:         1.54 ( 19.96%)	        1.93	
       length=16, align1=0, align2=0:         1.54 ( 19.92%)	        1.93	
       length=16, align1=0, align2=0:         1.54 ( 19.85%)	        1.93	
    length=16, align1=4080, align2=0:         4.67 (-155.14%)	        1.83	
    length=16, align1=4080, align2=0:         4.49 (-145.22%)	        1.83	
    length=16, align1=4080, align2=0:         4.48 (-144.99%)	        1.83	
       length=17, align1=0, align2=0:         1.54 ( 27.97%)	        2.14	
       length=17, align1=0, align2=0:         1.54 ( 27.22%)	        2.12	
       length=17, align1=0, align2=0:         1.54 ( 26.10%)	        2.09	
    length=17, align1=4079, align2=0:         4.68 (-160.51%)	        1.80	
    length=17, align1=4079, align2=0:         4.45 (-147.62%)	        1.80	
    length=17, align1=4079, align2=0:         4.48 (-149.68%)	        1.80	
       length=18, align1=0, align2=0:         1.54 ( 27.21%)	        2.12	
       length=18, align1=0, align2=0:         1.54 ( 27.22%)	        2.12	
       length=18, align1=0, align2=0:         1.54 ( 27.23%)	        2.12	
    length=18, align1=4078, align2=0:         4.65 (-158.63%)	        1.80	
    length=18, align1=4078, align2=0:         4.45 (-147.75%)	        1.80	
    length=18, align1=4078, align2=0:         4.47 (-148.70%)	        1.80	
       length=19, align1=0, align2=0:         1.54 ( 27.23%)	        2.12	
       length=19, align1=0, align2=0:         1.54 ( 27.26%)	        2.12	
       length=19, align1=0, align2=0:         1.54 ( 28.62%)	        2.16	
    length=19, align1=4077, align2=0:         4.62 (-157.29%)	        1.80	
    length=19, align1=4077, align2=0:         4.49 (-149.72%)	        1.80	
    length=19, align1=4077, align2=0:         4.45 (-147.76%)	        1.80	
       length=20, align1=0, align2=0:         1.54 ( 27.25%)	        2.12	
       length=20, align1=0, align2=0:         1.54 ( 27.95%)	        2.14	
       length=20, align1=0, align2=0:         1.54 ( 27.98%)	        2.14	
    length=20, align1=4076, align2=0:         4.62 (-157.20%)	        1.80	
    length=20, align1=4076, align2=0:         4.46 (-148.59%)	        1.80	
    length=20, align1=4076, align2=0:         4.46 (-148.53%)	        1.80	
       length=21, align1=0, align2=0:         1.54 ( 27.14%)	        2.12	
       length=21, align1=0, align2=0:         1.54 ( 27.25%)	        2.12	
       length=21, align1=0, align2=0:         1.54 ( 27.15%)	        2.12	
    length=21, align1=4075, align2=0:         4.52 (-151.65%)	        1.80	
    length=21, align1=4075, align2=0:         4.49 (-149.86%)	        1.80	
    length=21, align1=4075, align2=0:         4.47 (-148.64%)	        1.80	
       length=22, align1=0, align2=0:         1.54 ( 27.96%)	        2.14	
       length=22, align1=0, align2=0:         1.54 ( 27.57%)	        2.13	
       length=22, align1=0, align2=0:         1.61 ( 24.72%)	        2.14	
    length=22, align1=4074, align2=0:         4.62 (-157.35%)	        1.80	
    length=22, align1=4074, align2=0:         4.45 (-147.79%)	        1.80	
    length=22, align1=4074, align2=0:         4.48 (-149.62%)	        1.80	
       length=23, align1=0, align2=0:         1.54 ( 27.24%)	        2.12	
       length=23, align1=0, align2=0:         1.54 ( 27.23%)	        2.12	
       length=23, align1=0, align2=0:         1.58 ( 25.48%)	        2.12	
    length=23, align1=4073, align2=0:         4.62 (-157.13%)	        1.80	
    length=23, align1=4073, align2=0:         4.45 (-147.67%)	        1.80	
    length=23, align1=4073, align2=0:         4.46 (-148.53%)	        1.80	
       length=24, align1=0, align2=0:         1.54 ( 27.94%)	        2.14	
       length=24, align1=0, align2=0:         1.54 ( 28.45%)	        2.16	
       length=24, align1=0, align2=0:         1.54 ( 25.30%)	        2.07	
    length=24, align1=4072, align2=0:         4.62 (-157.14%)	        1.80	
    length=24, align1=4072, align2=0:         4.48 (-149.68%)	        1.80	
    length=24, align1=4072, align2=0:         4.49 (-149.77%)	        1.80	
       length=25, align1=0, align2=0:         1.54 ( 27.96%)	        2.14	
       length=25, align1=0, align2=0:         1.54 ( 28.17%)	        2.15	
       length=25, align1=0, align2=0:         1.54 ( 27.96%)	        2.14	
    length=25, align1=4071, align2=0:         4.61 (-156.80%)	        1.80	
    length=25, align1=4071, align2=0:         4.49 (-149.72%)	        1.80	
    length=25, align1=4071, align2=0:         4.45 (-147.70%)	        1.80	
       length=26, align1=0, align2=0:         1.54 ( 27.96%)	        2.14	
       length=26, align1=0, align2=0:         1.60 ( 24.79%)	        2.12	
       length=26, align1=0, align2=0:         1.54 ( 27.14%)	        2.12	
    length=26, align1=4070, align2=0:         4.62 (-157.22%)	        1.80	
    length=26, align1=4070, align2=0:         4.49 (-149.90%)	        1.80	
    length=26, align1=4070, align2=0:         4.45 (-147.66%)	        1.80	
       length=27, align1=0, align2=0:         1.54 ( 28.03%)	        2.14	
       length=27, align1=0, align2=0:         1.62 ( 24.45%)	        2.14	
       length=27, align1=0, align2=0:         1.54 ( 27.96%)	        2.14	
    length=27, align1=4069, align2=0:         4.62 (-157.00%)	        1.80	
    length=27, align1=4069, align2=0:         4.49 (-149.72%)	        1.80	
    length=27, align1=4069, align2=0:         4.45 (-147.58%)	        1.80	
       length=28, align1=0, align2=0:         1.54 ( 29.07%)	        2.17	
       length=28, align1=0, align2=0:         1.54 ( 27.98%)	        2.14	
       length=28, align1=0, align2=0:         1.54 ( 27.57%)	        2.13	
    length=28, align1=4068, align2=0:         4.62 (-157.15%)	        1.80	
    length=28, align1=4068, align2=0:         4.48 (-149.60%)	        1.80	
    length=28, align1=4068, align2=0:         4.48 (-149.58%)	        1.80	
       length=29, align1=0, align2=0:         1.54 ( 27.21%)	        2.12	
       length=29, align1=0, align2=0:         1.54 ( 27.53%)	        2.13	
       length=29, align1=0, align2=0:         1.54 ( 27.95%)	        2.14	
    length=29, align1=4067, align2=0:         4.62 (-157.23%)	        1.80	
    length=29, align1=4067, align2=0:         4.49 (-149.78%)	        1.80	
    length=29, align1=4067, align2=0:         4.45 (-147.71%)	        1.80	
       length=30, align1=0, align2=0:         1.60 ( 25.46%)	        2.14	
       length=30, align1=0, align2=0:         1.54 ( 27.91%)	        2.14	
       length=30, align1=0, align2=0:         1.54 ( 27.96%)	        2.14	
    length=30, align1=4066, align2=0:         4.52 (-151.59%)	        1.80	
    length=30, align1=4066, align2=0:         4.45 (-147.60%)	        1.80	
    length=30, align1=4066, align2=0:         4.46 (-148.49%)	        1.80	
       length=31, align1=0, align2=0:         1.57 ( 23.89%)	        2.07	
       length=31, align1=0, align2=0:         1.54 ( 27.11%)	        2.12	
       length=31, align1=0, align2=0:         1.54 ( 26.22%)	        2.09	
    length=31, align1=4065, align2=0:         4.62 (-157.08%)	        1.80	
    length=31, align1=4065, align2=0:         4.45 (-147.42%)	        1.80	
    length=31, align1=4065, align2=0:         4.45 (-141.37%)	        1.84	
       length=33, align1=0, align2=0:         1.93 ( 16.73%)	        2.32	
       length=33, align1=0, align2=0:         1.60 ( 31.09%)	        2.32	
       length=33, align1=0, align2=0:         1.60 ( 31.00%)	        2.32	
      length=33, align1=33, align2=0:         1.93 ( 25.46%)	        2.58	
      length=33, align1=0, align2=33:         1.61 ( 37.36%)	        2.57	
     length=33, align1=33, align2=33:         1.70 ( 42.52%)	        2.95	
       length=65, align1=0, align2=0:         2.11 ( 38.38%)	        3.43	
       length=65, align1=0, align2=0:         1.93 ( 42.79%)	        3.37	
       length=65, align1=0, align2=0:         1.93 ( 43.01%)	        3.39	
      length=65, align1=65, align2=0:         2.14 ( 38.27%)	        3.46	
      length=65, align1=0, align2=65:         1.93 ( 44.39%)	        3.46	
     length=65, align1=65, align2=65:         2.19 ( 38.08%)	        3.54	
       length=97, align1=0, align2=0:         2.38 ( 43.80%)	        4.23	
       length=97, align1=0, align2=0:         2.40 ( 43.40%)	        4.24	
       length=97, align1=0, align2=0:         2.39 ( 43.57%)	        4.24	
      length=97, align1=97, align2=0:         2.34 ( 44.76%)	        4.23	
      length=97, align1=0, align2=97:         2.32 ( 45.99%)	        4.30	
     length=97, align1=97, align2=97:         2.99 ( 34.97%)	        4.59	
      length=129, align1=0, align2=0:         3.09 ( 42.61%)	        5.39	
      length=129, align1=0, align2=0:         3.12 ( 42.04%)	        5.39	
      length=129, align1=0, align2=0:         3.20 ( 40.70%)	        5.39	
    length=129, align1=129, align2=0:         3.12 ( 42.19%)	        5.39	
    length=129, align1=0, align2=129:         3.17 ( 41.12%)	        5.39	
  length=129, align1=129, align2=129:         3.62 ( 36.01%)	        5.66	
      length=161, align1=0, align2=0:         3.79 ( 24.32%)	        5.01	
      length=161, align1=0, align2=0:         3.57 ( 28.77%)	        5.01	
      length=161, align1=0, align2=0:         3.55 ( 29.86%)	        5.06	
    length=161, align1=161, align2=0:         3.77 ( 25.44%)	        5.06	
    length=161, align1=0, align2=161:         3.64 ( 27.24%)	        5.01	
  length=161, align1=161, align2=161:         4.09 ( 20.58%)	        5.15	
      length=193, align1=0, align2=0:         4.23 ( 26.82%)	        5.78	
      length=193, align1=0, align2=0:         4.01 ( 30.52%)	        5.78	
      length=193, align1=0, align2=0:         4.10 ( 29.09%)	        5.78	
    length=193, align1=193, align2=0:         4.41 ( 23.65%)	        5.78	
    length=193, align1=0, align2=193:         4.12 ( 28.58%)	        5.77	
  length=193, align1=193, align2=193:         4.67 ( 19.07%)	        5.78	
      length=225, align1=0, align2=0:         4.32 ( 29.95%)	        6.16	
      length=225, align1=0, align2=0:         4.59 ( 25.42%)	        6.16	
      length=225, align1=0, align2=0:         4.46 ( 27.56%)	        6.16	
    length=225, align1=225, align2=0:         4.32 ( 29.86%)	        6.16	
    length=225, align1=0, align2=225:         4.58 ( 25.59%)	        6.16	
  length=225, align1=225, align2=225:         5.08 ( 18.24%)	        6.21	
      length=257, align1=0, align2=0:         4.47 ( 38.23%)	        7.23	
      length=257, align1=0, align2=0:         4.48 ( 38.03%)	        7.23	
      length=257, align1=0, align2=0:         4.58 ( 36.72%)	        7.23	
    length=257, align1=257, align2=0:         4.56 ( 34.18%)	        6.93	
    length=257, align1=0, align2=257:         4.68 ( 33.13%)	        7.00	
  length=257, align1=257, align2=257:         5.30 ( 26.70%)	        7.22	
      length=289, align1=0, align2=0:         5.11 ( 30.11%)	        7.32	
      length=289, align1=0, align2=0:         4.99 ( 31.75%)	        7.32	
      length=289, align1=0, align2=0:         4.92 ( 32.82%)	        7.32	
    length=289, align1=289, align2=0:         5.36 ( 27.20%)	        7.36	
    length=289, align1=0, align2=289:         5.09 ( 30.41%)	        7.32	
  length=289, align1=289, align2=289:         5.69 ( 22.29%)	        7.33	
      length=321, align1=0, align2=0:         5.42 ( 32.92%)	        8.09	
      length=321, align1=0, align2=0:         5.53 ( 31.62%)	        8.08	
      length=321, align1=0, align2=0:         5.46 ( 32.49%)	        8.09	
    length=321, align1=321, align2=0:         5.74 ( 29.11%)	        8.09	
    length=321, align1=0, align2=321:         5.47 ( 37.23%)	        8.71	
  length=321, align1=321, align2=321:         6.25 ( 22.75%)	        8.09	
      length=353, align1=0, align2=0:         5.57 ( 34.95%)	        8.56	
      length=353, align1=0, align2=0:         5.93 ( 30.21%)	        8.49	
      length=353, align1=0, align2=0:         5.93 ( 30.68%)	        8.56	
    length=353, align1=353, align2=0:         6.08 ( 32.13%)	        8.95	
    length=353, align1=0, align2=353:         6.06 ( 34.23%)	        9.21	
  length=353, align1=353, align2=353:         6.86 ( 20.38%)	        8.62	
        length=4, align1=0, align2=0:         1.54 ( 33.30%)	        2.31	
        length=4, align1=0, align2=0:         1.54 ( 33.31%)	        2.31	
        length=4, align1=0, align2=0:         1.59 ( 31.35%)	        2.31	
       length=32, align1=7, align2=2:         1.54 ( 25.65%)	        2.08	
       length=32, align1=0, align2=0:         1.54 ( 24.76%)	        2.05	
       length=32, align1=0, align2=0:         1.54 ( 23.34%)	        2.01	
       length=32, align1=0, align2=0:         1.54 ( 24.26%)	        2.04	
        length=4, align1=1, align2=0:         1.54 ( 33.28%)	        2.31	
        length=4, align1=0, align2=1:         1.54 ( 33.28%)	        2.31	
        length=4, align1=1, align2=1:         1.54 ( 33.27%)	        2.31	
       length=32, align1=1, align2=0:         1.54 ( 24.56%)	        2.05	
       length=32, align1=0, align2=1:         1.54 ( 25.41%)	        2.07	
       length=32, align1=1, align2=1:         1.54 ( 25.57%)	        2.07	
        length=8, align1=0, align2=0:         1.54 ( 19.86%)	        1.93	
        length=8, align1=0, align2=0:         1.54 ( 19.85%)	        1.93	
        length=8, align1=0, align2=0:         1.54 ( 19.84%)	        1.93	
       length=64, align1=6, align2=4:         1.94 ( 40.64%)	        3.27	
       length=64, align1=0, align2=0:         1.93 ( 34.41%)	        2.94	
       length=64, align1=0, align2=0:         1.60 ( 44.68%)	        2.89	
       length=64, align1=0, align2=0:         1.60 ( 44.75%)	        2.89	
        length=8, align1=2, align2=0:         1.54 ( 19.86%)	        1.93	
        length=8, align1=0, align2=2:         1.54 ( 19.88%)	        1.93	
        length=8, align1=2, align2=2:         1.54 ( 19.90%)	        1.93	
       length=64, align1=2, align2=0:         1.93 ( 33.46%)	        2.90	
       length=64, align1=0, align2=2:         1.62 ( 51.08%)	        3.30	
       length=64, align1=2, align2=2:         1.71 ( 47.98%)	        3.29	
       length=16, align1=0, align2=0:         1.54 ( 19.86%)	        1.93	
       length=16, align1=0, align2=0:         1.54 ( 19.87%)	        1.93	
       length=16, align1=0, align2=0:         1.54 ( 19.87%)	        1.93	
      length=128, align1=5, align2=6:         2.98 ( 41.22%)	        5.07	
      length=128, align1=0, align2=0:         2.55 ( 48.67%)	        4.97	
      length=128, align1=0, align2=0:         2.40 ( 51.26%)	        4.92	
      length=128, align1=0, align2=0:         2.39 ( 51.14%)	        4.89	
       length=16, align1=3, align2=0:         1.54 ( 19.96%)	        1.93	
       length=16, align1=0, align2=3:         1.54 ( 19.92%)	        1.93	
       length=16, align1=3, align2=3:         1.62 ( 18.50%)	        1.98	
      length=128, align1=3, align2=0:         2.59 ( 47.05%)	        4.90	
      length=128, align1=0, align2=3:         2.62 ( 46.61%)	        4.91	
      length=128, align1=3, align2=3:         3.00 ( 40.96%)	        5.09	
       length=32, align1=0, align2=0:         1.54 ( 24.44%)	        2.04	
       length=32, align1=0, align2=0:         1.54 ( 26.03%)	        2.08	
       length=32, align1=0, align2=0:         1.54 ( 23.93%)	        2.03	
      length=256, align1=4, align2=8:         4.70 ( 35.85%)	        7.33	
      length=256, align1=0, align2=0:         3.99 ( 38.99%)	        6.54	
      length=256, align1=0, align2=0:         3.81 ( 41.82%)	        6.54	
      length=256, align1=0, align2=0:         3.71 ( 43.27%)	        6.54	
       length=32, align1=4, align2=0:         1.54 ( 24.54%)	        2.04	
       length=32, align1=0, align2=4:         1.54 ( 26.98%)	        2.11	
       length=32, align1=4, align2=4:         1.58 ( 25.20%)	        2.11	
      length=256, align1=4, align2=0:         4.29 ( 34.38%)	        6.54	
      length=256, align1=0, align2=4:         4.10 ( 42.89%)	        7.17	
      length=256, align1=4, align2=4:         4.53 ( 38.04%)	        7.30	
       length=64, align1=0, align2=0:         1.93 ( 33.26%)	        2.89	
       length=64, align1=0, align2=0:         1.60 ( 44.64%)	        2.89	
       length=64, align1=0, align2=0:         1.60 ( 44.67%)	        2.89	
     length=512, align1=3, align2=10:         8.47 ( 33.12%)	       12.67	
      length=512, align1=0, align2=0:         6.53 ( 44.60%)	       11.79	
      length=512, align1=0, align2=0:         6.64 ( 43.15%)	       11.69	
      length=512, align1=0, align2=0:         6.64 ( 43.43%)	       11.74	
       length=64, align1=5, align2=0:         1.93 ( 36.58%)	        3.04	
       length=64, align1=0, align2=5:         1.61 ( 48.98%)	        3.17	
       length=64, align1=5, align2=5:         1.71 ( 47.74%)	        3.28	
      length=512, align1=5, align2=0:         7.10 ( 41.53%)	       12.15	
      length=512, align1=0, align2=5:         7.25 ( 42.61%)	       12.64	
      length=512, align1=5, align2=5:         8.65 ( 27.05%)	       11.85	
      length=128, align1=0, align2=0:         2.56 ( 47.49%)	        4.88	
      length=128, align1=0, align2=0:         2.39 ( 53.16%)	        5.11	
      length=128, align1=0, align2=0:         2.39 ( 51.36%)	        4.91	
    length=1024, align1=2, align2=12:        16.76 ( 60.09%)	       41.98	
     length=1024, align1=0, align2=0:        13.16 ( 47.62%)	       25.12	
     length=1024, align1=0, align2=0:        12.64 ( 48.18%)	       24.39	
     length=1024, align1=0, align2=0:        12.66 ( 48.91%)	       24.77	
      length=128, align1=6, align2=0:         2.49 ( 49.19%)	        4.90	
      length=128, align1=0, align2=6:         2.62 ( 46.65%)	        4.91	
      length=128, align1=6, align2=6:         3.01 ( 41.41%)	        5.13	
     length=1024, align1=6, align2=0:        13.76 ( 46.25%)	       25.60	
     length=1024, align1=0, align2=6:        14.06 ( 46.37%)	       26.21	
     length=1024, align1=6, align2=6:        16.69 ( 58.48%)	       40.19	
      length=256, align1=0, align2=0:         4.00 ( 38.94%)	        6.54	
      length=256, align1=0, align2=0:         3.74 ( 43.41%)	        6.60	
      length=256, align1=0, align2=0:         3.73 ( 42.95%)	        6.55	
    length=2048, align1=1, align2=14:        33.85 ( 32.68%)	       50.29	
     length=2048, align1=0, align2=0:        24.04 ( 48.89%)	       47.03	
     length=2048, align1=0, align2=0:        23.97 ( 49.64%)	       47.59	
     length=2048, align1=0, align2=0:        23.85 ( 49.43%)	       47.16	
      length=256, align1=7, align2=0:         4.30 ( 34.34%)	        6.55	
      length=256, align1=0, align2=7:         4.09 ( 43.04%)	        7.17	
      length=256, align1=7, align2=7:         4.57 ( 36.77%)	        7.23	
     length=2048, align1=7, align2=0:        26.87 ( 45.02%)	       48.87	
     length=2048, align1=0, align2=7:        27.05 ( 46.52%)	       50.58	
     length=2048, align1=7, align2=7:        33.92 ( 28.29%)	       47.31	
      length=512, align1=0, align2=0:         6.69 ( 42.69%)	       11.67	
      length=512, align1=0, align2=0:         6.62 ( 43.93%)	       11.81	
      length=512, align1=0, align2=0:         6.65 ( 43.57%)	       11.79	
    length=4096, align1=0, align2=16:        50.24 ( 46.02%)	       93.06	
     length=4096, align1=0, align2=0:        47.28 ( 49.00%)	       92.70	
     length=4096, align1=0, align2=0:        46.05 ( 50.30%)	       92.66	
     length=4096, align1=0, align2=0:        45.99 ( 50.39%)	       92.72	
      length=512, align1=8, align2=0:         7.23 ( 40.10%)	       12.06	
      length=512, align1=0, align2=8:         7.23 ( 42.73%)	       12.63	
      length=512, align1=8, align2=8:         8.72 ( 28.48%)	       12.19	
     length=4096, align1=8, align2=0:        52.74 ( 45.16%)	       96.15	
     length=4096, align1=0, align2=8:        52.21 ( 48.34%)	      101.06	
     length=4096, align1=8, align2=8:        67.70 ( 27.54%)	       93.43	
     length=1024, align1=0, align2=0:        12.78 ( 47.90%)	       24.53	
     length=1024, align1=0, align2=0:        12.62 ( 48.25%)	       24.39	
     length=1024, align1=0, align2=0:        12.53 ( 48.96%)	       24.55	
     length=1024, align1=9, align2=0:        13.88 ( 45.80%)	       25.61	
     length=1024, align1=0, align2=9:        14.07 ( 46.80%)	       26.44	
     length=1024, align1=9, align2=9:        17.46 ( 30.85%)	       25.24	
       length=16, align1=1, align2=2:         1.54 ( 19.91%)	        1.92	
       length=16, align1=1, align2=2:         1.61 ( 16.53%)	        1.92	
       length=16, align1=1, align2=2:         1.54 ( 19.93%)	        1.93	
       length=32, align1=2, align2=4:         1.54 ( 25.66%)	        2.08	
       length=32, align1=2, align2=4:         1.54 ( 25.60%)	        2.07	
       length=32, align1=2, align2=4:         1.54 ( 24.92%)	        2.05	
       length=64, align1=3, align2=6:         1.94 ( 42.12%)	        3.35	
       length=64, align1=3, align2=6:         1.71 ( 48.04%)	        3.29	
       length=64, align1=3, align2=6:         1.71 ( 47.05%)	        3.23	
      length=128, align1=4, align2=8:         2.98 ( 42.52%)	        5.19	
      length=128, align1=4, align2=8:         3.01 ( 41.40%)	        5.13	
      length=128, align1=4, align2=8:         3.04 ( 40.44%)	        5.10	
     length=256, align1=5, align2=10:         4.70 ( 35.88%)	        7.33	
     length=256, align1=5, align2=10:         4.48 ( 39.31%)	        7.39	
     length=256, align1=5, align2=10:         4.51 ( 38.53%)	        7.33	
     length=512, align1=6, align2=12:         8.48 ( 33.26%)	       12.71	
     length=512, align1=6, align2=12:         8.52 ( 32.43%)	       12.61	
     length=512, align1=6, align2=12:         8.59 ( 32.44%)	       12.72	
    length=1024, align1=7, align2=14:        17.18 ( 34.62%)	       26.28	
    length=1024, align1=7, align2=14:        17.20 ( 34.58%)	       26.29	
    length=1024, align1=7, align2=14:        17.78 ( 32.37%)	       26.28	
    length=2048, align1=8, align2=16:        30.91 ( 40.71%)	       52.14	
    length=2048, align1=8, align2=16:        30.41 ( 40.37%)	       50.99	
    length=2048, align1=8, align2=16:        30.55 ( 39.64%)	       50.61	
    length=4096, align1=9, align2=18:        67.28 ( 32.46%)	       99.61	
    length=4096, align1=9, align2=18:        67.68 ( 32.87%)	      100.82	
    length=4096, align1=9, align2=18:        69.16 ( 30.55%)	       99.58	
========================================================================================================================
Geo-mean (for 491 inputs)                          2.91              3.42


More information about the Libc-alpha mailing list