[PATCH] PowerPC: stpcpy optimization for PPC64/POWER7
Adhemerval Zanella
azanella@linux.vnet.ibm.com
Mon Sep 16 14:30:00 GMT 2013
Hi all,
Following Alan Modra suggestion, it is a stpcpy optimization patch for PPC64.
This patch optimizes the default PPC64 by adding doubleword stores/loads
increasing aligned throughput for large sizes.
For POWER7 version it also removed unneeded branch prediction and use cmpb
instructions instead of the bitwise operation to find string's end. This saved
some cycles for both aligned and unaligned cases.
Tested on PPC64 power4/power7 and I'm attaching the benchtests output for each
case (default master, default optimized, power7 master, and power7 optimized).
---
2013-09-10 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc64/stpcpy.S (__stpcpy): Add doubleword read
and write to provide a boost for large inputs.
* sysdeps/powerpc/powerpc64/power7/stpcpy.S: New file.
--
diff --git a/sysdeps/powerpc/powerpc64/power7/stpcpy.S b/sysdeps/powerpc/powerpc64/power7/stpcpy.S
new file mode 100644
index 0000000..3b44df2
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power7/stpcpy.S
@@ -0,0 +1,156 @@
+/* Optimized stpcpy implementation for PowerPC64/POWER7.
+ Copyright (C) 2013 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>
+
+/* See strlen.s for comments on how the end-of-string testing works. */
+
+/* char * [r3] stpcpy (char *dest [r3], const char *src [r4]) */
+
+ .machine power7
+EALIGN (__stpcpy, 4, 0)
+ CALL_MCOUNT 2
+
+#define rTMP r0
+#define rRTN r3 /* pointer to previous word/doubleword in dest */
+#define rSRC r4 /* pointer to previous word/doubleword in src */
+#define rMASK r5 /* mark 0xffffffff | 0xffffffffffffffff */
+#define rWORD r6 /* current word from src */
+#define rALT r7 /* alternate word from src */
+
+ or rTMP, rSRC, rRTN
+ clrldi. rTMP, rTMP, 61
+ bne L(check_word_alignment)
+
+/* For doubleword aligned memory, operate using doubleword load and stores. */
+ li rMASK, 0
+ addi rRTN, rRTN, -8
+ ld rWORD, 0(rSRC)
+ b L(g2)
+
+ .align 4
+L(g0): ldu rALT, 8(rSRC)
+ stdu rWORD, 8(rRTN)
+ cmpb rTMP, rALT, rMASK
+ cmpdi rTMP, 0
+ bne L(g1)
+ ldu rWORD, 8(rSRC)
+ stdu rALT, 8(rRTN)
+L(g2): cmpb rTMP, rWORD, rMASK
+ cmpdi rTMP, 0 /* If rTMP is 0, no null's have been found. */
+ beq L(g0)
+
+ mr rALT, rWORD
+/* We've hit the end of the string. Do the rest byte-by-byte. */
+L(g1):
+ extrdi. rTMP, rALT, 8, 0
+ stbu rTMP, 8(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 8
+ stbu rTMP, 1(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 16
+ stbu rTMP, 1(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 24
+ stbu rTMP, 1(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 32
+ stbu rTMP, 1(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 40
+ stbu rTMP, 1(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 48
+ stbu rTMP, 1(rRTN)
+ beqlr
+ stbu rALT, 1(rRTN)
+ blr
+
+L(check_word_alignment):
+ clrldi. rTMP, rTMP, 62
+ bne L(unaligned)
+
+/* For word aligned memory, operate using word load and
+ stores. */
+ li rMASK, 0
+ addi rRTN, rRTN, -4
+ lwz rWORD, 0(rSRC)
+ b L(g5)
+
+ .align 4
+L(g3): lwzu rALT, 4(rSRC)
+ stwu rWORD, 4(rRTN)
+ cmpb rTMP, rALT, rMASK
+ cmpwi rTMP, 0
+ bne L(g4)
+ lwzu rWORD, 4(rSRC)
+ stwu rALT, 4(rRTN)
+L(g5): cmpb rTMP, rWORD, rMASK
+ cmpwi rTMP, 0 /* If rTMP is 0, no null in word. */
+ beq L(g3)
+
+ mr rALT, rWORD
+/* We've hit the end of the string. Do the rest byte-by-byte. */
+L(g4):
+ rlwinm. rTMP, rALT, 8, 24, 31
+ stbu rTMP, 4(rRTN)
+ beqlr
+ rlwinm. rTMP, rALT, 16, 24, 31
+ stbu rTMP, 1(rRTN)
+ beqlr
+ rlwinm. rTMP, rALT, 24, 24, 31
+ stbu rTMP, 1(rRTN)
+ beqlr
+ stbu rALT, 1(rRTN)
+ blr
+
+/* Oh well. In this case, we just do a byte-by-byte copy. */
+ .align 4
+L(unaligned):
+ lbz rWORD, 0(rSRC)
+ addi rRTN, rRTN, -1
+ cmpdi rWORD, 0
+ beq L(u2)
+
+ .align 5
+L(u0): lbzu rALT, 1(rSRC)
+ stbu rWORD, 1(rRTN)
+ cmpdi rALT, 0
+ beq L(u1)
+ lbzu rWORD, 1(rSRC)
+ stbu rALT, 1(rRTN)
+ cmpdi rWORD, 0
+ beq L(u2)
+ lbzu rALT, 1(rSRC)
+ stbu rWORD, 1(rRTN)
+ cmpdi rALT, 0
+ beq L(u1)
+ lbzu rWORD, 1(rSRC)
+ stbu rALT, 1(rRTN)
+ cmpdi rWORD, 0
+ bne L(u0)
+L(u2): stbu rWORD, 1(rRTN)
+ blr
+L(u1): stbu rALT, 1(rRTN)
+ blr
+END (__stpcpy)
+
+weak_alias (__stpcpy, stpcpy)
+libc_hidden_def (__stpcpy)
+libc_hidden_builtin_def (stpcpy)
diff --git a/sysdeps/powerpc/powerpc64/stpcpy.S b/sysdeps/powerpc/powerpc64/stpcpy.S
index 070cd46..d3db070 100644
--- a/sysdeps/powerpc/powerpc64/stpcpy.S
+++ b/sysdeps/powerpc/powerpc64/stpcpy.S
@@ -26,35 +26,40 @@ EALIGN (__stpcpy, 4, 0)
CALL_MCOUNT 2
#define rTMP r0
-#define rRTN r3
-#define rDEST r3 /* pointer to previous word in dest */
-#define rSRC r4 /* pointer to previous word in src */
-#define rWORD r6 /* current word from src */
-#define rFEFE r7 /* 0xfefefeff */
-#define r7F7F r8 /* 0x7f7f7f7f */
-#define rNEG r9 /* ~(word in src | 0x7f7f7f7f) */
-#define rALT r10 /* alternate word from src */
-
- or rTMP, rSRC, rDEST
- clrldi. rTMP, rTMP, 62
- addi rDEST, rDEST, -4
- bne L(unaligned)
+#define rRTN r3 /* pointer to previous word/doubleword in dest */
+#define rSRC r4 /* pointer to previous word/doubleword in src */
+#define rWORD r6 /* current word from src */
+#define rFEFE r7 /* constant 0xfefefeff | 0xfefefefefefefeff */
+#define r7F7F r8 /* constant 0x7f7f7f7f | 0x7f7f7f7f7f7f7f7f */
+#define rNEG r9 /* ~(word in s1 | r7F7F) */
+#define rALT r10 /* alternate word from src */
+
+ or rTMP, rSRC, rRTN
+ clrldi. rTMP, rTMP, 61
+ bne L(check_word_alignment)
+
+/* For doubleword aligned memory, operate using doubleword load and
+ stores. */
+ addi rRTN, rRTN, -8
lis rFEFE, -0x101
lis r7F7F, 0x7f7f
- lwz rWORD, 0(rSRC)
+ ld rWORD, 0(rSRC)
addi rFEFE, rFEFE, -0x101
addi r7F7F, r7F7F, 0x7f7f
+ sldi rTMP, rFEFE, 32
+ insrdi r7F7F, r7F7F, 32, 0
+ add rFEFE, rFEFE, rTMP
b L(g2)
-L(g0): lwzu rALT, 4(rSRC)
- stwu rWORD, 4(rDEST)
+L(g0): ldu rALT, 8(rSRC)
+ stdu rWORD, 8(rRTN)
add rTMP, rFEFE, rALT
nor rNEG, r7F7F, rALT
and. rTMP, rTMP, rNEG
bne- L(g1)
- lwzu rWORD, 4(rSRC)
- stwu rALT, 4(rDEST)
+ ldu rWORD, 8(rSRC)
+ stdu rALT, 8(rRTN)
L(g2): add rTMP, rFEFE, rWORD
nor rNEG, r7F7F, rWORD
and. rTMP, rTMP, rNEG
@@ -62,39 +67,95 @@ L(g2): add rTMP, rFEFE, rWORD
mr rALT, rWORD
/* We've hit the end of the string. Do the rest byte-by-byte. */
-L(g1): rlwinm. rTMP, rALT, 8, 24, 31
- stbu rTMP, 4(rDEST)
+L(g1):
+ extrdi. rTMP, rALT, 8, 0
+ stbu rTMP, 8(rRTN)
+ beqlr-
+ extrdi. rTMP, rALT, 8, 8
+ stbu rTMP, 1(rRTN)
+ beqlr-
+ extrdi. rTMP, rALT, 8, 16
+ stbu rTMP, 1(rRTN)
beqlr-
- rlwinm. rTMP, rALT, 16, 24, 31
- stbu rTMP, 1(rDEST)
+ extrdi. rTMP, rALT, 8, 24
+ stbu rTMP, 1(rRTN)
beqlr-
- rlwinm. rTMP, rALT, 24, 24, 31
- stbu rTMP, 1(rDEST)
+ extrdi. rTMP, rALT, 8, 32
+ stbu rTMP, 1(rRTN)
+ beqlr
+ extrdi. rTMP, rALT, 8, 40
+ stbu rTMP, 1(rRTN)
beqlr-
- stbu rALT, 1(rDEST)
+ extrdi. rTMP, rALT, 8, 48
+ stbu rTMP, 1(rRTN)
+ beqlr-
+ stbu rALT, 1(rRTN)
blr
+L(check_word_alignment):
+ clrldi. rTMP, rTMP, 62
+ bne L(unaligned)
+
+/* For word aligned memory, operate using word load and
+ stores. */
+ addi rRTN, rRTN, -4
+
+ lis rFEFE, -0x101
+ lis r7F7F, 0x7f7f
+ lwz rWORD, 0(rSRC)
+ addi rFEFE, rFEFE, -0x101
+ addi r7F7F, r7F7F, 0x7f7f
+ b L(g5)
+
+L(g3): lwzu rALT, 4(rSRC)
+ stwu rWORD, 4(rRTN)
+ add rTMP, rFEFE, rALT
+ nor rNEG, r7F7F, rALT
+ and. rTMP, rTMP, rNEG
+ bne- L(g4)
+ lwzu rWORD, 4(rSRC)
+ stwu rALT, 4(rRTN)
+L(g5): add rTMP, rFEFE, rWORD
+ nor rNEG, r7F7F, rWORD
+ and. rTMP, rTMP, rNEG
+ beq+ L(g3)
+
+ mr rALT, rWORD
+/* We've hit the end of the string. Do the rest byte-by-byte. */
+L(g4):
+ rlwinm. rTMP, rALT, 8, 24, 31
+ stbu rTMP, 4(rRTN)
+ beqlr-
+ rlwinm. rTMP, rALT, 16, 24, 31
+ stbu rTMP, 1(rRTN)
+ beqlr-
+ rlwinm. rTMP, rALT, 24, 24, 31
+ stbu rTMP, 1(rRTN)
+ beqlr-
+ stbu rALT, 1(rRTN)
+ blr
+
/* Oh well. In this case, we just do a byte-by-byte copy. */
.align 4
nop
L(unaligned):
lbz rWORD, 0(rSRC)
- addi rDEST, rDEST, 3
+ addi rRTN, rRTN, -1
cmpwi rWORD, 0
beq- L(u2)
L(u0): lbzu rALT, 1(rSRC)
- stbu rWORD, 1(rDEST)
+ stbu rWORD, 1(rRTN)
cmpwi rALT, 0
beq- L(u1)
nop /* Let 601 load start of loop. */
lbzu rWORD, 1(rSRC)
- stbu rALT, 1(rDEST)
+ stbu rALT, 1(rRTN)
cmpwi rWORD, 0
bne+ L(u0)
-L(u2): stbu rWORD, 1(rDEST)
+L(u2): stbu rWORD, 1(rRTN)
blr
-L(u1): stbu rALT, 1(rDEST)
+L(u1): stbu rALT, 1(rRTN)
blr
END (__stpcpy)
-------------- next part --------------
stpcpy simple_stpcpy
Length 0, alignments in bytes 0/ 0: 8.5625 3.70312
Length 0, alignments in bytes 0/ 0: 8.42188 3.59375
Length 0, alignments in bytes 0/ 0: 8.25 3.51562
Length 0, alignments in bytes 0/ 0: 8.25 3.51562
Length 1, alignments in bytes 0/ 0: 8.76562 4.54688
Length 1, alignments in bytes 0/ 0: 8.45312 4.1875
Length 1, alignments in bytes 0/ 1: 5.51562 5.03125
Length 1, alignments in bytes 1/ 0: 5.48438 4.70312
Length 2, alignments in bytes 0/ 0: 8.96875 4.5625
Length 2, alignments in bytes 0/ 0: 9 4.46875
Length 2, alignments in bytes 0/ 2: 10.9531 5.15625
Length 2, alignments in bytes 2/ 0: 6.95312 4.70312
Length 3, alignments in bytes 0/ 0: 8.65625 5.6875
Length 3, alignments in bytes 0/ 0: 8.60938 5.25
Length 3, alignments in bytes 0/ 3: 8.95312 5.59375
Length 3, alignments in bytes 3/ 0: 6.21875 5.42188
Length 4, alignments in bytes 0/ 0: 8.875 6.01562
Length 4, alignments in bytes 0/ 0: 8.75 5.73438
Length 4, alignments in bytes 0/ 4: 8.65625 5.82812
Length 4, alignments in bytes 4/ 0: 8.625 6.04688
Length 5, alignments in bytes 0/ 0: 9.75 6.60938
Length 5, alignments in bytes 0/ 0: 9.45312 6.51562
Length 5, alignments in bytes 0/ 5: 10.9844 6.17188
Length 5, alignments in bytes 5/ 0: 7.8125 6.76562
Length 6, alignments in bytes 0/ 0: 10.25 7.625
Length 6, alignments in bytes 0/ 0: 10.125 7.28125
Length 6, alignments in bytes 0/ 6: 11.0312 7
Length 6, alignments in bytes 6/ 0: 8.1875 7
Length 7, alignments in bytes 0/ 0: 7.89062 8.9375
Length 7, alignments in bytes 0/ 0: 7.82812 8.1875
Length 7, alignments in bytes 0/ 7: 11.0625 7.90625
Length 7, alignments in bytes 7/ 0: 8.39062 8.32812
Length 8, alignments in bytes 0/ 0: 11.1406 9.34375
Length 8, alignments in bytes 0/ 0: 11 9.15625
Length 8, alignments in bytes 0/ 0: 10.9844 9.21875
Length 8, alignments in bytes 0/ 0: 10.9375 9.15625
Length 9, alignments in bytes 0/ 0: 10.3594 12.125
Length 9, alignments in bytes 0/ 0: 10.0469 12.0156
Length 9, alignments in bytes 0/ 1: 9.125 39.2188
Length 9, alignments in bytes 1/ 0: 9 9.35938
Length 10, alignments in bytes 0/ 0: 11.25 12.75
Length 10, alignments in bytes 0/ 0: 11.3594 12.8125
Length 10, alignments in bytes 0/ 2: 13.3438 25.2812
Length 10, alignments in bytes 2/ 0: 10 12.7031
Length 11, alignments in bytes 0/ 0: 8.75 16.0938
Length 11, alignments in bytes 0/ 0: 8.75 16.0938
Length 11, alignments in bytes 0/ 3: 22.9531 20.7031
Length 11, alignments in bytes 3/ 0: 9.84375 13.5
Length 12, alignments in bytes 0/ 0: 9.76562 14.3906
Length 12, alignments in bytes 0/ 0: 10.4688 14.2656
Length 12, alignments in bytes 0/ 4: 10.3281 16.75
Length 12, alignments in bytes 4/ 0: 10.7031 14.2969
Length 13, alignments in bytes 0/ 0: 11.2031 15.3438
Length 13, alignments in bytes 0/ 0: 11.4062 15.4062
Length 13, alignments in bytes 0/ 5: 19.2656 15.4219
Length 13, alignments in bytes 5/ 0: 10.6094 15.0781
Length 14, alignments in bytes 0/ 0: 11.1406 16.1719
Length 14, alignments in bytes 0/ 0: 11.0625 16.25
Length 14, alignments in bytes 0/ 6: 15.9531 15.75
Length 14, alignments in bytes 6/ 0: 11.25 15.9062
Length 15, alignments in bytes 0/ 0: 8.40625 17.1562
Length 15, alignments in bytes 0/ 0: 8.26562 16.9062
Length 15, alignments in bytes 0/ 7: 16.6562 17
Length 15, alignments in bytes 7/ 0: 11.3438 16.5
Length 16, alignments in bytes 0/ 0: 11.8125 17.6875
Length 16, alignments in bytes 7/ 2: 11.9219 17.5156
Length 32, alignments in bytes 0/ 0: 13.8281 30.5156
Length 32, alignments in bytes 6/ 4: 18.7188 30.375
Length 64, alignments in bytes 0/ 0: 17.8125 56.1719
Length 64, alignments in bytes 5/ 6: 34.4844 232.656
Length 128, alignments in bytes 0/ 0: 26.1719 107.625
Length 128, alignments in bytes 4/ 0: 26.4062 104.359
Length 256, alignments in bytes 0/ 0: 43.5156 209.781
Length 256, alignments in bytes 3/ 2: 113.594 214.938
Length 512, alignments in bytes 0/ 0: 78.1406 414.672
Length 512, alignments in bytes 2/ 4: 2087.27 977.828
Length 1024, alignments in bytes 0/ 0: 146.141 824.984
Length 1024, alignments in bytes 1/ 6: 976.641 885.859
Length 16, alignments in bytes 1/ 2: 11.9062 62.3906
Length 16, alignments in bytes 2/ 1: 11.9688 17.5
Length 16, alignments in bytes 1/ 1: 11.9688 20.2344
Length 16, alignments in bytes 1/ 1: 11.8906 19.5469
Length 32, alignments in bytes 2/ 4: 117.266 65
Length 32, alignments in bytes 4/ 2: 18.7344 30.4219
Length 32, alignments in bytes 2/ 2: 18.4844 30.375
Length 32, alignments in bytes 2/ 2: 18.4688 30.5
Length 64, alignments in bytes 3/ 6: 129.656 98.0781
Length 64, alignments in bytes 6/ 3: 31.8906 54.4844
Length 64, alignments in bytes 3/ 3: 32.0781 56.9531
Length 64, alignments in bytes 3/ 3: 32.125 56.8125
Length 128, alignments in bytes 4/ 0: 26.3438 104
Length 128, alignments in bytes 0/ 4: 26.6094 140.422
Length 128, alignments in bytes 4/ 4: 26.4062 108.016
Length 128, alignments in bytes 4/ 4: 26.25 108.203
Length 256, alignments in bytes 5/ 2: 107.359 211.969
Length 256, alignments in bytes 2/ 5: 464 374
Length 256, alignments in bytes 5/ 5: 106.875 210.953
Length 256, alignments in bytes 5/ 5: 107.797 210.156
Length 512, alignments in bytes 6/ 4: 215.922 411.25
Length 512, alignments in bytes 4/ 6: 2066.5 978.078
Length 512, alignments in bytes 6/ 6: 206.859 416.25
Length 512, alignments in bytes 6/ 6: 210.594 415.25
Length 1024, alignments in bytes 7/ 6: 472.953 825.516
Length 1024, alignments in bytes 6/ 7: 416.922 3643.06
Length 1024, alignments in bytes 7/ 7: 471.75 823
Length 1024, alignments in bytes 7/ 7: 470.656 824.156
-------------- next part --------------
stpcpy simple_stpcpy
Length 0, alignments in bytes 0/ 0: 9.01562 3.84375
Length 0, alignments in bytes 0/ 0: 8.75 4.21875
Length 0, alignments in bytes 0/ 0: 8.625 3.57812
Length 0, alignments in bytes 0/ 0: 8.67188 3.5
Length 1, alignments in bytes 0/ 0: 8.85938 4.3125
Length 1, alignments in bytes 0/ 0: 8.5 4.26562
Length 1, alignments in bytes 0/ 1: 5.5625 5.25
Length 1, alignments in bytes 1/ 0: 5.42188 4.71875
Length 2, alignments in bytes 0/ 0: 9.09375 4.59375
Length 2, alignments in bytes 0/ 0: 9 4.26562
Length 2, alignments in bytes 0/ 2: 10.8438 5.32812
Length 2, alignments in bytes 2/ 0: 6.95312 4.65625
Length 3, alignments in bytes 0/ 0: 8.65625 5.90625
Length 3, alignments in bytes 0/ 0: 8.54688 5.125
Length 3, alignments in bytes 0/ 3: 6.17188 6.26562
Length 3, alignments in bytes 3/ 0: 6.0625 5.5
Length 4, alignments in bytes 0/ 0: 9 5.79688
Length 4, alignments in bytes 0/ 0: 8.78125 5.65625
Length 4, alignments in bytes 0/ 4: 8.75 5.75
Length 4, alignments in bytes 4/ 0: 8.6875 5.96875
Length 5, alignments in bytes 0/ 0: 9.70312 6.40625
Length 5, alignments in bytes 0/ 0: 9.5 6.53125
Length 5, alignments in bytes 0/ 5: 11 6.75
Length 5, alignments in bytes 5/ 0: 7.9375 6.23438
Length 6, alignments in bytes 0/ 0: 10.25 8.125
Length 6, alignments in bytes 0/ 0: 10.2031 7.35938
Length 6, alignments in bytes 0/ 6: 9.75 7.07812
Length 6, alignments in bytes 6/ 0: 8.15625 7
Length 7, alignments in bytes 0/ 0: 7.85938 8.23438
Length 7, alignments in bytes 0/ 0: 8.5625 8.07812
Length 7, alignments in bytes 0/ 7: 10.7031 7.85938
Length 7, alignments in bytes 7/ 0: 8.40625 7.89062
Length 8, alignments in bytes 0/ 0: 11.0781 9.3125
Length 8, alignments in bytes 0/ 0: 10.9844 9.23438
Length 8, alignments in bytes 0/ 0: 11 9.1875
Length 8, alignments in bytes 0/ 0: 10.875 9.0625
Length 9, alignments in bytes 0/ 0: 10.5 12.0625
Length 9, alignments in bytes 0/ 0: 10.25 12
Length 9, alignments in bytes 0/ 1: 9.28125 35.5
Length 9, alignments in bytes 1/ 0: 9.21875 9.84375
Length 10, alignments in bytes 0/ 0: 11.5 12.8438
Length 10, alignments in bytes 0/ 0: 11.0625 12.8125
Length 10, alignments in bytes 0/ 2: 13.1875 23.2812
Length 10, alignments in bytes 2/ 0: 10.0781 12.75
Length 11, alignments in bytes 0/ 0: 8.89062 16
Length 11, alignments in bytes 0/ 0: 8.78125 16
Length 11, alignments in bytes 0/ 3: 22.0312 20.9062
Length 11, alignments in bytes 3/ 0: 9.85938 13.5156
Length 12, alignments in bytes 0/ 0: 9.85938 14.4531
Length 12, alignments in bytes 0/ 0: 9.60938 14.3281
Length 12, alignments in bytes 0/ 4: 10.5 16.5
Length 12, alignments in bytes 4/ 0: 9.5625 14.2656
Length 13, alignments in bytes 0/ 0: 11.3906 15.3594
Length 13, alignments in bytes 0/ 0: 11.375 15.3906
Length 13, alignments in bytes 0/ 5: 19.4844 15.4531
Length 13, alignments in bytes 5/ 0: 10.6094 15
Length 14, alignments in bytes 0/ 0: 11.2031 16.1719
Length 14, alignments in bytes 0/ 0: 11.0625 16.25
Length 14, alignments in bytes 0/ 6: 16.0469 15.9062
Length 14, alignments in bytes 6/ 0: 11.3438 15.8594
Length 15, alignments in bytes 0/ 0: 8.625 17
Length 15, alignments in bytes 0/ 0: 8.5 16.9375
Length 15, alignments in bytes 0/ 7: 16.4219 17
Length 15, alignments in bytes 7/ 0: 11.5 16.5469
Length 16, alignments in bytes 0/ 0: 12 17.75
Length 16, alignments in bytes 7/ 2: 11.8438 17.5
Length 32, alignments in bytes 0/ 0: 13.7812 30.3906
Length 32, alignments in bytes 6/ 4: 18.75 30.4688
Length 64, alignments in bytes 0/ 0: 17.75 56.3125
Length 64, alignments in bytes 5/ 6: 34 242.5
Length 128, alignments in bytes 0/ 0: 26.2656 107.625
Length 128, alignments in bytes 4/ 0: 26.3438 104.406
Length 256, alignments in bytes 0/ 0: 43.6406 209.781
Length 256, alignments in bytes 3/ 2: 105.516 214.828
Length 512, alignments in bytes 0/ 0: 78.5 414.531
Length 512, alignments in bytes 2/ 4: 2033.67 1015.72
Length 1024, alignments in bytes 0/ 0: 145.969 824.844
Length 1024, alignments in bytes 1/ 6: 996.25 887
Length 16, alignments in bytes 1/ 2: 11.8438 62.4219
Length 16, alignments in bytes 2/ 1: 11.8281 17.4844
Length 16, alignments in bytes 1/ 1: 11.9062 19.6875
Length 16, alignments in bytes 1/ 1: 11.875 19.5938
Length 32, alignments in bytes 2/ 4: 119.328 68.6406
Length 32, alignments in bytes 4/ 2: 18.7656 30.3906
Length 32, alignments in bytes 2/ 2: 18.4062 30.4062
Length 32, alignments in bytes 2/ 2: 18.3906 30.5
Length 64, alignments in bytes 3/ 6: 123.812 100.781
Length 64, alignments in bytes 6/ 3: 32 54.4531
Length 64, alignments in bytes 3/ 3: 32.0625 56.9844
Length 64, alignments in bytes 3/ 3: 31.6562 56.9688
Length 128, alignments in bytes 4/ 0: 26.3594 104
Length 128, alignments in bytes 0/ 4: 26.5156 140.375
Length 128, alignments in bytes 4/ 4: 26.2812 108.062
Length 128, alignments in bytes 4/ 4: 26.2656 108.156
Length 256, alignments in bytes 5/ 2: 112.703 212
Length 256, alignments in bytes 2/ 5: 455.828 373.094
Length 256, alignments in bytes 5/ 5: 107.297 210.812
Length 256, alignments in bytes 5/ 5: 107.25 210.375
Length 512, alignments in bytes 6/ 4: 250.891 411.75
Length 512, alignments in bytes 4/ 6: 2056.98 977.797
Length 512, alignments in bytes 6/ 6: 213.25 416.031
Length 512, alignments in bytes 6/ 6: 209.328 414.75
Length 1024, alignments in bytes 7/ 6: 473.047 823.25
Length 1024, alignments in bytes 6/ 7: 422.25 3629.52
Length 1024, alignments in bytes 7/ 7: 469.125 823.031
Length 1024, alignments in bytes 7/ 7: 451.75 823.25
-------------- next part --------------
stpcpy simple_stpcpy
Length 0, alignments in bytes 0/ 0: 9.04688 4
Length 0, alignments in bytes 0/ 0: 8.75 3.59375
Length 0, alignments in bytes 0/ 0: 8.78125 3.59375
Length 0, alignments in bytes 0/ 0: 8.84375 3.60938
Length 1, alignments in bytes 0/ 0: 8.85938 3.96875
Length 1, alignments in bytes 0/ 0: 8.92188 3.95312
Length 1, alignments in bytes 0/ 1: 7.25 4.92188
Length 1, alignments in bytes 1/ 0: 6.98438 3.875
Length 2, alignments in bytes 0/ 0: 9.5 4.5
Length 2, alignments in bytes 0/ 0: 9.5 4.40625
Length 2, alignments in bytes 0/ 2: 6.67188 5.39062
Length 2, alignments in bytes 2/ 0: 6.25 4.67188
Length 3, alignments in bytes 0/ 0: 10 5.75
Length 3, alignments in bytes 0/ 0: 9.67188 5.48438
Length 3, alignments in bytes 0/ 3: 11.25 5.75
Length 3, alignments in bytes 3/ 0: 7.23438 5.35938
Length 4, alignments in bytes 0/ 0: 9.0625 6.04688
Length 4, alignments in bytes 0/ 0: 9.07812 5.625
Length 4, alignments in bytes 0/ 4: 9.75 5.78125
Length 4, alignments in bytes 4/ 0: 9.40625 6.03125
Length 5, alignments in bytes 0/ 0: 10.5938 7
Length 5, alignments in bytes 0/ 0: 10.6875 6.25
Length 5, alignments in bytes 0/ 5: 10.0938 6.1875
Length 5, alignments in bytes 5/ 0: 7.9375 6.125
Length 6, alignments in bytes 0/ 0: 10.8125 7.64062
Length 6, alignments in bytes 0/ 0: 10.6562 7.375
Length 6, alignments in bytes 0/ 6: 11.9844 7
Length 6, alignments in bytes 6/ 0: 8.40625 6.98438
Length 7, alignments in bytes 0/ 0: 10.0781 8.14062
Length 7, alignments in bytes 0/ 0: 9.84375 8.5
Length 7, alignments in bytes 0/ 7: 11.0625 8
Length 7, alignments in bytes 7/ 0: 8.90625 8.5
Length 8, alignments in bytes 0/ 0: 8.78125 9.25
Length 8, alignments in bytes 0/ 0: 8.78125 9.20312
Length 8, alignments in bytes 0/ 0: 8.78125 9.1875
Length 8, alignments in bytes 0/ 0: 8.95312 9.125
Length 9, alignments in bytes 0/ 0: 9.10938 12
Length 9, alignments in bytes 0/ 0: 9.03125 11.8906
Length 9, alignments in bytes 0/ 1: 9.54688 39.8594
Length 9, alignments in bytes 1/ 0: 9.25 9.34375
Length 10, alignments in bytes 0/ 0: 10.0625 12.6406
Length 10, alignments in bytes 0/ 0: 10.0312 12.875
Length 10, alignments in bytes 0/ 2: 34.25 25.2344
Length 10, alignments in bytes 2/ 0: 10 12.75
Length 11, alignments in bytes 0/ 0: 10.2656 16.1562
Length 11, alignments in bytes 0/ 0: 9.8125 16.1562
Length 11, alignments in bytes 0/ 3: 28.625 20.9531
Length 11, alignments in bytes 3/ 0: 10.0625 13.5312
Length 12, alignments in bytes 0/ 0: 8.84375 14.375
Length 12, alignments in bytes 0/ 0: 8.90625 14.375
Length 12, alignments in bytes 0/ 4: 10.2344 18.75
Length 12, alignments in bytes 4/ 0: 10.1406 14.2344
Length 13, alignments in bytes 0/ 0: 11.125 15.375
Length 13, alignments in bytes 0/ 0: 11.0625 15.4531
Length 13, alignments in bytes 0/ 5: 17.8906 15.2656
Length 13, alignments in bytes 5/ 0: 11.3281 15.0469
Length 14, alignments in bytes 0/ 0: 11.5 16.1875
Length 14, alignments in bytes 0/ 0: 11.3281 16.1094
Length 14, alignments in bytes 0/ 6: 17 15.7969
Length 14, alignments in bytes 6/ 0: 11.5 15.8906
Length 15, alignments in bytes 0/ 0: 10.25 16.9844
Length 15, alignments in bytes 0/ 0: 10.1562 16.9844
Length 15, alignments in bytes 0/ 7: 16 16.9375
Length 15, alignments in bytes 7/ 0: 12 16.5938
Length 16, alignments in bytes 0/ 0: 10.4531 17.75
Length 16, alignments in bytes 7/ 2: 12.25 17.3906
Length 32, alignments in bytes 0/ 0: 11.4219 30.5
Length 32, alignments in bytes 6/ 4: 18.5 30.4375
Length 64, alignments in bytes 0/ 0: 13.0938 56.3594
Length 64, alignments in bytes 5/ 6: 30.8125 232.688
Length 128, alignments in bytes 0/ 0: 17.7031 107.312
Length 128, alignments in bytes 4/ 0: 27 104.391
Length 256, alignments in bytes 0/ 0: 26.4688 209.891
Length 256, alignments in bytes 3/ 2: 105.875 215
Length 512, alignments in bytes 0/ 0: 44.2969 414.812
Length 512, alignments in bytes 2/ 4: 2064.02 1014.95
Length 1024, alignments in bytes 0/ 0: 79.9531 824.594
Length 1024, alignments in bytes 1/ 6: 972.797 880.875
Length 16, alignments in bytes 1/ 2: 12.125 62.75
Length 16, alignments in bytes 2/ 1: 12.1875 17.5
Length 16, alignments in bytes 1/ 1: 12.25 19.5312
Length 16, alignments in bytes 1/ 1: 12.25 19.5
Length 32, alignments in bytes 2/ 4: 123.016 68.5781
Length 32, alignments in bytes 4/ 2: 18.4219 30.4844
Length 32, alignments in bytes 2/ 2: 18.5625 30.4844
Length 32, alignments in bytes 2/ 2: 18.5625 30.2969
Length 64, alignments in bytes 3/ 6: 127.188 101.172
Length 64, alignments in bytes 6/ 3: 30.75 54.8281
Length 64, alignments in bytes 3/ 3: 31.0156 57.1094
Length 64, alignments in bytes 3/ 3: 31.1719 56.9844
Length 128, alignments in bytes 4/ 0: 26.5312 104.25
Length 128, alignments in bytes 0/ 4: 26.9531 141.359
Length 128, alignments in bytes 4/ 4: 26.9844 107.797
Length 128, alignments in bytes 4/ 4: 26.7969 107.719
Length 256, alignments in bytes 5/ 2: 106.812 212.062
Length 256, alignments in bytes 2/ 5: 501.484 372.5
Length 256, alignments in bytes 5/ 5: 107.797 210.703
Length 256, alignments in bytes 5/ 5: 107.75 210.719
Length 512, alignments in bytes 6/ 4: 206 411.75
Length 512, alignments in bytes 4/ 6: 2053.69 1017.98
Length 512, alignments in bytes 6/ 6: 206.531 415.375
Length 512, alignments in bytes 6/ 6: 206.922 415.594
Length 1024, alignments in bytes 7/ 6: 402.719 824.453
Length 1024, alignments in bytes 6/ 7: 409 3630.19
Length 1024, alignments in bytes 7/ 7: 402.844 824.766
Length 1024, alignments in bytes 7/ 7: 402.562 824
-------------- next part --------------
stpcpy simple_stpcpy
Length 0, alignments in bytes 0/ 0: 4.13292 3.47147
Length 0, alignments in bytes 0/ 0: 4.43257 3.47125
Length 0, alignments in bytes 0/ 0: 4.13232 3.4095
Length 0, alignments in bytes 0/ 0: 4.1326 3.52472
Length 1, alignments in bytes 0/ 0: 4.49455 4.10696
Length 1, alignments in bytes 0/ 0: 4.49409 3.84329
Length 1, alignments in bytes 0/ 1: 3.87466 4.62297
Length 1, alignments in bytes 1/ 0: 3.87398 4.18422
Length 2, alignments in bytes 0/ 0: 5.03656 4.18401
Length 2, alignments in bytes 0/ 0: 4.97011 4.10638
Length 2, alignments in bytes 0/ 2: 5.73395 5.05179
Length 2, alignments in bytes 2/ 0: 3.87451 4.49393
Length 3, alignments in bytes 0/ 0: 5.44727 4.88164
Length 3, alignments in bytes 0/ 0: 5.35489 5.26868
Length 3, alignments in bytes 0/ 3: 5.28862 5.88876
Length 3, alignments in bytes 3/ 0: 4.44092 5.2688
Length 4, alignments in bytes 0/ 0: 5.6174 5.53941
Length 4, alignments in bytes 0/ 0: 5.61729 5.57881
Length 4, alignments in bytes 0/ 4: 3.56453 5.57878
Length 4, alignments in bytes 4/ 0: 4.49394 5.91179
Length 5, alignments in bytes 0/ 0: 5.98563 6.45699
Length 5, alignments in bytes 0/ 0: 5.93288 6.04361
Length 5, alignments in bytes 0/ 5: 5.73422 6.0437
Length 5, alignments in bytes 5/ 0: 5.88791 6.67059
Length 6, alignments in bytes 0/ 0: 6.81836 7.59338
Length 6, alignments in bytes 0/ 0: 6.81822 7.18657
Length 6, alignments in bytes 0/ 6: 5.50198 6.8186
Length 6, alignments in bytes 6/ 0: 5.26907 6.81862
Length 7, alignments in bytes 0/ 0: 6.62129 8.26491
Length 7, alignments in bytes 0/ 0: 6.57219 8.75539
Length 7, alignments in bytes 0/ 7: 5.57895 7.59351
Length 7, alignments in bytes 7/ 0: 5.5789 8.21832
Length 8, alignments in bytes 0/ 0: 4.45538 8.98811
Length 8, alignments in bytes 0/ 0: 4.45526 8.98792
Length 8, alignments in bytes 0/ 0: 4.468 8.99455
Length 8, alignments in bytes 0/ 0: 4.26144 8.9879
Length 9, alignments in bytes 0/ 0: 4.74593 11.8061
Length 9, alignments in bytes 0/ 0: 4.95903 9.14296
Length 9, alignments in bytes 0/ 1: 5.42447 38.275
Length 9, alignments in bytes 1/ 0: 5.37256 9.14285
Length 10, alignments in bytes 0/ 0: 4.862 12.6292
Length 10, alignments in bytes 0/ 0: 4.89508 12.6295
Length 10, alignments in bytes 0/ 2: 32.9998 26.0531
Length 10, alignments in bytes 2/ 0: 5.74821 12.5519
Length 11, alignments in bytes 0/ 0: 4.80403 15.856
Length 11, alignments in bytes 0/ 0: 5.25761 15.856
Length 11, alignments in bytes 0/ 3: 20.7908 20.7706
Length 11, alignments in bytes 3/ 0: 6.12076 13.3269
Length 12, alignments in bytes 0/ 0: 5.26915 14.1017
Length 12, alignments in bytes 0/ 0: 5.45763 14.1016
Length 12, alignments in bytes 0/ 4: 4.33942 16.2712
Length 12, alignments in bytes 4/ 0: 5.02762 14.1016
Length 13, alignments in bytes 0/ 0: 5.42407 15.1861
Length 13, alignments in bytes 0/ 0: 5.45142 15.1863
Length 13, alignments in bytes 0/ 5: 14.954 15.1864
Length 13, alignments in bytes 5/ 0: 6.92194 14.8762
Length 14, alignments in bytes 0/ 0: 7.69795 15.9611
Length 14, alignments in bytes 0/ 0: 7.67068 15.9611
Length 14, alignments in bytes 0/ 6: 11.584 15.6509
Length 14, alignments in bytes 6/ 0: 7.59306 15.7102
Length 15, alignments in bytes 0/ 0: 5.88922 16.7359
Length 15, alignments in bytes 0/ 0: 5.88857 16.7359
Length 15, alignments in bytes 0/ 7: 11.235 16.5862
Length 15, alignments in bytes 7/ 0: 7.71973 16.4258
Length 16, alignments in bytes 0/ 0: 5.01045 17.5107
Length 16, alignments in bytes 7/ 2: 7.74861 17.2278
Length 32, alignments in bytes 0/ 0: 4.80482 30.2948
Length 32, alignments in bytes 6/ 4: 13.6375 30.1455
Length 64, alignments in bytes 0/ 0: 5.19179 54.6184
Length 64, alignments in bytes 5/ 6: 30.9993 231.96
Length 128, alignments in bytes 0/ 0: 8.51831 105.614
Length 128, alignments in bytes 4/ 0: 20.9202 104.047
Length 256, alignments in bytes 0/ 0: 20.9547 207.245
Length 256, alignments in bytes 3/ 2: 105.63 206.471
Length 512, alignments in bytes 0/ 0: 35.4927 407.261
Length 512, alignments in bytes 2/ 4: 2053.88 968.033
Length 1024, alignments in bytes 0/ 0: 65.2651 808.119
Length 1024, alignments in bytes 1/ 6: 890.217 809.407
Length 16, alignments in bytes 1/ 2: 7.26147 62.0393
Length 16, alignments in bytes 2/ 1: 7.23167 17.2782
Length 16, alignments in bytes 1/ 1: 7.30042 19.8907
Length 16, alignments in bytes 1/ 1: 7.36087 19.6367
Length 32, alignments in bytes 2/ 4: 119.271 64.3535
Length 32, alignments in bytes 4/ 2: 13.4818 29.7632
Length 32, alignments in bytes 2/ 2: 13.8688 30.2246
Length 32, alignments in bytes 2/ 2: 13.3466 30.2174
Length 64, alignments in bytes 3/ 6: 113.029 93.0156
Length 64, alignments in bytes 6/ 3: 30.8372 54.4193
Length 64, alignments in bytes 3/ 3: 30.9921 55.8944
Length 64, alignments in bytes 3/ 3: 30.9919 55.6218
Length 128, alignments in bytes 4/ 0: 21.2636 104.009
Length 128, alignments in bytes 0/ 4: 20.9404 129.925
Length 128, alignments in bytes 4/ 4: 20.9389 105.088
Length 128, alignments in bytes 4/ 4: 20.9197 104.775
Length 256, alignments in bytes 5/ 2: 105.267 206.659
Length 256, alignments in bytes 2/ 5: 422.353 324.384
Length 256, alignments in bytes 5/ 5: 105.315 205.246
Length 256, alignments in bytes 5/ 5: 105.736 205.346
Length 512, alignments in bytes 6/ 4: 204.57 391.532
Length 512, alignments in bytes 4/ 6: 2050.26 969.276
Length 512, alignments in bytes 6/ 6: 204.465 367.088
Length 512, alignments in bytes 6/ 6: 204.594 373.867
Length 1024, alignments in bytes 7/ 6: 402.884 733.081
Length 1024, alignments in bytes 6/ 7: 402.961 3605.43
Length 1024, alignments in bytes 7/ 7: 402.916 754.165
Length 1024, alignments in bytes 7/ 7: 402.906 748.638
More information about the Libc-alpha
mailing list