Patchwork [2/2] aarch64: Optimized memcpy and memmove for Kunpeng processor

login
register
mail settings
Submitter Xuelei Zhang
Date Oct. 14, 2019, 3:44 a.m.
Message ID <20191014034456.11548-1-zhangxuelei4@huawei.com>
Download mbox | patch
Permalink /patch/34933/
State New
Headers show

Comments

Xuelei Zhang - Oct. 14, 2019, 3:44 a.m.
This is an optimized implementation of the memcpy and memmove on the
Huawei Kunpeng processor.

Based on the prefetch mechanism on Kunpeng arch, branch to handle 96
to 2K bytes in memcpy is written without prfm instruction. Hence,
memcpy has an optimization effect above 128 bytes, 18% improvement
for copies above 2K bytes, and 38% for larger bytes, such as 32M
bytes around.

And for memmove, there are two main changes: i) Q register is used
instead of  X register. ii) dst address is aligned instead of src
address aligned to improve store operation. Hence, memmove
implementation also has improvement above 128 bytes, that about 30%
for 2k to 8M bytes, and about 50% for 32M or more.

	* sysdeps/aarch64/multiarch/Makefile:
	Add memcpy_kunpeng and memmove_kunpeng
	* sysdeps/aarch64/multiarch/ifunc-impl-list.c:
	Increment to 5, add __memcpy_kunpeng and __memmove_kunpeng
	* sysdeps/aarch64/multiarch/memcpy.c:
	Add IS_KUNPENG checks.
	* sysdeps/aarch64/multiarch/memcpy_kunpeng.S: New file

Here's a memcpy and memmove result tested by benchmark-walk:
Function: memcpy
Variant: walk
                                    __memcpy_thunderx	__memcpy_thunderx2	__memcpy_falkor	__memcpy_kunpeng	__memcpy_generic
Szabolcs Nagy - Oct. 15, 2019, 12:04 p.m.
On 14/10/2019 04:44, Xuelei Zhang wrote:
> This is an optimized implementation of the memcpy and memmove on the

> Huawei Kunpeng processor.

> 

> Based on the prefetch mechanism on Kunpeng arch, branch to handle 96

> to 2K bytes in memcpy is written without prfm instruction. Hence,

> memcpy has an optimization effect above 128 bytes, 18% improvement

> for copies above 2K bytes, and 38% for larger bytes, such as 32M

> bytes around.

> 

> And for memmove, there are two main changes: i) Q register is used

> instead of  X register. ii) dst address is aligned instead of src

> address aligned to improve store operation. Hence, memmove

> implementation also has improvement above 128 bytes, that about 30%

> for 2k to 8M bytes, and about 50% for 32M or more.


i'd like to work on a generic memcpy that's acceptable
instead of minor variations of memcpy per uarch, i'll
have to take a look why this one is different from all
the others.

it would be nice to see the memcpy-random benchmarks too.

stopping prefetch at 2k is surprising.
Yikun Jiang - Oct. 16, 2019, 2:14 a.m.
> diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile
> index 4150b89a90..aa1f612e9e 100644
> --- a/sysdeps/aarch64/multiarch/Makefile
> +++ b/sysdeps/aarch64/multiarch/Makefile
> @@ -1,6 +1,7 @@
>  ifeq ($(subdir),string)
>  sysdep_routines += memcpy_generic memcpy_thunderx memcpy_thunderx2 \
> -                  memcpy_falkor memmove_falkor \
> +                  memcpy_falkor memcpy_kunpeng \
> +                  memmove_falkor memmove_kunpeng \
>                    memset_generic memset_falkor memset_emag \
>                    memchr_generic memchr_nosimd \
>                    strlen_generic strlen_asimd

It seems we should remove the "memmove_kunpeng", and only add
the "memcpy_kunpeng" in here.

> +ENTRY_ALIGN (MEMMOVE, 6)
> +
> +       DELOUSE (0)
> +       DELOUSE (1)
> +       DELOUSE (2)
> +
> +       sub     tmp1, dstin, src
> +       cmp     count, 512
> +       ccmp    tmp1, count, 2, hi
> +       b.lo    L(move_long)
> +       cmp     count, 96
> +       ccmp    tmp1, count, 2, hi
> +       b.lo    L(move_middle)
> +
> +END (MEMMOVE)

nit: remember to remove the trailing space.

Patch

