public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag
@ 2018-12-18 10:06 Feng Xue
  2018-12-19 15:41 ` Szabolcs Nagy
  2018-12-20  9:24 ` Siddhesh Poyarekar
  0 siblings, 2 replies; 5+ messages in thread
From: Feng Xue @ 2018-12-18 10:06 UTC (permalink / raw)
  To: libc-alpha; +Cc: Feng Xue

At first, performance report from benchtest are listed.

Function: memset
Variant: walk
                            simple_memset	__memset_falkor	__memset_emag	__memset_generic
===================================================================================
char=65, length=128:        89.10	       21.30 ( 76.10%)	        6.68 ( 92.50%)	       11.35 ( 87.26%)	
char=65, length=129:        89.80	       15.02 ( 83.28%)	        8.02 ( 91.07%)	       15.03 ( 83.26%)	
char=65, length=130:        91.37	       15.03 ( 83.55%)	        8.02 ( 91.23%)	       15.02 ( 83.57%)	
char=65, length=131:        92.04	       21.04 ( 77.14%)	       19.42 ( 78.90%)	       15.02 ( 83.68%)	
char=65, length=132:        91.71	       17.90 ( 80.48%)	        8.02 ( 91.26%)	       15.02 ( 83.63%)	
char=65, length=133:        92.38	       21.35 ( 76.89%)	       20.63 ( 77.67%)	       21.35 ( 76.89%)	
char=65, length=134:        94.13	       15.02 ( 84.04%)	       20.21 ( 78.53%)	       21.35 ( 77.32%)	
char=65, length=135:        94.72	       15.03 ( 84.13%)	        8.02 ( 91.54%)	       21.37 ( 77.44%)	
char=65, length=136:        94.48	       21.35 ( 77.40%)	       12.25 ( 87.04%)	       20.82 ( 77.97%)	
char=65, length=137:        95.04	       15.02 ( 84.20%)	        8.02 ( 91.57%)	       15.02 ( 84.20%)	
char=65, length=138:        96.70	       30.63 ( 68.32%)	       30.62 ( 68.34%)	       30.65 ( 68.31%)	
char=65, length=139:        97.37	       15.36 ( 84.22%)	        8.02 ( 91.76%)	       15.02 ( 84.58%)	
char=65, length=140:        97.05	       20.75 ( 78.62%)	       14.65 ( 84.91%)	       15.02 ( 84.53%)	
char=65, length=141:        97.82	       15.03 ( 84.63%)	        8.02 ( 91.80%)	       15.02 ( 84.65%)	
char=65, length=142:        99.38	       20.55 ( 79.33%)	       20.78 ( 79.09%)	       30.63 ( 69.18%)	
char=65, length=143:       100.04	       15.02 ( 84.99%)	        8.02 ( 91.99%)	       15.03 ( 84.98%)	
char=65, length=256:       174.51	       30.36 ( 82.60%)	       23.77 ( 86.38%)	       30.46 ( 82.55%)	
char=65, length=257:       175.07	       29.91 ( 82.91%)	       29.92 ( 82.91%)	       29.89 ( 82.93%)	
char=65, length=258:       176.77	       30.37 ( 82.82%)	       30.22 ( 82.90%)	       30.36 ( 82.82%)	
char=65, length=259:       177.41	       30.39 ( 82.87%)	       29.92 ( 83.14%)	       30.36 ( 82.88%)	
char=65, length=260:       177.08	       29.89 ( 83.12%)	       29.94 ( 83.09%)	       29.89 ( 83.12%)	
char=65, length=261:       177.85	       29.91 ( 83.18%)	       29.92 ( 83.18%)	       29.89 ( 83.19%)	
char=65, length=262:       179.43	       29.89 ( 83.34%)	       29.92 ( 83.33%)	       29.91 ( 83.33%)	
char=65, length=263:       180.07	       30.38 ( 83.13%)	       30.35 ( 83.14%)	       30.36 ( 83.14%)	
char=65, length=264:       179.83	       18.03 ( 89.97%)	       12.03 ( 93.31%)	       18.03 ( 89.97%)	
char=65, length=265:       180.42	       30.45 ( 83.12%)	       29.92 ( 83.42%)	       30.49 ( 83.10%)	
char=65, length=266:       182.07	       30.45 ( 83.27%)	       29.94 ( 83.55%)	       30.70 ( 83.14%)	
char=65, length=267:       182.74	       29.91 ( 83.63%)	       30.45 ( 83.33%)	       28.05 ( 84.65%)	
char=65, length=268:       182.40	       30.46 ( 83.30%)	       29.94 ( 83.59%)	       30.45 ( 83.30%)	
char=65, length=269:       183.16	       30.39 ( 83.40%)	       30.37 ( 83.42%)	       30.27 ( 83.47%)	
char=65, length=270:       184.75	       30.37 ( 83.56%)	       30.38 ( 83.55%)	       30.37 ( 83.56%)	
char=65, length=271:       185.44	       30.40 ( 83.60%)	       30.33 ( 83.64%)	       30.40 ( 83.61%)	
char=65, length=512:       345.18	       31.40 ( 90.90%)	       30.43 ( 91.18%)	       31.39 ( 90.91%)	
char=65, length=513:       345.87	       35.07 ( 89.86%)	       30.39 ( 91.21%)	       35.06 ( 89.86%)	
char=65, length=514:       347.48	       35.11 ( 89.90%)	       30.42 ( 91.25%)	       35.06 ( 89.91%)	
char=65, length=515:       348.26	       35.11 ( 89.92%)	       30.40 ( 91.27%)	       35.06 ( 89.93%)	
char=65, length=516:       347.92	       35.11 ( 89.91%)	       30.40 ( 91.26%)	       35.06 ( 89.92%)	
char=65, length=517:       348.48	       35.06 ( 89.94%)	       30.44 ( 91.26%)	       35.06 ( 89.94%)	
char=65, length=518:       350.19	       35.07 ( 89.99%)	       30.53 ( 91.28%)	       35.06 ( 89.99%)	
char=65, length=519:       350.82	       35.06 ( 90.01%)	       30.68 ( 91.25%)	       35.06 ( 90.01%)	
char=65, length=520:       350.47	       31.40 ( 91.04%)	       30.50 ( 91.30%)	       31.45 ( 91.03%)	
char=65, length=521:       351.25	       35.06 ( 90.02%)	       30.57 ( 91.30%)	       35.11 ( 90.00%)	
char=65, length=522:       352.83	       35.07 ( 90.06%)	       30.40 ( 91.39%)	       35.12 ( 90.05%)	
char=65, length=523:       353.47	       35.06 ( 90.08%)	       30.70 ( 91.31%)	       35.06 ( 90.08%)	
char=65, length=524:       353.25	       35.06 ( 90.07%)	       30.40 ( 91.39%)	       35.06 ( 90.07%)	
char=65, length=525:       353.83	       35.06 ( 90.09%)	       30.73 ( 91.32%)	       35.06 ( 90.09%)	
char=65, length=526:       355.50	       35.06 ( 90.14%)	       30.45 ( 91.43%)	       35.06 ( 90.14%)	
char=65, length=527:       356.19	       35.06 ( 90.16%)	       30.62 ( 91.40%)	       35.06 ( 90.16%)	
char=65, length=1024:       694.94	       58.21 ( 91.62%)	       44.12 ( 93.65%)	       58.12 ( 91.64%)	
char=65, length=1025:       695.61	       61.89 ( 91.10%)	       45.46 ( 93.46%)	       61.79 ( 91.12%)	
char=65, length=1026:       696.27	       61.79 ( 91.13%)	       45.55 ( 93.46%)	       61.79 ( 91.13%)	
char=65, length=1027:       696.98	       61.79 ( 91.13%)	       45.46 ( 93.48%)	       61.89 ( 91.12%)	
char=65, length=1028:       697.60	       61.79 ( 91.14%)	       45.45 ( 93.48%)	       61.79 ( 91.14%)	
char=65, length=1029:       698.33	       61.79 ( 91.15%)	       45.46 ( 93.49%)	       61.79 ( 91.15%)	
char=65, length=1030:       698.98	       61.80 ( 91.16%)	       45.46 ( 93.50%)	       61.79 ( 91.16%)	
char=65, length=1031:       699.60	       61.88 ( 91.15%)	       45.46 ( 93.50%)	       61.79 ( 91.17%)	
char=65, length=1032:       700.32	       58.13 ( 91.70%)	       44.23 ( 93.68%)	       58.13 ( 91.70%)	
char=65, length=1033:       700.95	       61.79 ( 91.18%)	       45.46 ( 93.52%)	       61.88 ( 91.17%)	
char=65, length=1034:       701.60	       61.79 ( 91.19%)	       45.46 ( 93.52%)	       61.79 ( 91.19%)	
char=65, length=1035:       702.34	       61.79 ( 91.20%)	       45.46 ( 93.53%)	       61.79 ( 91.20%)	
char=65, length=1036:       703.03	       61.79 ( 91.21%)	       45.46 ( 93.53%)	       61.79 ( 91.21%)	
char=65, length=1037:       703.63	       61.88 ( 91.21%)	       45.46 ( 93.54%)	       61.79 ( 91.22%)	
char=65, length=1038:       704.27	       61.80 ( 91.23%)	       45.55 ( 93.53%)	       61.79 ( 91.23%)	
char=65, length=1039:       704.94	       61.79 ( 91.23%)	       45.46 ( 93.55%)	       61.96 ( 91.21%)	
char=65, length=2048:      1378.15	      111.63 ( 91.90%)	       86.92 ( 93.69%)	      111.58 ( 91.90%)	
char=65, length=2049:      1378.87	      115.27 ( 91.64%)	       88.25 ( 93.60%)	      115.25 ( 91.64%)	
char=65, length=2050:      1379.37	      115.25 ( 91.64%)	       88.24 ( 93.60%)	      115.24 ( 91.65%)	
char=65, length=2051:      1379.90	      115.44 ( 91.63%)	       88.25 ( 93.60%)	      115.25 ( 91.65%)	
char=65, length=2052:      1380.54	      115.25 ( 91.65%)	       88.25 ( 93.61%)	      115.42 ( 91.64%)	
char=65, length=2053:      1381.20	      115.25 ( 91.66%)	       88.24 ( 93.61%)	      115.24 ( 91.66%)	
char=65, length=2054:      1382.11	      115.25 ( 91.66%)	       88.25 ( 93.61%)	      115.25 ( 91.66%)	
char=65, length=2055:      1382.67	      115.25 ( 91.66%)	       88.24 ( 93.62%)	      115.25 ( 91.66%)	
char=65, length=2056:      1383.22	      111.58 ( 91.93%)	       87.09 ( 93.70%)	      111.59 ( 91.93%)	
char=65, length=2057:      1383.93	      115.25 ( 91.67%)	       88.25 ( 93.62%)	      115.43 ( 91.66%)	
char=65, length=2058:      1384.63	      115.25 ( 91.68%)	       88.24 ( 93.63%)	      115.24 ( 91.68%)	
char=65, length=2059:      1385.33	      115.26 ( 91.68%)	       88.24 ( 93.63%)	      115.24 ( 91.68%)	
char=65, length=2060:      1385.89	      115.45 ( 91.67%)	       88.25 ( 93.63%)	      115.25 ( 91.68%)	
char=65, length=2061:      1386.54	      115.25 ( 91.69%)	       88.45 ( 93.62%)	      115.25 ( 91.69%)	
char=65, length=2062:      1387.21	      115.25 ( 91.69%)	       88.25 ( 93.64%)	      115.45 ( 91.68%)	
char=65, length=2063:      1388.00	      115.27 ( 91.70%)	       88.24 ( 93.64%)	      115.25 ( 91.70%)	
char=65, length=4096:      2744.05	      218.50 ( 92.04%)	      172.49 ( 93.71%)	      218.48 ( 92.04%)	
char=65, length=4097:      2744.45	      222.52 ( 91.89%)	      173.82 ( 93.67%)	      222.15 ( 91.91%)	
char=65, length=4098:      2745.06	      222.14 ( 91.91%)	      174.19 ( 93.65%)	      222.16 ( 91.91%)	
char=65, length=4099:      2745.73	      222.17 ( 91.91%)	      173.82 ( 93.67%)	      222.14 ( 91.91%)	
char=65, length=4100:      2746.86	      222.18 ( 91.91%)	      173.82 ( 93.67%)	      222.15 ( 91.91%)	
char=65, length=4101:      2747.17	      222.53 ( 91.90%)	      173.83 ( 93.67%)	      222.14 ( 91.91%)	
char=65, length=4102:      2747.74	      222.16 ( 91.91%)	      174.19 ( 93.66%)	      222.15 ( 91.92%)	
char=65, length=4103:      2748.40	      222.15 ( 91.92%)	      173.82 ( 93.68%)	      222.50 ( 91.90%)	
char=65, length=4104:      2749.25	      218.50 ( 92.05%)	      172.50 ( 93.73%)	      218.48 ( 92.05%)	
char=65, length=4105:      2749.98	      222.16 ( 91.92%)	      173.82 ( 93.68%)	      222.14 ( 91.92%)	
char=65, length=4106:      2750.41	      222.51 ( 91.91%)	      173.81 ( 93.68%)	      222.14 ( 91.92%)	
char=65, length=4107:      2751.08	      222.17 ( 91.92%)	      173.81 ( 93.68%)	      222.51 ( 91.91%)	
char=65, length=4108:      2751.73	      222.15 ( 91.93%)	      173.81 ( 93.68%)	      222.14 ( 91.93%)	
char=65, length=4109:      2752.84	      222.18 ( 91.93%)	      173.81 ( 93.69%)	      222.16 ( 91.93%)	
char=65, length=4110:      2753.12	      222.51 ( 91.92%)	      173.82 ( 93.69%)	      222.15 ( 91.93%)	
char=65, length=4111:      2753.77	      222.16 ( 91.93%)	      174.18 ( 93.67%)	      222.15 ( 91.93%)	
char=65, length=8192:      5475.48	      432.30 ( 92.10%)	      343.63 ( 93.72%)	      432.29 ( 92.10%)	
char=65, length=8193:      5476.51	      435.97 ( 92.04%)	      344.97 ( 93.70%)	      435.95 ( 92.04%)	
char=65, length=8194:      5477.22	      436.73 ( 92.03%)	      345.02 ( 93.70%)	      435.96 ( 92.04%)	
char=65, length=8195:      5477.45	      435.97 ( 92.04%)	      345.71 ( 93.69%)	      435.95 ( 92.04%)	
char=65, length=8196:      5478.21	      435.96 ( 92.04%)	      344.95 ( 93.70%)	      436.67 ( 92.03%)	
char=65, length=8197:      5478.75	      435.98 ( 92.04%)	      344.94 ( 93.70%)	      435.96 ( 92.04%)	
char=65, length=8198:      5480.24	      435.98 ( 92.04%)	      344.98 ( 93.71%)	      435.96 ( 92.04%)	
char=65, length=8199:      5480.28	      436.00 ( 92.04%)	      345.77 ( 93.69%)	      435.95 ( 92.05%)	
char=65, length=8200:      5480.84	      432.29 ( 92.11%)	      343.63 ( 93.73%)	      433.06 ( 92.10%)	
char=65, length=8201:      5481.49	      435.95 ( 92.05%)	      344.95 ( 93.71%)	      435.94 ( 92.05%)	
char=65, length=8202:      5482.56	      435.96 ( 92.05%)	      344.96 ( 93.71%)	      435.94 ( 92.05%)	
char=65, length=8203:      5483.25	      436.00 ( 92.05%)	      345.71 ( 93.70%)	      435.97 ( 92.05%)	
char=65, length=8204:      5483.52	      435.98 ( 92.05%)	      344.96 ( 93.71%)	      436.71 ( 92.04%)	
char=65, length=8205:      5484.11	      435.97 ( 92.05%)	      344.95 ( 93.71%)	      435.96 ( 92.05%)	
char=65, length=8206:      5485.15	      435.96 ( 92.05%)	      344.96 ( 93.71%)	      435.94 ( 92.05%)	
char=65, length=8207:      5485.53	      436.69 ( 92.04%)	      344.97 ( 93.71%)	      435.95 ( 92.05%)	
char=65, length=16384:     10939.70	      859.95 ( 92.14%)	      685.89 ( 93.73%)	      861.55 ( 92.12%)	
char=65, length=16385:     10939.70	      863.64 ( 92.11%)	      687.25 ( 93.72%)	      863.54 ( 92.11%)	
char=65, length=16386:     10941.10	      863.60 ( 92.11%)	      687.27 ( 93.72%)	      863.57 ( 92.11%)	
char=65, length=16387:     10940.90	      865.06 ( 92.09%)	      687.25 ( 93.72%)	      863.55 ( 92.11%)	
char=65, length=16388:     10941.50	      863.58 ( 92.11%)	      687.21 ( 93.72%)	      865.83 ( 92.09%)	
char=65, length=16389:     10942.60	      863.62 ( 92.11%)	      687.31 ( 93.72%)	      863.58 ( 92.11%)	
char=65, length=16390:     10944.20	      863.61 ( 92.11%)	      687.26 ( 93.72%)	      863.55 ( 92.11%)	
char=65, length=16391:     10943.70	      865.09 ( 92.10%)	      687.27 ( 93.72%)	      863.54 ( 92.11%)	
char=65, length=16392:     10944.30	      866.21 ( 92.09%)	      699.19 ( 93.61%)	      866.18 ( 92.09%)	
char=65, length=16393:     10948.60	      863.88 ( 92.11%)	      687.34 ( 93.72%)	      863.64 ( 92.11%)	
char=65, length=16394:     10948.50	      864.29 ( 92.11%)	      687.45 ( 93.72%)	      863.62 ( 92.11%)	
char=65, length=16395:     10948.20	      865.32 ( 92.10%)	      687.32 ( 93.72%)	      863.57 ( 92.11%)	
char=65, length=16396:     10947.20	      863.66 ( 92.11%)	      687.27 ( 93.72%)	      865.14 ( 92.10%)	
char=65, length=16397:     10948.20	      863.66 ( 92.11%)	      687.28 ( 93.72%)	      863.55 ( 92.11%)	
char=65, length=16398:     10951.00	      863.67 ( 92.11%)	      687.35 ( 93.72%)	      863.63 ( 92.11%)	
char=65, length=16399:     10949.50	      865.37 ( 92.10%)	      687.30 ( 93.72%)	      863.60 ( 92.11%)	
char=65, length=32768:     21866.10	     1715.22 ( 92.16%)	     1370.45 ( 93.73%)	     1718.09 ( 92.14%)	
char=65, length=32769:     21866.60	     1718.93 ( 92.14%)	     1371.80 ( 93.73%)	     1718.81 ( 92.14%)	
char=65, length=32770:     21869.00	     1718.87 ( 92.14%)	     1371.88 ( 93.73%)	     1718.85 ( 92.14%)	
char=65, length=32771:     21870.00	     1721.85 ( 92.13%)	     1371.86 ( 93.73%)	     1718.85 ( 92.14%)	
char=65, length=32772:     21868.70	     1718.89 ( 92.14%)	     1371.82 ( 93.73%)	     1722.09 ( 92.13%)	
char=65, length=32773:     21869.10	     1718.87 ( 92.14%)	     1371.84 ( 93.73%)	     1718.85 ( 92.14%)	
char=65, length=32774:     21871.50	     1718.87 ( 92.14%)	     1371.82 ( 93.73%)	     1718.81 ( 92.14%)	
char=65, length=32775:     21870.70	     1723.10 ( 92.12%)	     1372.06 ( 93.73%)	     1718.91 ( 92.14%)	
char=65, length=32776:     21871.90	     1715.30 ( 92.16%)	     1370.42 ( 93.73%)	     1718.22 ( 92.14%)	
char=65, length=32777:     21872.00	     1718.81 ( 92.14%)	     1371.92 ( 93.73%)	     1718.87 ( 92.14%)	
char=65, length=32778:     21873.80	     1718.81 ( 92.14%)	     1371.82 ( 93.73%)	     1718.77 ( 92.14%)	
char=65, length=32779:     21873.20	     1721.64 ( 92.13%)	     1371.90 ( 93.73%)	     1718.85 ( 92.14%)	
char=65, length=32780:     21875.20	     1718.87 ( 92.14%)	     1371.84 ( 93.73%)	     1722.13 ( 92.13%)	
char=65, length=32781:     21874.80	     1718.91 ( 92.14%)	     1371.86 ( 93.73%)	     1718.77 ( 92.14%)	
char=65, length=32782:     21882.90	     1720.16 ( 92.14%)	     1372.00 ( 93.73%)	     1718.75 ( 92.15%)	
char=65, length=32783:     21878.20	     1722.36 ( 92.13%)	     1371.88 ( 93.73%)	     1718.81 ( 92.14%)	
char=65, length=65536:     43720.20	     3431.93 ( 92.15%)	     2744.76 ( 93.72%)	     3437.86 ( 92.14%)	
char=65, length=65537:     43731.20	     3441.88 ( 92.13%)	     2751.09 ( 93.71%)	     3441.21 ( 92.13%)	
char=65, length=65538:     43731.40	     3441.60 ( 92.13%)	     2750.98 ( 93.71%)	     3441.09 ( 92.13%)	
char=65, length=65539:     43728.00	     3448.87 ( 92.11%)	     2750.94 ( 93.71%)	     3441.21 ( 92.13%)	
char=65, length=65540:     43728.80	     3441.56 ( 92.13%)	     2750.66 ( 93.71%)	     3447.19 ( 92.12%)	
char=65, length=65541:     43728.60	     3441.09 ( 92.13%)	     2750.70 ( 93.71%)	     3440.98 ( 92.13%)	
char=65, length=65542:     43736.40	     3441.33 ( 92.13%)	     2750.70 ( 93.71%)	     3441.41 ( 92.13%)	
char=65, length=65543:     43730.60	     3447.27 ( 92.12%)	     2750.94 ( 93.71%)	     3440.98 ( 92.13%)	
char=65, length=65544:     43731.10	     3437.27 ( 92.14%)	     2750.27 ( 93.71%)	     3443.24 ( 92.13%)	
char=65, length=65545:     43731.50	     3441.25 ( 92.13%)	     2750.74 ( 93.71%)	     3441.09 ( 92.13%)	
char=65, length=65546:     43738.40	     3441.13 ( 92.13%)	     2750.78 ( 93.71%)	     3440.94 ( 92.13%)	
char=65, length=65547:     43733.50	     3446.68 ( 92.12%)	     2750.90 ( 93.71%)	     3440.94 ( 92.13%)	
char=65, length=65548:     43734.70	     3441.91 ( 92.13%)	     2750.86 ( 93.71%)	     3448.32 ( 92.12%)	
char=65, length=65549:     43734.50	     3441.25 ( 92.13%)	     2750.90 ( 93.71%)	     3441.02 ( 92.13%)	
char=65, length=65550:     43738.10	     3441.21 ( 92.13%)	     2750.66 ( 93.71%)	     3440.90 ( 92.13%)	
char=65, length=65551:     43740.00	     3441.80 ( 92.13%)	     2757.54 ( 93.70%)	     3441.25 ( 92.13%)	
char=65, length=131072:     87438.80	     6863.75 ( 92.15%)	     5493.67 ( 93.72%)	     6875.23 ( 92.14%)	
char=65, length=131073:     87450.20	     6878.75 ( 92.13%)	     5505.39 ( 93.70%)	     6877.89 ( 92.14%)	
char=65, length=131074:     87457.00	     6878.59 ( 92.13%)	     5505.31 ( 93.71%)	     6878.20 ( 92.14%)	
char=65, length=131075:     87451.40	     6878.67 ( 92.13%)	     5516.88 ( 93.69%)	     6877.89 ( 92.14%)	
char=65, length=131076:     87460.50	     6879.38 ( 92.13%)	     5505.23 ( 93.71%)	     6891.48 ( 92.12%)	
char=65, length=131077:     87454.20	     6878.98 ( 92.13%)	     5505.31 ( 93.70%)	     6877.97 ( 92.14%)	
char=65, length=131078:     87460.10	     6878.75 ( 92.13%)	     5505.23 ( 93.71%)	     6877.97 ( 92.14%)	
char=65, length=131079:     87454.50	     6878.44 ( 92.13%)	     5517.58 ( 93.69%)	     6878.36 ( 92.13%)	
char=65, length=131080:     87453.80	     6874.06 ( 92.14%)	     5504.61 ( 93.71%)	     6895.94 ( 92.11%)	
char=65, length=131081:     87456.90	     6878.36 ( 92.14%)	     5505.08 ( 93.71%)	     6877.73 ( 92.14%)	
char=65, length=131082:     87463.10	     6878.20 ( 92.14%)	     5505.47 ( 93.71%)	     6878.67 ( 92.14%)	
char=65, length=131083:     87456.10	     6878.05 ( 92.14%)	     5516.64 ( 93.69%)	     6878.59 ( 92.13%)	
char=65, length=131084:     87456.40	     6877.89 ( 92.14%)	     5505.00 ( 93.71%)	     6890.62 ( 92.12%)	
char=65, length=131085:     87463.10	     6879.30 ( 92.13%)	     5505.31 ( 93.71%)	     6877.89 ( 92.14%)	
char=65, length=131086:     87459.80	     6891.95 ( 92.12%)	     5505.55 ( 93.71%)	     6878.12 ( 92.14%)	
char=65, length=131087:     87459.30	     6878.36 ( 92.14%)	     5516.95 ( 93.69%)	     6878.28 ( 92.14%)	
char=65, length=262144:    174909.00	    13760.30 ( 92.13%)	    11023.40 ( 93.70%)	    13758.80 ( 92.13%)	
char=65, length=262145:    175021.00	    13796.70 ( 92.12%)	    11048.10 ( 93.69%)	    13785.80 ( 92.12%)	
char=65, length=262146:    174970.00	    13877.20 ( 92.07%)	    11051.20 ( 93.68%)	    13785.00 ( 92.00%)	
char=65, length=262147:    174941.00	    13788.30 ( 92.12%)	    11073.00 ( 93.00%)	    13785.30 ( 92.12%)	
char=65, length=262148:    174936.00	    13785.30 ( 92.12%)	    11046.20 ( 93.69%)	    13784.70 ( 92.12%)	
char=65, length=262149:    174952.00	    13785.80 ( 92.12%)	    11046.70 ( 93.69%)	    13784.10 ( 92.12%)	
char=65, length=262150:    174934.00	    13808.90 ( 92.11%)	    11048.00 ( 93.00%)	    13784.80 ( 92.12%)	
char=65, length=262151:    174955.00	    13787.30 ( 92.12%)	    11072.50 ( 93.67%)	    13787.00 ( 92.00%)	
char=65, length=262152:    174937.00	    13781.70 ( 92.12%)	    11046.20 ( 93.69%)	    13780.80 ( 92.12%)	
char=65, length=262153:    174955.00	    13784.70 ( 92.12%)	    11048.00 ( 93.00%)	    13785.30 ( 92.12%)	
char=65, length=262154:    174938.00	    13807.50 ( 92.11%)	    11047.20 ( 93.69%)	    13785.50 ( 92.12%)	
char=65, length=262155:    174938.00	    13785.90 ( 92.12%)	    11085.30 ( 93.66%)	    13786.60 ( 92.12%)	
char=65, length=262156:    174942.00	    13785.60 ( 92.12%)	    11047.50 ( 93.69%)	    13785.20 ( 92.12%)	
char=65, length=262157:    174954.00	    13784.80 ( 92.12%)	    11046.40 ( 93.69%)	    13784.80 ( 92.12%)	
char=65, length=262158:    174940.00	    13808.80 ( 92.11%)	    11047.00 ( 93.00%)	    13785.50 ( 92.12%)	
char=65, length=262159:    174941.00	    13786.40 ( 92.12%)	    11071.60 ( 93.67%)	    13785.20 ( 92.12%)	
char=65, length=524288:    350007.00	    27683.10 ( 92.09%)	    22215.30 ( 93.65%)	    27679.40 ( 92.09%)	
char=65, length=524289:    350064.00	    27727.20 ( 92.08%)	    22259.10 ( 93.64%)	    27726.20 ( 92.08%)	
char=65, length=524290:    350035.00	    27773.40 ( 92.07%)	    22258.80 ( 93.64%)	    27726.90 ( 92.08%)	
char=65, length=524291:    350037.00	    27730.00 ( 92.00%)	    22317.50 ( 93.62%)	    27727.20 ( 92.08%)	
char=65, length=524292:    350028.00	    27726.90 ( 92.08%)	    22259.10 ( 93.64%)	    27725.60 ( 92.08%)	
char=65, length=524293:    350098.00	    27732.20 ( 92.08%)	    22258.10 ( 93.64%)	    27729.10 ( 92.08%)	
char=65, length=524294:    350035.00	    27777.20 ( 92.06%)	    22260.30 ( 93.64%)	    27727.20 ( 92.08%)	
char=65, length=524295:    350030.00	    27727.80 ( 92.08%)	    22307.80 ( 93.63%)	    27727.80 ( 92.08%)	
char=65, length=524296:    350030.00	    27725.30 ( 92.08%)	    22256.20 ( 93.64%)	    27723.40 ( 92.08%)	
char=65, length=524297:    350067.00	    27730.30 ( 92.08%)	    22256.60 ( 93.64%)	    27723.40 ( 92.08%)	
char=65, length=524298:    350065.00	    27780.90 ( 92.06%)	    22258.40 ( 93.64%)	    27726.20 ( 92.08%)	
char=65, length=524299:    350032.00	    27727.80 ( 92.08%)	    22310.90 ( 93.63%)	    27729.10 ( 92.08%)	
char=65, length=524300:    350031.00	    27726.20 ( 92.08%)	    22256.90 ( 93.64%)	    27726.90 ( 92.08%)	
char=65, length=524301:    350076.00	    27728.10 ( 92.08%)	    22258.10 ( 93.64%)	    27726.60 ( 92.08%)	
char=65, length=524302:    350033.00	    27805.30 ( 92.06%)	    22259.40 ( 93.64%)	    27730.30 ( 92.08%)	
char=65, length=524303:    350037.00	    27726.20 ( 92.08%)	    22310.90 ( 93.63%)	    27726.20 ( 92.08%)	
char=65, length=1048576:    700696.00	    56086.20 ( 92.00%)	    45152.50 ( 93.56%)	    56184.40 ( 91.98%)	
char=65, length=1048577:    700768.00	    56174.40 ( 91.98%)	    45239.40 ( 93.54%)	    56165.60 ( 91.99%)	
char=65, length=1048578:    700814.00	    56174.40 ( 91.98%)	    45235.00 ( 93.00%)	    56166.20 ( 91.99%)	
char=65, length=1048579:    700828.00	    56175.60 ( 91.98%)	    45352.50 ( 93.53%)	    56170.00 ( 91.00%)	
char=65, length=1048580:    700767.00	    56173.10 ( 91.98%)	    45243.10 ( 93.54%)	    56278.80 ( 91.97%)	
char=65, length=1048581:    700769.00	    56170.60 ( 91.98%)	    45240.60 ( 93.54%)	    56168.80 ( 91.98%)	
char=65, length=1048582:    700828.00	    56170.60 ( 91.99%)	    45236.20 ( 93.55%)	    56167.50 ( 91.99%)	
char=65, length=1048583:    700772.00	    56270.00 ( 91.00%)	    45245.00 ( 93.00%)	    56166.90 ( 91.98%)	
char=65, length=1048584:    700838.00	    56163.10 ( 91.99%)	    45237.50 ( 93.55%)	    56273.10 ( 91.97%)	
char=65, length=1048585:    700774.00	    56172.50 ( 91.98%)	    45242.50 ( 93.54%)	    56166.20 ( 91.99%)	
char=65, length=1048586:    700825.00	    56168.80 ( 91.99%)	    45241.90 ( 93.54%)	    56169.40 ( 91.99%)	
char=65, length=1048587:    700779.00	    56257.50 ( 91.97%)	    45240.60 ( 93.54%)	    56165.00 ( 91.00%)	
char=65, length=1048588:    700782.00	    56170.00 ( 91.00%)	    45235.60 ( 93.54%)	    56318.80 ( 91.96%)	
char=65, length=1048589:    700782.00	    56172.50 ( 91.98%)	    45239.40 ( 93.54%)	    56168.80 ( 91.98%)	
char=65, length=1048590:    700884.00	    56172.50 ( 91.99%)	    45240.60 ( 93.55%)	    56168.80 ( 91.99%)	
char=65, length=1048591:    700779.00	    56275.00 ( 91.00%)	    45250.60 ( 93.54%)	    56165.00 ( 91.00%)	
char=65, length=2097152:   1404250.00	   114974.00 ( 91.81%)	    93346.20 ( 93.35%)	   114961.00 ( 91.81%)	
char=65, length=2097153:   1404480.00	   115174.00 ( 91.80%)	    93290.00 ( 93.36%)	   115355.00 ( 91.79%)	
char=65, length=2097154:   1404370.00	   115146.00 ( 91.80%)	    93296.20 ( 93.36%)	   115140.00 ( 91.80%)	
char=65, length=2097155:   1404480.00	   115169.00 ( 91.80%)	    93301.20 ( 93.36%)	   115150.00 ( 91.80%)	
char=65, length=2097156:   1404360.00	   115362.00 ( 91.79%)	    93307.50 ( 93.36%)	   115140.00 ( 91.80%)	
char=65, length=2097157:   1404380.00	   115151.00 ( 91.80%)	    93302.50 ( 93.36%)	   115355.00 ( 91.79%)	
char=65, length=2097158:   1404490.00	   115161.00 ( 91.80%)	    93300.00 ( 93.36%)	   115144.00 ( 91.80%)	
char=65, length=2097159:   1404570.00	   115142.00 ( 91.80%)	    93323.80 ( 93.36%)	   115132.00 ( 91.80%)	
char=65, length=2097160:   1404360.00	   115336.00 ( 91.79%)	    93297.50 ( 93.36%)	   115135.00 ( 91.80%)	
char=65, length=2097161:   1404380.00	   115160.00 ( 91.80%)	    93491.20 ( 93.34%)	   115155.00 ( 91.80%)	
char=65, length=2097162:   1404430.00	   115151.00 ( 91.80%)	    93290.00 ( 93.36%)	   115515.00 ( 91.77%)	
char=65, length=2097163:   1404420.00	   115158.00 ( 91.80%)	    93290.00 ( 93.36%)	   115139.00 ( 91.80%)	
char=65, length=2097164:   1404490.00	   115160.00 ( 91.80%)	    93288.80 ( 93.36%)	   115154.00 ( 91.80%)	
char=65, length=2097165:   1404390.00	   115366.00 ( 91.79%)	    93305.00 ( 93.36%)	   115142.00 ( 91.80%)	
char=65, length=2097166:   1404360.00	   115152.00 ( 91.80%)	    93292.50 ( 93.36%)	   115161.00 ( 91.80%)	
char=65, length=2097167:   1404500.00	   115154.00 ( 91.80%)	    93296.20 ( 93.36%)	   115134.00 ( 91.80%)	
char=65, length=4194304:   2820350.00	   241238.00 ( 91.45%)	   197652.00 ( 92.99%)	   241185.00 ( 91.45%)	
char=65, length=4194305:   2820520.00	   241565.00 ( 91.44%)	   197990.00 ( 92.98%)	   241602.00 ( 91.43%)	
char=65, length=4194306:   2820130.00	   241992.00 ( 91.42%)	   198000.00 ( 92.98%)	   241568.00 ( 91.43%)	
char=65, length=4194307:   2820100.00	   241585.00 ( 91.43%)	   198388.00 ( 92.97%)	   241562.00 ( 91.43%)	
char=65, length=4194308:   2820390.00	   241590.00 ( 91.43%)	   197950.00 ( 92.98%)	   242052.00 ( 91.42%)	
char=65, length=4194309:   2820120.00	   241582.00 ( 91.43%)	   197992.00 ( 92.98%)	   241550.00 ( 91.43%)	
char=65, length=4194310:   2820440.00	   241552.00 ( 91.44%)	   197968.00 ( 92.98%)	   241558.00 ( 91.44%)	
char=65, length=4194311:   2820220.00	   242058.00 ( 91.42%)	   197992.00 ( 92.98%)	   241562.00 ( 91.43%)	
char=65, length=4194312:   2820160.00	   242228.00 ( 91.41%)	   197975.00 ( 92.98%)	   241525.00 ( 91.44%)	
char=65, length=4194313:   2820140.00	   241562.00 ( 91.43%)	   198012.00 ( 92.98%)	   241572.00 ( 91.43%)	
char=65, length=4194314:   2820120.00	   241585.00 ( 91.43%)	   197972.00 ( 92.98%)	   241982.00 ( 91.42%)	
char=65, length=4194315:   2820060.00	   241588.00 ( 91.43%)	   197965.00 ( 92.98%)	   241532.00 ( 91.44%)	
char=65, length=4194316:   2820440.00	   241610.00 ( 91.43%)	   197980.00 ( 92.98%)	   241548.00 ( 91.44%)	
char=65, length=4194317:   2820340.00	   242028.00 ( 91.42%)	   197978.00 ( 92.98%)	   241555.00 ( 91.44%)	
char=65, length=4194318:   2820130.00	   241580.00 ( 91.43%)	   198400.00 ( 92.96%)	   241585.00 ( 91.43%)	
char=65, length=4194319:   2820090.00	   241565.00 ( 91.43%)	   197982.00 ( 92.98%)	   242000.00 ( 91.42%)	
char=65, length=8388608:   5686230.00	   528195.00 ( 90.71%)	   440720.00 ( 92.25%)	   529015.00 ( 90.70%)	
char=65, length=8388609:   5685880.00	   528735.00 ( 90.70%)	   441455.00 ( 92.24%)	   528695.00 ( 90.70%)	
char=65, length=8388610:   5687520.00	   528765.00 ( 90.70%)	   441505.00 ( 92.24%)	   528620.00 ( 90.71%)	
char=65, length=8388611:   5686800.00	   528835.00 ( 90.70%)	   441535.00 ( 92.24%)	   528595.00 ( 90.70%)	
char=65, length=8388612:   5686580.00	   528865.00 ( 90.70%)	   441495.00 ( 92.24%)	   528655.00 ( 90.70%)	
char=65, length=8388613:   5686250.00	   529820.00 ( 90.68%)	   441500.00 ( 92.24%)	   528715.00 ( 90.70%)	
char=65, length=8388614:   5686860.00	   529755.00 ( 90.68%)	   441535.00 ( 92.24%)	   528665.00 ( 90.70%)	
char=65, length=8388615:   5686460.00	   528785.00 ( 90.70%)	   442750.00 ( 92.21%)	   528630.00 ( 90.70%)	
char=65, length=8388616:   5685890.00	   528750.00 ( 90.70%)	   442335.00 ( 92.22%)	   528715.00 ( 90.70%)	
char=65, length=8388617:   5685880.00	   528725.00 ( 90.70%)	   441430.00 ( 92.24%)	   529835.00 ( 90.68%)	
char=65, length=8388618:   5685860.00	   528765.00 ( 90.70%)	   441465.00 ( 92.24%)	   530245.00 ( 90.67%)	
char=65, length=8388619:   5686020.00	   528745.00 ( 90.70%)	   441575.00 ( 92.23%)	   528655.00 ( 90.70%)	
char=65, length=8388620:   5686700.00	   528770.00 ( 90.70%)	   441485.00 ( 92.24%)	   528630.00 ( 90.70%)	
char=65, length=8388621:   5686720.00	   528760.00 ( 90.70%)	   441480.00 ( 92.24%)	   528790.00 ( 90.70%)	
char=65, length=8388622:   5686460.00	   528685.00 ( 90.70%)	   441485.00 ( 92.24%)	   528690.00 ( 90.70%)	
char=65, length=8388623:   5686650.00	   529960.00 ( 90.68%)	   441530.00 ( 92.24%)	   528665.00 ( 90.70%)	
char=65, length=16777216:  11556900.00	  1240880.00 ( 89.26%)	  1063510.00 ( 90.80%)	  1237420.00 ( 89.29%)	
char=65, length=16777217:  11555500.00	  1241940.00 ( 89.25%)	  1064850.00 ( 90.78%)	  1239080.00 ( 89.28%)	
char=65, length=16777218:  11556100.00	  1239600.00 ( 89.27%)	  1064670.00 ( 90.79%)	  1239120.00 ( 89.28%)	
char=65, length=16777219:  11557500.00	  1239590.00 ( 89.27%)	  1064720.00 ( 90.79%)	  1239060.00 ( 89.28%)	
char=65, length=16777220:  11556800.00	  1239630.00 ( 89.27%)	  1064490.00 ( 90.79%)	  1238970.00 ( 89.28%)	
char=65, length=16777221:  11556500.00	  1239710.00 ( 89.27%)	  1064740.00 ( 90.79%)	  1238990.00 ( 89.28%)	
char=65, length=16777222:  11554100.00	  1239530.00 ( 89.27%)	  1064720.00 ( 90.78%)	  1241280.00 ( 89.26%)	
char=65, length=16777223:  11554700.00	  1239180.00 ( 89.28%)	  1064680.00 ( 90.79%)	  1243280.00 ( 89.24%)	
char=65, length=16777224:  11555400.00	  1239620.00 ( 89.27%)	  1064870.00 ( 90.78%)	  1242300.00 ( 89.25%)	
char=65, length=16777225:  11555100.00	  1239920.00 ( 89.27%)	  1066680.00 ( 90.77%)	  1239330.00 ( 89.27%)	
char=65, length=16777226:  11554900.00	  1239530.00 ( 89.27%)	  1067080.00 ( 90.77%)	  1239040.00 ( 89.28%)	
char=65, length=16777227:  11554700.00	  1239610.00 ( 89.27%)	  1067490.00 ( 90.76%)	  1239530.00 ( 89.27%)	
char=65, length=16777228:  11556700.00	  1239540.00 ( 89.27%)	  1070950.00 ( 90.73%)	  1240180.00 ( 89.27%)	
char=65, length=16777229:  11556400.00	  1242020.00 ( 89.25%)	  1065110.00 ( 90.78%)	  1239150.00 ( 89.28%)	
char=65, length=16777230:  11555200.00	  1241370.00 ( 89.26%)	  1064920.00 ( 90.78%)	  1238960.00 ( 89.28%)	
char=65, length=16777231:  11555200.00	  1241740.00 ( 89.25%)	  1064900.00 ( 90.78%)	  1239230.00 ( 89.28%)	
char=65, length=33554432:  23858600.00	  3207660.00 ( 86.56%)	  2856120.00 ( 88.03%)	  3216300.00 ( 86.52%)	
char=65, length=33554433:  23845700.00	  3210100.00 ( 86.54%)	  2866000.00 ( 87.98%)	  3209200.00 ( 86.54%)	
char=65, length=33554434:  23845600.00	  3216460.00 ( 86.51%)	  2858920.00 ( 88.01%)	  3207800.00 ( 86.55%)	
char=65, length=33554435:  23848200.00	  3208580.00 ( 86.55%)	  2857620.00 ( 88.02%)	  3218360.00 ( 86.50%)	
char=65, length=33554436:  23851300.00	  3217440.00 ( 86.51%)	  2859780.00 ( 88.01%)	  3208920.00 ( 86.55%)	
char=65, length=33554437:  23851900.00	  3209140.00 ( 86.55%)	  2857960.00 ( 88.02%)	  3216940.00 ( 86.51%)	
char=65, length=33554438:  23843600.00	  3209840.00 ( 86.54%)	  2867700.00 ( 87.97%)	  3208880.00 ( 86.54%)	
char=65, length=33554439:  23845100.00	  3216820.00 ( 86.51%)	  2859580.00 ( 88.01%)	  3208260.00 ( 86.55%)	
char=65, length=33554440:  23857500.00	  3209280.00 ( 86.55%)	  2858880.00 ( 88.02%)	  3220500.00 ( 86.50%)	
char=65, length=33554441:  23845800.00	  3214880.00 ( 86.52%)	  2859700.00 ( 88.01%)	  3207680.00 ( 86.55%)	
char=65, length=33554442:  23850700.00	  3209820.00 ( 86.54%)	  2856940.00 ( 88.02%)	  3216120.00 ( 86.52%)	
char=65, length=33554443:  23845100.00	  3209980.00 ( 86.54%)	  2874500.00 ( 87.95%)	  3209320.00 ( 86.54%)	
char=65, length=33554444:  23846100.00	  3215820.00 ( 86.51%)	  2858660.00 ( 88.01%)	  3207520.00 ( 86.55%)	
char=65, length=33554445:  23848600.00	  3210100.00 ( 86.54%)	  2856440.00 ( 88.02%)	  3219680.00 ( 86.50%)	
char=65, length=33554446:  23844300.00	  3216220.00 ( 86.51%)	  2859760.00 ( 88.01%)	  3207000.00 ( 86.55%)	
char=65, length=33554447:  23854000.00	  3211120.00 ( 86.54%)	  2858340.00 ( 88.02%)	  3219580.00 ( 86.50%)	
char=0, length=128:        89.05	       11.35 ( 87.25%)	        6.68 ( 92.50%)	       11.36 ( 87.24%)	
char=0, length=129:        89.78	       15.02 ( 83.28%)	       29.97 ( 66.62%)	       24.54 ( 72.67%)	
char=0, length=130:        91.37	       21.36 ( 76.62%)	        8.02 ( 91.23%)	       15.02 ( 83.57%)	
char=0, length=131:        92.06	       21.35 ( 76.81%)	       20.63 ( 77.60%)	       15.02 ( 83.69%)	
char=0, length=132:        91.71	       15.02 ( 83.63%)	        8.02 ( 91.26%)	       15.03 ( 83.61%)	
char=0, length=133:        92.37	       15.02 ( 83.74%)	        8.02 ( 91.32%)	       15.03 ( 83.73%)	
char=0, length=134:        94.03	       15.03 ( 84.02%)	        8.02 ( 91.48%)	       15.02 ( 84.03%)	
char=0, length=135:        94.72	       15.02 ( 84.15%)	        8.02 ( 91.54%)	       15.08 ( 84.08%)	
char=0, length=136:        94.48	       11.35 ( 87.99%)	        6.68 ( 92.93%)	       11.36 ( 87.97%)	
char=0, length=137:        95.04	       15.02 ( 84.20%)	        8.02 ( 91.56%)	       15.03 ( 84.19%)	
char=0, length=138:        96.74	       15.03 ( 84.46%)	        8.02 ( 91.71%)	       15.02 ( 84.48%)	
char=0, length=139:        97.39	       15.02 ( 84.58%)	        8.02 ( 91.77%)	       15.02 ( 84.58%)	
char=0, length=140:        97.04	       15.02 ( 84.53%)	        8.02 ( 91.74%)	       15.03 ( 84.51%)	
char=0, length=141:        97.82	       15.02 ( 84.65%)	       14.39 ( 85.29%)	       20.56 ( 78.98%)	
char=0, length=142:        99.38	       15.02 ( 84.89%)	        8.02 ( 91.93%)	       15.04 ( 84.87%)	
char=0, length=143:       100.04	       20.75 ( 79.26%)	       30.40 ( 69.61%)	       30.64 ( 69.38%)	
char=0, length=256:       174.51	       30.35 ( 82.61%)	       29.95 ( 82.84%)	       30.35 ( 82.61%)	
char=0, length=257:       175.08	       29.89 ( 82.93%)	       29.92 ( 82.91%)	       29.91 ( 82.92%)	
char=0, length=258:       176.75	       29.89 ( 83.09%)	       30.25 ( 82.88%)	       30.11 ( 82.97%)	
char=0, length=259:       177.41	       29.92 ( 83.14%)	       29.92 ( 83.14%)	       29.94 ( 83.12%)	
char=0, length=260:       177.07	       21.03 ( 88.12%)	       13.37 ( 92.45%)	       21.39 ( 87.92%)	
char=0, length=261:       177.84	       29.92 ( 83.18%)	       29.94 ( 83.16%)	       29.92 ( 83.18%)	
char=0, length=262:       179.43	       30.70 ( 82.89%)	       30.25 ( 83.14%)	       30.26 ( 83.13%)	
char=0, length=263:       180.07	       29.89 ( 83.40%)	       29.94 ( 83.37%)	       29.89 ( 83.40%)	
char=0, length=264:       179.82	       17.05 ( 90.52%)	       30.46 ( 83.06%)	       30.70 ( 82.93%)	
char=0, length=265:       180.41	       36.29 ( 79.88%)	       13.37 ( 92.59%)	       21.39 ( 88.15%)	
char=0, length=266:       182.08	       21.03 ( 88.45%)	       29.94 ( 83.56%)	       29.92 ( 83.57%)	
char=0, length=267:       182.74	       23.93 ( 86.90%)	       29.92 ( 83.63%)	       29.89 ( 83.64%)	
char=0, length=268:       182.42	       21.03 ( 88.47%)	       13.36 ( 92.67%)	       21.37 ( 88.29%)	
char=0, length=269:       183.17	       21.03 ( 88.52%)	       13.36 ( 92.70%)	       21.37 ( 88.34%)	
char=0, length=270:       184.76	       29.92 ( 83.81%)	       29.92 ( 83.81%)	       29.94 ( 83.79%)	
char=0, length=271:       185.40	       21.03 ( 88.66%)	       30.48 ( 83.56%)	       37.04 ( 80.02%)	
char=0, length=512:       345.14	       39.48 ( 88.56%)	       30.61 ( 91.13%)	       39.43 ( 88.58%)	
char=0, length=513:       345.80	       39.69 ( 88.52%)	       30.55 ( 91.16%)	       39.46 ( 88.59%)	
char=0, length=514:       347.49	       39.48 ( 88.64%)	       30.73 ( 91.16%)	       39.52 ( 88.63%)	
char=0, length=515:       348.16	       39.53 ( 88.65%)	       30.54 ( 91.23%)	       39.80 ( 88.57%)	
char=0, length=516:       347.94	       39.65 ( 88.60%)	       30.39 ( 91.26%)	       39.67 ( 88.60%)	
char=0, length=517:       348.47	       39.49 ( 88.67%)	       30.73 ( 91.18%)	       39.45 ( 88.68%)	
char=0, length=518:       350.13	       39.73 ( 88.65%)	       30.40 ( 91.32%)	       39.66 ( 88.67%)	
char=0, length=519:       350.81	       39.55 ( 88.73%)	       30.40 ( 91.34%)	       39.67 ( 88.69%)	
char=0, length=520:       350.47	       39.51 ( 88.73%)	       30.43 ( 91.32%)	       39.52 ( 88.72%)	
char=0, length=521:       351.25	       39.55 ( 88.74%)	       30.73 ( 91.25%)	       39.46 ( 88.77%)	
char=0, length=522:       352.81	       39.51 ( 88.80%)	       30.40 ( 91.38%)	       39.51 ( 88.80%)	
char=0, length=523:       353.50	       39.50 ( 88.82%)	       30.40 ( 91.40%)	       39.49 ( 88.83%)	
char=0, length=524:       353.23	       39.52 ( 88.81%)	       30.40 ( 91.39%)	       39.48 ( 88.82%)	
char=0, length=525:       353.81	       39.50 ( 88.84%)	       30.56 ( 91.36%)	       39.46 ( 88.85%)	
char=0, length=526:       355.48	       39.50 ( 88.89%)	       30.45 ( 91.43%)	       39.45 ( 88.90%)	
char=0, length=527:       356.16	       39.53 ( 88.90%)	       30.44 ( 91.45%)	       39.50 ( 88.91%)	
char=0, length=1024:       694.94	       40.09 ( 94.23%)	       41.36 ( 94.05%)	       40.00 ( 94.24%)	
char=0, length=1025:       695.61	       41.33 ( 94.06%)	       39.58 ( 94.31%)	       41.30 ( 94.06%)	
char=0, length=1026:       696.31	       39.57 ( 94.32%)	       39.66 ( 94.30%)	       39.64 ( 94.31%)	
char=0, length=1027:       696.96	       39.76 ( 94.29%)	       39.81 ( 94.29%)	       39.68 ( 94.31%)	
char=0, length=1028:       697.65	       39.58 ( 94.33%)	       40.26 ( 94.23%)	       40.13 ( 94.25%)	
char=0, length=1029:       698.27	       39.59 ( 94.33%)	       39.78 ( 94.30%)	       39.61 ( 94.33%)	
char=0, length=1030:       698.98	       39.59 ( 94.34%)	       39.56 ( 94.34%)	       39.59 ( 94.34%)	
char=0, length=1031:       699.61	       39.54 ( 94.35%)	       39.86 ( 94.30%)	       39.65 ( 94.33%)	
char=0, length=1032:       700.26	       39.54 ( 94.35%)	       39.54 ( 94.35%)	       39.57 ( 94.35%)	
char=0, length=1033:       701.05	       39.52 ( 94.36%)	       39.52 ( 94.36%)	       39.52 ( 94.36%)	
char=0, length=1034:       701.61	       39.51 ( 94.37%)	       39.51 ( 94.37%)	       39.61 ( 94.36%)	
char=0, length=1035:       702.27	       40.55 ( 94.23%)	       40.29 ( 94.26%)	       40.09 ( 94.29%)	
char=0, length=1036:       702.99	       39.60 ( 94.37%)	       39.97 ( 94.31%)	       39.60 ( 94.37%)	
char=0, length=1037:       703.60	       39.53 ( 94.38%)	       39.70 ( 94.36%)	       39.54 ( 94.38%)	
char=0, length=1038:       704.28	       39.57 ( 94.38%)	       40.00 ( 94.32%)	       39.60 ( 94.38%)	
char=0, length=1039:       704.98	       42.79 ( 93.93%)	       39.55 ( 94.39%)	       42.79 ( 93.93%)	
char=0, length=2048:      1377.88	       43.49 ( 96.84%)	       43.50 ( 96.84%)	       42.97 ( 96.88%)	
char=0, length=2049:      1378.53	       42.91 ( 96.89%)	       42.17 ( 96.94%)	       42.79 ( 96.90%)	
char=0, length=2050:      1379.20	       42.18 ( 96.94%)	       42.17 ( 96.94%)	       42.44 ( 96.92%)	
char=0, length=2051:      1379.88	       42.18 ( 96.94%)	       42.92 ( 96.89%)	       43.01 ( 96.88%)	
char=0, length=2052:      1380.55	       42.17 ( 96.95%)	       42.17 ( 96.95%)	       42.17 ( 96.95%)	
char=0, length=2053:      1381.30	       42.17 ( 96.95%)	       42.17 ( 96.95%)	       42.17 ( 96.95%)	
char=0, length=2054:      1381.87	       40.33 ( 97.08%)	       40.19 ( 97.09%)	       41.66 ( 96.98%)	
char=0, length=2055:      1382.64	       42.91 ( 96.90%)	       41.77 ( 96.98%)	       42.91 ( 96.90%)	
char=0, length=2056:      1383.31	       41.76 ( 96.98%)	       40.02 ( 97.11%)	       41.69 ( 96.99%)	
char=0, length=2057:      1383.98	       41.87 ( 96.97%)	       41.88 ( 96.97%)	       41.74 ( 96.98%)	
char=0, length=2058:      1384.54	       40.24 ( 97.09%)	       39.67 ( 97.14%)	       41.25 ( 97.02%)	
char=0, length=2059:      1385.29	       40.25 ( 97.09%)	       39.92 ( 97.12%)	       41.24 ( 97.02%)	
char=0, length=2060:      1385.88	       40.25 ( 97.10%)	       39.92 ( 97.12%)	       41.24 ( 97.02%)	
char=0, length=2061:      1386.74	       40.26 ( 97.10%)	       39.84 ( 97.13%)	       41.24 ( 97.03%)	
char=0, length=2062:      1387.24	       40.26 ( 97.10%)	       40.21 ( 97.10%)	       41.24 ( 97.03%)	
char=0, length=2063:      1387.96	       40.25 ( 97.10%)	       39.77 ( 97.13%)	       41.24 ( 97.03%)	
char=0, length=4096:      2743.77	       86.29 ( 96.85%)	       88.94 ( 96.76%)	       88.93 ( 96.76%)	
char=0, length=4097:      2744.41	       86.36 ( 96.85%)	       85.96 ( 96.87%)	       86.00 ( 96.87%)	
char=0, length=4098:      2745.35	       81.22 ( 97.04%)	       81.19 ( 97.04%)	       81.24 ( 97.04%)	
char=0, length=4099:      2745.85	       82.83 ( 96.98%)	       83.68 ( 96.95%)	       84.08 ( 96.94%)	
char=0, length=4100:      2746.42	       82.44 ( 97.00%)	       82.41 ( 97.00%)	       82.39 ( 97.00%)	
char=0, length=4101:      2747.07	       80.61 ( 97.07%)	       80.60 ( 97.07%)	       79.81 ( 97.09%)	
char=0, length=4102:      2747.74	       76.10 ( 97.23%)	       76.06 ( 97.23%)	       76.04 ( 97.23%)	
char=0, length=4103:      2748.39	       72.99 ( 97.34%)	       73.13 ( 97.34%)	       72.94 ( 97.35%)	
char=0, length=4104:      2749.53	       70.73 ( 97.43%)	       74.39 ( 97.29%)	       73.67 ( 97.32%)	
char=0, length=4105:      2749.77	       70.57 ( 97.43%)	       70.53 ( 97.44%)	       70.63 ( 97.43%)	
char=0, length=4106:      2750.62	       71.07 ( 97.42%)	       70.76 ( 97.43%)	       71.01 ( 97.42%)	
char=0, length=4107:      2751.10	       65.91 ( 97.60%)	       64.96 ( 97.64%)	       65.96 ( 97.60%)	
char=0, length=4108:      2751.73	       65.01 ( 97.64%)	       65.18 ( 97.63%)	       65.10 ( 97.63%)	
char=0, length=4109:      2752.66	       63.35 ( 97.70%)	       63.34 ( 97.70%)	       63.48 ( 97.69%)	
char=0, length=4110:      2753.10	       63.35 ( 97.70%)	       63.34 ( 97.70%)	       63.47 ( 97.69%)	
char=0, length=4111:      2753.93	       63.34 ( 97.70%)	       63.32 ( 97.70%)	       63.34 ( 97.70%)	
char=0, length=8192:      5475.47	      201.91 ( 96.31%)	      201.89 ( 96.31%)	      201.84 ( 96.31%)	
char=0, length=8193:      5476.50	      195.81 ( 96.42%)	      195.61 ( 96.43%)	      195.51 ( 96.43%)	
char=0, length=8194:      5477.21	      193.20 ( 96.47%)	      193.16 ( 96.47%)	      193.23 ( 96.47%)	
char=0, length=8195:      5477.89	      190.24 ( 96.53%)	      190.24 ( 96.53%)	      190.19 ( 96.53%)	
char=0, length=8196:      5478.22	      190.95 ( 96.51%)	      191.08 ( 96.51%)	      191.07 ( 96.51%)	
char=0, length=8197:      5479.14	      189.02 ( 96.55%)	      189.03 ( 96.55%)	      189.00 ( 96.55%)	
char=0, length=8198:      5479.47	      190.96 ( 96.51%)	      190.93 ( 96.52%)	      190.87 ( 96.52%)	
char=0, length=8199:      5480.86	      181.83 ( 96.68%)	      181.82 ( 96.68%)	      181.82 ( 96.68%)	
char=0, length=8200:      5480.87	      181.17 ( 96.69%)	      181.15 ( 96.69%)	      181.16 ( 96.69%)	
char=0, length=8201:      5481.89	      175.25 ( 96.80%)	      175.23 ( 96.80%)	      177.17 ( 96.77%)	
char=0, length=8202:      5482.13	      175.54 ( 96.80%)	      175.53 ( 96.80%)	      175.56 ( 96.80%)	
char=0, length=8203:      5483.16	      171.68 ( 96.87%)	      171.72 ( 96.87%)	      171.67 ( 96.87%)	
char=0, length=8204:      5483.47	      171.66 ( 96.87%)	      171.66 ( 96.87%)	      171.72 ( 96.87%)	
char=0, length=8205:      5484.54	      171.51 ( 96.87%)	      169.25 ( 96.91%)	      169.52 ( 96.91%)	
char=0, length=8206:      5484.82	      166.02 ( 96.97%)	      167.93 ( 96.94%)	      168.25 ( 96.93%)	
char=0, length=8207:      5485.50	      164.35 ( 97.00%)	      164.73 ( 97.00%)	      164.33 ( 97.00%)	
char=0, length=16384:     10938.90	      437.46 ( 96.00%)	      437.50 ( 96.00%)	      437.44 ( 96.00%)	
char=0, length=16385:     10939.60	      437.37 ( 96.00%)	      438.76 ( 95.99%)	      437.35 ( 96.00%)	
char=0, length=16386:     10941.00	      440.32 ( 95.98%)	      440.38 ( 95.97%)	      440.15 ( 95.98%)	
char=0, length=16387:     10941.10	      437.51 ( 96.00%)	      433.79 ( 96.04%)	      433.82 ( 96.03%)	
char=0, length=16388:     10941.60	      431.89 ( 96.05%)	      431.96 ( 96.05%)	      431.80 ( 96.05%)	
char=0, length=16389:     10942.30	      431.90 ( 96.05%)	      430.44 ( 96.07%)	      431.71 ( 96.05%)	
char=0, length=16390:     10942.90	      433.76 ( 96.04%)	      433.83 ( 96.04%)	      433.72 ( 96.04%)	
char=0, length=16391:     10949.00	      460.79 ( 95.79%)	      466.85 ( 95.74%)	      466.83 ( 95.74%)	
char=0, length=16392:     10945.40	      468.13 ( 95.72%)	      467.99 ( 95.72%)	      467.92 ( 95.72%)	
char=0, length=16393:     10945.90	      468.09 ( 95.72%)	      469.31 ( 95.71%)	      469.28 ( 95.71%)	
char=0, length=16394:     10946.00	      471.50 ( 95.69%)	      471.49 ( 95.69%)	      471.53 ( 95.69%)	
char=0, length=16395:     10947.10	      466.06 ( 95.74%)	      465.82 ( 95.74%)	      465.88 ( 95.74%)	
char=0, length=16396:     10948.30	      467.75 ( 95.73%)	      469.00 ( 95.72%)	      470.77 ( 95.70%)	
char=0, length=16397:     10947.70	      470.38 ( 95.70%)	      470.34 ( 95.70%)	      470.29 ( 95.70%)	
char=0, length=16398:     10948.40	      467.84 ( 95.73%)	      469.53 ( 95.71%)	      467.89 ( 95.73%)	
char=0, length=16399:     10949.00	      464.76 ( 95.76%)	      464.76 ( 95.76%)	      464.87 ( 95.75%)	
char=0, length=32768:     21865.80	     1023.86 ( 95.32%)	     1021.01 ( 95.33%)	     1020.96 ( 95.33%)	
char=0, length=32769:     21868.50	     1022.50 ( 95.32%)	     1022.56 ( 95.32%)	     1022.46 ( 95.32%)	
char=0, length=32770:     21868.90	     1017.03 ( 95.35%)	     1017.05 ( 95.35%)	     1016.94 ( 95.35%)	
char=0, length=32771:     21868.00	     1014.07 ( 95.36%)	     1014.38 ( 95.36%)	     1013.99 ( 95.36%)	
char=0, length=32772:     21870.80	     1007.43 ( 95.39%)	     1007.08 ( 95.40%)	     1007.51 ( 95.39%)	
char=0, length=32773:     21869.20	     1004.68 ( 95.41%)	     1004.64 ( 95.41%)	     1007.75 ( 95.39%)	
char=0, length=32774:     21871.10	     1000.59 ( 95.43%)	     1000.72 ( 95.42%)	     1000.66 ( 95.42%)	
char=0, length=32775:     21871.00	      997.87 ( 95.44%)	      997.89 ( 95.44%)	      997.79 ( 95.44%)	
char=0, length=32776:     21871.50	      997.27 ( 95.44%)	      998.44 ( 95.43%)	     1003.08 ( 95.41%)	
char=0, length=32777:     21873.30	     1000.27 ( 95.43%)	     1000.23 ( 95.43%)	      999.92 ( 95.43%)	
char=0, length=32778:     21872.70	      998.50 ( 95.43%)	      998.36 ( 95.44%)	      998.24 ( 95.44%)	
char=0, length=32779:     21876.10	      993.00 ( 95.46%)	      992.74 ( 95.46%)	      993.07 ( 95.46%)	
char=0, length=32780:     21874.40	      988.51 ( 95.48%)	      988.47 ( 95.48%)	      991.38 ( 95.47%)	
char=0, length=32781:     21874.40	      983.75 ( 95.50%)	      983.84 ( 95.50%)	      984.22 ( 95.50%)	
char=0, length=32782:     21875.20	      979.88 ( 95.52%)	      987.63 ( 95.49%)	      984.61 ( 95.50%)	
char=0, length=32783:     21877.20	      992.55 ( 95.46%)	      992.59 ( 95.46%)	      992.70 ( 95.46%)	
char=0, length=65536:     43721.60	     2104.29 ( 95.19%)	     2097.86 ( 95.20%)	     2097.23 ( 95.20%)	
char=0, length=65537:     43727.80	     2101.09 ( 95.20%)	     2100.62 ( 95.20%)	     2101.45 ( 95.19%)	
char=0, length=65538:     43730.10	     2100.47 ( 95.20%)	     2100.59 ( 95.20%)	     2100.66 ( 95.20%)	
char=0, length=65539:     43727.50	     2099.88 ( 95.20%)	     2099.45 ( 95.20%)	     2101.52 ( 95.19%)	
char=0, length=65540:     43727.70	     2100.20 ( 95.20%)	     2099.80 ( 95.20%)	     2100.27 ( 95.20%)	
char=0, length=65541:     43728.80	     2097.07 ( 95.20%)	     2106.13 ( 95.18%)	     2099.10 ( 95.20%)	
char=0, length=65542:     43729.90	     2099.22 ( 95.20%)	     2098.71 ( 95.20%)	     2098.95 ( 95.20%)	
char=0, length=65543:     43730.00	     2100.70 ( 95.20%)	     2095.47 ( 95.21%)	     2094.88 ( 95.21%)	
char=0, length=65544:     43730.70	     2094.10 ( 95.21%)	     2094.26 ( 95.21%)	     2093.91 ( 95.21%)	
char=0, length=65545:     43734.40	     2086.91 ( 95.23%)	     2087.11 ( 95.23%)	     2087.03 ( 95.23%)	
char=0, length=65546:     43732.10	     2085.78 ( 95.23%)	     2086.52 ( 95.23%)	     2096.05 ( 95.21%)	
char=0, length=65547:     43733.50	     2083.28 ( 95.24%)	     2083.91 ( 95.23%)	     2083.32 ( 95.24%)	
char=0, length=65548:     43734.10	     2079.06 ( 95.25%)	     2084.41 ( 95.23%)	     2078.09 ( 95.25%)	
char=0, length=65549:     43734.10	     2075.00 ( 95.26%)	     2074.73 ( 95.26%)	     2074.34 ( 95.26%)	
char=0, length=65550:     43749.70	     2081.84 ( 95.24%)	     2076.37 ( 95.25%)	     2080.39 ( 95.24%)	
char=0, length=65551:     43735.50	     2080.08 ( 95.24%)	     2079.53 ( 95.25%)	     2079.30 ( 95.25%)	
char=0, length=131072:     87453.10	     4309.38 ( 95.07%)	     4314.61 ( 95.07%)	     4314.38 ( 95.07%)	
char=0, length=131073:     87453.40	     4338.75 ( 95.04%)	     4340.39 ( 95.04%)	     4352.97 ( 95.02%)	
char=0, length=131074:     87451.60	     4336.88 ( 95.04%)	     4336.88 ( 95.04%)	     4335.70 ( 95.04%)	
char=0, length=131075:     87451.60	     4336.95 ( 95.04%)	     4348.52 ( 95.03%)	     4336.56 ( 95.04%)	
char=0, length=131076:     87451.90	     4334.22 ( 95.04%)	     4333.59 ( 95.04%)	     4333.36 ( 95.04%)	
char=0, length=131077:     87469.20	     4333.52 ( 95.05%)	     4333.75 ( 95.05%)	     4334.61 ( 95.04%)	
char=0, length=131078:     87454.70	     4330.39 ( 95.05%)	     4329.53 ( 95.05%)	     4329.61 ( 95.05%)	
char=0, length=131079:     87461.40	     4327.03 ( 95.05%)	     4326.48 ( 95.05%)	     4326.56 ( 95.05%)	
char=0, length=131080:     87454.50	     4326.72 ( 95.05%)	     4336.88 ( 95.04%)	     4327.81 ( 95.05%)	
char=0, length=131081:     87454.10	     4324.69 ( 95.05%)	     4324.69 ( 95.05%)	     4324.53 ( 95.06%)	
char=0, length=131082:     87464.40	     4336.80 ( 95.04%)	     4325.23 ( 95.05%)	     4324.38 ( 95.06%)	
char=0, length=131083:     87457.90	     4324.92 ( 95.05%)	     4324.30 ( 95.06%)	     4326.09 ( 95.05%)	
char=0, length=131084:     87463.20	     4319.30 ( 95.06%)	     4318.75 ( 95.06%)	     4319.30 ( 95.06%)	
char=0, length=131085:     87458.40	     4356.72 ( 95.02%)	     4519.92 ( 94.83%)	     4510.86 ( 94.84%)	
char=0, length=131086:     87479.50	     4447.97 ( 94.92%)	     4449.53 ( 94.91%)	     4450.31 ( 94.91%)	
char=0, length=131087:     87480.60	     4477.58 ( 94.88%)	     4463.28 ( 94.90%)	     4460.47 ( 94.90%)	
char=0, length=262144:    174931.00	     8951.09 ( 94.88%)	     8947.66 ( 94.89%)	     8946.88 ( 94.89%)	
char=0, length=262145:    174949.00	     8966.09 ( 94.88%)	     8967.19 ( 94.87%)	     8967.34 ( 94.87%)	
char=0, length=262146:    174935.00	     8965.47 ( 94.87%)	     8962.19 ( 94.88%)	     8985.62 ( 94.86%)	
char=0, length=262147:    174932.00	     8960.16 ( 94.88%)	     8961.09 ( 94.88%)	     8958.12 ( 94.88%)	
char=0, length=262148:    174956.00	     8984.06 ( 94.86%)	     8957.50 ( 94.88%)	     8956.25 ( 94.88%)	
char=0, length=262149:    174935.00	     8955.94 ( 94.88%)	     8952.97 ( 94.88%)	     8953.91 ( 94.88%)	
char=0, length=262150:    174946.00	     8950.16 ( 94.88%)	     8949.22 ( 94.88%)	     8948.12 ( 94.89%)	
char=0, length=262151:    174935.00	     8947.03 ( 94.89%)	     8947.97 ( 94.88%)	     8968.91 ( 94.87%)	
char=0, length=262152:    174932.00	     8942.97 ( 94.89%)	     8941.56 ( 94.89%)	     8942.97 ( 94.89%)	
char=0, length=262153:    174955.00	     8962.19 ( 94.88%)	     8938.75 ( 94.89%)	     8939.53 ( 94.89%)	
char=0, length=262154:    174938.00	     8936.09 ( 94.89%)	     8938.59 ( 94.89%)	     8936.72 ( 94.89%)	
char=0, length=262155:    174954.00	     8931.72 ( 94.89%)	     8931.88 ( 94.89%)	     8931.72 ( 94.89%)	
char=0, length=262156:    174938.00	     8930.31 ( 94.90%)	     8931.09 ( 94.89%)	     8955.00 ( 94.00%)	
char=0, length=262157:    174937.00	     8927.19 ( 94.90%)	     8926.56 ( 94.90%)	     8928.75 ( 94.90%)	
char=0, length=262158:    174955.00	     8927.34 ( 94.90%)	     8950.62 ( 94.88%)	     8927.19 ( 94.90%)	
char=0, length=262159:    174940.00	     8923.44 ( 94.90%)	     8924.22 ( 94.90%)	     8922.19 ( 94.90%)	
char=0, length=524288:    350005.00	    18026.60 ( 94.85%)	    18025.60 ( 94.85%)	    18030.30 ( 94.85%)	
char=0, length=524289:    350030.00	    18066.60 ( 94.84%)	    18070.30 ( 94.84%)	    18109.40 ( 94.83%)	
char=0, length=524290:    350023.00	    18059.10 ( 94.84%)	    18060.30 ( 94.84%)	    18078.10 ( 94.84%)	
char=0, length=524291:    350050.00	    18065.00 ( 94.00%)	    18112.80 ( 94.83%)	    18058.10 ( 94.84%)	
char=0, length=524292:    350024.00	    18061.60 ( 94.84%)	    18056.90 ( 94.84%)	    18052.80 ( 94.84%)	
char=0, length=524293:    350050.00	    18081.20 ( 94.83%)	    18052.80 ( 94.84%)	    18052.20 ( 94.84%)	
char=0, length=524294:    350029.00	    18046.20 ( 94.84%)	    18052.50 ( 94.84%)	    18100.60 ( 94.83%)	
char=0, length=524295:    350023.00	    18068.10 ( 94.84%)	    18072.50 ( 94.84%)	    18047.80 ( 94.84%)	
char=0, length=524296:    350058.00	    18044.70 ( 94.85%)	    18107.80 ( 94.83%)	    18050.60 ( 94.84%)	
char=0, length=524297:    350036.00	    18054.40 ( 94.84%)	    18065.30 ( 94.84%)	    18078.10 ( 94.84%)	
char=0, length=524298:    350059.00	    18048.80 ( 94.84%)	    18041.20 ( 94.85%)	    18046.90 ( 94.84%)	
char=0, length=524299:    350035.00	    18035.60 ( 94.85%)	    18043.10 ( 94.85%)	    18106.90 ( 94.83%)	
char=0, length=524300:    350025.00	    18041.60 ( 94.85%)	    18035.90 ( 94.85%)	    18031.90 ( 94.85%)	
char=0, length=524301:    350067.00	    18041.20 ( 94.85%)	    18046.20 ( 94.84%)	    18044.70 ( 94.85%)	
char=0, length=524302:    350038.00	    18058.80 ( 94.84%)	    18033.40 ( 94.85%)	    18031.90 ( 94.85%)	
char=0, length=524303:    350056.00	    18035.60 ( 94.85%)	    18031.20 ( 94.85%)	    18027.50 ( 94.85%)	
char=0, length=1048576:    700696.00	    36788.10 ( 94.75%)	    36801.20 ( 94.75%)	    36880.00 ( 94.00%)	
char=0, length=1048577:    700763.00	    36894.40 ( 94.74%)	    36880.00 ( 94.00%)	    36901.90 ( 94.73%)	
char=0, length=1048578:    700834.00	    36983.80 ( 94.72%)	    36873.80 ( 94.74%)	    36873.80 ( 94.74%)	
char=0, length=1048579:    700771.00	    36878.80 ( 94.74%)	    36875.60 ( 94.74%)	    36875.60 ( 94.74%)	
char=0, length=1048580:    700842.00	    36882.50 ( 94.74%)	    36877.50 ( 94.74%)	    36868.80 ( 94.74%)	
char=0, length=1048581:    700776.00	    36875.60 ( 94.74%)	    36889.40 ( 94.74%)	    36970.00 ( 94.00%)	
char=0, length=1048582:    700769.00	    36866.20 ( 94.74%)	    36870.00 ( 94.00%)	    36861.90 ( 94.74%)	
char=0, length=1048583:    700830.00	    36962.50 ( 94.73%)	    36867.50 ( 94.74%)	    36856.90 ( 94.74%)	
char=0, length=1048584:    700769.00	    36853.10 ( 94.74%)	    36868.80 ( 94.74%)	    36860.60 ( 94.74%)	
char=0, length=1048585:    700858.00	    36877.50 ( 94.74%)	    36852.50 ( 94.74%)	    36865.60 ( 94.74%)	
char=0, length=1048586:    700768.00	    36885.00 ( 94.00%)	    36959.40 ( 94.73%)	    36860.00 ( 94.00%)	
char=0, length=1048587:    700759.00	    36861.90 ( 94.74%)	    36856.20 ( 94.74%)	    36855.00 ( 94.00%)	
char=0, length=1048588:    700881.00	    36857.50 ( 94.74%)	    36855.60 ( 94.74%)	    36856.20 ( 94.74%)	
char=0, length=1048589:    700782.00	    36861.90 ( 94.74%)	    36857.50 ( 94.74%)	    36947.50 ( 94.73%)	
char=0, length=1048590:    700762.00	    36854.40 ( 94.74%)	    36871.90 ( 94.74%)	    36841.90 ( 94.74%)	
char=0, length=1048591:    700778.00	    36840.00 ( 94.00%)	    36936.90 ( 94.73%)	    36838.10 ( 94.74%)	
char=0, length=2097152:   1404200.00	    76447.50 ( 94.56%)	    76421.20 ( 94.56%)	    76456.20 ( 94.56%)	
char=0, length=2097153:   1404640.00	    76618.80 ( 94.55%)	    76603.80 ( 94.55%)	    76602.50 ( 94.55%)	
char=0, length=2097154:   1404380.00	    76608.80 ( 94.55%)	    76617.50 ( 94.54%)	    76823.80 ( 94.53%)	
char=0, length=2097155:   1404330.00	    76590.00 ( 94.55%)	    76611.20 ( 94.54%)	    76617.50 ( 94.54%)	
char=0, length=2097156:   1404440.00	    76618.80 ( 94.54%)	    76585.00 ( 94.55%)	    76581.20 ( 94.55%)	
char=0, length=2097157:   1404350.00	    76622.50 ( 94.54%)	    76607.50 ( 94.54%)	    76902.50 ( 94.52%)	
char=0, length=2097158:   1404350.00	    76637.50 ( 94.54%)	    76603.80 ( 94.55%)	    76575.00 ( 94.55%)	
char=0, length=2097159:   1404360.00	    76772.50 ( 94.53%)	    76592.50 ( 94.55%)	    76582.50 ( 94.55%)	
char=0, length=2097160:   1404350.00	    76597.50 ( 94.55%)	    76591.20 ( 94.55%)	    76595.00 ( 94.55%)	
char=0, length=2097161:   1404510.00	    76572.50 ( 94.55%)	    76606.20 ( 94.55%)	    76578.80 ( 94.55%)	
char=0, length=2097162:   1404350.00	    76590.00 ( 94.55%)	    76893.80 ( 94.52%)	    76617.50 ( 94.54%)	
char=0, length=2097163:   1404360.00	    76596.20 ( 94.55%)	    76578.80 ( 94.55%)	    76576.20 ( 94.55%)	
char=0, length=2097164:   1404480.00	    76587.50 ( 94.55%)	    76603.80 ( 94.55%)	    76566.20 ( 94.55%)	
char=0, length=2097165:   1404340.00	    76568.80 ( 94.55%)	    76575.00 ( 94.55%)	    76788.80 ( 94.53%)	
char=0, length=2097166:   1404330.00	    76557.50 ( 94.55%)	    76595.00 ( 94.55%)	    76553.80 ( 94.55%)	
char=0, length=2097167:   1404410.00	    76900.00 ( 94.52%)	    76600.00 ( 94.55%)	    76605.00 ( 94.55%)	
char=0, length=4194304:   2819960.00	   164248.00 ( 94.18%)	   164188.00 ( 94.18%)	   164615.00 ( 94.16%)	
char=0, length=4194305:   2820080.00	   164570.00 ( 94.16%)	   164515.00 ( 94.17%)	   164515.00 ( 94.17%)	
char=0, length=4194306:   2820130.00	   164882.00 ( 94.15%)	   164510.00 ( 94.17%)	   164490.00 ( 94.17%)	
char=0, length=4194307:   2820060.00	   164525.00 ( 94.17%)	   164490.00 ( 94.17%)	   164925.00 ( 94.15%)	
char=0, length=4194308:   2820290.00	   164582.00 ( 94.16%)	   164532.00 ( 94.17%)	   164535.00 ( 94.17%)	
char=0, length=4194309:   2820240.00	   164968.00 ( 94.15%)	   164530.00 ( 94.17%)	   164542.00 ( 94.17%)	
char=0, length=4194310:   2820120.00	   164585.00 ( 94.16%)	   164525.00 ( 94.17%)	   164940.00 ( 94.15%)	
char=0, length=4194311:   2820080.00	   164525.00 ( 94.17%)	   164562.00 ( 94.16%)	   164600.00 ( 94.16%)	
char=0, length=4194312:   2820180.00	   164945.00 ( 94.15%)	   164535.00 ( 94.17%)	   164485.00 ( 94.17%)	
char=0, length=4194313:   2820330.00	   164530.00 ( 94.17%)	   164498.00 ( 94.17%)	   164985.00 ( 94.15%)	
char=0, length=4194314:   2820070.00	   164518.00 ( 94.17%)	   164510.00 ( 94.17%)	   164460.00 ( 94.17%)	
char=0, length=4194315:   2820420.00	   164492.00 ( 94.17%)	   164522.00 ( 94.17%)	   164475.00 ( 94.17%)	
char=0, length=4194316:   2820140.00	   164508.00 ( 94.17%)	   164488.00 ( 94.17%)	   164868.00 ( 94.15%)	
char=0, length=4194317:   2820080.00	   164485.00 ( 94.17%)	   164500.00 ( 94.17%)	   164502.00 ( 94.17%)	
char=0, length=4194318:   2820680.00	   164532.00 ( 94.17%)	   164518.00 ( 94.17%)	   164502.00 ( 94.17%)	
char=0, length=4194319:   2820180.00	   164525.00 ( 94.17%)	   164462.00 ( 94.17%)	   164970.00 ( 94.15%)	
char=0, length=8388608:   5685840.00	   373395.00 ( 93.43%)	   373475.00 ( 93.43%)	   373445.00 ( 93.43%)	
char=0, length=8388609:   5686800.00	   374150.00 ( 93.42%)	   374170.00 ( 93.42%)	   374020.00 ( 93.42%)	
char=0, length=8388610:   5686080.00	   375035.00 ( 93.40%)	   374200.00 ( 93.42%)	   374115.00 ( 93.42%)	
char=0, length=8388611:   5686490.00	   374250.00 ( 93.42%)	   374165.00 ( 93.42%)	   375250.00 ( 93.40%)	
char=0, length=8388612:   5685960.00	   374165.00 ( 93.42%)	   374225.00 ( 93.42%)	   374140.00 ( 93.42%)	
char=0, length=8388613:   5686520.00	   374240.00 ( 93.42%)	   374075.00 ( 93.42%)	   374025.00 ( 93.42%)	
char=0, length=8388614:   5686160.00	   375100.00 ( 93.40%)	   374165.00 ( 93.42%)	   374255.00 ( 93.42%)	
char=0, length=8388615:   5685680.00	   374235.00 ( 93.42%)	   374150.00 ( 93.42%)	   375795.00 ( 93.39%)	
char=0, length=8388616:   5686060.00	   374180.00 ( 93.42%)	   374260.00 ( 93.42%)	   374075.00 ( 93.42%)	
char=0, length=8388617:   5686820.00	   374720.00 ( 93.41%)	   374255.00 ( 93.42%)	   374180.00 ( 93.42%)	
char=0, length=8388618:   5686840.00	   375260.00 ( 93.40%)	   374260.00 ( 93.42%)	   374110.00 ( 93.42%)	
char=0, length=8388619:   5685940.00	   374335.00 ( 93.42%)	   374105.00 ( 93.42%)	   375370.00 ( 93.40%)	
char=0, length=8388620:   5686600.00	   374270.00 ( 93.42%)	   374355.00 ( 93.42%)	   374285.00 ( 93.42%)	
char=0, length=8388621:   5686900.00	   374380.00 ( 93.42%)	   374170.00 ( 93.42%)	   374265.00 ( 93.42%)	
char=0, length=8388622:   5686190.00	   375115.00 ( 93.40%)	   374170.00 ( 93.42%)	   374140.00 ( 93.42%)	
char=0, length=8388623:   5686120.00	   374310.00 ( 93.42%)	   374205.00 ( 93.42%)	   375145.00 ( 93.40%)	
char=0, length=16777216:  11556600.00	   927050.00 ( 91.98%)	   926490.00 ( 91.98%)	   929410.00 ( 91.96%)	
char=0, length=16777217:  11556300.00	   928480.00 ( 91.97%)	   927760.00 ( 91.97%)	   928210.00 ( 91.97%)	
char=0, length=16777218:  11557000.00	   927920.00 ( 91.97%)	   927650.00 ( 91.97%)	   927750.00 ( 91.97%)	
char=0, length=16777219:  11556500.00	   927650.00 ( 91.97%)	   927740.00 ( 91.97%)	   927820.00 ( 91.97%)	
char=0, length=16777220:  11556100.00	   928040.00 ( 91.97%)	   928120.00 ( 91.97%)	   927920.00 ( 91.97%)	
char=0, length=16777221:  11557300.00	   928370.00 ( 91.97%)	   928060.00 ( 91.97%)	   927880.00 ( 91.97%)	
char=0, length=16777222:  11555500.00	   930660.00 ( 91.95%)	   927880.00 ( 91.97%)	   927850.00 ( 91.97%)	
char=0, length=16777223:  11555100.00	   930170.00 ( 91.95%)	   927650.00 ( 91.97%)	   927370.00 ( 91.97%)	
char=0, length=16777224:  11554800.00	   927730.00 ( 91.97%)	   927670.00 ( 91.97%)	   927470.00 ( 91.97%)	
char=0, length=16777225:  11554400.00	   928020.00 ( 91.97%)	   930140.00 ( 91.95%)	   928110.00 ( 91.97%)	
char=0, length=16777226:  11556400.00	   928410.00 ( 91.97%)	   930530.00 ( 91.95%)	   928090.00 ( 91.97%)	
char=0, length=16777227:  11554800.00	   928110.00 ( 91.97%)	   927810.00 ( 91.97%)	   930470.00 ( 91.95%)	
char=0, length=16777228:  11554600.00	   927920.00 ( 91.97%)	   927680.00 ( 91.97%)	   930330.00 ( 91.95%)	
char=0, length=16777229:  11554300.00	   928140.00 ( 91.97%)	   927810.00 ( 91.97%)	   927620.00 ( 91.97%)	
char=0, length=16777230:  11557700.00	   928630.00 ( 91.97%)	   928020.00 ( 91.97%)	   928330.00 ( 91.97%)	
char=0, length=16777231:  11557400.00	   927960.00 ( 91.97%)	   927810.00 ( 91.97%)	   927710.00 ( 91.97%)	
char=0, length=33554432:  23849000.00	  2573120.00 ( 89.21%)	  2570860.00 ( 89.22%)	  2578840.00 ( 89.19%)	
char=0, length=33554433:  23842900.00	  2575180.00 ( 89.20%)	  2574520.00 ( 89.20%)	  2574140.00 ( 89.20%)	
char=0, length=33554434:  23844600.00	  2575460.00 ( 89.20%)	  2587200.00 ( 89.15%)	  2575080.00 ( 89.20%)	
char=0, length=33554435:  23845400.00	  2582460.00 ( 89.17%)	  2575700.00 ( 89.20%)	  2573180.00 ( 89.21%)	
char=0, length=33554436:  23846600.00	  2577120.00 ( 89.19%)	  2575840.00 ( 89.20%)	  2575380.00 ( 89.20%)	
char=0, length=33554437:  23842400.00	  2575580.00 ( 89.20%)	  2573600.00 ( 89.21%)	  2583180.00 ( 89.17%)	
char=0, length=33554438:  23844400.00	  2575740.00 ( 89.20%)	  2588780.00 ( 89.14%)	  2574860.00 ( 89.20%)	
char=0, length=33554439:  23844900.00	  2582220.00 ( 89.17%)	  2576200.00 ( 89.20%)	  2574980.00 ( 89.20%)	
char=0, length=33554440:  23846300.00	  2575460.00 ( 89.20%)	  2576280.00 ( 89.20%)	  2573460.00 ( 89.21%)	
char=0, length=33554441:  23846700.00	  2575920.00 ( 89.20%)	  2574840.00 ( 89.20%)	  2583140.00 ( 89.17%)	
char=0, length=33554442:  23843400.00	  2575680.00 ( 89.20%)	  2587860.00 ( 89.15%)	  2575940.00 ( 89.20%)	
char=0, length=33554443:  23845800.00	  2581340.00 ( 89.17%)	  2576300.00 ( 89.20%)	  2573060.00 ( 89.21%)	
char=0, length=33554444:  23846200.00	  2575080.00 ( 89.20%)	  2574740.00 ( 89.20%)	  2574760.00 ( 89.20%)	
char=0, length=33554445:  23848400.00	  2575800.00 ( 89.20%)	  2574520.00 ( 89.20%)	  2582680.00 ( 89.17%)	
char=0, length=33554446:  23843300.00	  2576540.00 ( 89.19%)	  2585700.00 ( 89.16%)	  2576960.00 ( 89.19%)	
char=0, length=33554447:  23843600.00	  2581480.00 ( 89.17%)	  2573440.00 ( 89.21%)	  2575100.00 ( 89.20%)	


