[1/3] aarch64: Optimized memset specific to AmpereComputing emag

Message ID BL0PR01MB4593104C25CE1A807F2F6FA7F7BD0@BL0PR01MB4593.prod.exchangelabs.com
State New, archived
Headers

Commit Message

Feng Xue OS Dec. 18, 2018, 10:03 a.m. UTC
  At first, performance report from benchtest are listed.

Function: memset
Variant: walk
                            simple_memset	__memset_falkor	__memset_emag	__memset_generic
  

Comments

Szabolcs Nagy Dec. 19, 2018, 3:41 p.m. UTC | #1
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.
  
Siddhesh Poyarekar Dec. 20, 2018, 9:15 a.m. UTC | #2
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
  
Siddhesh Poyarekar Dec. 20, 2018, 9:27 a.m. UTC | #3
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
  
Siddhesh Poyarekar Dec. 20, 2018, 9:29 a.m. UTC | #4
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
  

Patch

===================================================================================
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