========================================================================================================================
       length=128:        52.13 (-32.61%)	       44.10 (-12.17%)	       41.34 ( -5.15%)	       39.73 ( -1.07%)	       39.31
       length=144:        39.83 ( -0.15%)	       42.36 ( -6.50%)	       40.79 ( -2.55%)	       39.83 ( -0.13%)	       39.78
       length=129:        32.69 ( -0.12%)	       34.77 ( -6.49%)	       35.79 ( -9.61%)	       32.85 ( -0.59%)	       32.65
       length=143:        42.10 (  0.05%)	       40.22 (  4.54%)	       44.56 ( -5.78%)	       42.18 ( -0.12%)	       42.13
       length=130:        32.74 (  0.08%)	       35.03 ( -6.94%)	       35.74 ( -9.08%)	       32.90 ( -0.41%)	       32.76
       length=142:        40.85 ( -0.15%)	       39.69 (  2.70%)	       43.21 ( -5.94%)	       40.84 ( -0.12%)	       40.79
       length=131:        34.12 (  0.00%)	       35.66 ( -4.51%)	       36.95 ( -8.28%)	       34.24 ( -0.34%)	       34.12
       length=141:        40.73 (  0.22%)	       39.39 (  3.50%)	       43.07 ( -5.52%)	       40.92 ( -0.24%)	       40.82
       length=132:        33.15 ( -0.44%)	       35.32 ( -6.99%)	       35.80 ( -8.46%)	       33.17 ( -0.49%)	       33.01
       length=140:        38.54 ( -0.20%)	       38.77 ( -0.80%)	       40.58 ( -5.52%)	       38.53 ( -0.18%)	       38.46
       length=133:        35.53 ( -0.17%)	       36.66 ( -3.34%)	       38.08 ( -7.34%)	       35.64 ( -0.48%)	       35.47
       length=139:        39.55 ( -0.08%)	       38.59 (  2.35%)	       41.65 ( -5.38%)	       39.63 ( -0.26%)	       39.52
       length=134:        35.64 (  0.02%)	       36.83 ( -3.32%)	       38.27 ( -7.35%)	       35.79 ( -0.40%)	       35.65
       length=138:        38.26 (  0.01%)	       38.25 (  0.05%)	       40.53 ( -5.90%)	       38.35 ( -0.21%)	       38.27
       length=135:        37.01 ( -0.05%)	       37.48 ( -1.33%)	       39.35 ( -6.38%)	       37.06 ( -0.18%)	       36.99
       length=137:        38.40 (  0.01%)	       38.26 (  0.37%)	       40.59 ( -5.69%)	       38.48 ( -0.20%)	       38.41
       length=256:        79.36 (  0.36%)	       83.17 ( -4.42%)	       86.01 ( -7.99%)	       80.23 ( -0.73%)	       79.65
       length=272:        75.03 ( -0.12%)	       80.47 ( -7.38%)	       79.49 ( -6.07%)	       75.15 ( -0.28%)	       74.94
       length=257:        63.07 ( -0.23%)	       72.04 (-14.49%)	       69.53 (-10.50%)	       63.10 ( -0.28%)	       62.92
       length=271:        77.57 (  0.05%)	       81.50 ( -5.01%)	       80.93 ( -4.27%)	       77.56 (  0.06%)	       77.61
       length=258:        63.71 ( -0.16%)	       72.85 (-14.53%)	       70.04 (-10.11%)	       63.71 ( -0.16%)	       63.61
       length=270:        81.77 ( -8.63%)	       80.70 ( -7.20%)	       79.72 ( -5.90%)	       75.42 ( -0.18%)	       75.28
       length=259:        64.69 ( -0.29%)	       73.12 (-13.36%)	       71.36 (-10.63%)	       64.72 ( -0.34%)	       64.50
       length=269:        74.63 ( -0.13%)	       79.69 ( -6.93%)	       79.34 ( -6.45%)	       74.55 ( -0.02%)	       74.53
       length=260:        64.97 (  0.19%)	       74.34 (-14.20%)	       71.05 ( -9.14%)	       65.15 ( -0.08%)	       65.10
       length=268:        70.65 ( -0.21%)	       78.63 (-11.54%)	       77.13 ( -9.41%)	       70.63 ( -0.19%)	       70.50
       length=261:        66.31 ( -0.12%)	       74.26 (-12.12%)	       73.23 (-10.56%)	       66.41 ( -0.27%)	       66.24
       length=267:        71.53 ( -0.36%)	       77.99 ( -9.42%)	       77.77 ( -9.11%)	       71.46 ( -0.26%)	       71.28
       length=262:        66.83 ( -0.20%)	       74.88 (-12.26%)	       73.59 (-10.33%)	       66.76 ( -0.10%)	       66.70
       length=266:        73.68 ( -0.20%)	       84.47 (-14.89%)	       81.79 (-11.24%)	       73.93 ( -0.55%)	       73.53
       length=263:        71.94 ( -6.04%)	       79.07 (-16.54%)	       76.58 (-12.88%)	       68.53 ( -1.02%)	       67.84
       length=265:        69.30 ( -0.10%)	       76.80 (-10.93%)	       76.61 (-10.65%)	       69.37 ( -0.19%)	       69.23
       length=512:       157.74 (  0.08%)	      159.60 ( -1.10%)	      166.31 ( -5.34%)	      158.12 ( -0.16%)	      157.87
       length=528:       151.11 (  1.81%)	      175.27 (-13.89%)	      171.76 (-11.61%)	      158.47 ( -2.97%)	      153.90
       length=513:       141.74 ( -0.41%)	      157.20 (-11.36%)	      151.86 ( -7.58%)	      141.12 (  0.03%)	      141.16
       length=527:       152.77 ( -0.10%)	      162.24 ( -6.30%)	      165.36 ( -8.34%)	      152.66 ( -0.02%)	      152.62
       length=514:       141.79 (  0.10%)	      157.62 (-11.06%)	      152.80 ( -7.66%)	      141.94 ( -0.01%)	      141.92
       length=526:       151.73 (  1.39%)	      171.96 (-11.76%)	      177.73 (-15.51%)	      158.00 ( -2.69%)	      153.86
       length=515:       143.83 ( 28.74%)	      158.29 ( 21.58%)	      206.81 ( -2.46%)	      227.73 (-12.82%)	      201.84
       length=525:       211.49 ( -9.31%)	      202.89 ( -4.87%)	      198.17 ( -2.43%)	      192.59 (  0.46%)	      193.48
       length=516:       188.92 (  0.46%)	      320.09 (-68.66%)	      255.17 (-34.45%)	      201.30 ( -6.07%)	      189.79
       length=524:       196.97 (  2.82%)	      208.82 ( -3.03%)	      206.75 ( -2.01%)	      201.97 (  0.35%)	      202.69
       length=517:       197.87 (  0.06%)	      209.84 ( -5.98%)	      203.56 ( -2.81%)	      197.54 (  0.23%)	      198.00
       length=523:       203.66 ( -1.16%)	      217.97 ( -8.27%)	      216.06 ( -7.32%)	      216.16 ( -7.37%)	      201.33
       length=518:       193.27 (  1.02%)	      205.92 ( -5.46%)	      201.31 ( -3.10%)	      192.87 (  1.23%)	      195.26
       length=522:       200.56 (  0.83%)	      211.23 ( -4.45%)	      207.92 ( -2.81%)	      201.78 (  0.23%)	      202.24
       length=519:       201.32 (  0.29%)	      211.15 ( -4.58%)	      206.97 ( -2.51%)	      202.22 ( -0.15%)	      201.91
       length=521:       202.41 ( -0.13%)	      211.92 ( -4.83%)	      207.75 ( -2.77%)	      202.20 ( -0.03%)	      202.15
      length=1024:       448.09 ( -2.81%)	      448.11 ( -2.81%)	      452.17 ( -3.75%)	      437.73 ( -0.43%)	      435.84
      length=1040:       420.41 ( -8.95%)	      386.29 ( -0.11%)	      397.24 ( -2.94%)	      388.43 ( -0.66%)	      385.88
      length=1025:       383.70 (  5.26%)	      403.82 (  0.29%)	      394.16 (  2.68%)	      405.78 ( -0.19%)	      405.00
      length=1039:       419.39 ( -1.83%)	      411.37 (  0.12%)	      411.08 (  0.19%)	      412.37 ( -0.13%)	      411.85
      length=1026:       401.69 (  1.39%)	      409.12 ( -0.43%)	      405.97 (  0.34%)	      408.59 ( -0.30%)	      407.37
      length=1038:       414.31 ( -0.64%)	      408.25 (  0.83%)	      408.66 (  0.73%)	      409.73 (  0.47%)	      411.68
      length=1027:       402.12 (  0.01%)	      406.26 ( -1.02%)	      395.30 (  1.70%)	      402.26 ( -0.03%)	      402.15
      length=1037:       414.08 ( -0.48%)	      409.45 (  0.64%)	      410.09 (  0.49%)	      413.57 ( -0.36%)	      412.11
      length=1028:       501.62 (-63.30%)	      421.34 (-37.16%)	      330.36 ( -7.55%)	      309.33 ( -0.70%)	      307.18
      length=1036:       316.73 (  0.25%)	      316.02 (  0.47%)	      328.82 ( -3.56%)	      316.26 (  0.39%)	      317.51
      length=1029:       309.04 ( -0.25%)	      310.88 ( -0.85%)	      319.09 ( -3.51%)	      307.71 (  0.18%)	      308.27
      length=1035:       315.97 (  0.01%)	      313.42 (  0.81%)	      325.84 ( -3.12%)	      314.30 (  0.53%)	      315.99
      length=1030:       309.89 (  0.01%)	      312.01 ( -0.67%)	      321.51 ( -3.74%)	      309.14 (  0.26%)	      309.93
      length=1034:       315.50 (  0.07%)	      314.24 (  0.47%)	      326.20 ( -3.32%)	      314.40 (  0.41%)	      315.71
      length=1031:       311.32 (  0.02%)	      311.65 ( -0.09%)	      321.93 ( -3.39%)	      310.57 (  0.26%)	      311.38
      length=1033:       313.60 ( -0.17%)	      311.70 (  0.44%)	      323.40 ( -3.30%)	      312.62 (  0.15%)	      313.07
      length=2048:       541.23 ( -8.53%)	      406.86 ( 18.42%)	      512.53 ( -2.77%)	      500.25 ( -0.31%)	      498.70
      length=2064:       515.11 ( -5.65%)	      388.60 ( 20.30%)	      527.30 ( -8.15%)	      675.08 (-38.46%)	      487.54
      length=2049:       590.89 (-21.64%)	      446.63 (  8.06%)	      458.19 (  5.68%)	      420.47 ( 13.44%)	      485.77
      length=2063:       551.10 ( -9.21%)	      450.41 ( 10.75%)	      491.83 (  2.54%)	      443.58 ( 12.10%)	      504.64
      length=2050:       502.53 ( -5.31%)	      429.91 (  9.91%)	      449.30 (  5.85%)	      416.95 ( 12.63%)	      477.21
      length=2062:       534.68 ( -5.60%)	      439.32 ( 13.23%)	      483.60 (  4.49%)	      438.03 ( 13.49%)	      506.34
      length=2051:       507.00 ( -5.23%)	      420.22 ( 12.78%)	      458.06 (  4.93%)	      413.85 ( 14.11%)	      481.82
      length=2061:       529.21 ( -6.13%)	      444.95 ( 10.77%)	      485.45 (  2.65%)	      437.72 ( 12.22%)	      498.64
      length=2052:       493.09 ( -4.55%)	      419.95 ( 10.96%)	      438.86 (  6.95%)	      411.16 ( 12.83%)	      471.65
      length=2060:       518.78 ( -6.11%)	      429.52 ( 12.15%)	      467.37 (  4.40%)	      426.55 ( 12.75%)	      488.90
      length=2053:       515.00 ( -5.52%)	      422.37 ( 13.46%)	      465.47 (  4.63%)	      416.66 ( 14.63%)	      488.08
      length=2059:       524.42 (  0.87%)	      441.28 ( 16.59%)	      517.29 (  2.22%)	      496.89 (  6.08%)	      529.03
      length=2054:       547.42 (-11.75%)	      438.11 ( 10.57%)	      459.71 (  6.16%)	      422.28 ( 13.80%)	      489.88
      length=2058:       531.32 ( -6.94%)	      435.25 ( 12.40%)	      473.51 (  4.70%)	      426.63 ( 14.13%)	      496.86
      length=2055:       521.61 ( -6.10%)	      432.22 ( 12.08%)	      468.23 (  4.76%)	      423.05 ( 13.95%)	      491.63
      length=2057:       520.85 (  2.95%)	      832.58 (-55.13%)	      592.29 (-10.36%)	      459.92 ( 14.30%)	      536.68
      length=4096:       975.17 ( -2.54%)	      655.45 ( 31.08%)	      917.03 (  3.57%)	      762.73 ( 19.80%)	      950.98
      length=4112:       964.94 ( -3.63%)	      667.76 ( 28.29%)	      876.17 (  5.91%)	      692.94 ( 25.58%)	      931.17
      length=4097:       948.37 ( -1.21%)	      682.39 ( 27.17%)	      892.41 (  4.76%)	      677.27 ( 27.72%)	      937.00
      length=4111:       978.69 ( -1.92%)	      716.71 ( 25.37%)	      906.23 (  5.63%)	      712.06 ( 25.85%)	      960.29
      length=4098:       949.38 ( -2.14%)	      679.25 ( 26.93%)	      888.81 (  4.38%)	      673.31 ( 27.56%)	      929.52
      length=4110:       970.83 ( -1.66%)	      708.96 ( 25.76%)	      902.78 (  5.46%)	      704.57 ( 26.22%)	      954.97
      length=4099:       949.87 ( -1.71%)	      679.67 ( 27.22%)	      892.95 (  4.38%)	      675.80 ( 27.63%)	      933.87
      length=4109:       967.45 ( -1.49%)	      705.64 ( 25.97%)	      903.67 (  5.20%)	      702.48 ( 26.31%)	      953.23
      length=4100:       945.82 (  1.14%)	      675.72 ( 29.37%)	      886.98 (  7.29%)	      674.15 ( 29.53%)	      956.68
      length=4108:      1141.85 ( -4.79%)	      854.97 ( 21.54%)	      930.53 ( 14.61%)	      838.30 ( 23.07%)	     1089.68
      length=4101:      1128.48 ( -8.13%)	      837.73 ( 19.73%)	      919.94 ( 11.85%)	      792.95 ( 24.02%)	     1043.65
      length=4107:      1059.05 ( -4.74%)	      783.50 ( 22.51%)	      911.18 (  9.89%)	      761.32 ( 24.71%)	     1011.15
      length=4102:      1010.60 ( -3.77%)	      733.65 ( 24.67%)	      898.25 (  7.76%)	      719.14 ( 26.16%)	      973.87
      length=4106:       991.69 (-20.82%)	      811.75 (  1.10%)	      988.04 (-20.38%)	      727.25 ( 11.40%)	      820.79
      length=4103:       871.04 ( -0.39%)	      713.14 ( 17.81%)	      721.12 ( 16.89%)	      810.37 (  6.60%)	      867.64
      length=4105:       911.67 (-14.04%)	      719.09 ( 10.05%)	      702.96 ( 12.06%)	      710.58 ( 11.11%)	      799.40
      length=8192:      1360.42 ( -1.14%)	     1118.26 ( 16.86%)	     1157.03 ( 13.98%)	     1326.21 (  1.40%)	     1345.02
      length=8208:      1400.28 ( -8.73%)	     1137.66 ( 11.66%)	     1046.63 ( 18.73%)	     1161.27 (  9.83%)	     1287.83
      length=8193:      1398.21 ( -8.00%)	     1145.11 ( 11.55%)	     1091.21 ( 15.71%)	     1157.04 ( 10.63%)	     1294.66
      length=8207:      1436.45 ( -7.68%)	     1154.69 ( 13.44%)	     1147.60 ( 13.97%)	     1168.64 ( 12.40%)	     1334.00
      length=8194:      1370.49 ( -8.63%)	     1118.03 ( 11.38%)	     1067.82 ( 15.36%)	     1126.42 ( 10.72%)	     1261.64
      length=8206:      1396.56 ( -1.25%)	     1143.20 ( 17.12%)	     1127.25 ( 18.28%)	     1154.28 ( 16.32%)	     1379.33
      length=8195:      1496.53 (-15.44%)	     1207.21 (  6.88%)	     1109.14 ( 14.44%)	     1152.25 ( 11.12%)	     1296.37
      length=8205:      1418.96 ( -7.85%)	     1148.54 ( 12.70%)	     1132.73 ( 13.90%)	     1153.58 ( 12.32%)	     1315.63
      length=8196:      1361.38 ( -6.84%)	     1114.30 ( 12.55%)	     1071.10 ( 15.94%)	     1131.68 ( 11.19%)	     1274.26
      length=8204:      1369.29 ( -5.22%)	     1126.63 ( 13.43%)	     1122.16 ( 13.77%)	     1141.87 ( 12.26%)	     1301.39
      length=8197:      1381.82 (  4.95%)	     1210.91 ( 16.71%)	     1136.11 ( 21.85%)	     1298.20 ( 10.70%)	     1453.82
      length=8203:      1563.37 (-10.38%)	     1261.34 ( 10.94%)	     1141.43 ( 19.41%)	     1273.12 ( 10.11%)	     1416.32
      length=8198:      1499.47 ( -8.40%)	     1233.36 ( 10.84%)	     1097.78 ( 20.64%)	     1240.02 ( 10.36%)	     1383.31
      length=8202:      2913.01 (-32.85%)	     1696.61 ( 22.62%)	     1775.53 ( 19.02%)	     1678.14 ( 23.47%)	     2192.68
      length=8199:      2179.48 (  4.82%)	     1556.86 ( 32.01%)	     1745.45 ( 23.77%)	     1550.35 ( 32.29%)	     2289.81
      length=8201:      2321.80 (-14.25%)	     1499.12 ( 26.23%)	     1746.32 ( 14.07%)	     1480.27 ( 27.16%)	     2032.29
     length=16384:      3977.00 ( -1.49%)	     2340.90 ( 40.26%)	     3411.18 ( 12.95%)	     2829.02 ( 27.81%)	     3918.80
     length=16400:      3915.98 ( -2.54%)	     2598.48 ( 31.96%)	     3357.71 ( 12.08%)	     2574.68 ( 32.58%)	     3819.13
     length=16385:      3868.77 (  5.00%)	     2604.50 ( 36.04%)	     3392.37 ( 16.70%)	     2589.65 ( 36.41%)	     4072.39
     length=16399:      4324.48 ( -2.36%)	     3138.76 ( 25.70%)	     3461.64 ( 18.06%)	     3100.32 ( 26.61%)	     4224.67
     length=16386:      4226.01 ( -0.31%)	     3042.08 ( 27.79%)	     3429.44 ( 18.60%)	     3149.32 ( 25.24%)	     4212.85
     length=16398:      4172.67 ( -4.11%)	     2868.93 ( 28.42%)	     3389.04 ( 15.44%)	     2839.37 ( 29.16%)	     4007.93
     length=16387:      4026.32 ( -1.65%)	     2778.45 ( 29.86%)	     3397.77 ( 14.22%)	     2749.61 ( 30.58%)	     3961.09
     length=16397:      3950.05 ( -2.22%)	     2665.81 ( 31.02%)	     3388.85 ( 12.31%)	     2653.39 ( 31.34%)	     3864.40
     length=16388:      3883.05 ( -1.41%)	     2623.36 ( 31.49%)	     3376.21 ( 11.83%)	     2622.74 ( 31.50%)	     3828.99
     length=16396:      3849.62 ( -1.89%)	     2558.15 ( 32.29%)	     3372.83 ( 10.73%)	     2546.00 ( 32.61%)	     3778.22
     length=16389:      3809.94 ( -1.24%)	     2531.80 ( 32.72%)	     3391.95 (  9.86%)	     2541.10 ( 32.47%)	     3763.11
     length=16395:      3856.78 (-35.31%)	     3044.15 ( -6.80%)	     2049.70 ( 28.09%)	     2717.45 (  4.66%)	     2850.41
     length=16390:      2862.92 ( -3.52%)	     2563.33 (  7.31%)	     2002.69 ( 27.58%)	     2615.06 (  5.44%)	     2765.45
     length=16394:      2806.77 ( -0.94%)	     2504.83 (  9.92%)	     2023.76 ( 27.22%)	     2596.99 (  6.60%)	     2780.55
     length=16391:      2784.26 ( -2.14%)	     2497.16 (  8.39%)	     2008.27 ( 26.33%)	     2522.85 (  7.45%)	     2725.87
     length=16393:      2731.38 ( -1.98%)	     2440.61 (  8.88%)	     2023.48 ( 24.45%)	     2490.99 (  7.00%)	     2678.47
     length=32768:      7629.73 (-46.76%)	     4473.26 ( 13.95%)	     3947.03 ( 24.08%)	     5201.79 ( -0.06%)	     5198.66
     length=32784:      7666.55 (-44.44%)	     4705.93 ( 11.34%)	     3782.04 ( 28.75%)	     4759.99 ( 10.32%)	     5307.92
     length=32769:      7589.72 (-42.41%)	     4776.54 ( 10.37%)	     3889.61 ( 27.02%)	     4789.02 ( 10.14%)	     5329.43
     length=32783:      7502.45 (-44.25%)	     4688.97 (  9.85%)	     3858.48 ( 25.81%)	     4714.48 (  9.36%)	     5201.10
     length=32770:      7438.46 (-43.39%)	     4647.77 ( 10.41%)	     3848.94 ( 25.81%)	     4680.76 (  9.77%)	     5187.71
     length=32782:      7225.10 (-38.35%)	     4609.10 ( 11.74%)	     3855.37 ( 26.17%)	     4643.70 ( 11.08%)	     5222.19
     length=32771:      7326.40 (-42.87%)	     4587.85 ( 10.53%)	     3828.78 ( 25.33%)	     4580.34 ( 10.68%)	     5127.85
     length=32781:      7261.12 (-41.38%)	     4548.17 ( 11.44%)	     3851.30 ( 25.01%)	     4584.78 ( 10.73%)	     5135.97
     length=32772:      7178.11 (-41.83%)	     4510.12 ( 10.89%)	     3802.44 ( 24.87%)	     4521.19 ( 10.67%)	     5061.20
     length=32780:      7186.99 (-42.34%)	     4481.01 ( 11.25%)	     3835.00 ( 24.00%)	     4532.33 ( 10.23%)	     5049.00
     length=32773:      7089.60 (-38.93%)	     4482.70 ( 12.15%)	     3830.79 ( 24.93%)	     4487.18 ( 12.07%)	     5102.88
     length=32779:      7076.27 (-25.65%)	     4498.21 ( 20.13%)	     3881.99 ( 31.07%)	     5371.42 (  4.62%)	     5631.73
     length=32774:      8362.27 (-48.81%)	     5190.76 (  7.63%)	     3845.61 ( 31.57%)	     5176.08 (  7.89%)	     5619.46
     length=32778:      8186.09 (-48.41%)	     5109.29 (  7.37%)	     3861.96 ( 29.98%)	     5211.88 (  5.51%)	     5515.68
     length=32775:      8186.51 (-49.43%)	     5096.24 (  6.98%)	     3846.12 ( 29.80%)	     5128.88 (  6.38%)	     5478.44
     length=32777:      8038.38 (-49.89%)	     5001.09 (  6.75%)	     3837.79 ( 28.44%)	     5095.39 (  4.99%)	     5362.88
     length=65536:     15947.00 ( 18.56%)	     8793.77 ( 55.09%)	     7611.29 ( 61.13%)	    10576.30 ( 45.99%)	    19580.90
     length=65552:     16992.10 (-15.71%)	     9740.98 ( 33.67%)	    13282.90 (  9.55%)	     9804.27 ( 33.23%)	    14684.70
     length=65537:     12917.20 ( 11.25%)	     9576.91 ( 34.20%)	    13265.60 (  8.86%)	     9720.59 ( 33.21%)	    14554.80
     length=65551:     12661.70 ( 12.50%)	     9486.67 ( 34.44%)	    13291.90 (  8.14%)	     9505.77 ( 34.31%)	    14470.30
     length=65538:     12416.60 ( 13.37%)	     9378.05 ( 34.57%)	    13265.00 (  7.45%)	     9360.94 ( 34.69%)	    14333.20
     length=65550:     12263.30 ( 14.26%)	     9256.75 ( 35.28%)	    13292.20 (  7.06%)	     9262.92 ( 35.23%)	    14302.30
     length=65539:     12137.70 ( 14.34%)	     9172.56 ( 35.27%)	    13278.40 (  6.29%)	     9231.09 ( 34.85%)	    14169.40
     length=65549:     12086.40 ( 14.69%)	     9060.12 ( 36.05%)	    13283.30 (  6.24%)	     9139.49 ( 35.49%)	    14167.90
     length=65540:     11880.40 ( 15.30%)	     9043.20 ( 35.53%)	    13261.50 (  5.45%)	     8997.29 ( 35.85%)	    14026.10
     length=65548:     11793.00 ( 15.62%)	     8951.62 ( 35.95%)	    13248.10 (  5.21%)	     8948.26 ( 35.98%)	    13976.20
     length=65541:     11679.80 ( 16.33%)	     8905.88 ( 36.20%)	    13265.60 (  4.97%)	     8840.90 ( 36.67%)	    13960.10
     length=65547:     11588.60 ( 16.80%)	     8830.41 ( 36.61%)	    13275.00 (  4.70%)	     8842.02 ( 36.52%)	    13929.20
     length=65542:     11566.10 ( 16.65%)	     8844.02 ( 36.26%)	    13250.80 (  4.51%)	     8820.78 ( 36.43%)	    13876.00
     length=65546:     11519.40 ( 16.83%)	     8771.78 ( 36.67%)	    13263.10 (  4.24%)	     8750.37 ( 36.82%)	    13850.70
     length=65543:     11448.10 ( 16.90%)	     8715.39 ( 36.73%)	    13252.10 (  3.80%)	     8710.74 ( 36.77%)	    13775.90
     length=65545:     11458.40 ( 16.86%)	     8659.75 ( 37.17%)	    13304.10 (  3.47%)	     8745.23 ( 36.55%)	    13782.50
    length=131072:     22342.00 ( 18.63%)	    15174.50 ( 44.73%)	    26413.10 (  3.80%)	    17999.50 ( 34.44%)	    27456.40
    length=131088:     22635.80 ( 17.37%)	    17165.30 ( 37.34%)	    26469.10 (  3.37%)	    17158.00 ( 37.36%)	    27392.80
    length=131073:     22526.40 ( 17.65%)	    17224.40 ( 37.03%)	    26434.70 (  3.36%)	    17158.70 ( 37.27%)	    27354.30
    length=131087:     22412.20 ( 18.01%)	    17047.10 ( 37.64%)	    26462.80 (  3.20%)	    17173.50 ( 37.18%)	    27336.80
    length=131074:     22424.20 ( 22.24%)	    17079.40 ( 40.77%)	    26465.00 (  8.22%)	    17125.30 ( 40.61%)	    28835.90
    length=131086:     40078.80 (-74.05%)	    22007.40 (  4.43%)	    14988.40 ( 34.91%)	    22279.10 (  3.25%)	    23027.40
    length=131075:     34681.10 (-48.45%)	    21243.40 (  9.07%)	    14929.10 ( 36.10%)	    21932.30 (  6.12%)	    23361.40
    length=131085:     34251.60 (-50.09%)	    20757.70 (  9.04%)	    14877.00 ( 34.81%)	    21243.60 (  6.91%)	    22820.70
    length=131076:     33435.40 (-45.78%)	    20673.60 (  9.87%)	    14887.50 ( 35.09%)	    21088.60 (  8.06%)	    22936.30
    length=131084:     33341.70 (-46.30%)	    20422.30 ( 10.39%)	    14848.60 ( 34.85%)	    20764.90 (  8.89%)	    22790.00
    length=131077:     32742.20 (-46.86%)	    20348.80 (  8.73%)	    14849.80 ( 33.39%)	    20570.90 (  7.73%)	    22294.30
    length=131083:     32624.50 (-49.50%)	    20223.30 (  7.33%)	    14842.70 ( 31.99%)	    20304.80 (  6.96%)	    21822.70
    length=131078:     32029.80 (-46.15%)	    19946.80 (  8.99%)	    14868.50 ( 32.16%)	    20330.20 (  7.24%)	    21916.10
    length=131082:     31929.50 (-40.20%)	    19687.50 ( 13.56%)	    14793.50 ( 35.04%)	    19917.50 ( 12.55%)	    22774.70
    length=131079:     35902.80 (-56.14%)	    22017.30 (  4.25%)	    14910.50 ( 35.16%)	    21891.00 (  4.80%)	    22994.70
    length=131081:     34660.40 (-49.87%)	    21417.10 (  7.39%)	    14950.40 ( 35.35%)	    21634.10 (  6.45%)	    23126.40
    length=262144:     68983.20 (-63.12%)	    37265.40 ( 11.88%)	    29540.60 ( 30.15%)	    45874.50 ( -8.47%)	    42290.80
    length=262160:     67704.90 (-46.70%)	    41761.70 (  9.51%)	    29389.90 ( 36.32%)	    42672.00 (  7.54%)	    46152.60
    length=262145:     66706.40 (-45.31%)	    41534.50 (  9.52%)	    29608.80 ( 35.50%)	    42510.20 (  7.40%)	    45906.60
    length=262159:     81856.50 (-47.75%)	    47537.70 ( 14.20%)	    52798.40 (  4.70%)	    34805.20 ( 37.18%)	    55402.40
    length=262146:     45977.20 ( 16.41%)	    35069.60 ( 36.24%)	    52833.60 (  3.94%)	    34810.60 ( 36.71%)	    55003.00
    length=262158:     45257.20 ( 17.66%)	    34440.50 ( 37.34%)	    52825.00 (  3.89%)	    34518.30 ( 37.20%)	    54964.10
    length=262147:     45483.90 ( 17.10%)	    34609.80 ( 36.92%)	    52782.50 (  3.80%)	    34546.30 ( 37.04%)	    54867.90
    length=262157:     44816.80 ( 17.92%)	    33984.20 ( 37.76%)	    52817.60 (  3.27%)	    33916.20 ( 37.89%)	    54602.50
    length=262148:     44812.70 ( 17.79%)	    34119.00 ( 37.41%)	    52749.20 (  3.23%)	    34044.30 ( 37.55%)	    54511.40
    length=262156:     44447.20 ( 18.29%)	    33973.60 ( 37.55%)	    52809.00 (  2.92%)	    34057.40 ( 37.39%)	    54399.30
    length=262149:     44727.80 ( 17.76%)	    33856.10 ( 37.75%)	    52813.00 (  2.90%)	    34053.80 ( 37.39%)	    54389.40
    length=262155:     44715.50 ( 17.71%)	    33772.90 ( 37.84%)	    52864.80 (  2.71%)	    33807.10 ( 37.78%)	    54336.10
    length=262150:     44408.80 ( 18.31%)	    33939.80 ( 37.57%)	    52801.70 (  2.87%)	    33706.60 ( 37.99%)	    54360.50
    length=262154:     44178.20 ( 18.66%)	    33739.90 ( 37.88%)	    52816.00 (  2.76%)	    33990.90 ( 37.42%)	    54313.40
    length=262151:     45741.50 ( 33.54%)	    44669.50 ( 35.10%)	    53335.80 ( 22.51%)	    48333.40 ( 29.78%)	    68830.50
    length=262153:     67710.50 (  1.21%)	    48394.80 ( 29.39%)	    53387.10 ( 22.11%)	    49728.80 ( 27.45%)	    68540.90
    length=524288:    129746.00 (  2.00%)	    77745.60 ( 41.87%)	   105844.00 ( 20.00%)	    92711.10 ( 30.68%)	   133748.00
    length=524304:    124324.00 (  4.00%)	    88915.30 ( 32.06%)	   105948.00 ( 19.00%)	    88982.70 ( 32.00%)	   130866.00
    length=524289:    119251.00 (  7.00%)	    87273.60 ( 32.35%)	   106032.00 ( 17.00%)	    80155.50 ( 37.87%)	   129012.00
    length=524303:    116137.00 ( 10.00%)	    84275.30 ( 35.36%)	   105867.00 ( 18.00%)	    84498.10 ( 35.19%)	   130376.00
    length=524290:    138105.00 (-54.68%)	   121209.00 (-35.76%)	    63522.80 ( 28.85%)	    87831.70 (  1.63%)	    89283.90
    length=524302:    134105.00 (-49.00%)	    83334.10 (  7.90%)	    59091.90 ( 34.69%)	    83906.90 (  7.26%)	    90480.00
    length=524291:    134058.00 (-53.29%)	    81877.70 (  6.37%)	    58743.30 ( 32.83%)	    82353.00 (  5.83%)	    87451.10
    length=524301:    130047.00 (-43.81%)	    80786.40 ( 10.67%)	    58859.10 ( 34.91%)	    82549.40 (  8.72%)	    90431.10
    length=524292:    129063.00 (-51.97%)	    81236.70 (  4.35%)	    58822.70 ( 30.74%)	    82568.60 (  2.78%)	    84927.80
    length=524300:    128313.00 (-45.40%)	    79296.20 ( 10.15%)	    58851.90 ( 33.31%)	    81571.60 (  7.57%)	    88249.20
    length=524293:    127328.00 (-44.00%)	    78289.50 ( 12.02%)	    58544.50 ( 34.21%)	    80412.80 (  9.63%)	    88982.00
    length=524299:    135595.00 (-54.83%)	    81338.00 (  7.12%)	    58862.70 ( 32.79%)	    80834.80 (  7.70%)	    87575.80
    length=524294:    126207.00 (-49.25%)	    78027.50 (  7.72%)	    58830.80 ( 30.43%)	    79161.60 (  6.38%)	    84558.60
    length=524298:    125189.00 (-47.64%)	    76918.40 (  9.29%)	    58718.60 ( 30.75%)	    77995.00 (  8.02%)	    84793.90
    length=524295:    126253.00 (-47.00%)	    75750.00 ( 11.00%)	    58712.80 ( 31.72%)	    76864.20 ( 10.61%)	    85987.00
    length=524297:    123030.00 (-33.76%)	    75724.10 ( 17.67%)	    58611.20 ( 36.28%)	    82349.50 ( 10.47%)	    91975.30
   length=1048576:    273291.00 (-61.00%)	   146604.00 ( 13.00%)	   117511.00 ( 30.00%)	   178378.00 ( -5.00%)	   169898.00
   length=1048592:    266742.00 (  7.00%)	   164992.00 ( 42.00%)	   117873.00 ( 58.00%)	   238306.00 ( 17.00%)	   287356.00
   length=1048577:    316370.00 (-51.00%)	   202710.00 (  3.00%)	   120862.00 ( 42.00%)	   173791.00 ( 17.00%)	   210478.00
   length=1048591:    310302.00 (-56.00%)	   187292.00 (  6.00%)	   120591.00 ( 39.00%)	   189947.00 (  4.00%)	   199304.00
   length=1048578:    305883.00 (  0.00%)	   182002.00 ( 40.00%)	   120063.00 ( 60.00%)	   292063.00 (  4.00%)	   306638.00
   length=1048590:    270399.00 ( -3.00%)	   187458.00 ( 28.00%)	   212570.00 ( 19.00%)	   190418.00 ( 27.00%)	   263049.00
   length=1048579:    252772.00 (  1.00%)	   183513.00 ( 28.00%)	   212058.00 ( 17.00%)	   178106.00 ( 30.00%)	   257625.00
   length=1048589:    241352.00 ( 11.00%)	   175087.00 ( 35.00%)	   212020.00 ( 22.00%)	   197121.00 ( 27.00%)	   273018.00
   length=1048580:    272863.00 ( -1.00%)	   191251.00 ( 29.00%)	   212480.00 ( 21.00%)	   197999.00 ( 27.00%)	   271294.00
   length=1048588:    271516.00 ( -2.00%)	   191700.00 ( 28.00%)	   212554.00 ( 20.00%)	   192703.00 ( 27.00%)	   266482.00
   length=1048581:    254257.00 (  1.00%)	   181722.00 ( 29.00%)	   212162.00 ( 17.00%)	   179509.00 ( 30.00%)	   258385.00
   length=1048587:    238944.00 (  5.00%)	   172779.00 ( 31.00%)	   212316.00 ( 16.00%)	   172404.00 ( 31.00%)	   253201.00
   length=1048582:    229499.00 ( 12.00%)	   167014.00 ( 36.00%)	   212926.00 ( 19.00%)	   186145.00 ( 29.00%)	   263337.00
   length=1048586:    246753.00 (  2.00%)	   176579.00 ( 30.00%)	   211904.00 ( 16.00%)	   174490.00 ( 31.00%)	   254016.00
   length=1048583:    230403.00 (  7.00%)	   167953.00 ( 32.00%)	   212186.00 ( 14.00%)	   167205.00 ( 32.00%)	   247924.00
   length=1048585:    219784.00 ( 15.00%)	   160818.00 ( 37.00%)	   212837.00 ( 17.00%)	   180530.00 ( 30.00%)	   258848.00
   length=2097152:    468514.00 (-35.00%)	   303214.00 ( 12.00%)	   263596.00 ( 24.00%)	   375436.00 ( -9.00%)	   347145.00
   length=2097168:    559784.00 (-45.00%)	   348186.00 ( 10.00%)	   232985.00 ( 40.00%)	   357944.00 (  7.00%)	   388335.00
   length=2097153:    561868.00 (-42.00%)	   358270.00 (  9.00%)	   232862.00 ( 41.00%)	   250309.00 ( 36.00%)	   395784.00
   length=2097167:    541513.00 (-43.00%)	   343408.00 (  9.00%)	   232726.00 ( 38.00%)	   345078.00 (  9.00%)	   379829.00
   length=2097154:    537004.00 (-35.00%)	   358866.00 ( 10.00%)	   232268.00 ( 41.00%)	   317332.00 ( 20.00%)	   400260.00
   length=2097166:    540001.00 (-47.00%)	   339144.00 (  7.00%)	   232486.00 ( 36.00%)	   346319.00 (  5.00%)	   367642.00
   length=2097155:    533560.00 (-44.00%)	   341569.00 (  8.00%)	   232288.00 ( 37.00%)	   289282.00 ( 22.00%)	   372314.00
   length=2097165:    527971.00 (-44.00%)	   330433.00 ( 10.00%)	   232416.00 ( 36.00%)	   327653.00 ( 10.00%)	   367777.00
   length=2097156:    521450.00 (-43.00%)	   320001.00 ( 12.00%)	   232338.00 ( 36.00%)	   307222.00 ( 15.00%)	   364791.00
   length=2097164:    518852.00 (-40.00%)	   320562.00 ( 13.00%)	   232273.00 ( 37.00%)	   313861.00 ( 15.00%)	   372114.00
   length=2097157:    508795.00 (-38.00%)	   315605.00 ( 14.00%)	   232124.00 ( 37.00%)	   319851.00 ( 13.00%)	   370642.00
   length=2097163:    510197.00 (-48.00%)	   320996.00 (  7.00%)	   232101.00 ( 32.00%)	   301246.00 ( 12.00%)	   345614.00
   length=2097158:    501512.00 (-43.00%)	   316638.00 ( 10.00%)	   233321.00 ( 33.00%)	   318923.00 (  9.00%)	   351839.00
   length=2097162:    497261.00 (-45.00%)	   310550.00 (  9.00%)	   232054.00 ( 32.00%)	   318091.00 (  7.00%)	   344919.00
   length=2097159:    489207.00 (-40.00%)	   309784.00 ( 11.00%)	   232894.00 ( 33.00%)	   317947.00 (  9.00%)	   349449.00
   length=2097161:    492754.00 (-33.00%)	   304773.00 ( 18.00%)	   232418.00 ( 37.00%)	   318688.00 ( 14.00%)	   372033.00
   length=4194304:   1129420.00 (-64.03%)	   605284.00 ( 12.00%)	   464642.00 ( 32.00%)	   747822.00 ( -9.00%)	   688544.00
   length=4194320:   1281930.00 (-55.59%)	  1261300.00 (-53.08%)	   476589.00 ( 42.00%)	   853061.00 ( -4.00%)	   823925.00
   length=4194305:   1326790.00 (-52.66%)	   838598.00 (  3.00%)	   472888.00 ( 45.00%)	   553020.00 ( 36.00%)	   869124.00
   length=4194319:   1296550.00 (-58.93%)	   789772.00 (  3.00%)	   472919.00 ( 42.00%)	   818050.00 ( -1.00%)	   815809.00
   length=4194306:   1294940.00 (-29.17%)	   816410.00 ( 18.56%)	   779710.00 ( 22.22%)	   721422.00 ( 28.04%)	  1002480.00
   length=4194318:    938395.00 (  5.00%)	   688034.00 ( 30.00%)	   841896.00 ( 15.00%)	   684446.00 ( 31.00%)	   993648.00
   length=4194307:    909038.00 (  7.00%)	   685291.00 ( 30.00%)	   842381.00 ( 14.00%)	   587871.00 ( 40.00%)	   983304.00
   length=4194317:    884795.00 (  8.00%)	   665151.00 ( 31.00%)	   841174.00 ( 13.00%)	   656075.00 ( 32.00%)	   969540.00
   length=4194308:    866239.00 ( 10.00%)	   664831.00 ( 31.00%)	   841445.00 ( 12.00%)	   588519.00 ( 39.00%)	   964982.00
   length=4194316:    846171.00 ( 11.00%)	   642814.00 ( 32.00%)	   841546.00 ( 11.00%)	   605698.00 ( 36.00%)	   954491.00
   length=4194309:    832370.00 ( 12.00%)	   640740.00 ( 32.00%)	   842070.00 ( 11.00%)	   549245.00 ( 41.00%)	   946635.00
   length=4194315:    817958.00 ( 12.00%)	   626052.00 ( 33.00%)	   842538.00 ( 10.00%)	   590811.00 ( 37.00%)	   939969.00
   length=4194310:    811324.00 ( 13.00%)	   626351.00 ( 32.00%)	   841162.00 (  9.00%)	   539605.00 ( 42.00%)	   934106.00
   length=4194314:    797979.00 ( 14.00%)	   603701.00 ( 34.00%)	   840765.00 (  9.00%)	   604139.00 ( 34.00%)	   928328.00
   length=4194311:    784441.00 ( 14.00%)	   592495.00 ( 35.00%)	   840848.00 (  8.00%)	   556625.00 ( 39.00%)	   920742.00
   length=4194313:    778590.00 ( 14.00%)	   587148.00 ( 35.00%)	   839972.00 (  8.00%)	   572760.00 ( 37.00%)	   915135.00
   length=8388608:   1517920.00 ( 16.70%)	  1000050.00 ( 45.12%)	  1679180.00 (  7.86%)	  1211230.00 ( 33.53%)	  1822340.00
   length=8388624:   1519240.00 ( 15.78%)	  1154860.00 ( 35.98%)	  1683330.00 (  6.69%)	  1086690.00 ( 39.76%)	  1804000.00
   length=8388609:   1513510.00 ( 16.12%)	  1177920.00 ( 34.72%)	  1679360.00 (  6.93%)	   920625.00 ( 48.98%)	  1804410.00
   length=8388623:   1492580.00 ( 16.39%)	  1133610.00 ( 36.50%)	  1680400.00 (  5.87%)	  1071080.00 ( 40.00%)	  1785120.00
   length=8388610:   1476470.00 ( 17.21%)	  1158330.00 ( 35.05%)	  1681210.00 (  5.73%)	   916785.00 ( 48.60%)	  1783480.00
   length=8388622:   1457610.00 ( 17.37%)	  1121600.00 ( 36.41%)	  1678160.00 (  4.86%)	  1055440.00 ( 40.17%)	  1763920.00
   length=8388611:   1459160.00 ( 17.22%)	  1142800.00 ( 35.17%)	  1682120.00 (  4.57%)	   909018.00 ( 48.43%)	  1762670.00
   length=8388621:   1444190.00 ( 17.56%)	  1098580.00 ( 37.29%)	  1679030.00 (  4.16%)	  1042870.00 ( 40.47%)	  1751900.00
   length=8388612:   1429770.00 ( 17.84%)	  1123960.00 ( 35.41%)	  1679020.00 (  3.52%)	   897165.00 ( 48.45%)	  1740210.00
   length=8388620:   1422220.00 ( 18.03%)	  1112960.00 ( 35.85%)	  1680420.00 (  3.14%)	   954310.00 ( 45.00%)	  1734960.00
   length=8388613:   1417650.00 ( 18.21%)	  1118770.00 ( 35.45%)	  1679660.00 (  3.09%)	   957055.00 ( 44.78%)	  1733260.00
   length=8388619:   1399940.00 ( 40.39%)	  1099700.00 ( 53.18%)	  1677720.00 ( 28.56%)	   946458.00 ( 59.70%)	  2348560.00
   length=8388614:   2274360.00 (-44.04%)	  1508220.00 (  4.48%)	   928390.00 ( 41.20%)	  1359810.00 ( 13.88%)	  1578940.00
   length=8388618:   2254930.00 (-39.89%)	  1455850.00 (  9.68%)	   929692.00 ( 42.32%)	  1319760.00 ( 18.12%)	  1611880.00
   length=8388615:   2257440.00 (-42.11%)	  1447300.00 (  8.89%)	   926848.00 ( 41.65%)	  1314240.00 ( 17.27%)	  1588510.00
   length=8388617:   2199110.00 (-39.96%)	  1403680.00 ( 10.66%)	   931030.00 ( 40.74%)	  1289840.00 ( 17.91%)	  1571200.00
  length=16777216:   4337910.00 (-58.69%)	  2382780.00 ( 12.84%)	  1873900.00 ( 31.45%)	  2924180.00 ( -6.97%)	  2733660.00
  length=16777232:   4683590.00 (-55.87%)	  2975620.00 (  0.97%)	  1871120.00 ( 37.73%)	  2682460.00 ( 10.73%)	  3004840.00
  length=16777217:   4750420.00 (-64.47%)	  2942950.00 ( -1.89%)	  1876280.00 ( 35.04%)	  2019480.00 ( 30.08%)	  2888260.00
  length=16777231:   4533790.00 (-48.86%)	  2921600.00 (  4.07%)	  1869750.00 ( 38.61%)	  2614300.00 ( 14.16%)	  3045600.00
  length=16777218:   4531380.00 (-66.23%)	  2867600.00 ( -5.19%)	  1867880.00 ( 31.48%)	  1994060.00 ( 26.85%)	  2726020.00
  length=16777230:   4460720.00 (-56.95%)	  2847500.00 ( -0.19%)	  1872530.00 ( 34.12%)	  2572140.00 (  9.50%)	  2842120.00
  length=16777219:   4395120.00 (-23.95%)	  4268600.00 (-20.38%)	  3389990.00 (  4.40%)	  1838920.00 ( 48.14%)	  3546020.00
  length=16777229:   2978000.00 ( 16.03%)	  2341740.00 ( 33.97%)	  3383900.00 (  4.59%)	  2151250.00 ( 39.34%)	  3546520.00
  length=16777220:   2939700.00 ( 16.66%)	  2296690.00 ( 34.89%)	  3384610.00 (  4.05%)	  1829960.00 ( 48.12%)	  3527480.00
  length=16777228:   2939380.00 ( 16.30%)	  2309940.00 ( 34.23%)	  3384080.00 (  3.64%)	  2125050.00 ( 39.49%)	  3511970.00
  length=16777221:   2909430.00 ( 16.95%)	  2262640.00 ( 35.41%)	  3387000.00 (  3.32%)	  1815960.00 ( 48.16%)	  3503130.00
  length=16777227:   2912920.00 ( 16.56%)	  2292680.00 ( 34.33%)	  3384680.00 (  3.05%)	  2097100.00 ( 39.93%)	  3491040.00
  length=16777222:   2878740.00 ( 17.31%)	  2256460.00 ( 35.18%)	  3385420.00 (  2.76%)	  1794210.00 ( 48.46%)	  3481360.00
  length=16777226:   2868980.00 ( 17.23%)	  2269060.00 ( 34.54%)	  3386120.00 (  2.31%)	  2077560.00 ( 40.06%)	  3466280.00
  length=16777223:   2857940.00 ( 17.81%)	  2234260.00 ( 35.75%)	  3385550.00 (  2.64%)	  1798180.00 ( 48.29%)	  3477200.00
  length=16777225:   2838140.00 ( 18.22%)	  2256520.00 ( 34.98%)	  3382380.00 (  2.53%)	  2078000.00 ( 40.12%)	  3470300.00
  length=33554432:   5428610.00 ( 36.24%)	  3799340.00 ( 55.38%)	  6766930.00 ( 20.52%)	  5725590.00 ( 32.75%)	  8514030.00
  length=33554448:   8189030.00 (  5.60%)	  6022460.00 ( 30.57%)	  6794290.00 ( 21.68%)	  4487290.00 ( 48.27%)	  8674640.00
  length=33554433:   8505870.00 ( -1.70%)	  6014980.00 ( 28.08%)	  6775380.00 ( 18.99%)	  4314850.00 ( 48.41%)	  8363320.00
  length=33554447:   7925710.00 (  3.01%)	  5746450.00 ( 29.68%)	  6781540.00 ( 17.01%)	  4212420.00 ( 48.45%)	  8171630.00
  length=33554434:   7534840.00 (  6.09%)	  5588090.00 ( 30.35%)	  6775320.00 ( 15.55%)	  4103770.00 ( 48.85%)	  8023140.00
  length=33554446:   7290170.00 (  7.79%)	  5456520.00 ( 30.98%)	  6772170.00 ( 14.34%)	  4040940.00 ( 48.89%)	  7906270.00
  length=33554435:   7078220.00 ( 19.38%)	  5331420.00 ( 39.28%)	  6772490.00 ( 22.86%)	  4414460.00 ( 49.72%)	  8779630.00
  length=33554445:   8344840.00 ( -1.54%)	  5927920.00 ( 27.87%)	  6761630.00 ( 17.72%)	  4248730.00 ( 48.30%)	  8218160.00
  length=33554436:   7595690.00 (  4.67%)	  5571460.00 ( 30.07%)	  6782650.00 ( 14.87%)	  4096580.00 ( 48.58%)	  7967430.00
  length=33554444:   7131220.00 (  8.40%)	  5356570.00 ( 31.20%)	  6789750.00 ( 12.79%)	  3983870.00 ( 48.83%)	  7785220.00
  length=33554437:   6817620.00 ( 10.79%)	  5187320.00 ( 32.12%)	  6778120.00 ( 11.31%)	  3899660.00 ( 48.97%)	  7642430.00
  length=33554443:   6623990.00 ( 12.00%)	  5064300.00 ( 32.72%)	  6770280.00 ( 10.06%)	  3846720.00 ( 48.90%)	  7527300.00
  length=33554438:   6438530.00 ( 13.60%)	  4944790.00 ( 33.65%)	  6769790.00 (  9.16%)	  3814180.00 ( 48.82%)	  7452300.00
  length=33554442:   7453860.00 (  9.05%)	  5937090.00 ( 27.55%)	  6785960.00 ( 17.20%)	  4224870.00 ( 48.45%)	  8195170.00
  length=33554439:   7500310.00 (  5.76%)	  5532480.00 ( 30.49%)	  6772850.00 ( 14.90%)	  4076390.00 ( 48.78%)	  7958900.00
  length=33554441:   7076920.00 (  8.65%)	  5322170.00 ( 31.30%)	  6779540.00 ( 12.49%)	  3968590.00 ( 48.78%)	  7747400.00