Function: memset
Variant: large
                                    __memset_falkor	__memset_emag	__memset_generic
===================================================================================
 char=65, length=131072, alignment=0:      7447.50	     5981.25 ( 19.69%)	     7313.75 (  1.80%)	
 char=65, length=131072, alignment=3:      7502.50	     6106.25 ( 18.61%)	     7471.25 (  0.42%)	
 char=65, length=262144, alignment=0:     14488.80	    11735.00 ( 19.01%)	    14472.50 (  0.11%)	
 char=65, length=262144, alignment=3:     14658.80	    11925.00 ( 18.65%)	    14652.50 (  0.04%)	
 char=65, length=524288, alignment=0:     28862.50	    23396.20 ( 18.94%)	    28845.00 (  0.06%)	
 char=65, length=524288, alignment=3:     29060.00	    23566.20 ( 18.91%)	    29031.20 (  0.10%)	
char=65, length=1048576, alignment=0:     57750.00	    47821.20 ( 17.19%)	    57756.20 ( -0.01%)	
char=65, length=1048576, alignment=3:     57920.00	    46955.00 ( 18.00%)	    57876.20 (  0.08%)	
char=65, length=2097152, alignment=0:    115378.00	    93431.20 ( 19.02%)	   115271.00 (  0.00%)	
char=65, length=2097152, alignment=3:    116291.00	    93697.50 ( 19.43%)	   115482.00 (  0.00%)	
char=65, length=4194304, alignment=0:    230579.00	   187225.00 ( 18.00%)	   230462.00 (  0.00%)	
char=65, length=4194304, alignment=3:    230675.00	   187350.00 ( 18.00%)	   230659.00 (  0.00%)	
char=65, length=8388608, alignment=0:    461385.00	   373762.00 ( 18.00%)	   461208.00 (  0.00%)	
char=65, length=8388608, alignment=3:    461411.00	   374159.00 ( 18.00%)	   461056.00 (  0.00%)	
char=65, length=16777216, alignment=0:    927482.00	   747779.00 ( 19.00%)	   927250.00 (  0.00%)	
char=65, length=16777216, alignment=3:    922629.00	   747954.00 ( 18.00%)	   929646.00 ( -1.00%)	
char=65, length=33554432, alignment=0:   1845110.00	  1495970.00 ( 18.92%)	  1844950.00 (  0.01%)	
char=65, length=33554432, alignment=3:   1845520.00	  1496800.00 ( 18.90%)	  1853950.00 ( -0.46%)	
char=65, length=67108864, alignment=0:   3693140.00	  2995700.00 ( 18.88%)	  3692300.00 (  0.02%)	
char=65, length=67108864, alignment=3:   3694760.00	  2995350.00 ( 18.93%)	  3692880.00 (  0.05%)	


