[PATCH] PowerPC:strrchr() optimization
Rajalakshmi Srinivasaraghavan
raji@linux.vnet.ibm.com
Mon Feb 10 06:13:00 GMT 2014
Hi All
This patch optimizes strrchr() for ppc64. I have attached the benchtest
output to show the performance improvement.This is coded with strchr.S as reference and uses
cmpb instruction for speed improvement.
sysdeps/powerpc/powerpc64/power7/strrchr.S : New file
sysdeps/powerpc/powerpc64/multiarch/Makefile : Add
strrchr multiarch implementation
sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c :
(__libc_ifunc_impl_list): Likewise.
sysdeps/powerpc/powerpc64/multiarch/strrchr.c : New file
sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c : New file
sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S : New file
string/strrchr.c : define STRRCHR
Signed-off-by: Rajalakshmi Srinivasaraghavan<raji@linux.vnet.ibm.com>
---
string/strrchr.c | 6 +-
sysdeps/powerpc/powerpc64/multiarch/Makefile | 3 +-
.../powerpc/powerpc64/multiarch/ifunc-impl-list.c | 8 +
.../powerpc/powerpc64/multiarch/strrchr-power7.S | 39 ++++
.../powerpc/powerpc64/multiarch/strrchr-ppc64.c | 33 +++
sysdeps/powerpc/powerpc64/multiarch/strrchr.c | 35 +++
sysdeps/powerpc/powerpc64/power7/strrchr.S | 255 +++++++++++++++++++++
7 files changed, 377 insertions(+), 2 deletions(-)
create mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S
create mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c
create mode 100644 sysdeps/powerpc/powerpc64/multiarch/strrchr.c
create mode 100644 sysdeps/powerpc/powerpc64/power7/strrchr.S
diff --git a/string/strrchr.c b/string/strrchr.c
index b5b4bc6..47ff08c 100644
--- a/string/strrchr.c
+++ b/string/strrchr.c
@@ -19,9 +19,13 @@
#undef strrchr
+#ifndef STRRCHR
+# define STRRCHR strrchr
+#endif
+
/* Find the last occurrence of C in S. */
char *
-strrchr (const char *s, int c)
+STRRCHR (const char *s, int c)
{
const char *found, *p;
diff --git a/sysdeps/powerpc/powerpc64/multiarch/Makefile b/sysdeps/powerpc/powerpc64/multiarch/Makefile
index 3c47316..d09f2e3 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc64/multiarch/Makefile
@@ -13,7 +13,8 @@ sysdep_routines += memcpy-power7 memcpy-a2 memcpy-power6 memcpy-cell \
wcschr-power6 wcschr-ppc64 wcsrchr-power7 wcsrchr-power6 \
wcsrchr-ppc64 wcscpy-power7 wcscpy-power6 wcscpy-ppc64 \
wordcopy-power7 wordcopy-power6 wordcopy-ppc64 \
- strcpy-power7 strcpy-ppc64 stpcpy-power7 stpcpy-ppc64
+ strcpy-power7 strcpy-ppc64 stpcpy-power7 stpcpy-ppc64 \
+ strrchr-power7 strrchr-ppc64
CFLAGS-strncase-power7.c += -mcpu=power7 -funroll-loops
CFLAGS-strncase_l-power7.c += -mcpu=power7 -funroll-loops
diff --git a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
index 6bbdd4e..82f447c 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/powerpc/powerpc64/multiarch/ifunc-impl-list.c
@@ -238,5 +238,13 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
IFUNC_IMPL_ADD (array, i, wcscpy, 1,
__wcscpy_ppc))
+ /* Support sysdeps/powerpc/powerpc64/multiarch/strchr.c. */
+ IFUNC_IMPL (i, name, strrchr,
+ IFUNC_IMPL_ADD (array, i, strrchr,
+ hwcap & PPC_FEATURE_HAS_VSX,
+ __strrchr_power7)
+ IFUNC_IMPL_ADD (array, i, strrchr, 1,
+ __strrchr_ppc))
+
return i;
}
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S b/sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S
new file mode 100644
index 0000000..e0934cd
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr-power7.S
@@ -0,0 +1,39 @@
+/* Optimized strrchr implementation for POWER7.
+ Copyright (C) 2014-2015 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
+<http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+#undef ENTRY
+#define ENTRY(name) \
+ .section ".text"; \
+ ENTRY_2(__strrchr_power7) \
+ .align ALIGNARG(2); \
+ BODY_LABEL(__strrchr_power7): \
+ cfi_startproc; \
+ LOCALENTRY(__strrchr_power7)
+
+#undef END
+#define END(name) \
+ cfi_endproc; \
+ TRACEBACK(__strrchr_power7) \
+ END_2(__strrchr_power7)
+
+#undef libc_hidden_builtin_def
+#define libc_hidden_builtin_def(name)
+
+#include <sysdeps/powerpc/powerpc64/power7/strrchr.S>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c
new file mode 100644
index 0000000..d53f9f6
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr-ppc64.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 2014-2015 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
+<http://www.gnu.org/licenses/>. */
+
+#include <string.h>
+
+#define STRRCHR __strrchr_ppc
+#undef weak_alias
+#define weak_alias(name, aliasname) \
+ extern __typeof (__strrchr_ppc) aliasname \
+ __attribute__ ((weak, alias ("__strrchr_ppc")));
+#if !defined(NOT_IN_libc) && defined(SHARED)
+# undef libc_hidden_builtin_def
+# define libc_hidden_builtin_def(name) \
+ __hidden_ver1(__strrchr_ppc, __GI_strrchr, __strrchr_ppc);
+#endif
+
+extern __typeof (strrchr) __strrchr_ppc attribute_hidden;
+
+#include <string/strrchr.c>
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c
new file mode 100644
index 0000000..6e14031
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c
@@ -0,0 +1,35 @@
+/* Multiple versions of strrchr. PowerPC64 version.
+ Copyright (C) 2014-2015 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
+<http://www.gnu.org/licenses/>. */
+
+/* Define multiple versions only for definition in libc. */
+#ifndef NOT_IN_libc
+# include <string.h>
+# include <shlib-compat.h>
+# include "init-arch.h"
+
+extern __typeof (strrchr) __strrchr_ppc attribute_hidden;
+extern __typeof (strrchr) __strrchr_power7 attribute_hidden;
+
+/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
+ ifunc symbol properly. */
+libc_ifunc (strrchr,
+ (hwcap & PPC_FEATURE_HAS_VSX)
+ ? __strrchr_power7
+ : __strrchr_ppc);
+weak_alias (strrchr, rindex)
+#endif
diff --git a/sysdeps/powerpc/powerpc64/power7/strrchr.S b/sysdeps/powerpc/powerpc64/power7/strrchr.S
new file mode 100644
index 0000000..68565c6
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power7/strrchr.S
@@ -0,0 +1,255 @@
+/* Optimized strrchr implementation for PowerPC64/POWER7 using cmpb insn.
+ Copyright (C) 2014-2015 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
+<http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+
+/* int [r3] strrchr (char *s [r3], int c [r4]) */
+ .machine power7
+ENTRY (strrchr)
+ CALL_MCOUNT 2
+ dcbt 0,r3
+ clrrdi r8,r3,3 /* Align the address to doubleword boundary. */
+ cmpdi cr7,r4,0
+ ld r12,0(r8) /* Load doubleword from memory. */
+ li r9,0 /* used to store last occurence */
+ li r0,0 /* Doubleword with null chars to use
+ with cmpb. */
+
+ rlwinm r6,r3,3,26,28 /* Calculate padding. */
+
+ beq cr7,L(null_match)
+
+ /* Replicate byte to doubleword. */
+ insrdi r4,r4,8,48
+ insrdi r4,r4,16,32
+ insrdi r4,r4,32,0
+
+ /* r4 is changed now ,if its passed as more chars
+ check for null again */
+ cmpdi cr7,r4,0
+ beq cr7,L(null_match)
+ /* Now r4 has a doubleword of c bytes and r0 has
+ a doubleword of null bytes. */
+
+ cmpb r10,r12,r4 /* Compare each byte against c byte. */
+ cmpb r11,r12,r0 /* Compare each byte against null byte. */
+
+ /* Move the doublewords left and right to discard the bits that are
+ not part of the string and bring them back as zeros. */
+#ifdef __LITTLE_ENDIAN__
+ srd r10,r10,r6
+ srd r11,r11,r6
+ sld r10,r10,r6
+ sld r11,r11,r6
+#else
+ sld r10,r10,r6
+ sld r11,r11,r6
+ srd r10,r10,r6
+ srd r11,r11,r6
+#endif
+ or r5,r10,r11 /* OR the results to speed things up. */
+ cmpdi cr7,r5,0 /* If r5 == 0, no c or null bytes
+ have been found. */
+ bne cr7,L(done)
+
+L(align):
+ mtcrf 0x01,r8
+
+ /* Are we now aligned to a doubleword boundary? If so, skip to
+ the main loop. Otherwise, go through the alignment code. */
+
+ bt 28,L(loop)
+
+ /* Handle WORD2 of pair. */
+ ldu r12,8(r8)
+ cmpb r10,r12,r4
+ cmpb r11,r12,r0
+ or r5,r10,r11
+ cmpdi cr7,r5,0
+ bne cr7,L(done)
+ b L(loop) /* We branch here (rather than falling through)
+ to skip the nops due to heavy alignment
+ of the loop below. */
+ .p2align 5
+L(loop):
+ /* Load two doublewords, compare and merge in a
+ single register for speed. This is an attempt
+ to speed up the null-checking process for bigger strings. */
+ ld r12,8(r8)
+ ldu r7,16(r8)
+ cmpb r10,r12,r4
+ cmpb r11,r12,r0
+ cmpb r6,r7,r4
+ cmpb r7,r7,r0
+ or r12,r10,r11
+ or r5,r6,r7
+ or r5,r12,r5
+ cmpdi cr7,r5,0
+ beq cr7,L(loop)
+
+ /* OK, one (or both) of the doublewords contains a c/null byte. Check
+ the first doubleword and decrement the address in case the first
+ doubleword really contains a c/null byte. */
+ cmpdi cr6,r12,0
+ addi r8,r8,-8
+ bne cr6,L(done)
+
+ /* The c/null byte must be in the second doubleword. Adjust the
+ address again and move the result of cmpb to r10 so we can calculate
+ the pointer. */
+
+ mr r10,r6
+ mr r11,r7
+ addi r8,r8,8
+
+ /* r10/r11 have the output of the cmpb instructions, that is,
+ 0xff in the same position as the c/null byte in the original
+ doubleword from the string. Use that to calculate the pointer. */
+
+L(done):
+ /* if there are more than one 0xff in r11, find the first pos of ff
+ in r11 and fill r10 with 0 from that position */
+ cmpdi cr7,r11,0
+ beq cr7,L(no_null)
+#ifdef __LITTLE_ENDIAN__
+ addi r3,r11,-1
+ andc r3,r3,r11
+ popcntd r0,r3
+#else
+ cntlzd r0,r11
+#endif
+ subfic r0,r0,63
+ li r6,-1
+#ifdef __LITTLE_ENDIAN__
+ srd r0,r6,r0
+#else
+ sld r0,r6,r0
+#endif
+ and r10,r0,r10
+L(no_null):
+#ifdef __LITTLE_ENDIAN__
+ cntlzd r0,r10 /* Count leading zeros before c matches. */
+ addi r3,r10,-1
+ andc r3,r3,r10
+ addi r10,r11,-1
+ andc r10,r10,r11
+ cmpld cr7,r3,r10
+ bgt cr7,L(no_match)
+#else
+ addi r3,r10,-1 /* Count trailing zeros before c matches. */
+ andc r3,r3,r10
+ popcntd r0,r3
+ cmpld cr7,r11,r10
+ bgt cr7,L(no_match)
+#endif
+ srdi r0,r0,3 /* Convert trailing zeros to bytes. */
+ subfic r0,r0,7
+ add r9,r8,r0 /* Return address of the matching c byte
+ or null in case c was not found. */
+ li r0,0
+ cmpdi cr7,r11,0 /* If r11 == 0, no null's have been found. */
+ beq cr7,L(align)
+
+ .align 4
+L(no_match):
+ mr r3,r9
+ blr
+
+/* We are here because strrchr was called with a null byte. */
+ .align 4
+L(null_match):
+ /* r0 has a doubleword of null bytes. */
+
+ cmpb r5,r12,r0 /* Compare each byte against null bytes. */
+
+ /* Move the doublewords left and right to discard the bits that are
+ not part of the string and bring them back as zeros. */
+#ifdef __LITTLE_ENDIAN__
+ srd r5,r5,r6
+ sld r5,r5,r6
+#else
+ sld r5,r5,r6
+ srd r5,r5,r6
+#endif
+ cmpdi cr7,r5,0 /* If r10 == 0, no c or null bytes
+ have been found. */
+ bne cr7,L(done_null)
+
+ mtcrf 0x01,r8
+
+ /* Are we now aligned to a quadword boundary? If so, skip to
+ the main loop. Otherwise, go through the alignment code. */
+
+ bt 28,L(loop_null)
+
+ /* Handle WORD2 of pair. */
+ ldu r12,8(r8)
+ cmpb r5,r12,r0
+ cmpdi cr7,r5,0
+ bne cr7,L(done_null)
+ b L(loop_null) /* We branch here (rather than falling through)
+ to skip the nops due to heavy alignment
+ of the loop below. */
+
+ /* Main loop to look for the end of the string. Since it's a
+ small loop (< 8 instructions), align it to 32-bytes. */
+ .p2align 5
+L(loop_null):
+ /* Load two doublewords, compare and merge in a
+ single register for speed. This is an attempt
+ to speed up the null-checking process for bigger strings. */
+ ld r12,8(r8)
+ ldu r11,16(r8)
+ cmpb r5,r12,r0
+ cmpb r10,r11,r0
+ or r6,r5,r10
+ cmpdi cr7,r6,0
+ beq cr7,L(loop_null)
+
+ /* OK, one (or both) of the doublewords contains a null byte. Check
+ the first doubleword and decrement the address in case the first
+ doubleword really contains a null byte. */
+
+ cmpdi cr6,r5,0
+ addi r8,r8,-8
+ bne cr6,L(done_null)
+
+ /* The null byte must be in the second doubleword. Adjust the address
+ again and move the result of cmpb to r10 so we can calculate the
+ pointer. */
+
+ mr r5,r10
+ addi r8,r8,8
+
+ /* r5 has the output of the cmpb instruction, that is, it contains
+ 0xff in the same position as the null byte in the original
+ doubleword from the string. Use that to calculate the pointer. */
+L(done_null):
+#ifdef __LITTLE_ENDIAN__
+ addi r0,r5,-1
+ andc r0,r0,r5
+ popcntd r0,r0
+#else
+ cntlzd r0,r5 /* Count leading zeros before the match. */
+#endif
+ srdi r0,r0,3 /* Convert trailing zeros to bytes. */
+ add r3,r8,r0 /* Return address of the matching null byte. */
+ blr
+END (strrchr)
+weak_alias (strrchr, rindex)
+libc_hidden_builtin_def (strrchr)
--
1.8.4
-------------- next part --------------
raji@bns:~/build1> benchtests/bench-strrchr
simple_strrchr __strrchr_power7 __strrchr_ppc
Length 32, alignment in bytes 0: 1334.89 108.562 182.5
Length 32, alignment in bytes 1: 1334.86 107.828 181.25
Length 64, alignment in bytes 0: 1337.36 108.75 188.75
Length 64, alignment in bytes 2: 1335 107.672 188.938
Length 128, alignment in bytes 0: 1334.64 107.891 187.219
Length 128, alignment in bytes 3: 1334.73 107.969 188.5
Length 256, alignment in bytes 0: 1339.78 122 209.219
Length 256, alignment in bytes 4: 1339.61 115.453 199
Length 512, alignment in bytes 0: 1342.38 123.547 209.75
Length 512, alignment in bytes 5: 1342.16 123.453 204.922
Length 1024, alignment in bytes 0: 1345 132.312 212.125
Length 1024, alignment in bytes 6: 1334.67 114.312 186.812
Length 2048, alignment in bytes 0: 1332.42 105.641 178.609
Length 2048, alignment in bytes 7: 1332.14 106.5 178.25
Length 64, alignment in bytes 1: 176 24 40
Length 64, alignment in bytes 1: 173.438 22.1719 35.9844
Length 64, alignment in bytes 2: 173.453 22.2188 36.2344
Length 64, alignment in bytes 2: 173.5 22.0938 36.0469
Length 64, alignment in bytes 3: 178.719 26.7344 48.5
Length 64, alignment in bytes 3: 173.781 22.5 36.1406
Length 64, alignment in bytes 4: 173.609 21.8438 36
Length 64, alignment in bytes 4: 175.922 23.75 39.7188
Length 64, alignment in bytes 5: 178.297 24.2344 50.5
Length 64, alignment in bytes 5: 173.5 22.5781 35.7812
Length 64, alignment in bytes 6: 178.797 25.3594 52.75
Length 64, alignment in bytes 6: 176.422 27.0156 39.6562
Length 64, alignment in bytes 7: 173.625 21.8125 35.5625
Length 64, alignment in bytes 7: 173.547 21.75 35.3906
Length 0, alignment in bytes 0: 3.25 4.51562 8.82812
Length 0, alignment in bytes 0: 2.90625 4.17188 8.375
Length 1, alignment in bytes 0: 4.17188 4.03125 8.1875
Length 1, alignment in bytes 0: 3.75 4.01562 8.14062
Length 2, alignment in bytes 0: 4.29688 4.04688 8.07812
Length 2, alignment in bytes 0: 3.96875 4.04688 8.07812
Length 3, alignment in bytes 0: 5.5 4 8.15625
Length 3, alignment in bytes 0: 4.76562 4 8.09375
Length 4, alignment in bytes 0: 5.84375 3.92188 8.32812
Length 4, alignment in bytes 0: 5.54688 3.95312 8.1875
Length 5, alignment in bytes 0: 6.4375 3.96875 8.14062
Length 5, alignment in bytes 0: 6.21875 3.92188 8.23438
Length 6, alignment in bytes 0: 7.01562 4 8.23438
Length 6, alignment in bytes 0: 6.71875 4 8.15625
Length 7, alignment in bytes 0: 9.53125 6.21875 8.75
Length 7, alignment in bytes 0: 9.48438 5.76562 8.5
Length 8, alignment in bytes 0: 11.2656 4.6875 9.125
Length 8, alignment in bytes 0: 10.7188 4.45312 8.67188
Length 9, alignment in bytes 0: 11.5 4.25 8.57812
Length 9, alignment in bytes 0: 11.3594 4.28125 8.60938
Length 10, alignment in bytes 0: 12.0312 4.25 8.48438
Length 10, alignment in bytes 0: 12.125 4.3125 8.5
Length 11, alignment in bytes 0: 12.75 4.25 8.54688
Length 11, alignment in bytes 0: 12.75 4.25 8.5
Length 12, alignment in bytes 0: 13.3281 4.25 8.45312
Length 12, alignment in bytes 0: 13.3281 4.25 8.65625
Length 13, alignment in bytes 0: 14 4.25 8.48438
Length 13, alignment in bytes 0: 14.0156 4.42188 8.64062
Length 14, alignment in bytes 0: 14.5312 4.25 8.45312
Length 14, alignment in bytes 0: 14.6094 4.28125 8.60938
Length 15, alignment in bytes 0: 15.25 6.75 9.1875
Length 15, alignment in bytes 0: 15.2031 5.78125 8.92188
Length 16, alignment in bytes 0: 15.75 6 9.76562
Length 16, alignment in bytes 0: 15.8125 5.42188 9.1875
Length 17, alignment in bytes 0: 16.3906 5.5 9.14062
Length 17, alignment in bytes 0: 16.5 5.45312 9.25
Length 18, alignment in bytes 0: 17.0312 5.1875 9.21875
Length 18, alignment in bytes 0: 17.1094 5.25 9.25
Length 19, alignment in bytes 0: 17.8438 5.3125 9.28125
Length 19, alignment in bytes 0: 17.75 5.25 9.23438
Length 20, alignment in bytes 0: 18.2969 5.375 9.125
Length 20, alignment in bytes 0: 18.2656 5.35938 9.20312
Length 21, alignment in bytes 0: 19.0625 5.17188 9.25
Length 21, alignment in bytes 0: 19.0156 5.3125 9.1875
Length 22, alignment in bytes 0: 19.7188 5.28125 9.21875
Length 22, alignment in bytes 0: 19.625 5.25 9.20312
Length 23, alignment in bytes 0: 20.4531 7.57812 10.1094
Length 23, alignment in bytes 0: 20.4219 6.64062 9.6875
Length 24, alignment in bytes 0: 20.8438 6.25 10.25
Length 24, alignment in bytes 0: 20.9531 5.85938 9.90625
Length 25, alignment in bytes 0: 26 7.32812 14.0781
Length 25, alignment in bytes 0: 21.7031 5.60938 10
Length 26, alignment in bytes 0: 22.3125 5.85938 9.98438
Length 26, alignment in bytes 0: 22.1094 5.78125 9.8125
Length 27, alignment in bytes 0: 23 5.625 9.89062
Length 27, alignment in bytes 0: 22.8594 5.70312 9.9375
Length 28, alignment in bytes 0: 28.125 7 13.625
Length 28, alignment in bytes 0: 23.5938 5.67188 9.89062
Length 29, alignment in bytes 0: 24.25 5.71875 10
Length 29, alignment in bytes 0: 24.2969 5.60938 10.0156
Length 30, alignment in bytes 0: 24.9219 5.79688 10
Length 30, alignment in bytes 0: 24.7656 5.57812 10
Length 31, alignment in bytes 0: 25.6094 8.14062 10.5
Length 31, alignment in bytes 0: 25.4844 7.04688 10.25
Length 32, alignment in bytes 0: 26.2188 4.875 10.5
Length 32, alignment in bytes 1: 25.6719 4.75 13.3906
Length 64, alignment in bytes 0: 46.375 5.875 19.6406
Length 64, alignment in bytes 2: 46.5 5.26562 17.5625
Length 128, alignment in bytes 0: 88.0625 8.29688 25.5312
Length 128, alignment in bytes 3: 87.75 7.6875 27.8594
Length 256, alignment in bytes 0: 170.953 12.3125 41.5781
Length 256, alignment in bytes 4: 170.641 11.6719 43.7969
Length 512, alignment in bytes 0: 336.891 23.5 74.0469
Length 512, alignment in bytes 5: 336.891 23.4375 75.0625
Length 1024, alignment in bytes 0: 668.312 40.3594 138.312
Length 1024, alignment in bytes 6: 668.484 40.1094 139.422
Length 2048, alignment in bytes 0: 1332.12 73.5 267.531
Length 2048, alignment in bytes 7: 1331.92 74.5 267.859
Length 64, alignment in bytes 1: 46.3594 5.67188 17.5781
Length 64, alignment in bytes 1: 46.4375 5.01562 17.25
Length 64, alignment in bytes 2: 46.5 5.04688 16.9531
Length 64, alignment in bytes 2: 46.2656 5.23438 16.75
Length 64, alignment in bytes 3: 46.5 5.14062 16.3281
Length 64, alignment in bytes 3: 46.2656 5.23438 16.25
Length 64, alignment in bytes 4: 46.5625 5.07812 16.0156
Length 64, alignment in bytes 4: 46.2969 5.17188 15.875
Length 64, alignment in bytes 5: 46.5781 5.09375 15.3906
Length 64, alignment in bytes 5: 46.4219 4.96875 15.25
Length 64, alignment in bytes 6: 46.4375 5.17188 14.875
Length 64, alignment in bytes 6: 46.4375 5.03125 14.5
Length 64, alignment in bytes 7: 46.3594 5.15625 14.5
Length 64, alignment in bytes 7: 46.5 5.14062 14.1875
Length 0, alignment in bytes 0: 2.82812 3.48438 5.0625
Length 0, alignment in bytes 0: 2.71875 2.73438 4.75
Length 1, alignment in bytes 0: 3.57812 3.20312 5.5
Length 1, alignment in bytes 0: 3.39062 2.5 5.42188
Length 2, alignment in bytes 0: 4.46875 2.5 5.39062
Length 2, alignment in bytes 0: 4.25 2.60938 5
Length 3, alignment in bytes 0: 5.14062 3.01562 5.23438
Length 3, alignment in bytes 0: 4.75 2.51562 5
Length 4, alignment in bytes 0: 5.54688 2.5 5.95312
Length 4, alignment in bytes 0: 5.32812 3 5.26562
Length 5, alignment in bytes 0: 6.375 2.5 5.3125
Length 5, alignment in bytes 0: 6.21875 3 5.3125
Length 6, alignment in bytes 0: 6.9375 2.45312 5.5
Length 6, alignment in bytes 0: 6.70312 2.5 5.32812
Length 7, alignment in bytes 0: 7.42188 2.5 5.75
Length 7, alignment in bytes 0: 7.32812 2.96875 5.40625
Length 8, alignment in bytes 0: 10.4375 3 6
Length 8, alignment in bytes 0: 10.4062 2.92188 5.6875
Length 9, alignment in bytes 0: 15.75 2.65625 6.25
Length 9, alignment in bytes 0: 15.5469 2.70312 6.70312
Length 10, alignment in bytes 0: 14.5 2.5625 7.25
Length 10, alignment in bytes 0: 14.0156 2.70312 6.78125
Length 11, alignment in bytes 0: 14.625 2.57812 7
Length 11, alignment in bytes 0: 15.1719 2.71875 5.90625
Length 12, alignment in bytes 0: 15.1406 2.64062 7
Length 12, alignment in bytes 0: 15.2031 2.64062 6.96875
Length 13, alignment in bytes 0: 15.9531 2.65625 6.60938
Length 13, alignment in bytes 0: 15.9062 2.67188 5.98438
Length 14, alignment in bytes 0: 16.5469 2.65625 6.6875
Length 14, alignment in bytes 0: 16.5 2.6875 6.54688
Length 15, alignment in bytes 0: 17.2344 2.70312 6.59375
Length 15, alignment in bytes 0: 17.25 2.625 6.25
Length 16, alignment in bytes 0: 17.8125 4.71875 7.73438
Length 16, alignment in bytes 0: 18.0312 4 7.26562
Length 17, alignment in bytes 0: 18.6094 4.34375 7.78125
Length 17, alignment in bytes 0: 18.6875 4.3125 7.79688
Length 18, alignment in bytes 0: 19.25 4.42188 7.85938
Length 18, alignment in bytes 0: 19.1562 4.5 7.71875
Length 19, alignment in bytes 0: 20 4.5 7.60938
Length 19, alignment in bytes 0: 20.0156 4.45312 7.57812
Length 20, alignment in bytes 0: 20.5 4.35938 8.23438
Length 20, alignment in bytes 0: 20.6406 4.35938 7.90625
Length 21, alignment in bytes 0: 21.25 4 7.67188
Length 21, alignment in bytes 0: 21.2656 4.40625 7.5625
Length 22, alignment in bytes 0: 21.9688 4.42188 7.85938
Length 22, alignment in bytes 0: 21.9219 4.375 7.75
Length 23, alignment in bytes 0: 22.5 4.3125 8.26562
Length 23, alignment in bytes 0: 22.6094 3.98438 8.10938
Length 24, alignment in bytes 0: 23.1719 3.92188 9.07812
Length 24, alignment in bytes 0: 22.8906 3.32812 8.64062
Length 25, alignment in bytes 0: 23.5625 3.60938 9.29688
Length 25, alignment in bytes 0: 23.75 3.375 9.25
Length 26, alignment in bytes 0: 24.25 3.5 9.53125
Length 26, alignment in bytes 0: 24.25 3.28125 9.625
Length 27, alignment in bytes 0: 25 3.375 9.3125
Length 27, alignment in bytes 0: 25.0156 3.46875 9.71875
Length 28, alignment in bytes 0: 25.4844 3.3125 9.5
Length 28, alignment in bytes 0: 25.5 3.21875 9.28125
Length 29, alignment in bytes 0: 26.25 3.5 9.0625
Length 29, alignment in bytes 0: 26.375 3.53125 9.51562
Length 30, alignment in bytes 0: 26.8281 3.46875 9.5
Length 30, alignment in bytes 0: 26.7812 3.32812 9.5
Length 31, alignment in bytes 0: 27.5781 3.46875 10.5
Length 31, alignment in bytes 0: 27.5938 3.48438 10.375
More information about the Libc-alpha
mailing list