Function: memmove
Variant: walk
                                    __memmove_thunderx	__memmove_falkor	__memmove_kunpeng	__memmove_generic
========================================================================================================================
      length=128:        51.37 (-49.76%)	       38.06 (-10.97%)	       34.90 ( -1.74%)	       34.30
      length=144:        35.44 ( -3.25%)	       36.02 ( -4.93%)	       35.05 ( -2.10%)	       34.33
      length=129:        35.11 (  0.09%)	       37.99 ( -8.10%)	       35.35 ( -0.61%)	       35.14
      length=143:        46.36 ( -0.17%)	       42.60 (  7.96%)	       46.39 ( -0.24%)	       46.28
      length=130:        35.43 ( -0.16%)	       37.52 ( -6.04%)	       35.60 ( -0.62%)	       35.38
      length=142:        44.96 ( -0.16%)	       41.82 (  6.82%)	       44.97 ( -0.19%)	       44.89
      length=131:        36.97 ( -0.12%)	       38.27 ( -3.66%)	       37.18 ( -0.70%)	       36.92
      length=141:        44.86 ( -0.09%)	       41.79 (  6.77%)	       44.97 ( -0.33%)	       44.83
      length=132:        36.07 ( -0.09%)	       37.69 ( -4.57%)	       36.09 ( -0.15%)	       36.04
      length=140:        42.30 (  0.17%)	       40.77 (  3.79%)	       42.38 ( -0.02%)	       42.37
      length=133:        38.67 (  0.01%)	       39.01 ( -0.88%)	       38.78 ( -0.28%)	       38.67
      length=139:        43.51 ( -0.01%)	       41.27 (  5.15%)	       43.70 ( -0.44%)	       43.50
      length=134:        38.89 ( -0.01%)	       39.02 ( -0.34%)	       39.08 ( -0.49%)	       38.89
      length=138:        41.93 ( -0.12%)	       40.45 (  3.43%)	       42.06 ( -0.41%)	       41.88
      length=135:        40.43 (  0.11%)	       39.83 (  1.59%)	       40.71 ( -0.57%)	       40.48
      length=137:        41.88 (  0.03%)	       40.44 (  3.46%)	       42.02 ( -0.32%)	       41.89
      length=256:        61.62 ( 11.97%)	       72.77 ( -3.96%)	       64.73 (  7.53%)	       70.00
      length=272:        82.67 (-10.25%)	       79.58 ( -6.13%)	       78.07 ( -4.12%)	       74.98
      length=257:       110.00 (-33.10%)	       78.46 (  5.07%)	       82.75 ( -0.12%)	       82.65
      length=271:       101.87 (  0.23%)	       82.67 ( 19.03%)	      102.11 ( -0.01%)	      102.10
      length=258:        84.84 (  0.30%)	       76.20 ( 10.45%)	       85.46 ( -0.43%)	       85.10
      length=270:       101.60 ( -0.14%)	       82.52 ( 18.67%)	      102.54 ( -1.06%)	      101.46
      length=259:        84.64 (  0.81%)	       76.52 ( 10.33%)	       85.15 (  0.21%)	       85.33
      length=269:        98.75 ( -0.66%)	       81.08 ( 17.35%)	       98.37 ( -0.27%)	       98.11
      length=260:        93.07 (-12.26%)	      192.05 (-131.65%)	      146.38 (-76.56%)	       82.91
      length=268:        88.50 ( -0.98%)	       81.97 (  6.47%)	       87.90 ( -0.29%)	       87.64
      length=261:        79.76 ( -0.26%)	       78.24 (  1.64%)	       79.03 (  0.65%)	       79.55
      length=267:        86.23 ( -0.63%)	       82.52 (  3.69%)	       85.79 ( -0.12%)	       85.69
      length=262:        81.69 ( -0.17%)	       79.30 (  2.76%)	       81.10 (  0.56%)	       81.55
      length=266:        84.99 (  0.06%)	       80.03 (  5.89%)	       84.41 (  0.75%)	       85.04
      length=263:        81.83 ( -0.07%)	       78.91 (  3.50%)	       81.09 (  0.84%)	       81.78
      length=265:        84.92 ( -0.04%)	       80.98 (  4.60%)	       84.10 (  0.92%)	       84.88
      length=512:        93.63 (-37.27%)	       75.94 (-11.33%)	       66.20 (  2.94%)	       68.21
      length=528:        73.27 (  1.08%)	       80.07 ( -8.11%)	       74.84 ( -1.05%)	       74.06
      length=513:       154.89 (  1.39%)	      134.90 ( 14.11%)	      156.24 (  0.53%)	      157.06
      length=527:       166.72 ( -0.06%)	      146.68 ( 11.97%)	      165.36 (  0.76%)	      166.62
      length=514:       159.44 (  0.01%)	      141.12 ( 11.50%)	      158.39 (  0.67%)	      159.45
      length=526:       167.66 ( -0.36%)	      145.50 ( 12.90%)	      165.94 (  0.67%)	      167.05
      length=515:       159.24 ( -0.45%)	      142.13 ( 10.34%)	      157.64 (  0.56%)	      158.53
      length=525:       164.99 (  0.32%)	      147.65 ( 10.79%)	      163.86 (  1.00%)	      165.52
      length=516:       163.06 (  0.08%)	      144.00 ( 11.76%)	      161.98 (  0.75%)	      163.20
      length=524:       168.84 ( -0.21%)	      147.31 ( 12.57%)	      167.38 (  0.65%)	      168.48
      length=517:       160.28 ( -0.20%)	      144.91 (  9.41%)	      158.44 (  0.95%)	      159.96
      length=523:       164.47 ( -0.42%)	      147.01 ( 10.24%)	      162.57 (  0.74%)	      163.79
      length=518:       161.48 (  0.12%)	      145.37 ( 10.08%)	      160.42 (  0.77%)	      161.67
      length=522:       164.38 ( -0.19%)	      146.50 ( 10.70%)	      163.17 (  0.55%)	      164.06
      length=519:       161.35 ( -0.14%)	      146.10 (  9.32%)	      159.59 (  0.95%)	      161.12
      length=521:       271.65 ( -8.19%)	      169.51 ( 32.49%)	      250.02 (  0.42%)	      251.07
     length=1024:       272.12 ( -0.41%)	      297.19 ( -9.67%)	      267.80 (  1.18%)	      270.99
     length=1040:       236.44 (  0.21%)	      272.31 (-14.93%)	      236.76 (  0.07%)	      236.93
     length=1025:       451.94 ( -6.66%)	      332.34 ( 21.57%)	      447.85 ( -5.69%)	      423.72
     length=1039:       458.52 (  2.37%)	      329.55 ( 29.83%)	      474.65 ( -1.07%)	      469.64
     length=1026:       524.59 ( -8.55%)	      351.12 ( 27.34%)	      485.88 ( -0.54%)	      483.25
     length=1038:       527.96 (-24.13%)	      340.45 ( 19.95%)	      457.44 ( -7.55%)	      425.31
     length=1027:       430.33 ( -0.37%)	      322.11 ( 24.87%)	      446.14 ( -4.06%)	      428.74
     length=1037:       455.58 ( -1.43%)	      327.19 ( 27.16%)	      469.53 ( -4.53%)	      449.16
     length=1028:       380.04 (-12.39%)	      318.08 (  5.93%)	      381.02 (-12.68%)	      338.14
     length=1036:       373.06 ( -4.19%)	      324.85 (  9.28%)	      402.36 (-12.37%)	      358.06
     length=1029:       402.50 (  6.29%)	      324.05 ( 24.56%)	      448.45 ( -4.41%)	      429.52
     length=1035:       448.77 ( -0.89%)	      327.21 ( 26.43%)	      465.53 ( -4.66%)	      444.79
     length=1030:       420.31 ( -4.70%)	      321.31 ( 19.96%)	      429.95 ( -7.10%)	      401.45
     length=1034:       419.44 ( -1.73%)	      322.84 ( 21.70%)	      440.57 ( -6.86%)	      412.30
     length=1031:       428.93 (  1.75%)	      324.41 ( 25.69%)	      455.25 ( -4.28%)	      436.56
     length=1033:       446.69 ( -0.85%)	      325.36 ( 26.54%)	      461.42 ( -4.17%)	      442.94
     length=2048:       509.21 (  4.03%)	      573.49 ( -8.08%)	      525.59 (  0.94%)	      530.59
     length=2064:       456.26 (  0.53%)	      533.25 (-16.25%)	      395.50 ( 13.78%)	      458.70
     length=2049:       653.95 (-12.47%)	      660.78 (-13.64%)	      578.13 (  0.57%)	      581.46
     length=2063:       667.06 ( -6.63%)	      643.44 ( -2.86%)	      557.57 ( 10.87%)	      625.57
     length=2050:       609.38 ( -5.46%)	      640.02 (-10.76%)	      566.68 (  1.93%)	      577.85
     length=2062:       657.74 ( 13.50%)	      645.01 ( 15.17%)	      744.05 (  2.14%)	      760.35
     length=2051:       554.96 ( -8.56%)	      540.92 ( -5.82%)	      482.66 (  5.58%)	      511.19
     length=2061:       552.20 ( -3.16%)	      535.06 (  0.04%)	      460.81 ( 13.91%)	      535.28
     length=2052:       497.77 ( -1.91%)	      530.70 ( -8.65%)	      469.79 (  3.82%)	      488.46
     length=2060:       519.63 ( -1.65%)	      533.80 ( -4.43%)	      464.77 (  9.08%)	      511.17
     length=2053:       517.69 ( -1.42%)	      528.83 ( -3.60%)	      469.05 (  8.11%)	      510.45
     length=2059:       540.18 ( -2.07%)	      531.32 ( -0.40%)	      462.64 ( 12.58%)	      529.21
     length=2054:       515.57 ( -2.35%)	      528.72 ( -4.96%)	      466.24 (  7.44%)	      503.72
     length=2058:       528.80 ( -2.04%)	      529.37 ( -2.15%)	      463.54 ( 10.55%)	      518.24
     length=2055:       525.71 ( -1.67%)	      529.52 ( -2.40%)	      465.04 ( 10.07%)	      517.10
     length=2057:       536.72 ( -2.28%)	      531.45 ( -1.28%)	      465.10 ( 11.37%)	      524.74
     length=4096:       881.94 ( -8.04%)	      974.05 (-19.33%)	      540.77 ( 33.75%)	      816.28
     length=4112:       731.36 (  0.09%)	      844.20 (-15.33%)	      544.58 ( 25.60%)	      731.99
     length=4097:       890.17 (  1.48%)	     1052.36 (-16.47%)	      769.43 ( 14.84%)	      903.55
     length=4111:       952.60 ( -0.31%)	     1046.27 (-10.18%)	      784.13 ( 17.43%)	      949.62
     length=4098:       912.19 ( -1.33%)	     1046.22 (-16.22%)	      766.61 ( 14.84%)	      900.18
     length=4110:       943.07 (  0.13%)	     1047.51 (-10.93%)	      780.25 ( 17.37%)	      944.31
     length=4099:       923.69 ( -1.17%)	     1047.81 (-14.76%)	      775.22 ( 15.09%)	      913.03
     length=4109:       953.12 ( -0.89%)	     1048.29 (-10.96%)	      784.46 ( 16.97%)	      944.75
     length=4100:       909.17 ( -0.98%)	     1055.13 (-17.19%)	      766.73 ( 14.84%)	      900.36
     length=4108:       930.55 ( -0.25%)	     1057.37 (-13.91%)	      777.48 ( 16.24%)	      928.22
     length=4101:       929.05 ( -1.19%)	     1047.62 (-14.10%)	      778.69 ( 15.19%)	      918.13
     length=4107:       947.47 ( -0.97%)	     1047.27 (-11.61%)	      784.13 ( 16.43%)	      938.34
     length=4102:       930.43 ( -1.69%)	     1045.75 (-14.30%)	      775.53 ( 15.24%)	      914.95
     length=4106:       935.99 ( -0.75%)	     1043.12 (-12.28%)	      776.88 ( 16.38%)	      929.07
     length=4103:       933.96 ( -1.22%)	     1047.82 (-13.56%)	      777.32 ( 15.75%)	      922.66
     length=4105:       939.62 ( -0.89%)	     1047.56 (-12.48%)	      779.74 ( 16.28%)	      931.35
     length=8192:      1693.15 ( -4.61%)	     1909.64 (-17.99%)	     1033.45 ( 36.15%)	     1618.47
     length=8208:      1445.04 (  0.10%)	     1670.54 (-15.49%)	     1020.78 ( 29.43%)	     1446.48
     length=8193:      1699.34 (  2.32%)	     2093.24 (-20.32%)	     1388.96 ( 20.16%)	     1739.74
     length=8207:      1757.65 (  1.94%)	     2099.04 (-17.11%)	     1451.55 ( 19.01%)	     1792.35
     length=8194:      1725.64 (  0.23%)	     2091.20 (-20.90%)	     1388.15 ( 19.75%)	     1729.69
     length=8206:      1749.03 (  1.30%)	     2094.01 (-18.17%)	     1442.46 ( 18.60%)	     1772.03
     length=8195:      1729.41 (  4.45%)	     2135.97 (-18.01%)	     1465.03 ( 19.06%)	     1810.01
     length=8205:      1848.83 ( -1.58%)	     2119.61 (-16.45%)	     1486.65 ( 18.32%)	     1820.13
     length=8196:      1761.66 ( -1.45%)	     2123.73 (-22.30%)	     1398.56 ( 19.46%)	     1736.52
     length=8204:      1740.93 (  0.85%)	     2119.55 (-20.71%)	     1434.39 ( 18.31%)	     1755.93
     length=8197:      1740.92 (  0.40%)	     2095.89 (-19.91%)	     1408.64 ( 19.41%)	     1747.85
     length=8203:      1758.23 (  1.00%)	     2088.07 (-17.57%)	     1437.80 ( 19.05%)	     1776.07
     length=8198:      1735.79 (  0.49%)	     2083.58 (-19.45%)	     1405.62 ( 19.41%)	     1744.27
     length=8202:      1738.60 (  1.34%)	     2085.26 (-18.33%)	     1426.53 ( 19.05%)	     1762.24
     length=8199:      1741.35 (  0.40%)	     2082.95 (-19.14%)	     1417.40 ( 18.93%)	     1748.38
     length=8201:      1744.66 (  0.97%)	     2083.24 (-18.24%)	     1425.20 ( 19.11%)	     1761.82
    length=16384:      3282.60 ( -2.66%)	     3762.91 (-17.68%)	     2011.40 ( 37.09%)	     3197.49
    length=16400:      2856.66 ( -0.16%)	     3312.29 (-16.13%)	     1962.10 ( 31.21%)	     2852.18
    length=16385:      3308.95 (  2.91%)	     4188.05 (-22.88%)	     2636.16 ( 22.65%)	     3408.14
    length=16399:      3381.43 (  1.28%)	     4214.49 (-23.04%)	     2813.89 ( 17.85%)	     3425.36
    length=16386:      3368.70 (  1.74%)	     4214.17 (-22.92%)	     2630.54 ( 23.27%)	     3428.33
    length=16398:      3385.22 (  1.20%)	     4215.71 (-23.03%)	     2764.28 ( 19.33%)	     3426.49
    length=16387:      3376.74 (  1.95%)	     4223.17 (-22.62%)	     2653.92 ( 22.94%)	     3444.03
    length=16397:      3398.36 (  1.19%)	     4217.23 (-22.61%)	     2761.99 ( 19.70%)	     3439.45
    length=16388:      3360.08 (  1.87%)	     4257.15 (-24.33%)	     2628.56 ( 23.23%)	     3424.07
    length=16396:      3368.00 (  2.31%)	     4251.41 (-23.32%)	     2723.26 ( 21.01%)	     3447.55
    length=16389:      3444.62 (  0.73%)	     4240.82 (-22.22%)	     2688.86 ( 22.51%)	     3469.86
    length=16395:      3428.00 (  0.64%)	     4223.60 (-22.42%)	     2752.34 ( 20.23%)	     3450.14
    length=16390:      3395.98 (  0.76%)	     4219.51 (-23.30%)	     2672.76 ( 21.90%)	     3422.12
    length=16394:      3403.62 (  0.64%)	     4227.16 (-23.40%)	     2720.07 ( 20.60%)	     3425.58
    length=16391:      3394.65 (  0.98%)	     4224.08 (-23.22%)	     2693.65 ( 21.42%)	     3428.09
    length=16393:      3394.15 (  1.01%)	     4252.00 (-24.01%)	     2729.86 ( 20.38%)	     3428.64
    length=32768:      6063.16 (  7.10%)	     7795.20 (-19.44%)	     4016.20 ( 38.46%)	     6526.50
    length=32784:      5107.78 ( 12.14%)	     6870.37 (-18.18%)	     3918.07 ( 32.60%)	     5813.44
    length=32769:      5924.29 ( 13.57%)	     8522.11 (-24.32%)	     5127.22 ( 25.20%)	     6854.83
    length=32783:      6007.26 ( 12.29%)	     8520.83 (-24.41%)	     5475.73 ( 20.05%)	     6849.26
    length=32770:      5949.95 ( 13.43%)	     8539.76 (-24.25%)	     5110.44 ( 25.65%)	     6873.32
    length=32782:      5911.80 ( 14.04%)	     8541.18 (-24.19%)	     5403.79 ( 21.43%)	     6877.58
    length=32771:      5967.58 ( 13.37%)	     8534.59 (-23.90%)	     5165.10 ( 25.02%)	     6888.23
    length=32781:      5981.02 ( 13.24%)	     8535.53 (-23.81%)	     5432.46 ( 21.20%)	     6894.14
    length=32772:      5973.10 ( 13.14%)	     8612.85 (-25.24%)	     5126.35 ( 25.46%)	     6876.87
    length=32780:      5949.92 ( 13.44%)	     8603.34 (-25.16%)	     5333.63 ( 22.41%)	     6873.80
    length=32773:      5963.11 ( 33.86%)	     8570.04 (  4.94%)	     5479.35 ( 39.22%)	     9015.68
    length=32779:      6775.19 (  7.55%)	     8675.92 (-18.39%)	     5796.76 ( 20.90%)	     7328.10
    length=32774:      6562.39 (  8.63%)	     8669.82 (-20.71%)	     5490.60 ( 23.55%)	     7182.36
    length=32778:      6351.84 (  9.37%)	     8563.24 (-22.19%)	     5490.85 ( 21.65%)	     7008.35
    length=32775:      6084.76 ( 12.33%)	     8549.78 (-23.19%)	     5400.42 ( 22.19%)	     6940.18
    length=32777:      5989.39 ( 13.46%)	     8540.92 (-23.40%)	     5422.72 ( 21.65%)	     6921.13
    length=65536:     12035.90 (  8.82%)	    15837.90 (-19.98%)	     8092.52 ( 38.69%)	    13200.30
    length=65552:     10312.70 ( 12.62%)	    13970.90 (-18.38%)	     7807.01 ( 33.85%)	    11801.60
    length=65537:     11783.80 ( 14.06%)	    17010.90 (-24.06%)	    10315.90 ( 24.77%)	    13712.00
    length=65551:     11820.10 ( 14.74%)	    17053.40 (-23.01%)	    11015.40 ( 20.54%)	    13862.90
    length=65538:     11737.60 ( 15.03%)	    17144.20 (-24.11%)	    10314.80 ( 25.33%)	    13814.10
    length=65550:     11773.50 ( 15.01%)	    17179.70 (-24.01%)	    10916.80 ( 21.20%)	    13853.00
    length=65539:     11742.10 ( 14.87%)	    17207.50 (-24.75%)	    10423.80 ( 24.43%)	    13793.30
    length=65549:     11756.50 ( 15.22%)	    17141.20 (-23.61%)	    10935.10 ( 21.14%)	    13867.00
    length=65540:     11742.00 ( 15.24%)	    17301.20 (-24.89%)	    10316.30 ( 25.53%)	    13853.60
    length=65548:     11709.00 ( 15.76%)	    17304.90 (-24.50%)	    10709.40 ( 22.95%)	    13899.20
    length=65541:     11714.20 ( 15.48%)	    17203.60 (-24.13%)	    10526.20 ( 24.05%)	    13859.20
    length=65547:     11691.60 ( 15.75%)	    17205.70 (-23.98%)	    10854.20 ( 21.78%)	    13877.30
    length=65542:     11715.40 ( 15.49%)	    17149.90 (-23.71%)	    10512.50 ( 24.17%)	    13862.50
    length=65546:     11718.40 ( 15.47%)	    17214.30 (-24.18%)	    10714.00 ( 22.71%)	    13862.30
    length=65543:     11740.50 ( 15.51%)	    17196.10 (-23.75%)	    10669.50 ( 23.22%)	    13895.60
    length=65545:     11736.50 ( 15.36%)	    17181.40 (-23.91%)	    10713.60 ( 22.73%)	    13865.80
   length=131072:     23477.90 ( 12.02%)	    31979.40 (-19.84%)	    16053.00 ( 39.84%)	    26685.90
   length=131088:     20288.80 ( 14.78%)	    28394.50 (-19.26%)	    15554.60 ( 34.67%)	    23808.20
   length=131073:     23065.20 ( 16.54%)	    34261.60 (-23.98%)	    20525.10 ( 25.73%)	    27635.50
   length=131087:     23368.80 ( 15.64%)	    34419.10 (-24.25%)	    22045.40 ( 20.41%)	    27700.40
   length=131074:     23329.00 ( 15.41%)	    34330.80 (-24.48%)	    20452.30 ( 25.84%)	    27579.30
   length=131086:     23289.60 ( 15.96%)	    34338.60 (-23.90%)	    21776.70 ( 21.42%)	    27713.80
   length=131075:     23393.90 ( 15.30%)	    34414.20 (-24.60%)	    20758.60 ( 24.84%)	    27619.80
   length=131085:     23497.00 ( 14.88%)	    34368.40 (-24.51%)	    21825.30 ( 20.93%)	    27603.70
   length=131076:     23355.50 ( 15.32%)	    34618.90 (-25.51%)	    20442.70 ( 25.88%)	    27581.60
   length=131084:     23302.90 ( 15.53%)	    34596.20 (-25.41%)	    21367.70 ( 22.54%)	    27586.20
   length=131077:     23294.20 ( 15.80%)	    34378.90 (-24.27%)	    20934.90 ( 24.33%)	    27664.80
   length=131083:     23252.30 ( 16.14%)	    34303.60 (-23.72%)	    21519.60 ( 22.39%)	    27726.20
   length=131078:     23541.40 ( 15.10%)	    34488.70 (-24.37%)	    20906.40 ( 24.61%)	    27729.70
   length=131082:     23233.00 ( 16.01%)	    34376.90 (-24.27%)	    21297.70 ( 23.01%)	    27662.90
   length=131079:     23640.00 ( 14.76%)	    34384.70 (-23.98%)	    21113.30 ( 23.87%)	    27733.90
   length=131081:     23294.10 ( 20.18%)	    34314.20 (-17.59%)	    22388.50 ( 23.28%)	    29182.30
   length=262144:     53968.50 (  5.74%)	    68583.00 (-19.78%)	    36214.30 ( 36.75%)	    57256.60
   length=262160:     42725.60 ( 13.62%)	    58633.60 (-18.55%)	    34563.30 ( 30.12%)	    49460.90
   length=262145:     49340.90 ( 13.12%)	    69482.90 (-22.34%)	    42630.90 ( 24.94%)	    56793.90
   length=262159:     49072.80 ( 13.06%)	    69202.80 (-22.60%)	    44677.80 ( 20.85%)	    56444.70
   length=262146:     48050.20 ( 13.60%)	    69100.20 (-24.26%)	    41265.90 ( 25.80%)	    55611.40
   length=262158:     47355.30 ( 14.80%)	    69020.10 (-24.18%)	    43630.40 ( 21.50%)	    55581.20
   length=262147:     46992.90 ( 14.87%)	    68914.80 (-24.85%)	    41279.10 ( 25.22%)	    55198.90
   length=262157:     46511.20 ( 15.87%)	    68783.80 (-24.42%)	    43559.80 ( 21.21%)	    55284.70
   length=262148:     46358.80 ( 15.55%)	    69367.50 (-26.36%)	    40682.10 ( 25.89%)	    54896.50
   length=262156:     46715.20 ( 15.58%)	    69434.10 (-25.47%)	    42471.40 ( 23.25%)	    55339.80
   length=262149:     46967.60 ( 14.86%)	    68611.30 (-24.37%)	    41739.00 ( 24.34%)	    55167.60
   length=262155:     46597.90 ( 15.46%)	    68977.30 (-25.14%)	    43168.80 ( 21.68%)	    55119.20
   length=262150:     46568.50 ( 15.73%)	    68783.00 (-24.47%)	    41573.80 ( 24.77%)	    55262.40
   length=262154:     46608.80 ( 15.63%)	    68973.70 (-24.85%)	    42562.30 ( 22.96%)	    55246.10
   length=262151:     46122.80 ( 16.61%)	    68919.90 (-24.61%)	    42162.30 ( 23.77%)	    55310.60
   length=262153:     46312.00 ( 16.31%)	    68993.40 (-24.68%)	    42357.10 ( 23.46%)	    55336.80
   length=524288:     93954.10 ( 11.66%)	   127651.00 (-21.00%)	    64050.20 ( 39.78%)	   106359.00
   length=524304:     81301.60 ( 14.63%)	   113156.00 (-18.82%)	    61764.80 ( 35.14%)	    95230.80
   length=524289:     90748.10 ( 17.78%)	   137172.00 (-25.00%)	    82059.70 ( 25.65%)	   110372.00
   length=524303:     92724.10 ( 16.14%)	   137006.00 (-24.00%)	    87656.20 ( 20.72%)	   110565.00
   length=524290:     91348.40 ( 16.74%)	   137148.00 (-25.00%)	    81992.70 ( 25.27%)	   109720.00
   length=524302:     92311.20 ( 16.16%)	   137114.00 (-25.00%)	    86483.60 ( 21.45%)	   110107.00
   length=524291:     93077.30 ( 16.05%)	   137631.00 (-25.00%)	    82565.30 ( 25.53%)	   110870.00
   length=524301:     93835.50 ( 14.70%)	   137259.00 (-25.00%)	    86335.30 ( 21.51%)	   110001.00
   length=524292:     91692.20 ( 16.78%)	   138335.00 (-26.00%)	    81453.10 ( 26.07%)	   110174.00
   length=524300:     92474.50 ( 16.05%)	   138115.00 (-26.00%)	    84655.50 ( 23.14%)	   110149.00
   length=524293:     93196.20 ( 15.43%)	   136978.00 (-25.00%)	    83221.40 ( 24.48%)	   110200.00
   length=524299:     93586.70 ( 15.47%)	   136751.00 (-24.00%)	    85860.90 ( 22.45%)	   110719.00
   length=524294:     92551.70 ( 16.38%)	   137318.00 (-25.00%)	    82913.00 ( 25.00%)	   110685.00
   length=524298:     92245.80 ( 16.20%)	   137114.00 (-25.00%)	    84564.80 ( 23.18%)	   110076.00
   length=524295:     93268.80 ( 15.34%)	   137287.00 (-25.00%)	    83766.40 ( 23.97%)	   110171.00
   length=524297:     92812.50 ( 15.50%)	   136723.00 (-25.00%)	    84459.40 ( 23.10%)	   109837.00
  length=1048576:    189055.00 ( 11.00%)	   255632.00 (-20.00%)	   127520.00 ( 40.00%)	   214272.00
  length=1048592:    163877.00 ( 14.00%)	   227786.00 (-19.00%)	   125765.00 ( 34.00%)	   192024.00
  length=1048577:    196083.00 ( 14.00%)	   276655.00 (-21.00%)	   173274.00 ( 24.00%)	   230236.00
  length=1048591:    186074.00 ( 16.00%)	   277172.00 (-25.00%)	   178324.00 ( 19.00%)	   222188.00
  length=1048578:    186906.00 ( 21.00%)	   280199.00 (-19.00%)	   175363.00 ( 26.00%)	   237219.00
  length=1048590:    208326.00 ( 11.00%)	   280487.00 (-20.00%)	   185080.00 ( 21.00%)	   235400.00
  length=1048579:    201976.00 ( 11.00%)	   282193.00 (-24.00%)	   173491.00 ( 24.00%)	   228632.00
  length=1048589:    196144.00 ( 13.00%)	   279221.00 (-24.00%)	   181174.00 ( 20.00%)	   226852.00
  length=1048580:    189535.00 ( 14.00%)	   282644.00 (-28.00%)	   166542.00 ( 24.00%)	   222000.00
  length=1048588:    188098.00 ( 15.00%)	   280967.00 (-26.00%)	   172497.00 ( 22.00%)	   223014.00
  length=1048581:    189548.00 ( 15.00%)	   279455.00 (-25.00%)	   171365.00 ( 23.00%)	   224151.00
  length=1048587:    186756.00 ( 16.00%)	   277845.00 (-25.00%)	   175841.00 ( 21.00%)	   223729.00
  length=1048582:    184490.00 ( 16.00%)	   280701.00 (-27.00%)	   168527.00 ( 24.00%)	   221829.00
  length=1048586:    187660.00 ( 15.00%)	   278802.00 (-26.00%)	   172051.00 ( 22.00%)	   222710.00
  length=1048583:    189992.00 ( 15.00%)	   279054.00 (-25.00%)	   170535.00 ( 23.00%)	   223912.00
  length=1048585:    190160.00 ( 14.00%)	   278805.00 (-26.00%)	   172724.00 ( 22.00%)	   222572.00
  length=2097152:    376478.00 ( 11.00%)	   511187.00 (-21.00%)	   254444.00 ( 40.00%)	   425699.00
  length=2097168:    323464.00 ( 14.00%)	   453921.00 (-20.00%)	   250295.00 ( 34.00%)	   379489.00
  length=2097153:    410148.00 ( 13.00%)	   551739.00 (-16.00%)	   360928.00 ( 24.00%)	   476018.00
  length=2097167:    367602.00 ( 17.00%)	   559306.00 (-26.00%)	   357094.00 ( 19.00%)	   444567.00
  length=2097154:    391584.00 ( 14.00%)	   555734.00 (-21.00%)	   345333.00 ( 24.00%)	   460365.00
  length=2097166:    368121.00 ( 17.00%)	   562643.00 (-27.00%)	   357188.00 ( 19.00%)	   446051.00
  length=2097155:    371663.00 ( 16.00%)	   557379.00 (-25.00%)	   338519.00 ( 24.00%)	   446731.00
  length=2097165:    366809.00 ( 20.00%)	   562591.00 (-23.00%)	   360409.00 ( 21.00%)	   459892.00
  length=2097156:    393411.00 ( 14.00%)	   572898.00 (-25.00%)	   344439.00 ( 25.00%)	   460712.00
  length=2097164:    389985.00 ( 15.00%)	   573819.00 (-25.00%)	   354104.00 ( 23.00%)	   461854.00
  length=2097157:    387254.00 ( 15.00%)	   564170.00 (-24.00%)	   343420.00 ( 24.00%)	   455872.00
  length=2097163:    363951.00 ( 17.00%)	   565508.00 (-28.00%)	   359229.00 ( 18.00%)	   441900.00
  length=2097158:    373182.00 ( 16.00%)	   559072.00 (-25.00%)	   339402.00 ( 24.00%)	   447429.00
  length=2097162:    376629.00 ( 17.00%)	   563218.00 (-24.00%)	   348134.00 ( 23.00%)	   455264.00
  length=2097159:    363108.00 ( 17.00%)	   560458.00 (-28.00%)	   338364.00 ( 22.00%)	   438209.00
  length=2097161:    375238.00 ( 16.00%)	   563131.00 (-27.00%)	   341900.00 ( 23.00%)	   446726.00
  length=4194304:    749314.00 ( 12.00%)	  1041320.00 (-21.34%)	   508135.00 ( 40.00%)	   858176.00
  length=4194320:    643940.00 ( 16.00%)	   918396.00 (-20.00%)	   501105.00 ( 35.00%)	   771141.00
  length=4194305:    804616.00 ( 15.00%)	  1119910.00 (-17.40%)	   713385.00 ( 25.00%)	   953948.00
  length=4194319:    774539.00 ( 17.00%)	  1134600.00 (-21.11%)	   709754.00 ( 24.00%)	   936814.00
  length=4194306:    819070.00 ( 14.00%)	  1128910.00 (-17.81%)	   719244.00 ( 24.00%)	   958285.00
  length=4194318:    723455.00 ( 18.00%)	  1135260.00 (-27.46%)	   710518.00 ( 20.00%)	   890714.00
  length=4194307:    837508.00 ( 12.00%)	  1131850.00 (-18.23%)	   722016.00 ( 24.00%)	   957321.00
  length=4194317:    750670.00 ( 17.00%)	  1135660.00 (-25.05%)	   710216.00 ( 21.00%)	   908166.00
  length=4194308:    779111.00 ( 16.00%)	  1139110.00 (-22.07%)	   684378.00 ( 26.00%)	   933169.00
  length=4194316:    814919.00 ( 12.00%)	  1168830.00 (-25.88%)	   727064.00 ( 21.00%)	   928514.00
  length=4194309:    823692.00 ( 13.00%)	  1136610.00 (-19.95%)	   704266.00 ( 25.00%)	   947549.00
  length=4194315:    764915.00 ( 14.00%)	  1142620.00 (-27.94%)	   717230.00 ( 19.00%)	   893064.00
  length=4194310:    766340.00 ( 16.00%)	  1133600.00 (-24.13%)	   671266.00 ( 26.00%)	   913245.00
  length=4194314:    758784.00 ( 16.00%)	  1138640.00 (-25.83%)	   667595.00 ( 26.00%)	   904895.00
  length=4194311:    721838.00 ( 17.00%)	  1136080.00 (-30.34%)	   671049.00 ( 23.00%)	   871641.00
  length=4194313:    739005.00 ( 17.00%)	  1135990.00 (-27.01%)	   679886.00 ( 23.00%)	   894418.00
  length=8388608:   1492280.00 ( 13.22%)	  2080460.00 (-20.98%)	  1021480.00 ( 40.60%)	  1719620.00
  length=8388624:   1257050.00 ( 18.06%)	  1855470.00 (-20.95%)	   958960.00 ( 37.49%)	  1534100.00
  length=8388609:   1619780.00 ( 14.59%)	  2239890.00 (-18.11%)	  1418620.00 ( 25.20%)	  1896460.00
  length=8388623:   1543680.00 ( 17.09%)	  2245380.00 (-20.60%)	  1412280.00 ( 24.15%)	  1861910.00
  length=8388610:   1626290.00 ( 14.44%)	  2247150.00 (-18.23%)	  1420220.00 ( 25.28%)	  1900740.00
  length=8388622:   1541570.00 ( 17.41%)	  2259510.00 (-21.06%)	  1413580.00 ( 24.27%)	  1866510.00
  length=8388611:   1621980.00 ( 14.91%)	  2251140.00 (-18.10%)	  1423660.00 ( 25.31%)	  1906140.00
  length=8388621:   1521500.00 ( 18.41%)	  2259640.00 (-21.17%)	  1410280.00 ( 24.37%)	  1864800.00
  length=8388612:   1624520.00 ( 14.77%)	  2264740.00 (-18.82%)	  1425720.00 ( 25.20%)	  1906020.00
  length=8388620:   1447160.00 ( 18.46%)	  2284810.00 (-28.74%)	  1414230.00 ( 20.31%)	  1774740.00
  length=8388613:   1618460.00 ( 15.34%)	  2244840.00 (-17.43%)	  1432300.00 ( 25.08%)	  1911660.00
  length=8388619:   1449900.00 ( 18.83%)	  2244000.00 (-25.62%)	  1427800.00 ( 20.07%)	  1786330.00
  length=8388614:   1675980.00 ( 13.36%)	  2256060.00 (-16.62%)	  1436500.00 ( 25.74%)	  1934520.00
  length=8388618:   1468570.00 ( 17.28%)	  2245000.00 (-26.45%)	  1278590.00 ( 27.98%)	  1775350.00
  length=8388615:   1547400.00 ( 16.39%)	  2263280.00 (-22.29%)	  1373370.00 ( 25.80%)	  1850820.00
  length=8388617:   1548250.00 ( 15.74%)	  2245720.00 (-22.21%)	  1414830.00 ( 23.00%)	  1837550.00
 length=16777216:   3000940.00 ( 12.88%)	  4187300.00 (-21.56%)	  2039470.00 ( 40.79%)	  3444540.00
 length=16777232:   2641300.00 ( 16.09%)	  3652870.00 (-16.05%)	  1823980.00 ( 42.05%)	  3147710.00
 length=16777217:   3192100.00 ( 16.29%)	  4455240.00 (-16.84%)	  2838200.00 ( 25.57%)	  3813140.00
 length=16777231:   3245480.00 ( 15.48%)	  4484010.00 (-16.78%)	  2848240.00 ( 25.82%)	  3839850.00
 length=16777218:   3257810.00 ( 14.56%)	  4452740.00 (-16.78%)	  2829940.00 ( 25.78%)	  3812960.00
 length=16777230:   3222920.00 ( 15.75%)	  4476790.00 (-17.03%)	  2851140.00 ( 25.47%)	  3825360.00
 length=16777219:   3210610.00 ( 15.61%)	  4477900.00 (-17.70%)	  2829920.00 ( 25.62%)	  3804480.00
 length=16777229:   3209900.00 ( 16.23%)	  4493540.00 (-17.27%)	  2853500.00 ( 25.53%)	  3831880.00
 length=16777220:   3244780.00 ( 14.60%)	  4488820.00 (-18.14%)	  2827340.00 ( 25.59%)	  3799720.00
 length=16777228:   3245340.00 ( 15.63%)	  4524140.00 (-17.61%)	  2861600.00 ( 25.61%)	  3846620.00
 length=16777221:   3278220.00 ( 13.98%)	  4482320.00 (-17.61%)	  2835000.00 ( 25.61%)	  3811080.00
 length=16777227:   3240360.00 ( 15.43%)	  4490800.00 (-17.21%)	  2856230.00 ( 25.45%)	  3831450.00
 length=16777222:   3267210.00 ( 26.25%)	  4494270.00 ( -1.45%)	  2857180.00 ( 35.51%)	  4430130.00
 length=16777226:   3808300.00 (  6.40%)	  4557000.00 (-12.00%)	  2968720.00 ( 27.03%)	  4068580.00
 length=16777223:   3620960.00 (  8.70%)	  4540540.00 (-14.49%)	  2930680.00 ( 26.10%)	  3965800.00
 length=16777225:   3488200.00 ( 10.88%)	  4509180.00 (-15.21%)	  2869670.00 ( 26.68%)	  3913840.00
 length=33554432:   6280650.00 ( 12.31%)	  8688930.00 (-21.32%)	  4289930.00 ( 40.10%)	  7162220.00
 length=33554448:   6296310.00 ( 11.40%)	  6905540.00 (  2.82%)	  4111960.00 ( 42.14%)	  7106250.00
 length=33554433:   6679210.00 ( 14.72%)	  8847130.00 (-12.96%)	  5851070.00 ( 25.29%)	  7831840.00
 length=33554447:   6665510.00 ( 14.16%)	  8862040.00 (-14.13%)	  5826230.00 ( 24.97%)	  7765140.00
 length=33554434:   6585410.00 ( 15.18%)	  8862270.00 (-14.14%)	  5790490.00 ( 25.42%)	  7764050.00
 length=33554446:   6569800.00 ( 15.66%)	  8850790.00 (-13.62%)	  5800580.00 ( 25.54%)	  7790060.00
 length=33554435:   6582510.00 ( 15.15%)	  8849150.00 (-14.06%)	  5804800.00 ( 25.18%)	  7758130.00
 length=33554445:   6587410.00 ( 15.55%)	  8821360.00 (-13.09%)	  5798640.00 ( 25.66%)	  7800540.00
 length=33554436:   6625050.00 ( 14.60%)	  8875050.00 (-14.40%)	  5790940.00 ( 25.35%)	  7757910.00
 length=33554444:   6528030.00 ( 16.13%)	  8883860.00 (-14.14%)	  5799910.00 ( 25.48%)	  7783500.00
 length=33554437:   6547760.00 ( 15.66%)	  8842220.00 (-13.90%)	  5808500.00 ( 25.18%)	  7763300.00
 length=33554443:   6597490.00 ( 15.31%)	  8825810.00 (-13.30%)	  5799360.00 ( 25.55%)	  7790020.00
 length=33554438:   6566200.00 ( 15.87%)	  8830900.00 (-13.14%)	  5792320.00 ( 25.79%)	  7805180.00
 length=33554442:   6599360.00 ( 14.73%)	  8845460.00 (-14.29%)	  5830230.00 ( 24.67%)	  7739690.00
 length=33554439:   6638320.00 ( 14.56%)	  8831880.00 (-13.67%)	  5810000.00 ( 25.22%)	  7769450.00
 length=33554441:   6622430.00 ( 15.30%)	  8856990.00 (-13.28%)	  5808460.00 ( 25.71%)	  7818650.00
      length=128:        66.27 (-36.08%)	       53.19 ( -9.23%)	       45.22 (  7.14%)	       48.70
      length=144:        48.00 ( -0.97%)	       48.57 ( -2.16%)	       44.77 (  5.82%)	       47.54
      length=129:        44.08 ( -7.72%)	       42.10 ( -2.89%)	       38.21 (  6.62%)	       40.92
      length=143:        52.58 ( -0.61%)	       45.84 ( 12.29%)	       48.18 (  7.80%)	       52.26
      length=130:        41.20 ( -0.50%)	       40.80 (  0.50%)	       38.03 (  7.23%)	       41.00
      length=142:        51.04 ( -0.58%)	       45.10 ( 11.12%)	       46.64 (  8.08%)	       50.74
      length=131:        42.94 ( -0.43%)	       41.47 (  3.00%)	       39.53 (  7.53%)	       42.75
      length=141:        51.07 ( -0.56%)	       45.31 ( 10.77%)	       46.56 (  8.32%)	       50.78
      length=132:        41.22 ( -0.47%)	       41.01 (  0.03%)	       38.03 (  7.29%)	       41.02
      length=140:        47.91 ( -0.18%)	       43.92 (  8.15%)	       43.91 (  8.18%)	       47.82
      length=133:        47.25 ( -6.16%)	       43.96 (  1.23%)	       41.28 (  7.26%)	       44.51
      length=139:        49.60 ( -0.34%)	       44.47 ( 10.03%)	       45.28 (  8.38%)	       49.43
      length=134:        44.74 ( -0.64%)	       42.16 (  5.16%)	       40.94 (  7.92%)	       44.46
      length=138:        48.15 ( -0.55%)	       43.70 (  8.76%)	       43.81 (  8.52%)	       47.89
      length=135:        46.50 ( -0.32%)	       42.78 (  7.71%)	       42.45 (  8.44%)	       46.36
      length=137:        48.22 ( -0.53%)	       43.63 (  9.05%)	       43.81 (  8.66%)	       47.97
      length=256:        80.65 (-17.14%)	       78.30 (-13.73%)	       65.95 (  4.21%)	       68.85
      length=272:        65.72 (  2.00%)	       73.41 ( -9.47%)	       64.38 (  4.00%)	       67.06
      length=257:        73.95 (  3.12%)	       78.75 ( -3.17%)	       74.63 (  2.23%)	       76.33
      length=271:        89.63 (  0.04%)	       84.94 (  5.27%)	       86.55 (  3.47%)	       89.66
      length=258:        76.43 ( -0.42%)	       78.76 ( -3.49%)	       74.70 (  1.84%)	       76.10
      length=270:        88.04 ( -0.27%)	       83.97 (  4.37%)	       85.13 (  3.05%)	       87.80
      length=259:        77.93 ( -0.39%)	       79.58 ( -2.51%)	       76.11 (  1.96%)	       77.63
      length=269:        87.63 ( -0.31%)	       83.95 (  3.90%)	       84.71 (  3.02%)	       87.36
      length=260:        77.04 ( -0.48%)	       79.08 ( -3.15%)	       75.18 (  1.94%)	       76.67
      length=268:        84.46 ( -0.22%)	       82.44 (  2.18%)	       82.09 (  2.59%)	       84.28
      length=261:        79.66 ( -0.05%)	       80.59 ( -1.21%)	       77.64 (  2.50%)	       79.62
      length=267:        85.39 ( -0.16%)	       83.01 (  2.62%)	       82.81 (  2.85%)	       85.25
      length=262:        79.78 ( -0.10%)	       80.26 ( -0.70%)	       77.89 (  2.28%)	       79.70
      length=266:        83.67 ( -0.21%)	       82.11 (  1.66%)	       81.43 (  2.48%)	       83.50
      length=263:        81.45 ( -0.18%)	       81.61 ( -0.38%)	       79.47 (  2.26%)	       81.30
      length=265:        83.84 ( -0.67%)	       82.45 (  1.00%)	       81.13 (  2.58%)	       83.28
      length=512:       152.83 (-18.98%)	      157.46 (-22.58%)	      125.56 (  2.25%)	      128.45
      length=528:       121.63 ( -0.21%)	      137.09 (-12.94%)	      118.77 (  2.15%)	      121.38
      length=513:       146.12 (  2.89%)	      158.51 ( -5.35%)	      153.03 ( -1.70%)	      150.47
      length=527:       158.00 ( -0.22%)	      160.44 ( -1.77%)	      155.19 (  1.57%)	      157.65
      length=514:       149.18 (  0.05%)	      154.75 ( -3.68%)	      146.54 (  1.82%)	      149.25
      length=526:       158.04 ( -0.12%)	      159.86 ( -1.27%)	      155.56 (  1.45%)	      157.85
      length=515:       149.95 ( -0.87%)	      155.20 ( -4.41%)	      146.59 (  1.38%)	      148.65
      length=525:       156.30 ( -0.12%)	      158.74 ( -1.68%)	      153.84 (  1.45%)	      156.11
      length=516:       151.82 (  0.81%)	      155.90 ( -1.85%)	      149.22 (  2.51%)	      153.06
      length=524:       158.80 ( -0.26%)	      158.87 ( -0.31%)	      154.73 (  2.31%)	      158.39
      length=517:       151.81 ( -1.31%)	      156.11 ( -4.18%)	      147.92 (  1.28%)	      149.84
      length=523:       154.53 ( -0.12%)	      158.44 ( -2.64%)	      152.12 (  1.45%)	      154.35
      length=518:       151.57 ( -0.02%)	      156.10 ( -3.01%)	      149.00 (  1.67%)	      151.54
      length=522:       154.78 (  0.25%)	      164.84 ( -6.23%)	      153.96 (  0.78%)	      155.17
      length=519:       152.23 ( -0.23%)	      156.51 ( -3.05%)	      149.14 (  1.80%)	      151.88
      length=521:       153.49 ( -0.46%)	      157.22 ( -2.90%)	      150.71 (  1.36%)	      152.79
     length=1024:       300.02 (-21.76%)	      311.62 (-26.47%)	      244.04 (  0.96%)	      246.41
     length=1040:       228.82 (  0.15%)	      267.20 (-16.60%)	      228.05 (  0.49%)	      229.17
     length=1025:       301.38 (  1.38%)	      311.68 ( -1.99%)	      299.25 (  2.08%)	      305.60
     length=1039:       326.57 ( -0.99%)	      316.49 (  2.13%)	      318.47 (  1.52%)	      323.37
     length=1026:       308.05 ( -0.64%)	      309.72 ( -1.18%)	      301.78 (  1.41%)	      306.10
     length=1038:       325.21 ( -0.24%)	      314.27 (  3.13%)	      316.98 (  2.30%)	      324.43
     length=1027:       309.16 ( -0.33%)	      312.08 ( -1.27%)	      302.74 (  1.76%)	      308.15
     length=1037:       323.15 ( -0.75%)	      315.46 (  1.65%)	      315.89 (  1.52%)	      320.76
     length=1028:       309.12 ( -1.41%)	      307.63 ( -0.92%)	      304.28 (  0.18%)	      304.83
     length=1036:       319.39 ( -1.76%)	      310.65 (  1.03%)	      312.03 (  0.59%)	      313.88
     length=1029:       311.70 ( -0.80%)	      312.82 ( -1.16%)	      304.84 (  1.42%)	      309.22
     length=1035:       318.63 (  4.84%)	      314.50 (  6.08%)	      312.65 (  6.63%)	      334.84
     length=1030:       323.14 ( -3.78%)	      317.45 ( -1.96%)	      306.51 (  1.56%)	      311.36
     length=1034:       320.22 ( -1.42%)	      312.46 (  1.03%)	      312.04 (  1.17%)	      315.72
     length=1031:       313.92 ( -0.74%)	      313.76 ( -0.69%)	      306.80 (  1.54%)	      311.61
     length=1033:       317.15 ( -0.97%)	      313.84 (  0.08%)	      310.31 (  1.21%)	      314.11
     length=2048:       583.91 (-22.36%)	      619.40 (-29.80%)	      475.65 (  0.33%)	      477.21
     length=2064:       441.37 (  0.41%)	      529.05 (-19.37%)	      346.21 ( 21.88%)	      443.19
     length=2049:       557.70 (  5.57%)	      598.78 ( -1.39%)	      477.83 ( 19.09%)	      590.60
     length=2063:       616.61 ( -1.14%)	      605.57 (  0.67%)	      474.43 ( 22.18%)	      609.65
     length=2050:       599.67 (  0.11%)	      600.66 ( -0.06%)	      480.02 ( 20.04%)	      600.32
     length=2062:       615.52 ( -0.38%)	      605.63 (  1.23%)	      486.73 ( 20.62%)	      613.18
     length=2051:       598.48 ( -0.97%)	      599.18 ( -1.09%)	      471.74 ( 20.41%)	      592.74
     length=2061:       614.90 ( -2.06%)	      605.01 ( -0.42%)	      475.26 ( 21.12%)	      602.49
     length=2052:       591.65 (  0.98%)	      596.87 (  0.11%)	      475.49 ( 20.42%)	      597.52
     length=2060:       601.77 ( -0.77%)	      606.16 ( -1.50%)	      482.20 ( 19.26%)	      597.19
     length=2053:       598.25 ( -0.49%)	      605.99 ( -1.79%)	      468.73 ( 21.26%)	      595.31
     length=2059:       609.89 ( -1.69%)	      606.33 ( -1.10%)	      474.83 ( 20.83%)	      599.76
     length=2054:       600.35 ( -1.35%)	      603.25 ( -1.84%)	      471.24 ( 20.45%)	      592.37
     length=2058:       602.73 ( -1.52%)	      602.87 ( -1.54%)	      472.11 ( 20.48%)	      593.70
     length=2055:       601.95 ( -0.54%)	      611.06 ( -2.06%)	      470.20 ( 21.46%)	      598.70
     length=2057:       610.13 ( -1.59%)	      613.92 ( -2.22%)	      470.61 ( 21.64%)	      600.59
     length=4096:      1115.88 (-18.50%)	     1198.22 (-27.25%)	      615.80 ( 34.60%)	      941.64
     length=4112:       867.86 ( -0.05%)	     1047.58 (-20.77%)	      626.42 ( 27.79%)	      867.45
     length=4097:      1041.49 (  7.56%)	     1176.94 ( -4.46%)	      824.96 ( 26.78%)	     1126.72
     length=4111:      1137.29 (  0.20%)	     1186.28 ( -4.10%)	      834.53 ( 26.77%)	     1139.56
     length=4098:      1122.45 ( -0.18%)	     1171.37 ( -4.55%)	      828.69 ( 26.04%)	     1120.43
     length=4110:      1125.74 (  1.13%)	     1189.22 ( -4.44%)	      831.24 ( 27.00%)	     1138.65
     length=4099:      1125.48 (  0.06%)	     1170.83 ( -3.97%)	      831.53 ( 26.16%)	     1126.14
     length=4109:      1133.93 (  6.43%)	     1267.96 ( -4.63%)	      873.15 ( 27.95%)	     1211.86
     length=4100:      1176.48 ( -2.88%)	     1231.29 ( -7.68%)	      842.10 ( 26.36%)	     1143.51
     length=4108:      1130.34 (  0.39%)	     1193.59 ( -5.18%)	      830.01 ( 26.86%)	     1134.82
     length=4101:      1120.91 (  1.04%)	     1182.03 ( -4.36%)	      829.82 ( 26.74%)	     1132.68
     length=4107:      1137.13 (  0.32%)	     1179.60 ( -3.40%)	      826.49 ( 27.55%)	     1140.81
     length=4102:      1128.99 ( -0.00%)	     1175.44 ( -4.12%)	      827.50 ( 26.70%)	     1128.96
     length=4106:      1128.90 (  0.84%)	     1177.22 ( -3.40%)	      824.91 ( 27.54%)	     1138.51
     length=4103:      1136.80 ( -0.07%)	     1180.73 ( -3.94%)	      827.38 ( 27.16%)	     1135.96
     length=4105:      1140.69 (  0.63%)	     1183.87 ( -3.14%)	      829.11 ( 27.77%)	     1147.88
     length=8192:      2135.74 (-12.41%)	     2368.70 (-24.67%)	     1185.59 ( 37.60%)	     1899.97
     length=8208:      1744.90 (  0.11%)	     2122.77 (-21.52%)	     1204.95 ( 31.02%)	     1746.84
     length=8193:      2011.12 (  6.94%)	     2321.43 ( -7.42%)	     1571.89 ( 27.27%)	     2161.16
     length=8207:      2144.63 (  2.90%)	     2337.80 ( -5.84%)	     1593.75 ( 27.84%)	     2208.74
     length=8194:      2117.12 (  2.14%)	     2321.88 ( -7.32%)	     1571.67 ( 27.35%)	     2163.44
     length=8206:      2125.81 (  2.98%)	     2319.91 ( -5.87%)	     1609.70 ( 26.54%)	     2191.20
     length=8195:      2120.04 (  2.80%)	     2319.93 ( -6.36%)	     1567.57 ( 28.13%)	     2181.21
     length=8205:      2134.25 (  2.94%)	     2319.78 ( -5.50%)	     1583.60 ( 27.98%)	     2198.89
     length=8196:      2104.65 (  2.27%)	     2312.04 ( -7.36%)	     1576.79 ( 26.78%)	     2153.45
     length=8204:      2099.97 (  3.49%)	     2312.66 ( -6.28%)	     1602.45 ( 26.36%)	     2175.94
     length=8197:      2105.41 (  3.45%)	     2312.77 ( -6.06%)	     1568.83 ( 28.05%)	     2180.55
     length=8203:      2133.16 (  3.40%)	     2318.83 ( -5.01%)	     1589.13 ( 28.04%)	     2208.24
     length=8198:      2123.02 (  2.21%)	     2313.01 ( -6.54%)	     1588.55 ( 26.83%)	     2171.10
     length=8202:      2122.60 (  2.45%)	     2311.70 ( -6.25%)	     1594.16 ( 26.73%)	     2175.82
     length=8199:      2125.08 (  2.89%)	     2311.98 ( -5.65%)	     1574.55 ( 28.05%)	     2188.34
     length=8201:      2128.49 (  3.06%)	     2307.06 ( -5.07%)	     1582.46 ( 27.93%)	     2195.65
    length=16384:      4036.38 ( -6.67%)	     4624.36 (-22.21%)	     2300.30 ( 39.21%)	     3783.95
    length=16400:      3477.43 (  0.84%)	     4240.38 (-20.91%)	     2352.72 ( 32.91%)	     3507.04
    length=16385:      3956.05 (  6.20%)	     4627.32 ( -9.72%)	     3060.36 ( 27.44%)	     4217.55
    length=16399:      4091.51 (  4.04%)	     4607.30 ( -8.06%)	     3138.83 ( 26.38%)	     4263.81
    length=16386:      4125.76 (  1.98%)	     4584.94 ( -8.93%)	     3043.21 ( 27.70%)	     4208.89
    length=16398:      4077.08 ( 13.93%)	     4829.99 ( -1.97%)	     3328.65 ( 29.73%)	     4736.76
    length=16387:      4635.86 ( -3.78%)	     4969.70 (-11.25%)	     3142.77 ( 29.65%)	     4467.08
    length=16397:      4344.94 (  0.13%)	     4731.51 ( -8.75%)	     3158.14 ( 27.41%)	     4350.68
    length=16388:      4201.90 (  1.67%)	     4684.62 ( -9.63%)	     3068.76 ( 28.19%)	     4273.19
    length=16396:      4096.45 (  3.73%)	     4634.13 ( -8.91%)	     3104.00 ( 27.05%)	     4255.19
    length=16389:      4093.97 (  3.39%)	     4616.48 ( -8.94%)	     3083.18 ( 27.24%)	     4237.55
    length=16395:      4101.94 (  3.90%)	     4601.39 ( -7.80%)	     3119.61 ( 26.92%)	     4268.49
    length=16390:      4103.63 (  2.94%)	     4595.93 ( -8.71%)	     3071.57 ( 27.35%)	     4227.74
    length=16394:      4080.00 (  4.00%)	     4597.61 ( -7.87%)	     3083.94 ( 27.64%)	     4262.00
    length=16391:      4091.93 (  3.14%)	     4595.08 ( -8.77%)	     3097.15 ( 26.69%)	     4224.61
    length=16393:      4107.73 (  3.10%)	     4605.84 ( -8.66%)	     3104.48 ( 26.76%)	     4238.94
    length=32768:      6650.02 ( 10.65%)	     9174.17 (-23.27%)	     4526.37 ( 39.18%)	     7442.25
    length=32784:      5435.11 ( 20.71%)	     8372.00 (-22.13%)	     4493.79 ( 34.45%)	     6855.03
    length=32769:      6501.52 ( 21.50%)	     9147.42 (-10.45%)	     6006.67 ( 27.47%)	     8281.81
    length=32783:      6575.55 ( 21.63%)	     9187.63 ( -9.51%)	     6210.61 ( 25.98%)	     8390.03
    length=32770:      6587.31 ( 20.71%)	     9140.36 (-10.02%)	     6027.14 ( 27.45%)	     8307.74
    length=32782:      6555.64 ( 21.67%)	     9160.63 ( -9.46%)	     6172.61 ( 26.25%)	     8369.14
    length=32771:      6586.04 ( 20.83%)	     9158.43 (-10.09%)	     6047.49 ( 27.30%)	     8318.96
    length=32781:      6579.04 ( 21.29%)	     9154.36 ( -9.52%)	     6173.93 ( 26.14%)	     8358.52
    length=32772:      6558.14 ( 20.96%)	     9184.54 (-10.69%)	     5994.79 ( 27.75%)	     8297.18
    length=32780:      6549.35 ( 21.41%)	     9175.79 (-10.11%)	     6115.82 ( 26.61%)	     8333.21
    length=32773:      6562.04 ( 21.29%)	     9150.94 ( -9.77%)	     6056.51 ( 27.35%)	     8336.61
    length=32779:      6598.91 ( 21.22%)	     9163.61 ( -9.39%)	     6149.70 ( 26.59%)	     8376.67
    length=32774:      6606.88 ( 20.94%)	     9154.47 ( -9.55%)	     6061.78 ( 27.46%)	     8356.63
    length=32778:      6587.32 ( 21.18%)	     9150.47 ( -9.50%)	     6137.37 ( 26.56%)	     8356.96
    length=32775:      6599.20 ( 21.00%)	     9164.48 ( -9.71%)	     6078.86 ( 27.23%)	     8353.57
    length=32777:      6573.49 ( 22.03%)	     9148.41 ( -8.51%)	     6126.53 ( 27.33%)	     8431.05
    length=65536:     13116.30 ( 14.52%)	    18690.50 (-21.81%)	     9236.41 ( 39.80%)	    15343.80
    length=65552:     11055.00 ( 20.98%)	    17103.20 (-22.25%)	     9201.68 ( 34.23%)	    13990.40
    length=65537:     13182.90 ( 20.79%)	    18410.00 (-10.62%)	    11968.50 ( 28.08%)	    16642.30
    length=65551:     13059.50 ( 21.81%)	    18433.80 (-10.37%)	    12358.20 ( 26.01%)	    16701.40
    length=65538:     12993.90 ( 21.56%)	    18293.50 (-10.44%)	    11908.50 ( 28.11%)	    16564.90
    length=65550:     12908.00 ( 32.41%)	    18395.00 (  3.68%)	    13036.60 ( 31.74%)	    19097.60
    length=65539:     14774.70 ( 16.78%)	    20012.30 (-12.72%)	    12330.00 ( 30.55%)	    17753.60
    length=65549:     14078.20 ( 17.44%)	    18994.00 (-12.00%)	    12412.70 ( 27.21%)	    17053.00
    length=65540:     13352.40 ( 19.41%)	    18538.60 (-11.89%)	    11991.00 ( 27.63%)	    16568.50
    length=65548:     13008.80 ( 21.89%)	    18425.60 (-10.64%)	    12222.60 ( 26.61%)	    16653.70
    length=65541:     12942.00 ( 21.92%)	    18303.20 (-10.42%)	    12096.60 ( 27.02%)	    16576.30
    length=65547:     12975.40 ( 22.12%)	    18323.30 ( -9.98%)	    12240.80 ( 26.53%)	    16661.10
    length=65542:     12962.50 ( 21.66%)	    18314.00 (-10.69%)	    12042.10 ( 27.22%)	    16545.50
    length=65546:     12885.00 ( 22.56%)	    18307.20 (-10.03%)	    12195.20 ( 26.71%)	    16638.60
    length=65543:     12948.30 ( 21.90%)	    18275.10 (-10.23%)	    12100.80 ( 27.01%)	    16578.60
    length=65545:     12876.50 ( 22.42%)	    18286.00 (-10.17%)	    12181.10 ( 26.61%)	    16597.80
   length=131072:     25610.70 ( 14.01%)	    36773.20 (-23.47%)	    17885.90 ( 39.94%)	    29781.90
   length=131088:     21460.30 ( 21.46%)	    33569.90 (-22.86%)	    17790.40 ( 34.89%)	    27322.80
   length=131073:     25507.30 ( 22.69%)	    36413.90 (-10.37%)	    23704.50 ( 28.15%)	    32993.30
   length=131087:     25646.20 ( 22.42%)	    36600.20 (-10.72%)	    24618.50 ( 25.53%)	    33057.60
   length=131074:     25843.40 ( 21.90%)	    36537.60 (-10.42%)	    23805.20 ( 28.06%)	    33090.70
   length=131086:     25673.70 ( 22.38%)	    36454.90 (-10.22%)	    24512.80 ( 25.89%)	    33074.60
   length=131075:     25772.00 ( 21.65%)	    36520.30 (-11.02%)	    23925.60 ( 27.26%)	    32893.90
   length=131085:     25598.00 ( 22.00%)	    36531.20 (-10.51%)	    24549.60 ( 25.74%)	    33057.00
   length=131076:     25581.20 ( 22.32%)	    36706.80 (-11.46%)	    23776.20 ( 27.81%)	    32933.50
   length=131084:     25613.50 ( 22.53%)	    36593.60 (-10.68%)	    24274.80 ( 26.58%)	    33063.60
   length=131077:     25547.00 ( 22.54%)	    36487.40 (-10.63%)	    23998.30 ( 27.24%)	    32981.10
   length=131083:     25781.10 ( 21.95%)	    36550.90 (-10.66%)	    24429.60 ( 26.04%)	    33029.50
   length=131078:     25622.70 ( 22.40%)	    36646.80 (-10.99%)	    23974.20 ( 27.39%)	    33017.70
   length=131082:     25575.00 ( 22.55%)	    36434.30 (-10.34%)	    24382.40 ( 26.16%)	    33020.90
   length=131079:     25678.40 ( 22.17%)	    36579.40 (-10.86%)	    24143.90 ( 26.82%)	    32994.60
   length=131081:     25655.40 ( 22.32%)	    36579.00 (-10.75%)	    24231.90 ( 26.63%)	    33027.10
   length=262144:     51207.30 ( 13.98%)	    72938.90 (-22.52%)	    35915.20 ( 39.67%)	    59531.20
   length=262160:     43210.80 ( 21.95%)	    67374.80 (-21.70%)	    36468.00 ( 34.13%)	    55360.10
   length=262145:     51309.20 ( 21.80%)	    72876.70 (-11.07%)	    47713.80 ( 27.28%)	    65613.20
   length=262159:     51120.50 ( 22.17%)	    73412.20 (-11.77%)	    49354.00 ( 24.86%)	    65680.90
   length=262146:     51379.50 ( 21.63%)	    72626.60 (-10.78%)	    47646.20 ( 27.32%)	    65558.40
   length=262158:     50847.00 ( 22.56%)	    73104.20 (-11.33%)	    48932.70 ( 25.48%)	    65661.70
   length=262147:     50823.80 ( 31.35%)	    72398.00 (  2.21%)	    49522.50 ( 33.11%)	    74035.60
   length=262157:     58526.20 ( 17.16%)	    79162.70 (-12.05%)	    50510.90 ( 28.51%)	    70651.20
   length=262148:     55606.30 ( 17.33%)	    75822.00 (-12.73%)	    47852.00 ( 28.86%)	    67261.70
   length=262156:     52492.70 ( 20.58%)	    73700.10 (-11.51%)	    48757.30 ( 26.23%)	    66091.70
   length=262149:     51340.90 ( 21.69%)	    73301.80 (-11.81%)	    47835.80 ( 27.03%)	    65559.40
   length=262155:     50855.50 ( 22.46%)	    72623.10 (-10.72%)	    48875.10 ( 25.48%)	    65589.10
   length=262150:     50648.90 ( 22.63%)	    73185.50 (-11.79%)	    47862.00 ( 26.89%)	    65464.50
   length=262154:     50788.70 ( 22.35%)	    72727.20 (-11.18%)	    48716.30 ( 25.52%)	    65411.20
   length=262151:     50842.50 ( 22.94%)	    72702.90 (-10.19%)	    48134.10 ( 27.05%)	    65980.40
   length=262153:     51335.80 ( 22.71%)	    73220.00 (-10.23%)	    48999.40 ( 26.23%)	    66423.70
   length=524288:    103239.00 ( 14.00%)	   147724.00 (-22.00%)	    73463.90 ( 39.41%)	   121244.00
   length=524304:     86967.20 ( 21.43%)	   135091.00 (-23.00%)	    73281.90 ( 33.80%)	   110690.00
   length=524289:    100735.00 ( 22.00%)	   145991.00 (-13.00%)	    94982.00 ( 27.00%)	   130286.00
   length=524303:    101670.00 ( 22.00%)	   145160.00 (-11.00%)	    98092.30 ( 25.10%)	   130972.00
   length=524290:    100919.00 ( 22.00%)	   145627.00 (-13.00%)	    95608.30 ( 26.45%)	   129993.00
   length=524302:    101060.00 ( 24.00%)	   144909.00 ( -8.00%)	    98590.60 ( 26.58%)	   134279.00
   length=524291:    104574.00 ( 20.00%)	   147491.00 (-13.00%)	    96004.20 ( 26.94%)	   131402.00
   length=524301:    102936.00 ( 21.00%)	   145594.00 (-12.00%)	    97421.70 ( 25.48%)	   130728.00
   length=524292:    102010.00 ( 22.00%)	   146099.00 (-12.00%)	    95049.50 ( 27.48%)	   131068.00
   length=524300:    101196.00 ( 22.00%)	   145732.00 (-12.00%)	    96657.50 ( 26.02%)	   130654.00
   length=524293:    101524.00 ( 22.00%)	   144887.00 (-12.00%)	    95421.70 ( 26.73%)	   130231.00
   length=524299:    101655.00 ( 22.00%)	   145021.00 (-11.00%)	    97079.50 ( 25.74%)	   130729.00
   length=524294:    101612.00 ( 22.00%)	   145707.00 (-12.00%)	    95804.10 ( 26.84%)	   130955.00
   length=524298:    101258.00 ( 22.00%)	   145163.00 (-12.00%)	    96505.30 ( 25.90%)	   130244.00
   length=524295:    101785.00 ( 21.00%)	   144656.00 (-11.00%)	    96120.90 ( 26.33%)	   130468.00
   length=524297:    101165.00 ( 22.00%)	   145102.00 (-12.00%)	    96348.90 ( 26.26%)	   130662.00
  length=1048576:    202572.00 ( 16.00%)	   290419.00 (-20.00%)	   148252.00 ( 38.00%)	   243006.00
  length=1048592:    171822.00 ( 22.00%)	   266806.00 (-20.00%)	   148570.00 ( 33.00%)	   223142.00
  length=1048577:    212137.00 ( 21.00%)	   300943.00 (-12.00%)	   194730.00 ( 27.00%)	   269788.00
  length=1048591:    207704.00 ( 21.00%)	   297847.00 (-13.00%)	   200116.00 ( 24.00%)	   264511.00
  length=1048578:    202312.00 ( 22.00%)	   303038.00 (-17.00%)	   188977.00 ( 27.00%)	   259438.00
  length=1048590:    202955.00 ( 21.00%)	   295984.00 (-15.00%)	   197438.00 ( 23.00%)	   259635.00
  length=1048579:    207280.00 ( 22.00%)	   350937.00 (-32.00%)	   193093.00 ( 27.00%)	   267365.00
  length=1048589:    202854.00 ( 32.00%)	   296888.00 (  0.00%)	   204539.00 ( 31.00%)	   299166.00
  length=1048580:    237047.00 ( 16.00%)	   337698.00 (-20.00%)	   197028.00 ( 30.00%)	   282857.00
  length=1048588:    225748.00 ( 16.00%)	   313068.00 (-16.00%)	   198400.00 ( 26.00%)	   269910.00
  length=1048581:    214414.00 ( 19.00%)	   310873.00 (-17.00%)	   196363.00 ( 26.00%)	   267442.00
  length=1048587:    211633.00 ( 21.00%)	   301078.00 (-13.00%)	   199356.00 ( 25.00%)	   268166.00
  length=1048582:    205749.00 ( 20.00%)	   303532.00 (-18.00%)	   192994.00 ( 25.00%)	   259009.00
  length=1048586:    202573.00 ( 22.00%)	   297378.00 (-15.00%)	   194532.00 ( 25.00%)	   259912.00
  length=1048583:    205648.00 ( 21.00%)	   300663.00 (-15.00%)	   194682.00 ( 26.00%)	   263389.00
  length=1048585:    206218.00 ( 22.00%)	   298019.00 (-13.00%)	   196484.00 ( 25.00%)	   264461.00
  length=2097152:    407366.00 ( 17.00%)	   585856.00 (-19.00%)	   312590.00 ( 36.00%)	   493615.00
  length=2097168:    343420.00 ( 23.00%)	   541487.00 (-21.00%)	   308636.00 ( 31.00%)	   448923.00
  length=2097153:    449567.00 ( 20.00%)	   600551.00 ( -7.00%)	   407804.00 ( 27.00%)	   565234.00
  length=2097167:    416661.00 ( 22.00%)	   601751.00 (-13.00%)	   405342.00 ( 24.00%)	   535177.00
  length=2097154:    423269.00 ( 21.00%)	   601716.00 (-13.00%)	   394774.00 ( 26.00%)	   536904.00
  length=2097166:    412193.00 ( 22.00%)	   604206.00 (-15.00%)	   403032.00 ( 23.00%)	   529746.00
  length=2097155:    433871.00 ( 28.00%)	   658755.00 ( -9.00%)	   415241.00 ( 31.00%)	   604566.00
  length=2097165:    477727.00 ( 13.00%)	   645184.00 (-17.00%)	   415729.00 ( 25.00%)	   555378.00
  length=2097156:    424596.00 ( 18.00%)	   622339.00 (-19.00%)	   387786.00 ( 25.00%)	   523053.00
  length=2097164:    413266.00 ( 20.00%)	   613514.00 (-18.00%)	   396072.00 ( 24.00%)	   521488.00
  length=2097157:    428079.00 ( 20.00%)	   605611.00 (-13.00%)	   395794.00 ( 26.00%)	   540399.00
  length=2097163:    414076.00 ( 21.00%)	   606449.00 (-15.00%)	   406751.00 ( 23.00%)	   530783.00
  length=2097158:    422626.00 ( 21.00%)	   606239.00 (-13.00%)	   394724.00 ( 26.00%)	   539184.00
  length=2097162:    414003.00 ( 21.00%)	   606936.00 (-16.00%)	   397854.00 ( 24.00%)	   527535.00
  length=2097159:    421371.00 ( 21.00%)	   604340.00 (-13.00%)	   403091.00 ( 25.00%)	   537462.00
  length=2097161:    419372.00 ( 21.00%)	   606651.00 (-15.00%)	   395754.00 ( 25.00%)	   531477.00
  length=4194304:    816732.00 ( 17.00%)	  1151150.00 (-15.75%)	   666119.00 ( 33.00%)	   994486.00
  length=4194320:    685094.00 ( 23.00%)	  1094500.00 (-22.70%)	   653414.00 ( 26.00%)	   891994.00
  length=4194305:    890606.00 ( 19.25%)	  1212020.00 ( -9.90%)	   845619.00 ( 23.32%)	  1102860.00
  length=4194319:    847158.00 ( 20.79%)	  1214160.00 (-13.53%)	   844476.00 ( 21.04%)	  1069480.00
  length=4194306:    894996.00 ( 18.83%)	  1206220.00 ( -9.40%)	   847558.00 ( 23.13%)	  1102590.00
  length=4194318:    845055.00 ( 21.12%)	  1208550.00 (-12.81%)	   842018.00 ( 21.41%)	  1071360.00
  length=4194307:    887760.00 ( 19.74%)	  1202890.00 ( -8.74%)	   849276.00 ( 23.22%)	  1106170.00
  length=4194317:    859988.00 ( 29.33%)	  1203050.00 (  1.14%)	   845961.00 ( 30.49%)	  1216950.00
  length=4194308:   1011340.00 ( 10.80%)	  1338450.00 (-18.06%)	   846686.00 ( 25.32%)	  1133750.00
  length=4194316:    920300.00 ( 14.63%)	  1266440.00 (-17.48%)	   839655.00 ( 22.11%)	  1078020.00
  length=4194309:    871112.00 ( 19.16%)	  1215470.00 (-12.80%)	   822021.00 ( 23.71%)	  1077550.00
  length=4194315:    852191.00 ( 19.54%)	  1209040.00 (-14.15%)	   843084.00 ( 20.40%)	  1059180.00
  length=4194310:    858644.00 ( 20.53%)	  1201290.00 (-11.19%)	   838059.00 ( 22.43%)	  1080410.00
  length=4194314:    849162.00 ( 20.39%)	  1203370.00 (-12.82%)	   827862.00 ( 22.38%)	  1066620.00
  length=4194311:    826529.00 ( 20.72%)	  1204600.00 (-15.54%)	   816926.00 ( 21.65%)	  1042600.00
  length=4194313:    843536.00 ( 18.93%)	  1205540.00 (-15.87%)	   824721.00 ( 20.73%)	  1040450.00
  length=8388608:   1712130.00 ( 17.61%)	  2348700.00 (-13.02%)	  1504370.00 ( 27.61%)	  2078120.00
  length=8388624:   1463720.00 ( 18.65%)	  2182060.00 (-21.27%)	  1430860.00 ( 20.48%)	  1799340.00
  length=8388609:   1835900.00 ( 17.78%)	  2465890.00 (-10.44%)	  1860840.00 ( 16.66%)	  2232780.00
  length=8388623:   1790540.00 ( 18.92%)	  2481250.00 (-12.36%)	  1865400.00 ( 15.53%)	  2208250.00
  length=8388610:   1834980.00 ( 17.99%)	  2465940.00 (-10.21%)	  1857780.00 ( 16.97%)	  2237510.00
  length=8388622:   1796030.00 ( 18.75%)	  2482060.00 (-12.29%)	  1867180.00 ( 15.53%)	  2210460.00
  length=8388611:   1840330.00 ( 17.87%)	  2467840.00 (-10.14%)	  1865340.00 ( 16.75%)	  2240710.00
  length=8388621:   1779400.00 ( 19.70%)	  2472360.00 (-11.58%)	  1864390.00 ( 15.86%)	  2215810.00
  length=8388612:   1869430.00 ( 18.11%)	  2477290.00 ( -8.51%)	  1860690.00 ( 18.49%)	  2282910.00
  length=8388620:   1806170.00 ( 20.04%)	  2477720.00 ( -9.68%)	  1862080.00 ( 17.57%)	  2258950.00
  length=8388613:   1872760.00 ( 18.08%)	  2471000.00 ( -8.08%)	  1867200.00 ( 18.33%)	  2286180.00
  length=8388619:   1813000.00 ( 19.72%)	  2453430.00 ( -8.64%)	  1863090.00 ( 17.50%)	  2258410.00
  length=8388614:   1869810.00 ( 18.29%)	  2462170.00 ( -7.59%)	  1866980.00 ( 18.41%)	  2288370.00
  length=8388618:   1805660.00 ( 19.45%)	  2453160.00 ( -9.44%)	  1858540.00 ( 17.09%)	  2241530.00
  length=8388615:   1760060.00 ( 19.24%)	  2464380.00 (-13.08%)	  1816390.00 ( 16.65%)	  2179260.00
  length=8388617:   1755540.00 ( 19.61%)	  2465170.00 (-12.88%)	  1856190.00 ( 15.00%)	  2183840.00
 length=16777216:   3705450.00 ( 13.62%)	  4695780.00 ( -9.47%)	  3610200.00 ( 15.84%)	  4289500.00
 length=16777232:   3770280.00 ( 11.07%)	  4073680.00 (  3.92%)	  3507300.00 ( 17.28%)	  4239830.00
 length=16777217:   3903360.00 ( 12.04%)	  4814660.00 ( -8.50%)	  4276020.00 (  3.64%)	  4437650.00
 length=16777231:   4113460.00 (  9.59%)	  4800360.00 ( -5.51%)	  4262900.00 (  6.30%)	  4549540.00
 length=16777218:   3912370.00 ( 11.22%)	  4791520.00 ( -8.73%)	  4260870.00 (  3.31%)	  4406780.00
 length=16777230:   4074500.00 ( 10.27%)	  4787480.00 ( -5.43%)	  4254260.00 (  6.31%)	  4540840.00
 length=16777219:   4001410.00 ( 13.90%)	  5383920.00 (-15.84%)	  4547010.00 (  2.16%)	  4647560.00
 length=16777229:   4382360.00 (  4.22%)	  5002400.00 ( -9.33%)	  4305790.00 (  5.90%)	  4575540.00
 length=16777220:   3960940.00 ( 10.21%)	  4834930.00 ( -9.60%)	  4281000.00 (  2.96%)	  4411560.00
 length=16777228:   4103180.00 (  9.85%)	  4804750.00 ( -5.57%)	  4260000.00 (  6.40%)	  4551380.00
 length=16777221:   3914360.00 ( 11.05%)	  4795150.00 ( -8.96%)	  4267440.00 (  3.03%)	  4400770.00
 length=16777227:   4080360.00 ( 10.03%)	  4787980.00 ( -5.57%)	  4256320.00 (  6.15%)	  4535230.00
 length=16777222:   4076880.00 ( 10.71%)	  4786940.00 ( -4.84%)	  4258830.00 (  6.73%)	  4566050.00
 length=16777226:   4114630.00 ( 10.23%)	  4857360.00 ( -5.97%)	  4288970.00 (  6.43%)	  4583620.00
 length=16777223:   4117120.00 (  9.57%)	  4824220.00 ( -5.96%)	  4266900.00 (  6.29%)	  4553060.00
 length=16777225:   4106500.00 (  9.77%)	  4809070.00 ( -5.66%)	  4263520.00 (  6.32%)	  4551280.00
 length=33554432:   5555570.00 ( 35.88%)	 10902300.00 (-25.83%)	  4425760.00 ( 48.92%)	  8664050.00
 length=33554448:   6200440.00 ( 29.46%)	 11033900.00 (-25.52%)	  4440250.00 ( 49.49%)	  8790260.00
 length=33554433:   6818220.00 ( 29.67%)	 11103900.00 (-14.54%)	  4705860.00 ( 51.46%)	  9694040.00
 length=33554447:   6858530.00 ( 29.19%)	 11155600.00 (-15.17%)	  4707070.00 ( 51.40%)	  9685830.00
 length=33554434:   6846210.00 ( 29.03%)	 11144400.00 (-15.52%)	  4712100.00 ( 51.15%)	  9647000.00
 length=33554446:   6866510.00 ( 29.12%)	 11153000.00 (-15.14%)	  4711300.00 ( 51.36%)	  9686850.00
 length=33554435:   6849040.00 ( 29.03%)	 11157400.00 (-15.61%)	  4705190.00 ( 51.24%)	  9650550.00
 length=33554445:   6859370.00 ( 29.04%)	 11164500.00 (-15.49%)	  4710210.00 ( 51.27%)	  9666720.00
 length=33554436:   6849270.00 ( 29.30%)	 11174800.00 (-15.35%)	  4711050.00 ( 51.37%)	  9687610.00
 length=33554444:   6848890.00 ( 29.37%)	 11143400.00 (-14.92%)	  4711510.00 ( 51.41%)	  9696840.00
 length=33554437:   6849790.00 ( 29.27%)	 11161800.00 (-15.25%)	  4711400.00 ( 51.35%)	  9684640.00
 length=33554443:   6842850.00 ( 29.40%)	 11146400.00 (-15.00%)	  4706950.00 ( 51.44%)	  9692370.00
 length=33554438:   6860830.00 ( 29.06%)	 11159300.00 (-15.38%)	  4709130.00 ( 51.31%)	  9671760.00
 length=33554442:   6867660.00 ( 28.99%)	 11158900.00 (-15.39%)	  4710000.00 ( 51.30%)	  9670920.00
 length=33554439:   6857250.00 ( 29.34%)	 11171600.00 (-15.11%)	  4725570.00 ( 51.31%)	  9705220.00
 length=33554441:   6848530.00 ( 29.23%)	 11153000.00 (-15.25%)	  4714980.00 ( 51.28%)	  9677440.00