---

This version uses general register based memory store instead of
vector register based, for the former is faster than the latter
in emag.

The fact that DC ZVA size in emag is 64-byte, is used by IFUNC
dispatch to select this memset, so that cost of runtime-check on
DC ZVA size can be saved.

    * sysdeps/aarch64/multiarch/Makefile (sysdep_routines):
    Add memset_emag.
    * sysdeps/aarch64/multiarch/ifunc-impl-list.c
    (__libc_ifunc_impl_list): Add __memset_emag to memset ifunc.
    * sysdeps/aarch64/multiarch/memset.c (libc_ifunc):
    Add IS_EMAG check for ifunc dispatch.
    * sysdeps/aarch64/multiarch/memset_base64.S: New file.
    * sysdeps/aarch64/multiarch/memset_emag.S: New file.
---
 ChangeLog                                   |  11 ++
 sysdeps/aarch64/multiarch/Makefile          |   3 +-
 sysdeps/aarch64/multiarch/ifunc-impl-list.c |   1 +
 sysdeps/aarch64/multiarch/memset.c          |   5 +-
 sysdeps/aarch64/multiarch/memset_base64.S   | 178 ++++++++++++++++++++++++++++
 sysdeps/aarch64/multiarch/memset_emag.S     |  32 +++++
 6 files changed, 228 insertions(+), 2 deletions(-)
 create mode 100644 sysdeps/aarch64/multiarch/memset_base64.S
 create mode 100644 sysdeps/aarch64/multiarch/memset_emag.S

