From patchwork Mon Oct 14 03:44:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xuelei Zhang X-Patchwork-Id: 34933 Received: (qmail 57021 invoked by alias); 14 Oct 2019 03:45:49 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 56829 invoked by uid 89); 14 Oct 2019 03:45:31 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-13.4 required=5.0 tests=AWL, BAYES_50, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_SHORT, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.1 spammy=1.45, 2.78, 8093, 991 X-HELO: huawei.com From: Xuelei Zhang To: Subject: [PATCH 2/2] aarch64: Optimized memcpy and memmove for Kunpeng processor Date: Mon, 14 Oct 2019 11:44:56 +0800 Message-ID: <20191014034456.11548-1-zhangxuelei4@huawei.com> MIME-Version: 1.0 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 ======================================================================================================================== 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 /* 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 + . */ + +#include + +/* 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 +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