---
 sysdeps/aarch64/multiarch/Makefile          |   3 +-
 sysdeps/aarch64/multiarch/ifunc-impl-list.c |   4 +-
 sysdeps/aarch64/multiarch/memcpy.c          |   5 +-
 sysdeps/aarch64/multiarch/memcpy_kunpeng.S  | 579 ++++++++++++++++++++++++++++
 4 files changed, 588 insertions(+), 3 deletions(-)
 create mode 100644 sysdeps/aarch64/multiarch/memcpy_kunpeng.S

diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile
index 4150b89a90..aa1f612e9e 100644
--- a/sysdeps/aarch64/multiarch/Makefile
+++ b/sysdeps/aarch64/multiarch/Makefile
@@ -1,6 +1,7 @@ 
 ifeq ($(subdir),string)
 sysdep_routines += memcpy_generic memcpy_thunderx memcpy_thunderx2 \
-		   memcpy_falkor memmove_falkor \
+		   memcpy_falkor memcpy_kunpeng \
+		   memmove_falkor memmove_kunpeng \
 		   memset_generic memset_falkor memset_emag \
 		   memchr_generic memchr_nosimd \
 		   strlen_generic strlen_asimd
diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c
index be13b916e5..dbbe19096a 100644
--- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c
@@ -25,7 +25,7 @@ 
 #include <stdio.h>
 
 /* Maximum number of IFUNC implementations.  */