diff --git a/ChangeLog b/ChangeLog
index ee2119b..b4c07e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2018-12-17  Feng Xue  <fxue@os.amperecomputing.com>
 
+	* sysdeps/aarch64/multiarch/Makefile (sysdep_routines):
+	Add memset_emag.
+	* sysdeps/aarch64/multiarch/ifunc-impl-list.c
+	(__libc_ifunc_impl_list): Add __memset_emag to memset ifunc.
+	* sysdeps/aarch64/multiarch/memset.c (libc_ifunc):
+	Add IS_EMAG check for ifunc dispatch.
+	* sysdeps/aarch64/multiarch/memset_base64.S: New file.
+	* sysdeps/aarch64/multiarch/memset_emag.S: New file.
+
+2018-12-17  Feng Xue  <fxue@os.amperecomputing.com>
+
 	* manual/tunables.texi (Tunable glibc.cpu.name): Add emag.
 	* sysdeps/unix/sysv/linux/aarch64/cpu-features.c (cpu_list):
 	Add emag.
diff --git a/sysdeps/aarch64/multiarch/Makefile b/sysdeps/aarch64/multiarch/Makefile
index b1a5f59..3c6c879 100644
--- a/sysdeps/aarch64/multiarch/Makefile
+++ b/sysdeps/aarch64/multiarch/Makefile
@@ -1,5 +1,6 @@
 ifeq ($(subdir),string)
 sysdep_routines += memcpy_generic memcpy_thunderx memcpy_thunderx2 \
-		   memcpy_falkor memmove_falkor memset_generic memset_falkor \
+		   memcpy_falkor memmove_falkor \
+		   memset_generic memset_falkor memset_emag \
 		   strlen_generic strlen_asimd
 endif
diff --git a/sysdeps/aarch64/multiarch/ifunc-impl-list.c b/sysdeps/aarch64/multiarch/ifunc-impl-list.c
index af44665..6d4dbbe 100644
--- a/sysdeps/aarch64/multiarch/ifunc-impl-list.c
+++ b/sysdeps/aarch64/multiarch/ifunc-impl-list.c
@@ -51,6 +51,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 	      /* Enable this on non-falkor processors too so that other cores
 		 can do a comparative analysis with __memset_generic.  */
 	      IFUNC_IMPL_ADD (array, i, memset, (zva_size == 64), __memset_falkor)
+	      IFUNC_IMPL_ADD (array, i, memset, (zva_size == 64), __memset_emag)
 	      IFUNC_IMPL_ADD (array, i, memset, 1, __memset_generic))
 
   IFUNC_IMPL (i, name, strlen,
diff --git a/sysdeps/aarch64/multiarch/memset.c b/sysdeps/aarch64/multiarch/memset.c
index d74ed3a..9c713e0 100644
--- a/sysdeps/aarch64/multiarch/memset.c
+++ b/sysdeps/aarch64/multiarch/memset.c
@@ -29,12 +29,15 @@
 extern __typeof (__redirect_memset) __libc_memset;
 
 extern __typeof (__redirect_memset) __memset_falkor attribute_hidden;
+extern __typeof (__redirect_memset) __memset_emag attribute_hidden;
 extern __typeof (__redirect_memset) __memset_generic attribute_hidden;
 
 libc_ifunc (__libc_memset,
 	    ((IS_FALKOR (midr) || IS_PHECDA (midr)) && zva_size == 64
 	     ? __memset_falkor
-	     : __memset_generic));
+	     : (IS_EMAG (midr) && zva_size == 64
+	       ? __memset_emag
+	       : __memset_generic)));
 
 # undef memset
 strong_alias (__libc_memset, memset);