-#define MAX_IFUNC	4
+#define MAX_IFUNC	5
 
 size_t
 __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
@@ -42,11 +42,13 @@  __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx)
 	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx2)
 	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_falkor)
+	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_kunpeng)
 	      IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_generic))
   IFUNC_IMPL (i, name, memmove,
 	      IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx)
 	      IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx2)
 	      IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_falkor)
+	      IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_kunpeng)
 	      IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_generic))
   IFUNC_IMPL (i, name, memset,
 	      /* Enable this on non-falkor processors too so that other cores
diff --git a/sysdeps/aarch64/multiarch/memcpy.c b/sysdeps/aarch64/multiarch/memcpy.c
index 13796f987f..b5929e2718 100644
--- a/sysdeps/aarch64/multiarch/memcpy.c
+++ b/sysdeps/aarch64/multiarch/memcpy.c
@@ -32,9 +32,12 @@  extern __typeof (__redirect_memcpy) __memcpy_generic attribute_hidden;
 extern __typeof (__redirect_memcpy) __memcpy_thunderx attribute_hidden;
 extern __typeof (__redirect_memcpy) __memcpy_thunderx2 attribute_hidden;
 extern __typeof (__redirect_memcpy) __memcpy_falkor attribute_hidden;
+extern __typeof (__redirect_memcpy) __memcpy_kunpeng attribute_hidden;
 
 libc_ifunc (__libc_memcpy,
-            (IS_THUNDERX (midr)
+            IS_KUNPENG(midr)
+	    ?__memcpy_kunpeng
+	    : (IS_THUNDERX (midr)
 	     ? __memcpy_thunderx
 	     : (IS_FALKOR (midr) || IS_PHECDA (midr) || IS_ARES (midr)
 		? __memcpy_falkor
diff --git a/sysdeps/aarch64/multiarch/memcpy_kunpeng.S b/sysdeps/aarch64/multiarch/memcpy_kunpeng.S
new file mode 100644
index 0000000000..1d326d3805
--- /dev/null
+++ b/sysdeps/aarch64/multiarch/memcpy_kunpeng.S
@@ -0,0 +1,579 @@ 
+/* Optimized memcpy and memmove for Huawei Kunpeng processor.
+   Copyright (C) 2018-2019 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-a, AArch64, unaligned accesses.
+ *
+ */
+
+#define dstin	x0
+#define src	x1
+#define count	x2
+#define dst	x3
+#define srcend	x4
+#define dstend	x5
+#define tmp2	x6
+#define tmp3	x7
+#define tmp3w   w7
+#define A_l	x6
+#define A_lw	w6
+#define A_h	x7
+#define A_hw	w7
+#define B_l	x8
+#define B_lw	w8
+#define B_h	x9
+#define C_l	x10
+#define C_h	x11
+#define D_l	x12
+#define D_h	x13
+#define E_l	src
+#define E_h	count
+#define F_l	srcend
+#define F_h	dst
+#define G_l	count
+#define G_h	dst
+#define tmp1	x14
+
+#define A_q	q0
+#define B_q	q1
+#define C_q	q2
+#define D_q	q3
+#define E_q	q4
+#define F_q	q5
+#define G_q	q6
+#define H_q	q7
+#define I_q	q16
+#define J_q	q17
+
+#define A_v	v0
+#define B_v	v1
+#define C_v	v2
+#define D_v	v3
+#define E_v	v4
+#define F_v	v5
+#define G_v	v6
+#define H_v	v7
+#define I_v	v16
+#define J_v	v17
+
+#ifndef MEMMOVE
+# define MEMMOVE memmove
+#endif
+#ifndef MEMCPY
+# define MEMCPY memcpy
+#endif
+
+#if IS_IN (libc)
+
+#undef MEMCPY
+#define MEMCPY __memcpy_kunpeng
+#undef MEMMOVE
+#define MEMMOVE __memmove_kunpeng
+
+
+/* Overlapping large forward memmoves use a loop that copies backwards.
+   Otherwise memcpy is used. Small moves branch to memcopy16 directly.
+   The longer memcpy cases fall through to the memcpy head.
+*/
+
+ENTRY_ALIGN (MEMMOVE, 6)
+
+	DELOUSE (0)
+	DELOUSE (1)
+	DELOUSE (2)
+
+	sub	tmp1, dstin, src 
+	cmp	count, 512 
+	ccmp	tmp1, count, 2, hi 
+	b.lo	L(move_long)
+	cmp	count, 96 
+	ccmp	tmp1, count, 2, hi 
+	b.lo	L(move_middle)		
+
+END (MEMMOVE)
+libc_hidden_builtin_def (MEMMOVE)
+
+
+/* Copies are split into 4 main cases: small copies of up to 16 bytes,
+   medium copies of 17..96 bytes which are fully unrolled. Long copies
+   of 97..2048 align dst address without prefetching. Large copies
+   of more than 2048 bytes align the destination and use load-and-merge
+   approach in the case src and dst addresses are unaligned not evenly,
+   so that, actual loads and stores are always aligned.
+   Large copies use the loops processing 64 bytes per iteration for
+   unaligned case and 128 bytes per iteration for aligned ones.
+*/
+
+#define MEMCPY_PREFETCH_LDR 640
+
+	.p2align 4
+ENTRY (MEMCPY)
+
+	DELOUSE (0)
+	DELOUSE (1)
+	DELOUSE (2)
+
+	add	srcend, src, count
+	cmp	count, 16
+	b.ls	L(memcopy16)
+	add	dstend, dstin, count
+	cmp	count, 96
+	b.hi	L(memcopy_long)
+
+	/* Medium copies: 17..96 bytes.  */
+	ldr	A_q, [src], #16
+	and	tmp1, src, 15
+	ldr	E_q, [srcend, -16]
+	cmp	count, 64
+	b.gt	L(memcpy_copy96)
+	cmp	count, 48
+	b.le	L(bytes_17_to_48)
+	/* 49..64 bytes */
+	ldp	B_q, C_q, [src]
+	str	E_q, [dstend, -16]
+	stp	A_q, B_q, [dstin]
+	str	C_q, [dstin, 32]
+	ret
+
+L(bytes_17_to_48):
+	/* 17..48 bytes*/
+	cmp	count, 32
+	b.gt	L(bytes_32_to_48)
+	/* 17..32 bytes*/
+	str	A_q, [dstin]
+	str	E_q, [dstend, -16]
+	ret
+
+L(bytes_32_to_48):
+	/* 32..48 */
+	ldr	B_q, [src]
+	str	A_q, [dstin]
+	str	E_q, [dstend, -16]
+	str	B_q, [dstin, 16]
+	ret
+
+	.p2align 4
+	/* Small copies: 0..16 bytes.  */
+L(memcopy16):
+	cmp	count, 8
+	b.lo	L(bytes_0_to_8)
+	ldr	A_l, [src]
+	ldr	A_h, [srcend, -8]
+	add	dstend, dstin, count
+	str	A_l, [dstin]
+	str	A_h, [dstend, -8]
+	ret
+	.p2align 4
+
+L(bytes_0_to_8):
+	tbz	count, 2, L(bytes_0_to_3)
+	ldr	A_lw, [src]
+	ldr	A_hw, [srcend, -4]
+	add	dstend, dstin, count
+	str	A_lw, [dstin]
+	str	A_hw, [dstend, -4]
+	ret
+
+	/* Copy 0..3 bytes.  Use a branchless sequence that copies the same
+	   byte 3 times if count==1, or the 2nd byte twice if count==2.  */
+L(bytes_0_to_3):
+	cbz	count, 1f
+	lsr	tmp1, count, 1
+	ldrb	A_lw, [src]
+	ldrb	A_hw, [srcend, -1]
+	add	dstend, dstin, count
+	ldrb	B_lw, [src, tmp1]
+	strb	B_lw, [dstin, tmp1]
+	strb	A_hw, [dstend, -1]
+	strb	A_lw, [dstin]
+1:
+	ret
+
+	.p2align 4
+
+L(memcpy_copy96):
+	/* Copying 65..96 bytes. A_q (first 16 bytes) and
+	   E_q(last 16 bytes) are already loaded. The size
+	   is large enough to benefit from aligned loads */
+	bic	src, src, 15
+	ldp	B_q, C_q, [src]
+	/* Loaded 64 bytes, second 16-bytes chunk can be
+	   overlapping with the first chunk by tmp1 bytes.
+	   Stored 16 bytes. */
+	sub	dst, dstin, tmp1
+	add	count, count, tmp1
+	/* The range of count being [65..96] becomes [65..111]
+	   after tmp [0..15] gets added to it,
+	   count now is <bytes-left-to-load>+48 */
+	cmp	count, 80
+	b.gt	L(copy96_medium)
+	ldr	D_q, [src, 32]
+	stp	B_q, C_q, [dst, 16]
+	str	D_q, [dst, 48]
+	str	A_q, [dstin]
+	str	E_q, [dstend, -16]
+	ret
+
+	.p2align 4
+L(copy96_medium):
+	ldp	D_q, G_q, [src, 32]
+	cmp	count, 96
+	b.gt	L(copy96_large)
+	stp	B_q, C_q, [dst, 16]
+	stp	D_q, G_q, [dst, 48]
+	str	A_q, [dstin]
+	str	E_q, [dstend, -16]
+	ret
+
+L(copy96_large):
+	ldr	F_q, [src, 64]
+	str	B_q, [dst, 16]
+	stp	C_q, D_q, [dst, 32]
+	stp	G_q, F_q, [dst, 64]
+	str	A_q, [dstin]
+	str	E_q, [dstend, -16]
+	ret
+
+	.p2align 4
+L(memcopy_long):
+	cmp count, 2048
+	b.ls L(copy2048_large)
+	ldr	A_q, [src], #16
+	and	tmp1, src, 15
+	bic	src, src, 15
+	ldp	B_q, C_q, [src], #32
+	sub	dst, dstin, tmp1
+	add	count, count, tmp1
+	add	dst, dst, 16
+	and	tmp1, dst, 15
+	ldp	D_q, E_q, [src], #32
+	str	A_q, [dstin]
+
+	/* Already loaded 64+16 bytes. Check if at
+	   least 64 more bytes left */
+	subs	count, count, 64+64+16
+	b.lt	L(loop128_exit0)
+	cmp	count, MEMCPY_PREFETCH_LDR + 64 + 32
+	b.lt	L(loop128)
+	cbnz	tmp1, L(dst_unaligned)
+	sub	count, count, MEMCPY_PREFETCH_LDR + 64 + 32
+
+	.p2align 4
+
+L(loop128_prefetch):
+	prfm	pldl1strm, [src, MEMCPY_PREFETCH_LDR]
+	ldp	F_q, G_q, [src], #32
+	stp	B_q, C_q, [dst], #32
+	ldp	H_q, I_q, [src], #32
+	prfm	pldl1strm, [src, MEMCPY_PREFETCH_LDR]
+	ldp	B_q, C_q, [src], #32
+	stp	D_q, E_q, [dst], #32
+	ldp	D_q, E_q, [src], #32
+	stp	F_q, G_q, [dst], #32
+	stp	H_q, I_q, [dst], #32
+	subs	count, count, 128
+	b.ge	L(loop128_prefetch)
+
+	add	count, count, MEMCPY_PREFETCH_LDR + 64 + 32
+	.p2align 4
+L(loop128):
+	ldp	F_q, G_q, [src], #32
+	ldp	H_q, I_q, [src], #32
+	stp	B_q, C_q, [dst], #32
+	stp	D_q, E_q, [dst], #32
+	subs	count, count, 64
+	b.lt	L(loop128_exit1)
+	ldp	B_q, C_q, [src], #32
+	ldp	D_q, E_q, [src], #32
+	stp	F_q, G_q, [dst], #32
+	stp	H_q, I_q, [dst], #32
+	subs	count, count, 64
+	b.ge	L(loop128)
+L(loop128_exit0):
+	ldp	F_q, G_q, [srcend, -64]
+	ldp	H_q, I_q, [srcend, -32]
+	stp	B_q, C_q, [dst], #32
+	stp	D_q, E_q, [dst]
+	stp	F_q, G_q, [dstend, -64]
+	stp	H_q, I_q, [dstend, -32]
+	ret
+L(loop128_exit1):
+	ldp	B_q, C_q, [srcend, -64]
+	ldp	D_q, E_q, [srcend, -32]
+	stp	F_q, G_q, [dst], #32
+	stp	H_q, I_q, [dst]
+	stp	B_q, C_q, [dstend, -64]
+	stp	D_q, E_q, [dstend, -32]
+	ret
+	
+	/* long copies: 96..2048 bytes */
+L(copy2048_large):
+	and	tmp1, dstin, 15
+	bic	dst, dstin, 15
+	ldp	D_l, D_h, [src]
+	sub	src, src, tmp1
+	add	count, count, tmp1	/* Count is now 16 too large.  */
+	ldp	A_l, A_h, [src, 16]
+	stp	D_l, D_h, [dstin]
+	ldp	B_l, B_h, [src, 32]
+	ldp	C_l, C_h, [src, 48]
+	ldp	D_l, D_h, [src, 64]!
+	subs	count, count, 128 + 16	/* Test and readjust count.  */
+	b.ls	L(last64)
+
+L(loop64):
+	stp	A_l, A_h, [dst, 16]
+	ldp	A_l, A_h, [src, 16]
+	stp	B_l, B_h, [dst, 32]
+	ldp	B_l, B_h, [src, 32]
+	stp	C_l, C_h, [dst, 48]
+	ldp	C_l, C_h, [src, 48]
+	stp	D_l, D_h, [dst, 64]
+	ldp	D_l, D_h, [src, 64]
+	add dst, dst, 64
+	add src, src, 64
+	subs	count, count, 64
+	b.hi	L(loop64)
+
+	/* Write the last full set of 64 bytes.  The remainder is at most 64
+	   bytes, so it is safe to always copy 64 bytes from the end even if
+	   there is just 1 byte left.  */
+L(last64):
+	ldp	E_l, E_h, [srcend, -64]
+	stp	A_l, A_h, [dst, 16]
+	ldp	A_l, A_h, [srcend, -48]
+	stp	B_l, B_h, [dst, 32]
+	ldp	B_l, B_h, [srcend, -32]
+	stp	C_l, C_h, [dst, 48]
+	ldp	C_l, C_h, [srcend, -16]
+	stp	D_l, D_h, [dst, 64]
+	stp	E_l, E_h, [dstend, -64]
+	stp	A_l, A_h, [dstend, -48]
+	stp	B_l, B_h, [dstend, -32]
+	stp	C_l, C_h, [dstend, -16]
+	ret
+
+
+L(dst_unaligned_tail):
+	ldp	C_q, D_q, [srcend, -64]
+	ldp	E_q, F_q, [srcend, -32]
+	stp	A_q, B_q, [dst], #32
+	stp	H_q, I_q, [dst], #16
+	str	G_q, [dst, tmp1]
+	stp	C_q, D_q, [dstend, -64]
+	stp	E_q, F_q, [dstend, -32]
+	ret
+
+L(dst_unaligned):
+	/* For the unaligned store case the code loads two
+	   aligned chunks and then merges them using ext
+	   instruction. This can be up to 30% faster than
+	   the the simple unaligned store access.
+
+	   Current state: tmp1 = dst % 16; C_q, D_q, E_q
+	   contains data yet to be stored. src and dst points
+	   to next-to-be-processed data. A_q, B_q contains
+	   data already stored before, count = bytes left to
+	   be load decremented by 64.
+
+	   The control is passed here if at least 64 bytes left
+	   to be loaded. The code does two aligned loads and then
+	   extracts (16-tmp1) bytes from the first register and
+	   tmp1 bytes from the next register forming the value
+	   for the aligned store.
+
+	   As ext instruction can only have it's index encoded
+	   as immediate. 15 code chunks process each possible
+	   index value. Computed goto is used to reach the
+	   required code. */
+
+	/* Store the 16 bytes to dst and align dst for further
+	   operations, several bytes will be stored at this
+	   address once more */
+
+	ldp	F_q, G_q, [src], #32
+	stp	B_q, C_q, [dst], #32
+	bic	dst, dst, 15
+	sub	count, count, 32
+	adrp	tmp2, L(ext_table)
+	add	tmp2, tmp2, :lo12:L(ext_table)
+	add	tmp2, tmp2, tmp1, LSL #2
+	ldr	tmp3w, [tmp2]
+	add	tmp2, tmp2, tmp3w, SXTW
+	br	tmp2
+
+	.p2align 4
+	/* to make the loop in each chunk 16-bytes aligned */
+	nop
+#define EXT_CHUNK(shft) \
+L(ext_size_ ## shft):;\
+	ext     A_v.16b, C_v.16b, D_v.16b, 16-shft;\
+	ext     B_v.16b, D_v.16b, E_v.16b, 16-shft;\
+	ext     H_v.16b, E_v.16b, F_v.16b, 16-shft;\
+1:;\
+	stp     A_q, B_q, [dst], #32;\
+	prfm    pldl1strm, [src, MEMCPY_PREFETCH_LDR];\
+	ldp     C_q, D_q, [src], #32;\
+	ext     I_v.16b, F_v.16b, G_v.16b, 16-shft;\
+	stp     H_q, I_q, [dst], #32;\
+	ext     A_v.16b, G_v.16b, C_v.16b, 16-shft;\
+	ext     B_v.16b, C_v.16b, D_v.16b, 16-shft;\
+	ldp     F_q, G_q, [src], #32;\
+	ext     H_v.16b, D_v.16b, F_v.16b, 16-shft;\
+	subs    count, count, 64;\
+	b.ge    1b;\
+2:;\
+	ext     I_v.16b, F_v.16b, G_v.16b, 16-shft;\
+	b	L(dst_unaligned_tail);
+
+EXT_CHUNK(1)
+EXT_CHUNK(2)
+EXT_CHUNK(3)
+EXT_CHUNK(4)
+EXT_CHUNK(5)
+EXT_CHUNK(6)
+EXT_CHUNK(7)
+EXT_CHUNK(8)
+EXT_CHUNK(9)
+EXT_CHUNK(10)
+EXT_CHUNK(11)
+EXT_CHUNK(12)
+EXT_CHUNK(13)
+EXT_CHUNK(14)
+EXT_CHUNK(15)
+
+	/* long move: more than 512 bytes align the dstend */
+	.p2align 4
+L(move_long):
+1:
+	add	srcend, src, count
+	add	dstend, dstin, count
+
+	and	tmp1, dstend, 15
+	ldr	D_q, [srcend, -16]
+	sub	srcend, srcend, tmp1
+	sub	count, count, tmp1
+	ldp	A_q, B_q, [srcend, -32]
+	str	D_q, [dstend, -16]
+	ldp	C_q, D_q, [srcend, -64]!
+	sub	dstend, dstend, tmp1
+	subs	count, count, 128
+	b.ls	2f
+
+	.p2align 4
+1:
+	subs	count, count, 64
+	stp	A_q, B_q, [dstend, -32]
+	ldp	A_q, B_q, [srcend, -32]
+	stp	C_q, D_q, [dstend, -64]!
+	ldp	C_q, D_q, [srcend, -64]!
+	b.hi	1b
+
+	/* Write the last full set of 64 bytes.  The remainder is at most 64
+	   bytes, so it is safe to always copy 64 bytes from the start even if
+	   there is just 1 byte left.  */
+2:
+	ldp	E_q, F_q, [src, 32]
+	ldp	G_q, H_q, [src]
+	stp	A_q, B_q, [dstend, -32]
+	stp	C_q, D_q, [dstend, -64]
+	stp	E_q, F_q, [dstin, 32]
+	stp	G_q, H_q, [dstin]
+3:	ret
+
+	/* midlle move: 96..512 bytes */
+	.p2align 4
+L(move_middle):
+	cbz	tmp1, 3f
+	add	srcend, src, count
+	prfm	PLDL1STRM, [srcend, -64]
+	add	dstend, dstin, count
+	and	tmp1, dstend, 15
+	ldr D_q, [srcend, -16]
+	sub	srcend, srcend, tmp1
+	sub	count, count, tmp1
+	ldr	A_q, [srcend, -16]
+	str	D_q, [dstend, -16]
+	ldr	B_q, [srcend, -32]
+	ldr	C_q, [srcend, -48]
+	ldr	D_q, [srcend, -64]!
+	sub	dstend, dstend, tmp1
+	subs	count, count, 128
+	b.ls	2f
+
+1:
+	str	A_q, [dstend, -16]
+	ldr	A_q, [srcend, -16]
+	str	B_q, [dstend, -32]
+	ldr	B_q, [srcend, -32]
+	str	C_q, [dstend, -48]
+	ldr	C_q, [srcend, -48]
+	str	D_q, [dstend, -64]!
+	ldr	D_q, [srcend, -64]!
+	subs	count, count, 64
+	b.hi	1b
+
+	/* Write the last full set of 64 bytes.  The remainder is at most 64
+	   bytes, so it is safe to always copy 64 bytes from the start even if
+	   there is just 1 byte left.  */
+2:
+	ldr	G_q, [src, 48]
+	str	A_q, [dstend, -16]
+	ldr	A_q, [src, 32]
+	str	B_q, [dstend, -32]
+	ldr	B_q, [src, 16]
+	str	C_q, [dstend, -48]
+	ldr	C_q, [src]
+	str	D_q, [dstend, -64]
+	str	G_q, [dstin, 48]
+	str	A_q, [dstin, 32]
+	str	B_q, [dstin, 16]
+	str	C_q, [dstin]
+3:	ret
+
+
+END (MEMCPY)
+	.section	.rodata
+	.p2align	4
+
+L(ext_table):
+	/* The first entry is for the alignment of 0 and is never
+	   actually used (could be any value).  */
+	.word	0
+	.word	L(ext_size_1) -.
+	.word	L(ext_size_2) -.
+	.word	L(ext_size_3) -.
+	.word	L(ext_size_4) -.
+	.word	L(ext_size_5) -.
+	.word	L(ext_size_6) -.
+	.word	L(ext_size_7) -.
+	.word	L(ext_size_8) -.
+	.word	L(ext_size_9) -.
+	.word	L(ext_size_10) -.
+	.word	L(ext_size_11) -.
+	.word	L(ext_size_12) -.
+	.word	L(ext_size_13) -.
+	.word	L(ext_size_14) -.
+	.word	L(ext_size_15) -.
+
+libc_hidden_builtin_def (MEMCPY)
+#endif