diff --git a/sysdeps/aarch64/multiarch/memset_base64.S b/sysdeps/aarch64/multiarch/memset_base64.S
new file mode 100644
index 0000000..9a62325
--- /dev/null
+++ b/sysdeps/aarch64/multiarch/memset_base64.S
@@ -0,0 +1,178 @@
+/* Copyright (C) 2018 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include "memset-reg.h"
+
+#ifndef MEMSET
+# define MEMSET __memset_base64
+#endif
+
+#ifndef DC_ZVA_THRESHOLD
+# define DC_ZVA_THRESHOLD 512
+#endif
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, unaligned accesses
+ *
+ */
+
+ENTRY_ALIGN (MEMSET, 6)
+
+	DELOUSE (0)
+	DELOUSE (2)
+
+	bfi	valw, valw, 8, 8
+	bfi	valw, valw, 16, 16
+	bfi	val, val, 32, 32
+
+	add	dstend, dstin, count
+
+	cmp	count, 96
+	b.hi	L(set_long)
+	cmp	count, 16
+	b.hs	L(set_medium)
+
+	/* Set 0..15 bytes.  */
+	tbz	count, 3, 1f
+	str	val, [dstin]
+	str	val, [dstend, -8]
+	ret
+
+	.p2align 3
+1:	tbz	count, 2, 2f
+	str	valw, [dstin]
+	str	valw, [dstend, -4]
+	ret
+2:	cbz	count, 3f
+	strb	valw, [dstin]
+	tbz	count, 1, 3f
+	strh	valw, [dstend, -2]
+3:	ret
+
+	.p2align 3
+	/* Set 16..96 bytes.  */
+L(set_medium):
+	stp	val, val, [dstin]
+	tbnz	count, 6, L(set96)
+	stp	val, val, [dstend, -16]
+	tbz	count, 5, 1f
+	stp	val, val, [dstin, 16]
+	stp	val, val, [dstend, -32]
+1:	ret
+
+	.p2align 4
+	/* Set 64..96 bytes.  Write 64 bytes from the start and
+	   32 bytes from the end.  */
+L(set96):
+	stp	val, val, [dstin, 16]
+	stp	val, val, [dstin, 32]
+	stp	val, val, [dstin, 48]
+	stp	val, val, [dstend, -32]
+	stp	val, val, [dstend, -16]
+	ret
+
+	.p2align 4
+L(set_long):
+	stp	val, val, [dstin]
+	cmp	count, DC_ZVA_THRESHOLD
+	ccmp	val, 0, 0, cs
+	bic	dst, dstin, 15
+	b.eq	L(zva_64)
+
+	/* Small-size or non-zero memset does not use DC ZVA. */
+	sub	count, dstend, dst
+
+	/*
+	 * Adjust count and bias for loop. By substracting extra 1 from count,
+	 * it is easy to use tbz instruction to check whether loop tailing
+	 * count is less than 33 bytes, so as to bypass 2 unneccesary stps.
+	 */
+	sub	count, count, 64+16+1
+	nop
+
+1:	stp	val, val, [dst, 16]
+	stp	val, val, [dst, 32]
+	stp	val, val, [dst, 48]
+	stp	val, val, [dst, 64]!
+	subs	count, count, 64
+	b.hs	1b
+
+	tbz	count, 5, 1f	/* Remaining count is less than 33 bytes? */
+	stp	val, val, [dst, 16]
+	stp	val, val, [dst, 32]
+1:	stp	val, val, [dstend, -32]
+	stp	val, val, [dstend, -16]
+	ret
+
+	.p2align 3
+L(zva_64):
+	stp	val, val, [dst, 16]
+	stp	val, val, [dst, 32]
+	stp	val, val, [dst, 48]
+	bic	dst, dst, 63
+
+	/*
+	 * Previous memory writes might cross cache line boundary, and cause
+	 * cache line partially dirty. Zeroing this kind of cache line using
+	 * DC ZVA will incur extra cost, for it requires loading untouched
+	 * part of the line from memory before zeoring.
+	 *
+	 * So, write the first 64 byte aligned block using stp to force
+	 * fully dirty cache line.
+	 */
+	stp	val, val, [dst, 64]
+	stp	val, val, [dst, 80]
+	stp	val, val, [dst, 96]
+	stp	val, val, [dst, 112]
+
+	sub	count, dstend, dst
+	/*
+	 * Adjust count and bias for loop. By substracting extra 1 from count,
+	 * it is easy to use tbz instruction to check whether loop tailing
+	 * count is less than 33 bytes, so as to bypass 2 unneccesary stps.
+	 */
+	sub	count, count, 128+64+64+1
+	add	dst, dst, 128
+	nop
+
+	/* DC ZVA sets 64 bytes each time. */
+1:	dc	zva, dst
+	add	dst, dst, 64
+	subs	count, count, 64
+	b.hs	1b
+
+	/*
+	 * Write the last 64 byte aligned block using stp to force fully
+	 * dirty cache line.
+	 */
+	stp	val, val, [dst, 0]
+	stp	val, val, [dst, 16]
+	stp	val, val, [dst, 32]
+	stp	val, val, [dst, 48]
+
+	tbz	count, 5, 1f	/* Remaining count is less than 33 bytes? */
+	stp	val, val, [dst, 64]
+	stp	val, val, [dst, 80]
+1:	stp	val, val, [dstend, -32]
+	stp	val, val, [dstend, -16]
+	ret
+
+END (MEMSET)
+libc_hidden_builtin_def (MEMSET)
diff --git a/sysdeps/aarch64/multiarch/memset_emag.S b/sysdeps/aarch64/multiarch/memset_emag.S
new file mode 100644
index 0000000..1c1fabc
--- /dev/null
+++ b/sysdeps/aarch64/multiarch/memset_emag.S
@@ -0,0 +1,32 @@
+/* Optimized memset for AmpereComputing emag processor.
+   Copyright (C) 2018 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if IS_IN (libc)
+# define MEMSET __memset_emag
+
+/*
+ * Using dc zva to zero memory does not produce better performance if
+ * memory size is not very large, especially when there are multiple
+ * processes/threads contending memory/cache. Here we use a somewhat
+ * large threshold to trigger usage of dc zva.
+*/
+# define DC_ZVA_THRESHOLD 1024
+
+# include "./memset_base64.S"
+#endif
-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag
  2018-12-18 10:06 [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag Feng Xue
@ 2018-12-19 15:41 ` Szabolcs Nagy
  2018-12-20 11:19   ` Siddhesh Poyarekar
  2018-12-20  9:24 ` Siddhesh Poyarekar
  1 sibling, 1 reply; 5+ messages in thread
From: Szabolcs Nagy @ 2018-12-19 15:41 UTC (permalink / raw)
  To: Feng Xue, libc-alpha; +Cc: nd

On 18/12/2018 10:03, Feng Xue wrote:
> This version uses general register based memory store instead of
> vector register based, for the former is faster than the latter
> in emag.
> 
> The fact that DC ZVA size in emag is 64-byte, is used by IFUNC
> dispatch to select this memset, so that cost of runtime-check on
> DC ZVA size can be saved.
> 
>     * sysdeps/aarch64/multiarch/Makefile (sysdep_routines):
>     Add memset_emag.
>     * sysdeps/aarch64/multiarch/ifunc-impl-list.c
>     (__libc_ifunc_impl_list): Add __memset_emag to memset ifunc.
>     * sysdeps/aarch64/multiarch/memset.c (libc_ifunc):
>     Add IS_EMAG check for ifunc dispatch.
>     * sysdeps/aarch64/multiarch/memset_base64.S: New file.
>     * sysdeps/aarch64/multiarch/memset_emag.S: New file.

OK to commit.

note, that i plan to change the memset code later:
at least rename the functions like

memset_falkor -> memset_zva64_simd
memset_emag -> memset_zva64_nosimd
memset_generic

or similar and then new cpus choose one of these instead
of adding their own (and likely change the default to
memset_zva64_simd for all zva==64 cores), but there might
be code changes as well.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag
  2018-12-18 10:06 [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag Feng Xue
  2018-12-19 15:41 ` Szabolcs Nagy
@ 2018-12-20  9:24 ` Siddhesh Poyarekar
  2018-12-20  9:29   ` Siddhesh Poyarekar
  1 sibling, 1 reply; 5+ messages in thread
From: Siddhesh Poyarekar @ 2018-12-20  9:24 UTC (permalink / raw)
  To: Feng Xue, libc-alpha

On 18/12/18 3:33 PM, Feng Xue wrote:
> This version uses general register based memory store instead of
> vector register based, for the former is faster than the latter
> in emag.

Barring a couple of instances that show a 5%+ difference from 
__memset_generic (which also seems sporadic, maybe due to noise?), 
everything else seems to be in the 1-2% range.  Is that a significant 
enough difference to warrant a new variant?

It may not be worth adding another variant for a mere 1-2% overall gain 
for string routines but maybe I've misread the results and you have a 
better justification for this.  Please let me know if you do.

This is not a strong opposition though; if Szabolcs, Wilco, etc. don't 
mind maintaining another variant (by calling it zva64_nosimd) despite 
the seemingly low relative performance gain then I won't stand in the way.

Siddhesh

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag
  2018-12-20  9:24 ` Siddhesh Poyarekar
@ 2018-12-20  9:29   ` Siddhesh Poyarekar
  0 siblings, 0 replies; 5+ messages in thread
From: Siddhesh Poyarekar @ 2018-12-20  9:29 UTC (permalink / raw)
  To: Feng Xue, libc-alpha

On 20/12/18 2:45 PM, Siddhesh Poyarekar wrote:
> On 18/12/18 3:33 PM, Feng Xue wrote:
>> This version uses general register based memory store instead of
>> vector register based, for the former is faster than the latter
>> in emag.
> 
> Barring a couple of instances that show a 5%+ difference from 
> __memset_generic (which also seems sporadic, maybe due to noise?), 
> everything else seems to be in the 1-2% range.  Is that a significant 
> enough difference to warrant a new variant?
> 
> It may not be worth adding another variant for a mere 1-2% overall gain 
> for string routines but maybe I've misread the results and you have a 
> better justification for this.  Please let me know if you do.

Ugh, I have in fact misread the results; sorry about that.  The 
compare_strings.py script has the -b flag to change the baseline to 
compare against, so you can use that to show results relative to 
__memset_generic so that it's clearer.

Looks fine to me.

Siddhesh

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag
  2018-12-19 15:41 ` Szabolcs Nagy
@ 2018-12-20 11:19   ` Siddhesh Poyarekar
  0 siblings, 0 replies; 5+ messages in thread
From: Siddhesh Poyarekar @ 2018-12-20 11:19 UTC (permalink / raw)
  To: Szabolcs Nagy, Feng Xue, libc-alpha; +Cc: nd

On 19/12/18 9:11 PM, Szabolcs Nagy wrote:
> note, that i plan to change the memset code later:
> at least rename the functions like
> 
> memset_falkor -> memset_zva64_simd
> memset_emag -> memset_zva64_nosimd
> memset_generic
> 
> or similar and then new cpus choose one of these instead
> of adding their own (and likely change the default to
> memset_zva64_simd for all zva==64 cores), but there might
> be code changes as well.

A hearty +1 to this; rth and later I had proposed similar changes in the 
past, so I'm happy to see this happen :)

Thanks,
Siddhesh

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-12-20  9:29 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-18 10:06 [PATCH 1/3] aarch64: Optimized memset specific to AmpereComputing emag Feng Xue
2018-12-19 15:41 ` Szabolcs Nagy
2018-12-20 11:19   ` Siddhesh Poyarekar
2018-12-20  9:24 ` Siddhesh Poyarekar
2018-12-20  9:29   ` Siddhesh Poyarekar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).