diff --git a/result/XeonE5-2697Av4@2.60GHz_linux64_gcc4.9.csv b/result/XeonE5-2697Av4@2.60GHz_linux64_gcc4.9.csv new file mode 100644 index 0000000..8702fde --- /dev/null +++ b/result/XeonE5-2697Av4@2.60GHz_linux64_gcc4.9.csv @@ -0,0 +1,1025 @@ +Type,Function,Digit,Time(ns) +u32toa_sequential,acf,1,6.040000 +u32toa_sequential,acf,2,5.710000 +u32toa_sequential,acf,3,8.600000 +u32toa_sequential,acf,4,8.320000 +u32toa_sequential,acf,5,13.850000 +u32toa_sequential,acf,6,13.850000 +u32toa_sequential,acf,7,13.850000 +u32toa_sequential,acf,8,13.800000 +u32toa_sequential,acf,9,15.390000 +u32toa_sequential,acf,10,15.380000 +u32toa_random,acf,0,15.885000 +u32toa_sequential,amartin,1,4.520000 +u32toa_sequential,amartin,2,4.520000 +u32toa_sequential,amartin,3,6.730000 +u32toa_sequential,amartin,4,6.610000 +u32toa_sequential,amartin,5,9.130000 +u32toa_sequential,amartin,6,9.210000 +u32toa_sequential,amartin,7,11.310000 +u32toa_sequential,amartin,8,11.310000 +u32toa_sequential,amartin,9,11.460000 +u32toa_sequential,amartin,10,11.360000 +u32toa_random,amartin,0,14.504000 +u32toa_sequential,branchlut,1,6.310000 +u32toa_sequential,branchlut,2,7.830000 +u32toa_sequential,branchlut,3,8.270000 +u32toa_sequential,branchlut,4,7.740000 +u32toa_sequential,branchlut,5,12.670000 +u32toa_sequential,branchlut,6,13.890000 +u32toa_sequential,branchlut,7,14.870000 +u32toa_sequential,branchlut,8,14.080000 +u32toa_sequential,branchlut,9,14.420000 +u32toa_sequential,branchlut,10,16.370000 +u32toa_random,branchlut,0,21.675000 +u32toa_sequential,branchlut2,1,5.110000 +u32toa_sequential,branchlut2,2,6.150000 +u32toa_sequential,branchlut2,3,9.200000 +u32toa_sequential,branchlut2,4,10.510000 +u32toa_sequential,branchlut2,5,11.990000 +u32toa_sequential,branchlut2,6,14.040000 +u32toa_sequential,branchlut2,7,16.350000 +u32toa_sequential,branchlut2,8,17.500000 +u32toa_sequential,branchlut2,9,17.450000 +u32toa_sequential,branchlut2,10,17.690000 +u32toa_random,branchlut2,0,21.099000 +u32toa_sequential,count,1,6.410000 +u32toa_sequential,count,2,7.900000 +u32toa_sequential,count,3,10.170000 +u32toa_sequential,count,4,12.420000 +u32toa_sequential,count,5,14.510000 +u32toa_sequential,count,6,17.060000 +u32toa_sequential,count,7,19.480000 +u32toa_sequential,count,8,21.390000 +u32toa_sequential,count,9,23.680000 +u32toa_sequential,count,10,26.290000 +u32toa_random,count,0,23.047000 +u32toa_sequential,countlut,1,4.630000 +u32toa_sequential,countlut,2,5.640000 +u32toa_sequential,countlut,3,7.410000 +u32toa_sequential,countlut,4,8.000000 +u32toa_sequential,countlut,5,10.400000 +u32toa_sequential,countlut,6,10.800000 +u32toa_sequential,countlut,7,13.010000 +u32toa_sequential,countlut,8,13.550000 +u32toa_sequential,countlut,9,15.480000 +u32toa_sequential,countlut,10,16.340000 +u32toa_random,countlut,0,19.369000 +u32toa_sequential,jeaiii,1,2.950000 +u32toa_sequential,jeaiii,2,3.030000 +u32toa_sequential,jeaiii,3,5.260000 +u32toa_sequential,jeaiii,4,5.160000 +u32toa_sequential,jeaiii,5,7.040000 +u32toa_sequential,jeaiii,6,6.930000 +u32toa_sequential,jeaiii,7,8.640000 +u32toa_sequential,jeaiii,8,8.600000 +u32toa_sequential,jeaiii,9,9.050000 +u32toa_sequential,jeaiii,10,9.750000 +u32toa_random,jeaiii,0,15.868000 +u32toa_sequential,lut,1,7.410000 +u32toa_sequential,lut,2,8.630000 +u32toa_sequential,lut,3,12.680000 +u32toa_sequential,lut,4,13.550000 +u32toa_sequential,lut,5,15.930000 +u32toa_sequential,lut,6,17.980000 +u32toa_sequential,lut,7,21.900000 +u32toa_sequential,lut,8,23.050000 +u32toa_sequential,lut,9,26.280000 +u32toa_sequential,lut,10,28.070000 +u32toa_random,lut,0,25.876000 +u32toa_sequential,mwilson,1,5.670000 +u32toa_sequential,mwilson,2,9.780000 +u32toa_sequential,mwilson,3,13.060000 +u32toa_sequential,mwilson,4,16.490000 +u32toa_sequential,mwilson,5,19.830000 +u32toa_sequential,mwilson,6,23.550000 +u32toa_sequential,mwilson,7,26.460000 +u32toa_sequential,mwilson,8,29.190000 +u32toa_sequential,mwilson,9,33.260000 +u32toa_sequential,mwilson,10,37.090000 +u32toa_random,mwilson,0,28.175000 +u32toa_sequential,naive,1,7.980000 +u32toa_sequential,naive,2,11.360000 +u32toa_sequential,naive,3,14.940000 +u32toa_sequential,naive,4,17.820000 +u32toa_sequential,naive,5,20.800000 +u32toa_sequential,naive,6,24.760000 +u32toa_sequential,naive,7,27.750000 +u32toa_sequential,naive,8,31.500000 +u32toa_sequential,naive,9,34.520000 +u32toa_sequential,naive,10,37.510000 +u32toa_random,naive,0,29.545000 +u32toa_sequential,null,1,2.510000 +u32toa_sequential,null,2,2.510000 +u32toa_sequential,null,3,2.490000 +u32toa_sequential,null,4,2.450000 +u32toa_sequential,null,5,2.510000 +u32toa_sequential,null,6,2.510000 +u32toa_sequential,null,7,2.510000 +u32toa_sequential,null,8,2.450000 +u32toa_sequential,null,9,2.450000 +u32toa_sequential,null,10,2.510000 +u32toa_random,null,0,2.515000 +u32toa_sequential,sprintf,1,133.850000 +u32toa_sequential,sprintf,2,139.080000 +u32toa_sequential,sprintf,3,143.360000 +u32toa_sequential,sprintf,4,147.230000 +u32toa_sequential,sprintf,5,149.020000 +u32toa_sequential,sprintf,6,153.230000 +u32toa_sequential,sprintf,7,153.760000 +u32toa_sequential,sprintf,8,157.520000 +u32toa_sequential,sprintf,9,162.720000 +u32toa_sequential,sprintf,10,167.230000 +u32toa_random,sprintf,0,160.081000 +u32toa_sequential,sse2,1,5.050000 +u32toa_sequential,sse2,2,6.290000 +u32toa_sequential,sse2,3,7.010000 +u32toa_sequential,sse2,4,5.670000 +u32toa_sequential,sse2,5,10.730000 +u32toa_sequential,sse2,6,12.580000 +u32toa_sequential,sse2,7,12.180000 +u32toa_sequential,sse2,8,11.610000 +u32toa_sequential,sse2,9,8.760000 +u32toa_sequential,sse2,10,9.810000 +u32toa_random,sse2,0,17.493000 +u32toa_sequential,tmueller,1,2.950000 +u32toa_sequential,tmueller,2,7.180000 +u32toa_sequential,tmueller,3,7.170000 +u32toa_sequential,tmueller,4,6.480000 +u32toa_sequential,tmueller,5,6.460000 +u32toa_sequential,tmueller,6,7.920000 +u32toa_sequential,tmueller,7,7.970000 +u32toa_sequential,tmueller,8,10.850000 +u32toa_sequential,tmueller,9,10.880000 +u32toa_sequential,tmueller,10,10.920000 +u32toa_random,tmueller,0,14.332000 +u32toa_sequential,unnamed,1,7.580000 +u32toa_sequential,unnamed,2,10.430000 +u32toa_sequential,unnamed,3,12.180000 +u32toa_sequential,unnamed,4,15.270000 +u32toa_sequential,unnamed,5,18.880000 +u32toa_sequential,unnamed,6,20.100000 +u32toa_sequential,unnamed,7,22.100000 +u32toa_sequential,unnamed,8,23.900000 +u32toa_sequential,unnamed,9,26.800000 +u32toa_sequential,unnamed,10,27.340000 +u32toa_random,unnamed,0,25.621000 +u32toa_sequential,unrolledlut,1,3.970000 +u32toa_sequential,unrolledlut,2,4.710000 +u32toa_sequential,unrolledlut,3,5.800000 +u32toa_sequential,unrolledlut,4,6.610000 +u32toa_sequential,unrolledlut,5,7.420000 +u32toa_sequential,unrolledlut,6,7.800000 +u32toa_sequential,unrolledlut,7,7.970000 +u32toa_sequential,unrolledlut,8,8.610000 +u32toa_sequential,unrolledlut,9,9.790000 +u32toa_sequential,unrolledlut,10,10.370000 +u32toa_random,unrolledlut,0,15.261000 +i32toa_sequential,acf,1,5.760000 +i32toa_sequential,acf,2,5.760000 +i32toa_sequential,acf,3,8.080000 +i32toa_sequential,acf,4,8.090000 +i32toa_sequential,acf,5,12.090000 +i32toa_sequential,acf,6,11.990000 +i32toa_sequential,acf,7,12.140000 +i32toa_sequential,acf,8,11.940000 +i32toa_sequential,acf,9,13.550000 +i32toa_sequential,acf,10,13.550000 +i32toa_random,acf,0,17.099000 +i32toa_sequential,amartin,1,5.330000 +i32toa_sequential,amartin,2,5.270000 +i32toa_sequential,amartin,3,7.260000 +i32toa_sequential,amartin,4,7.260000 +i32toa_sequential,amartin,5,9.110000 +i32toa_sequential,amartin,6,8.710000 +i32toa_sequential,amartin,7,10.580000 +i32toa_sequential,amartin,8,10.640000 +i32toa_sequential,amartin,9,10.200000 +i32toa_sequential,amartin,10,10.170000 +i32toa_random,amartin,0,13.382000 +i32toa_sequential,branchlut,1,5.590000 +i32toa_sequential,branchlut,2,7.310000 +i32toa_sequential,branchlut,3,7.420000 +i32toa_sequential,branchlut,4,6.790000 +i32toa_sequential,branchlut,5,11.690000 +i32toa_sequential,branchlut,6,13.270000 +i32toa_sequential,branchlut,7,12.940000 +i32toa_sequential,branchlut,8,12.690000 +i32toa_sequential,branchlut,9,12.800000 +i32toa_sequential,branchlut,10,14.680000 +i32toa_random,branchlut,0,21.968000 +i32toa_sequential,branchlut2,1,6.120000 +i32toa_sequential,branchlut2,2,6.930000 +i32toa_sequential,branchlut2,3,9.050000 +i32toa_sequential,branchlut2,4,10.260000 +i32toa_sequential,branchlut2,5,11.770000 +i32toa_sequential,branchlut2,6,13.290000 +i32toa_sequential,branchlut2,7,14.500000 +i32toa_sequential,branchlut2,8,15.240000 +i32toa_sequential,branchlut2,9,15.130000 +i32toa_sequential,branchlut2,10,15.830000 +i32toa_random,branchlut2,0,24.993000 +i32toa_sequential,count,1,6.940000 +i32toa_sequential,count,2,9.130000 +i32toa_sequential,count,3,11.480000 +i32toa_sequential,count,4,13.680000 +i32toa_sequential,count,5,15.860000 +i32toa_sequential,count,6,18.060000 +i32toa_sequential,count,7,20.340000 +i32toa_sequential,count,8,22.610000 +i32toa_sequential,count,9,25.220000 +i32toa_sequential,count,10,27.510000 +i32toa_random,count,0,27.128000 +i32toa_sequential,countlut,1,6.250000 +i32toa_sequential,countlut,2,6.860000 +i32toa_sequential,countlut,3,8.710000 +i32toa_sequential,countlut,4,8.710000 +i32toa_sequential,countlut,5,11.130000 +i32toa_sequential,countlut,6,11.690000 +i32toa_sequential,countlut,7,14.140000 +i32toa_sequential,countlut,8,14.640000 +i32toa_sequential,countlut,9,16.610000 +i32toa_sequential,countlut,10,17.480000 +i32toa_random,countlut,0,23.942000 +i32toa_sequential,jeaiii,1,3.590000 +i32toa_sequential,jeaiii,2,4.400000 +i32toa_sequential,jeaiii,3,6.030000 +i32toa_sequential,jeaiii,4,6.820000 +i32toa_sequential,jeaiii,5,7.390000 +i32toa_sequential,jeaiii,6,7.740000 +i32toa_sequential,jeaiii,7,9.090000 +i32toa_sequential,jeaiii,8,9.200000 +i32toa_sequential,jeaiii,9,10.520000 +i32toa_sequential,jeaiii,10,10.090000 +i32toa_random,jeaiii,0,19.479000 +i32toa_sequential,lut,1,8.270000 +i32toa_sequential,lut,2,10.000000 +i32toa_sequential,lut,3,13.060000 +i32toa_sequential,lut,4,14.520000 +i32toa_sequential,lut,5,17.910000 +i32toa_sequential,lut,6,19.440000 +i32toa_sequential,lut,7,22.580000 +i32toa_sequential,lut,8,24.440000 +i32toa_sequential,lut,9,27.190000 +i32toa_sequential,lut,10,28.710000 +i32toa_random,lut,0,30.438000 +i32toa_sequential,mwilson,1,7.420000 +i32toa_sequential,mwilson,2,10.800000 +i32toa_sequential,mwilson,3,14.520000 +i32toa_sequential,mwilson,4,18.810000 +i32toa_sequential,mwilson,5,21.700000 +i32toa_sequential,mwilson,6,26.370000 +i32toa_sequential,mwilson,7,29.310000 +i32toa_sequential,mwilson,8,33.460000 +i32toa_sequential,mwilson,9,37.590000 +i32toa_sequential,mwilson,10,41.640000 +i32toa_random,mwilson,0,33.360000 +i32toa_sequential,naive,1,8.950000 +i32toa_sequential,naive,2,12.900000 +i32toa_sequential,naive,3,15.320000 +i32toa_sequential,naive,4,18.430000 +i32toa_sequential,naive,5,22.060000 +i32toa_sequential,naive,6,25.910000 +i32toa_sequential,naive,7,27.910000 +i32toa_sequential,naive,8,32.120000 +i32toa_sequential,naive,9,35.040000 +i32toa_sequential,naive,10,38.480000 +i32toa_random,naive,0,32.974000 +i32toa_sequential,null,1,2.450000 +i32toa_sequential,null,2,2.450000 +i32toa_sequential,null,3,2.510000 +i32toa_sequential,null,4,2.510000 +i32toa_sequential,null,5,2.490000 +i32toa_sequential,null,6,2.510000 +i32toa_sequential,null,7,2.510000 +i32toa_sequential,null,8,2.450000 +i32toa_sequential,null,9,2.450000 +i32toa_sequential,null,10,2.510000 +i32toa_random,null,0,2.492000 +i32toa_sequential,sprintf,1,132.040000 +i32toa_sequential,sprintf,2,136.150000 +i32toa_sequential,sprintf,3,139.360000 +i32toa_sequential,sprintf,4,144.340000 +i32toa_sequential,sprintf,5,147.310000 +i32toa_sequential,sprintf,6,149.680000 +i32toa_sequential,sprintf,7,153.870000 +i32toa_sequential,sprintf,8,157.390000 +i32toa_sequential,sprintf,9,161.700000 +i32toa_sequential,sprintf,10,165.170000 +i32toa_random,sprintf,0,159.592000 +i32toa_sequential,sse2,1,6.570000 +i32toa_sequential,sse2,2,7.530000 +i32toa_sequential,sse2,3,7.260000 +i32toa_sequential,sse2,4,7.020000 +i32toa_sequential,sse2,5,11.690000 +i32toa_sequential,sse2,6,12.950000 +i32toa_sequential,sse2,7,12.850000 +i32toa_sequential,sse2,8,12.320000 +i32toa_sequential,sse2,9,10.060000 +i32toa_sequential,sse2,10,10.520000 +i32toa_random,sse2,0,21.308000 +i32toa_sequential,tmueller,1,4.620000 +i32toa_sequential,tmueller,2,8.700000 +i32toa_sequential,tmueller,3,8.460000 +i32toa_sequential,tmueller,4,7.770000 +i32toa_sequential,tmueller,5,7.770000 +i32toa_sequential,tmueller,6,9.800000 +i32toa_sequential,tmueller,7,9.790000 +i32toa_sequential,tmueller,8,13.220000 +i32toa_sequential,tmueller,9,13.190000 +i32toa_sequential,tmueller,10,13.190000 +i32toa_random,tmueller,0,15.652000 +i32toa_sequential,unnamed,1,8.710000 +i32toa_sequential,unnamed,2,13.230000 +i32toa_sequential,unnamed,3,16.870000 +i32toa_sequential,unnamed,4,20.260000 +i32toa_sequential,unnamed,5,23.200000 +i32toa_sequential,unnamed,6,26.740000 +i32toa_sequential,unnamed,7,29.890000 +i32toa_sequential,unnamed,8,32.960000 +i32toa_sequential,unnamed,9,36.040000 +i32toa_sequential,unnamed,10,38.700000 +i32toa_random,unnamed,0,34.595000 +i32toa_sequential,unrolledlut,1,5.070000 +i32toa_sequential,unrolledlut,2,5.390000 +i32toa_sequential,unrolledlut,3,6.930000 +i32toa_sequential,unrolledlut,4,6.930000 +i32toa_sequential,unrolledlut,5,8.710000 +i32toa_sequential,unrolledlut,6,8.660000 +i32toa_sequential,unrolledlut,7,9.440000 +i32toa_sequential,unrolledlut,8,10.320000 +i32toa_sequential,unrolledlut,9,10.350000 +i32toa_sequential,unrolledlut,10,10.320000 +i32toa_random,unrolledlut,0,19.022000 +u64toa_sequential,acf,1,4.030000 +u64toa_sequential,acf,2,4.030000 +u64toa_sequential,acf,3,6.460000 +u64toa_sequential,acf,4,6.440000 +u64toa_sequential,acf,5,11.270000 +u64toa_sequential,acf,6,11.480000 +u64toa_sequential,acf,7,11.270000 +u64toa_sequential,acf,8,11.470000 +u64toa_sequential,acf,9,15.330000 +u64toa_sequential,acf,10,15.330000 +u64toa_sequential,acf,11,19.780000 +u64toa_sequential,acf,12,19.840000 +u64toa_sequential,acf,13,19.840000 +u64toa_sequential,acf,14,19.870000 +u64toa_sequential,acf,15,19.950000 +u64toa_sequential,acf,16,19.630000 +u64toa_sequential,acf,17,23.590000 +u64toa_sequential,acf,18,23.440000 +u64toa_sequential,acf,19,23.320000 +u64toa_sequential,acf,20,23.290000 +u64toa_random,acf,0,20.684000 +u64toa_sequential,amartin,1,4.840000 +u64toa_sequential,amartin,2,4.840000 +u64toa_sequential,amartin,3,5.880000 +u64toa_sequential,amartin,4,5.880000 +u64toa_sequential,amartin,5,8.950000 +u64toa_sequential,amartin,6,8.950000 +u64toa_sequential,amartin,7,9.850000 +u64toa_sequential,amartin,8,9.790000 +u64toa_sequential,amartin,9,9.200000 +u64toa_sequential,amartin,10,9.200000 +u64toa_sequential,amartin,11,13.250000 +u64toa_sequential,amartin,12,13.230000 +u64toa_sequential,amartin,13,15.720000 +u64toa_sequential,amartin,14,15.720000 +u64toa_sequential,amartin,15,17.850000 +u64toa_sequential,amartin,16,17.850000 +u64toa_sequential,amartin,17,17.580000 +u64toa_sequential,amartin,18,17.800000 +u64toa_sequential,amartin,19,18.860000 +u64toa_sequential,amartin,20,18.790000 +u64toa_random,amartin,0,21.104000 +u64toa_sequential,branchlut,1,5.290000 +u64toa_sequential,branchlut,2,6.860000 +u64toa_sequential,branchlut,3,7.940000 +u64toa_sequential,branchlut,4,7.770000 +u64toa_sequential,branchlut,5,11.000000 +u64toa_sequential,branchlut,6,12.900000 +u64toa_sequential,branchlut,7,12.830000 +u64toa_sequential,branchlut,8,11.520000 +u64toa_sequential,branchlut,9,21.990000 +u64toa_sequential,branchlut,10,22.240000 +u64toa_sequential,branchlut,11,24.300000 +u64toa_sequential,branchlut,12,22.260000 +u64toa_sequential,branchlut,13,23.350000 +u64toa_sequential,branchlut,14,23.140000 +u64toa_sequential,branchlut,15,23.060000 +u64toa_sequential,branchlut,16,22.440000 +u64toa_sequential,branchlut,17,23.810000 +u64toa_sequential,branchlut,18,23.660000 +u64toa_sequential,branchlut,19,26.670000 +u64toa_sequential,branchlut,20,26.670000 +u64toa_random,branchlut,0,30.379000 +u64toa_sequential,branchlut2,1,4.300000 +u64toa_sequential,branchlut2,2,5.190000 +u64toa_sequential,branchlut2,3,7.790000 +u64toa_sequential,branchlut2,4,8.800000 +u64toa_sequential,branchlut2,5,10.420000 +u64toa_sequential,branchlut2,6,11.690000 +u64toa_sequential,branchlut2,7,13.470000 +u64toa_sequential,branchlut2,8,14.840000 +u64toa_sequential,branchlut2,9,16.290000 +u64toa_sequential,branchlut2,10,16.910000 +u64toa_sequential,branchlut2,11,20.320000 +u64toa_sequential,branchlut2,12,20.870000 +u64toa_sequential,branchlut2,13,22.500000 +u64toa_sequential,branchlut2,14,22.850000 +u64toa_sequential,branchlut2,15,25.800000 +u64toa_sequential,branchlut2,16,26.340000 +u64toa_sequential,branchlut2,17,26.770000 +u64toa_sequential,branchlut2,18,28.710000 +u64toa_sequential,branchlut2,19,30.530000 +u64toa_sequential,branchlut2,20,31.560000 +u64toa_random,branchlut2,0,34.501000 +u64toa_sequential,count,1,5.840000 +u64toa_sequential,count,2,8.130000 +u64toa_sequential,count,3,9.860000 +u64toa_sequential,count,4,12.060000 +u64toa_sequential,count,5,14.280000 +u64toa_sequential,count,6,15.580000 +u64toa_sequential,count,7,17.320000 +u64toa_sequential,count,8,19.580000 +u64toa_sequential,count,9,21.200000 +u64toa_sequential,count,10,23.170000 +u64toa_sequential,count,11,25.260000 +u64toa_sequential,count,12,27.310000 +u64toa_sequential,count,13,29.330000 +u64toa_sequential,count,14,31.090000 +u64toa_sequential,count,15,32.850000 +u64toa_sequential,count,16,39.570000 +u64toa_sequential,count,17,41.370000 +u64toa_sequential,count,18,43.500000 +u64toa_sequential,count,19,40.460000 +u64toa_sequential,count,20,47.470000 +u64toa_random,count,0,32.541500 +u64toa_sequential,countlut,1,5.760000 +u64toa_sequential,countlut,2,6.770000 +u64toa_sequential,countlut,3,8.680000 +u64toa_sequential,countlut,4,9.320000 +u64toa_sequential,countlut,5,11.770000 +u64toa_sequential,countlut,6,12.880000 +u64toa_sequential,countlut,7,14.510000 +u64toa_sequential,countlut,8,15.060000 +u64toa_sequential,countlut,9,15.430000 +u64toa_sequential,countlut,10,16.520000 +u64toa_sequential,countlut,11,18.380000 +u64toa_sequential,countlut,12,18.940000 +u64toa_sequential,countlut,13,21.270000 +u64toa_sequential,countlut,14,21.750000 +u64toa_sequential,countlut,15,24.160000 +u64toa_sequential,countlut,16,24.270000 +u64toa_sequential,countlut,17,24.440000 +u64toa_sequential,countlut,18,25.720000 +u64toa_sequential,countlut,19,27.140000 +u64toa_sequential,countlut,20,27.470000 +u64toa_random,countlut,0,29.840000 +u64toa_sequential,jeaiii,1,3.040000 +u64toa_sequential,jeaiii,2,3.680000 +u64toa_sequential,jeaiii,3,4.520000 +u64toa_sequential,jeaiii,4,5.530000 +u64toa_sequential,jeaiii,5,6.620000 +u64toa_sequential,jeaiii,6,7.250000 +u64toa_sequential,jeaiii,7,8.120000 +u64toa_sequential,jeaiii,8,9.020000 +u64toa_sequential,jeaiii,9,9.410000 +u64toa_sequential,jeaiii,10,9.920000 +u64toa_sequential,jeaiii,11,13.140000 +u64toa_sequential,jeaiii,12,13.220000 +u64toa_sequential,jeaiii,13,13.870000 +u64toa_sequential,jeaiii,14,15.040000 +u64toa_sequential,jeaiii,15,15.960000 +u64toa_sequential,jeaiii,16,16.730000 +u64toa_sequential,jeaiii,17,17.850000 +u64toa_sequential,jeaiii,18,17.090000 +u64toa_sequential,jeaiii,19,18.960000 +u64toa_sequential,jeaiii,20,19.380000 +u64toa_random,jeaiii,0,25.272000 +u64toa_sequential,lut,1,7.810000 +u64toa_sequential,lut,2,9.680000 +u64toa_sequential,lut,3,13.260000 +u64toa_sequential,lut,4,15.350000 +u64toa_sequential,lut,5,19.310000 +u64toa_sequential,lut,6,20.430000 +u64toa_sequential,lut,7,24.970000 +u64toa_sequential,lut,8,25.590000 +u64toa_sequential,lut,9,30.100000 +u64toa_sequential,lut,10,31.960000 +u64toa_sequential,lut,11,34.560000 +u64toa_sequential,lut,12,36.620000 +u64toa_sequential,lut,13,40.090000 +u64toa_sequential,lut,14,42.230000 +u64toa_sequential,lut,15,45.880000 +u64toa_sequential,lut,16,46.370000 +u64toa_sequential,lut,17,39.520000 +u64toa_sequential,lut,18,39.710000 +u64toa_sequential,lut,19,42.790000 +u64toa_sequential,lut,20,44.380000 +u64toa_random,lut,0,39.926000 +u64toa_sequential,mwilson,1,5.250000 +u64toa_sequential,mwilson,2,10.170000 +u64toa_sequential,mwilson,3,12.900000 +u64toa_sequential,mwilson,4,15.540000 +u64toa_sequential,mwilson,5,18.020000 +u64toa_sequential,mwilson,6,21.840000 +u64toa_sequential,mwilson,7,24.350000 +u64toa_sequential,mwilson,8,28.310000 +u64toa_sequential,mwilson,9,30.800000 +u64toa_sequential,mwilson,10,34.070000 +u64toa_sequential,mwilson,11,36.770000 +u64toa_sequential,mwilson,12,40.690000 +u64toa_sequential,mwilson,13,43.830000 +u64toa_sequential,mwilson,14,47.230000 +u64toa_sequential,mwilson,15,49.740000 +u64toa_sequential,mwilson,16,53.630000 +u64toa_sequential,mwilson,17,55.490000 +u64toa_sequential,mwilson,18,60.230000 +u64toa_sequential,mwilson,19,62.460000 +u64toa_sequential,mwilson,20,66.500000 +u64toa_random,mwilson,0,43.885000 +u64toa_sequential,naive,1,8.820000 +u64toa_sequential,naive,2,12.580000 +u64toa_sequential,naive,3,14.760000 +u64toa_sequential,naive,4,18.180000 +u64toa_sequential,naive,5,21.720000 +u64toa_sequential,naive,6,25.870000 +u64toa_sequential,naive,7,29.110000 +u64toa_sequential,naive,8,32.390000 +u64toa_sequential,naive,9,35.770000 +u64toa_sequential,naive,10,38.740000 +u64toa_sequential,naive,11,42.210000 +u64toa_sequential,naive,12,44.680000 +u64toa_sequential,naive,13,49.060000 +u64toa_sequential,naive,14,51.810000 +u64toa_sequential,naive,15,53.260000 +u64toa_sequential,naive,16,57.490000 +u64toa_sequential,naive,17,48.760000 +u64toa_sequential,naive,18,52.730000 +u64toa_sequential,naive,19,55.060000 +u64toa_sequential,naive,20,57.220000 +u64toa_random,naive,0,44.580500 +u64toa_sequential,null,1,2.350000 +u64toa_sequential,null,2,2.290000 +u64toa_sequential,null,3,2.510000 +u64toa_sequential,null,4,2.300000 +u64toa_sequential,null,5,2.290000 +u64toa_sequential,null,6,2.300000 +u64toa_sequential,null,7,2.300000 +u64toa_sequential,null,8,2.290000 +u64toa_sequential,null,9,2.310000 +u64toa_sequential,null,10,2.290000 +u64toa_sequential,null,11,2.310000 +u64toa_sequential,null,12,2.290000 +u64toa_sequential,null,13,2.510000 +u64toa_sequential,null,14,2.310000 +u64toa_sequential,null,15,2.510000 +u64toa_sequential,null,16,2.310000 +u64toa_sequential,null,17,2.310000 +u64toa_sequential,null,18,2.450000 +u64toa_sequential,null,19,2.310000 +u64toa_sequential,null,20,2.300000 +u64toa_random,null,0,2.515000 +u64toa_sequential,sprintf,1,137.360000 +u64toa_sequential,sprintf,2,142.300000 +u64toa_sequential,sprintf,3,146.810000 +u64toa_sequential,sprintf,4,150.910000 +u64toa_sequential,sprintf,5,153.120000 +u64toa_sequential,sprintf,6,157.600000 +u64toa_sequential,sprintf,7,159.920000 +u64toa_sequential,sprintf,8,162.870000 +u64toa_sequential,sprintf,9,167.550000 +u64toa_sequential,sprintf,10,171.420000 +u64toa_sequential,sprintf,11,175.070000 +u64toa_sequential,sprintf,12,178.080000 +u64toa_sequential,sprintf,13,180.660000 +u64toa_sequential,sprintf,14,184.630000 +u64toa_sequential,sprintf,15,188.450000 +u64toa_sequential,sprintf,16,191.570000 +u64toa_sequential,sprintf,17,194.750000 +u64toa_sequential,sprintf,18,197.720000 +u64toa_sequential,sprintf,19,200.830000 +u64toa_sequential,sprintf,20,203.850000 +u64toa_random,sprintf,0,180.240500 +u64toa_sequential,sse2,1,5.260000 +u64toa_sequential,sse2,2,7.340000 +u64toa_sequential,sse2,3,7.980000 +u64toa_sequential,sse2,4,7.280000 +u64toa_sequential,sse2,5,11.310000 +u64toa_sequential,sse2,6,12.820000 +u64toa_sequential,sse2,7,12.950000 +u64toa_sequential,sse2,8,11.770000 +u64toa_sequential,sse2,9,14.190000 +u64toa_sequential,sse2,10,14.160000 +u64toa_sequential,sse2,11,14.140000 +u64toa_sequential,sse2,12,14.070000 +u64toa_sequential,sse2,13,14.150000 +u64toa_sequential,sse2,14,14.110000 +u64toa_sequential,sse2,15,14.040000 +u64toa_sequential,sse2,16,13.810000 +u64toa_sequential,sse2,17,14.420000 +u64toa_sequential,sse2,18,13.710000 +u64toa_sequential,sse2,19,16.460000 +u64toa_sequential,sse2,20,17.630000 +u64toa_random,sse2,0,27.235500 +u64toa_sequential,tmueller,1,2.970000 +u64toa_sequential,tmueller,2,4.880000 +u64toa_sequential,tmueller,3,7.770000 +u64toa_sequential,tmueller,4,7.910000 +u64toa_sequential,tmueller,5,10.320000 +u64toa_sequential,tmueller,6,11.200000 +u64toa_sequential,tmueller,7,13.180000 +u64toa_sequential,tmueller,8,13.230000 +u64toa_sequential,tmueller,9,14.990000 +u64toa_sequential,tmueller,10,15.650000 +u64toa_sequential,tmueller,11,17.480000 +u64toa_sequential,tmueller,12,17.990000 +u64toa_sequential,tmueller,13,19.510000 +u64toa_sequential,tmueller,14,20.160000 +u64toa_sequential,tmueller,15,21.890000 +u64toa_sequential,tmueller,16,22.360000 +u64toa_sequential,tmueller,17,24.070000 +u64toa_sequential,tmueller,18,24.670000 +u64toa_sequential,tmueller,19,26.490000 +u64toa_sequential,tmueller,20,26.890000 +u64toa_random,tmueller,0,26.302000 +u64toa_sequential,unnamed,1,9.220000 +u64toa_sequential,unnamed,2,11.990000 +u64toa_sequential,unnamed,3,13.220000 +u64toa_sequential,unnamed,4,16.830000 +u64toa_sequential,unnamed,5,19.670000 +u64toa_sequential,unnamed,6,21.340000 +u64toa_sequential,unnamed,7,24.070000 +u64toa_sequential,unnamed,8,26.130000 +u64toa_sequential,unnamed,9,27.740000 +u64toa_sequential,unnamed,10,28.680000 +u64toa_sequential,unnamed,11,36.530000 +u64toa_sequential,unnamed,12,39.710000 +u64toa_sequential,unnamed,13,42.880000 +u64toa_sequential,unnamed,14,45.210000 +u64toa_sequential,unnamed,15,49.480000 +u64toa_sequential,unnamed,16,51.580000 +u64toa_sequential,unnamed,17,54.700000 +u64toa_sequential,unnamed,18,57.070000 +u64toa_sequential,unnamed,19,59.760000 +u64toa_sequential,unnamed,20,59.130000 +u64toa_random,unnamed,0,46.502500 +u64toa_sequential,unrolledlut,1,4.960000 +u64toa_sequential,unrolledlut,2,5.530000 +u64toa_sequential,unrolledlut,3,6.930000 +u64toa_sequential,unrolledlut,4,6.880000 +u64toa_sequential,unrolledlut,5,8.820000 +u64toa_sequential,unrolledlut,6,9.670000 +u64toa_sequential,unrolledlut,7,9.920000 +u64toa_sequential,unrolledlut,8,9.970000 +u64toa_sequential,unrolledlut,9,10.530000 +u64toa_sequential,unrolledlut,10,10.440000 +u64toa_sequential,unrolledlut,11,13.710000 +u64toa_sequential,unrolledlut,12,13.230000 +u64toa_sequential,unrolledlut,13,15.700000 +u64toa_sequential,unrolledlut,14,15.870000 +u64toa_sequential,unrolledlut,15,16.450000 +u64toa_sequential,unrolledlut,16,16.930000 +u64toa_sequential,unrolledlut,17,18.120000 +u64toa_sequential,unrolledlut,18,17.820000 +u64toa_sequential,unrolledlut,19,20.000000 +u64toa_sequential,unrolledlut,20,20.320000 +u64toa_random,unrolledlut,0,25.506000 +i64toa_sequential,acf,1,5.210000 +i64toa_sequential,acf,2,5.570000 +i64toa_sequential,acf,3,8.200000 +i64toa_sequential,acf,4,8.200000 +i64toa_sequential,acf,5,14.310000 +i64toa_sequential,acf,6,14.310000 +i64toa_sequential,acf,7,14.310000 +i64toa_sequential,acf,8,14.310000 +i64toa_sequential,acf,9,16.490000 +i64toa_sequential,acf,10,16.540000 +i64toa_sequential,acf,11,19.840000 +i64toa_sequential,acf,12,19.840000 +i64toa_sequential,acf,13,19.840000 +i64toa_sequential,acf,14,19.840000 +i64toa_sequential,acf,15,19.840000 +i64toa_sequential,acf,16,20.080000 +i64toa_sequential,acf,17,23.630000 +i64toa_sequential,acf,18,23.630000 +i64toa_sequential,acf,19,23.630000 +i64toa_sequential,acf,20,23.630000 +i64toa_random,acf,0,24.892500 +i64toa_sequential,amartin,1,5.780000 +i64toa_sequential,amartin,2,5.780000 +i64toa_sequential,amartin,3,7.540000 +i64toa_sequential,amartin,4,7.550000 +i64toa_sequential,amartin,5,9.920000 +i64toa_sequential,amartin,6,9.920000 +i64toa_sequential,amartin,7,10.900000 +i64toa_sequential,amartin,8,10.900000 +i64toa_sequential,amartin,9,10.910000 +i64toa_sequential,amartin,10,10.900000 +i64toa_sequential,amartin,11,14.960000 +i64toa_sequential,amartin,12,14.960000 +i64toa_sequential,amartin,13,17.240000 +i64toa_sequential,amartin,14,17.230000 +i64toa_sequential,amartin,15,19.580000 +i64toa_sequential,amartin,16,19.570000 +i64toa_sequential,amartin,17,19.520000 +i64toa_sequential,amartin,18,19.630000 +i64toa_sequential,amartin,19,20.510000 +i64toa_sequential,amartin,20,20.410000 +i64toa_random,amartin,0,22.792000 +i64toa_sequential,branchlut,1,6.450000 +i64toa_sequential,branchlut,2,8.600000 +i64toa_sequential,branchlut,3,8.600000 +i64toa_sequential,branchlut,4,7.690000 +i64toa_sequential,branchlut,5,12.300000 +i64toa_sequential,branchlut,6,13.390000 +i64toa_sequential,branchlut,7,13.230000 +i64toa_sequential,branchlut,8,13.120000 +i64toa_sequential,branchlut,9,22.790000 +i64toa_sequential,branchlut,10,24.800000 +i64toa_sequential,branchlut,11,26.040000 +i64toa_sequential,branchlut,12,24.680000 +i64toa_sequential,branchlut,13,25.750000 +i64toa_sequential,branchlut,14,23.670000 +i64toa_sequential,branchlut,15,24.640000 +i64toa_sequential,branchlut,16,24.520000 +i64toa_sequential,branchlut,17,24.000000 +i64toa_sequential,branchlut,18,24.750000 +i64toa_sequential,branchlut,19,26.810000 +i64toa_sequential,branchlut,20,26.770000 +i64toa_random,branchlut,0,32.965500 +i64toa_sequential,branchlut2,1,5.430000 +i64toa_sequential,branchlut2,2,6.530000 +i64toa_sequential,branchlut2,3,8.770000 +i64toa_sequential,branchlut2,4,9.920000 +i64toa_sequential,branchlut2,5,11.620000 +i64toa_sequential,branchlut2,6,13.140000 +i64toa_sequential,branchlut2,7,14.270000 +i64toa_sequential,branchlut2,8,16.100000 +i64toa_sequential,branchlut2,9,17.180000 +i64toa_sequential,branchlut2,10,17.970000 +i64toa_sequential,branchlut2,11,21.360000 +i64toa_sequential,branchlut2,12,21.960000 +i64toa_sequential,branchlut2,13,24.270000 +i64toa_sequential,branchlut2,14,24.720000 +i64toa_sequential,branchlut2,15,27.420000 +i64toa_sequential,branchlut2,16,27.580000 +i64toa_sequential,branchlut2,17,27.100000 +i64toa_sequential,branchlut2,18,27.960000 +i64toa_sequential,branchlut2,19,28.640000 +i64toa_sequential,branchlut2,20,29.340000 +i64toa_random,branchlut2,0,37.390500 +i64toa_sequential,count,1,6.800000 +i64toa_sequential,count,2,8.810000 +i64toa_sequential,count,3,11.200000 +i64toa_sequential,count,4,13.060000 +i64toa_sequential,count,5,13.870000 +i64toa_sequential,count,6,16.550000 +i64toa_sequential,count,7,18.620000 +i64toa_sequential,count,8,20.230000 +i64toa_sequential,count,9,22.870000 +i64toa_sequential,count,10,24.980000 +i64toa_sequential,count,11,26.870000 +i64toa_sequential,count,12,28.180000 +i64toa_sequential,count,13,30.410000 +i64toa_sequential,count,14,32.630000 +i64toa_sequential,count,15,34.380000 +i64toa_sequential,count,16,36.410000 +i64toa_sequential,count,17,38.310000 +i64toa_sequential,count,18,40.280000 +i64toa_sequential,count,19,42.520000 +i64toa_sequential,count,20,42.470000 +i64toa_random,count,0,36.310000 +i64toa_sequential,countlut,1,7.600000 +i64toa_sequential,countlut,2,8.800000 +i64toa_sequential,countlut,3,10.430000 +i64toa_sequential,countlut,4,11.020000 +i64toa_sequential,countlut,5,13.220000 +i64toa_sequential,countlut,6,13.550000 +i64toa_sequential,countlut,7,16.410000 +i64toa_sequential,countlut,8,16.770000 +i64toa_sequential,countlut,9,16.610000 +i64toa_sequential,countlut,10,17.800000 +i64toa_sequential,countlut,11,19.570000 +i64toa_sequential,countlut,12,20.100000 +i64toa_sequential,countlut,13,22.370000 +i64toa_sequential,countlut,14,22.960000 +i64toa_sequential,countlut,15,25.510000 +i64toa_sequential,countlut,16,25.920000 +i64toa_sequential,countlut,17,25.910000 +i64toa_sequential,countlut,18,26.900000 +i64toa_sequential,countlut,19,28.390000 +i64toa_sequential,countlut,20,28.510000 +i64toa_random,countlut,0,34.332000 +i64toa_sequential,jeaiii,1,4.170000 +i64toa_sequential,jeaiii,2,4.330000 +i64toa_sequential,jeaiii,3,6.530000 +i64toa_sequential,jeaiii,4,7.200000 +i64toa_sequential,jeaiii,5,8.820000 +i64toa_sequential,jeaiii,6,8.810000 +i64toa_sequential,jeaiii,7,10.610000 +i64toa_sequential,jeaiii,8,10.860000 +i64toa_sequential,jeaiii,9,11.200000 +i64toa_sequential,jeaiii,10,11.870000 +i64toa_sequential,jeaiii,11,13.540000 +i64toa_sequential,jeaiii,12,14.700000 +i64toa_sequential,jeaiii,13,16.570000 +i64toa_sequential,jeaiii,14,16.450000 +i64toa_sequential,jeaiii,15,17.350000 +i64toa_sequential,jeaiii,16,17.290000 +i64toa_sequential,jeaiii,17,18.610000 +i64toa_sequential,jeaiii,18,18.450000 +i64toa_sequential,jeaiii,19,19.420000 +i64toa_sequential,jeaiii,20,19.410000 +i64toa_random,jeaiii,0,28.852500 +i64toa_sequential,lut,1,7.940000 +i64toa_sequential,lut,2,9.680000 +i64toa_sequential,lut,3,14.480000 +i64toa_sequential,lut,4,16.330000 +i64toa_sequential,lut,5,19.680000 +i64toa_sequential,lut,6,21.670000 +i64toa_sequential,lut,7,25.970000 +i64toa_sequential,lut,8,26.290000 +i64toa_sequential,lut,9,30.810000 +i64toa_sequential,lut,10,32.590000 +i64toa_sequential,lut,11,36.010000 +i64toa_sequential,lut,12,37.530000 +i64toa_sequential,lut,13,41.080000 +i64toa_sequential,lut,14,43.040000 +i64toa_sequential,lut,15,46.330000 +i64toa_sequential,lut,16,47.770000 +i64toa_sequential,lut,17,40.180000 +i64toa_sequential,lut,18,41.390000 +i64toa_sequential,lut,19,46.080000 +i64toa_sequential,lut,20,46.170000 +i64toa_random,lut,0,44.164000 +i64toa_sequential,mwilson,1,8.220000 +i64toa_sequential,mwilson,2,12.090000 +i64toa_sequential,mwilson,3,15.320000 +i64toa_sequential,mwilson,4,18.580000 +i64toa_sequential,mwilson,5,22.650000 +i64toa_sequential,mwilson,6,25.970000 +i64toa_sequential,mwilson,7,29.490000 +i64toa_sequential,mwilson,8,32.740000 +i64toa_sequential,mwilson,9,36.870000 +i64toa_sequential,mwilson,10,39.980000 +i64toa_sequential,mwilson,11,43.970000 +i64toa_sequential,mwilson,12,47.110000 +i64toa_sequential,mwilson,13,51.910000 +i64toa_sequential,mwilson,14,53.420000 +i64toa_sequential,mwilson,15,58.350000 +i64toa_sequential,mwilson,16,62.020000 +i64toa_sequential,mwilson,17,65.520000 +i64toa_sequential,mwilson,18,69.170000 +i64toa_sequential,mwilson,19,73.640000 +i64toa_sequential,mwilson,20,73.190000 +i64toa_random,mwilson,0,51.695000 +i64toa_sequential,naive,1,9.800000 +i64toa_sequential,naive,2,12.610000 +i64toa_sequential,naive,3,15.320000 +i64toa_sequential,naive,4,19.350000 +i64toa_sequential,naive,5,21.880000 +i64toa_sequential,naive,6,25.970000 +i64toa_sequential,naive,7,29.550000 +i64toa_sequential,naive,8,32.420000 +i64toa_sequential,naive,9,35.870000 +i64toa_sequential,naive,10,39.300000 +i64toa_sequential,naive,11,42.780000 +i64toa_sequential,naive,12,45.730000 +i64toa_sequential,naive,13,49.130000 +i64toa_sequential,naive,14,52.020000 +i64toa_sequential,naive,15,55.390000 +i64toa_sequential,naive,16,57.880000 +i64toa_sequential,naive,17,49.720000 +i64toa_sequential,naive,18,52.870000 +i64toa_sequential,naive,19,56.100000 +i64toa_sequential,naive,20,56.410000 +i64toa_random,naive,0,48.829000 +i64toa_sequential,null,1,2.510000 +i64toa_sequential,null,2,2.510000 +i64toa_sequential,null,3,2.510000 +i64toa_sequential,null,4,2.510000 +i64toa_sequential,null,5,2.510000 +i64toa_sequential,null,6,2.510000 +i64toa_sequential,null,7,2.490000 +i64toa_sequential,null,8,2.510000 +i64toa_sequential,null,9,2.510000 +i64toa_sequential,null,10,2.510000 +i64toa_sequential,null,11,2.480000 +i64toa_sequential,null,12,2.480000 +i64toa_sequential,null,13,2.480000 +i64toa_sequential,null,14,2.510000 +i64toa_sequential,null,15,2.510000 +i64toa_sequential,null,16,2.490000 +i64toa_sequential,null,17,2.510000 +i64toa_sequential,null,18,2.510000 +i64toa_sequential,null,19,2.510000 +i64toa_sequential,null,20,2.510000 +i64toa_random,null,0,2.514000 +i64toa_sequential,sprintf,1,136.890000 +i64toa_sequential,sprintf,2,141.000000 +i64toa_sequential,sprintf,3,144.960000 +i64toa_sequential,sprintf,4,149.050000 +i64toa_sequential,sprintf,5,152.740000 +i64toa_sequential,sprintf,6,156.680000 +i64toa_sequential,sprintf,7,159.850000 +i64toa_sequential,sprintf,8,163.620000 +i64toa_sequential,sprintf,9,167.000000 +i64toa_sequential,sprintf,10,170.280000 +i64toa_sequential,sprintf,11,173.380000 +i64toa_sequential,sprintf,12,176.840000 +i64toa_sequential,sprintf,13,180.130000 +i64toa_sequential,sprintf,14,183.170000 +i64toa_sequential,sprintf,15,186.710000 +i64toa_sequential,sprintf,16,189.710000 +i64toa_sequential,sprintf,17,192.650000 +i64toa_sequential,sprintf,18,195.710000 +i64toa_sequential,sprintf,19,198.300000 +i64toa_sequential,sprintf,20,198.460000 +i64toa_random,sprintf,0,181.604000 +i64toa_sequential,sse2,1,6.450000 +i64toa_sequential,sse2,2,7.800000 +i64toa_sequential,sse2,3,9.590000 +i64toa_sequential,sse2,4,8.580000 +i64toa_sequential,sse2,5,12.440000 +i64toa_sequential,sse2,6,13.120000 +i64toa_sequential,sse2,7,13.220000 +i64toa_sequential,sse2,8,12.980000 +i64toa_sequential,sse2,9,15.560000 +i64toa_sequential,sse2,10,15.270000 +i64toa_sequential,sse2,11,15.250000 +i64toa_sequential,sse2,12,15.290000 +i64toa_sequential,sse2,13,15.260000 +i64toa_sequential,sse2,14,15.250000 +i64toa_sequential,sse2,15,15.270000 +i64toa_sequential,sse2,16,14.660000 +i64toa_sequential,sse2,17,14.190000 +i64toa_sequential,sse2,18,13.730000 +i64toa_sequential,sse2,19,17.280000 +i64toa_sequential,sse2,20,17.200000 +i64toa_random,sse2,0,30.458000 +i64toa_sequential,tmueller,1,4.070000 +i64toa_sequential,tmueller,2,6.450000 +i64toa_sequential,tmueller,3,9.570000 +i64toa_sequential,tmueller,4,9.740000 +i64toa_sequential,tmueller,5,12.420000 +i64toa_sequential,tmueller,6,12.080000 +i64toa_sequential,tmueller,7,13.870000 +i64toa_sequential,tmueller,8,13.880000 +i64toa_sequential,tmueller,9,16.600000 +i64toa_sequential,tmueller,10,16.660000 +i64toa_sequential,tmueller,11,18.990000 +i64toa_sequential,tmueller,12,19.110000 +i64toa_sequential,tmueller,13,20.980000 +i64toa_sequential,tmueller,14,20.910000 +i64toa_sequential,tmueller,15,23.290000 +i64toa_sequential,tmueller,16,23.160000 +i64toa_sequential,tmueller,17,25.720000 +i64toa_sequential,tmueller,18,26.080000 +i64toa_sequential,tmueller,19,27.630000 +i64toa_sequential,tmueller,20,27.710000 +i64toa_random,tmueller,0,26.728000 +i64toa_sequential,unnamed,1,10.350000 +i64toa_sequential,unnamed,2,12.980000 +i64toa_sequential,unnamed,3,14.330000 +i64toa_sequential,unnamed,4,18.630000 +i64toa_sequential,unnamed,5,20.860000 +i64toa_sequential,unnamed,6,22.910000 +i64toa_sequential,unnamed,7,24.680000 +i64toa_sequential,unnamed,8,26.590000 +i64toa_sequential,unnamed,9,29.640000 +i64toa_sequential,unnamed,10,29.920000 +i64toa_sequential,unnamed,11,43.320000 +i64toa_sequential,unnamed,12,46.720000 +i64toa_sequential,unnamed,13,50.770000 +i64toa_sequential,unnamed,14,55.920000 +i64toa_sequential,unnamed,15,59.330000 +i64toa_sequential,unnamed,16,61.890000 +i64toa_sequential,unnamed,17,65.900000 +i64toa_sequential,unnamed,18,69.710000 +i64toa_sequential,unnamed,19,71.350000 +i64toa_sequential,unnamed,20,71.430000 +i64toa_random,unnamed,0,55.362000 +i64toa_sequential,unrolledlut,1,6.290000 +i64toa_sequential,unrolledlut,2,6.610000 +i64toa_sequential,unrolledlut,3,8.390000 +i64toa_sequential,unrolledlut,4,8.550000 +i64toa_sequential,unrolledlut,5,9.920000 +i64toa_sequential,unrolledlut,6,10.580000 +i64toa_sequential,unrolledlut,7,11.070000 +i64toa_sequential,unrolledlut,8,11.130000 +i64toa_sequential,unrolledlut,9,11.650000 +i64toa_sequential,unrolledlut,10,11.400000 +i64toa_sequential,unrolledlut,11,15.160000 +i64toa_sequential,unrolledlut,12,14.410000 +i64toa_sequential,unrolledlut,13,17.070000 +i64toa_sequential,unrolledlut,14,16.860000 +i64toa_sequential,unrolledlut,15,17.540000 +i64toa_sequential,unrolledlut,16,17.840000 +i64toa_sequential,unrolledlut,17,18.940000 +i64toa_sequential,unrolledlut,18,19.190000 +i64toa_sequential,unrolledlut,19,21.320000 +i64toa_sequential,unrolledlut,20,21.290000 +i64toa_random,unrolledlut,0,28.998000 diff --git a/src/acf.cpp b/src/acf.cpp new file mode 100644 index 0000000..7aae116 --- /dev/null +++ b/src/acf.cpp @@ -0,0 +1,467 @@ +#include +#include "test.h" + +#include + +#define LIKELY(x) __builtin_expect(static_cast(x), 1) +#define UNLIKELY(x) __builtin_expect(static_cast(x), 0) + +/* + * We only use functions for clarity here. Eyeballing -S output + * reveals GCC makes strange inlining decisions on this file, + * especially with LIKELY. Make sure our helpers are really + * inlined. + */ +#define INLINE inline __attribute__((always_inline)) static + +typedef __uint128_t uint128_t; + +/* Powers of 10. */ +#define PO2 100ULL +#define PO4 10000ULL +#define PO8 100000000ULL +#define PO10 10000000000ULL +#define PO16 10000000000000000ULL + +/* 64 bit's worth of '0' characters (i.e., 8 characters). */ +#define ZERO_CHARS 0x3030303030303030ULL + +/** + * encode_* functions unpack (pairs of) numbers into BCD: each byte + * contains exactly one decimal digit. + * + * The basic idea is to use SWAR (SIMD within a register) and perform + * low-precision arithmetic on several values in parallel. + * + * Most non-obviousness lies in the conversion of integer division + * constants to multiplication, shift and mask by hand. Decent + * compilers do it for scalars, but we can't easily express a SWAR + * integer division. + * + * The trick is to choose a low enough precision that the fixed point + * multiplication won't overflow into the next packed value (and high + * enough that the truncated division is exact for the relevant + * range), and to pack values so that the final result ends up in the + * byte we want. There are formulae to determine how little precision + * we need given an input range and a constant divisor, but for our + * cases, one can also check exhaustively (: + * + * The remainder is simple: given d = x / k, x % k = x - k * d. + */ + +/** + * SWAR unpack [100 * hi + lo] to 4 decimal bytes, assuming hi and lo + * \in [0, 100) + */ +INLINE uint32_t +encode_hundreds(uint32_t hi, uint32_t lo) +{ + /* + * Pack everything in a single 32 bit value. + * + * merged = [ hi 0 lo 0 ] + */ + uint32_t merged = hi | (lo << 16); + /* + * Fixed-point multiplication by 103/1024 ~= 1/10. + */ + uint32_t tens = (merged * 103UL) >> 10; + + /* + * Mask away garbage bits between our digits. + * + * tens = [ hi/10 0 lo/10 0 ] + * + * On a platform with more restricted literals (ARM, for + * instance), it may make sense to and-not with the middle + * bits. + */ + tens &= (0xFUL << 16) | 0xFUL; + + /* + * x mod 10 = x - 10 * (x div 10). + * + * (merged - 10 * tens) = [ hi%10 0 lo%10 0 ] + * + * Then insert these values between tens. Arithmetic instead + * of bitwise operation helps the compiler merge this with + * later increments by a constant (e.g., ZERO_CHARS). + */ + return tens + ((merged - 10UL * tens) << 8); +} + +/** + * SWAR encode 10000 hi + lo to byte (unpacked) BCD. + */ +INLINE uint64_t +encode_ten_thousands(uint64_t hi, uint64_t lo) +{ + uint64_t merged = hi | (lo << 32); + /* Truncate division by 100: 10486 / 2**20 ~= 1/100. */ + uint64_t top = ((merged * 10486ULL) >> 20) & ((0x7FULL << 32) | 0x7FULL); + /* Trailing 2 digits in the 1e4 chunks. */ + uint64_t bot = merged - 100ULL * top; + uint64_t hundreds; + uint64_t tens; + + /* + * We now have 4 radix-100 digits in little-endian order, each + * in its own 16 bit area. + */ + hundreds = (bot << 16) + top; + + /* Divide and mod by 10 all 4 radix-100 digits in parallel. */ + tens = (hundreds * 103ULL) >> 10; + tens &= (0xFULL << 48) | (0xFULL << 32) | (0xFULL << 16) | 0xFULL; + tens += (hundreds - 10ULL * tens) << 8; + + return tens; +} + +/** + * Range-specialised version of itoa. + * + * We always convert to fixed-width BCD then shift away any leading + * zero. The slop will manifest as writing zero bytes after our + * encoded string, which is acceptable: we never write more than the + * maximal length (10 or 20 characters). + */ + +/** + * itoa for x < 100. + */ +INLINE char* +itoa_hundred(char* out, unsigned int x) +{ + /* + * -1 if x < 10, 0 otherwise. Tried to get an sbb, but ?: + * gets us branches. + */ + int small = (int)(x - 10) >> 8; + unsigned int base = (unsigned int)'0' | ((unsigned int)'0' << 8); + /* + * Probably not necessary, but why not abuse smaller constants? + * Also, see block comment above idiv_POx functions. + */ + unsigned int hi = (x * 103UL) >> 10; + unsigned int lo = x - 10UL * hi; + + base += hi + (lo << 8); + /* Shift away the leading zero (shift by 8) if x < 10. */ + base >>= small & 8; + memcpy(out, &base, 2); + /* 2 + small = 1 if x < 10, 2 otherwise. */ + return out + 2 + small; +} + +/** + * itoa for x < 10k. + */ +INLINE char* +itoa_ten_thousand(char* out, unsigned int x) +{ + uint32_t buf; + unsigned int x_div_PO2, x_mod_PO2; + unsigned int zeros; + + x_div_PO2 = (x * 10486UL) >> 20; + x_mod_PO2 = x - PO2 * x_div_PO2; + buf = encode_hundreds(x_div_PO2, x_mod_PO2); + /* + * Count leading (in memory, trailing in register: we're + * little endian) zero bytes: count leading zero bits and + * round down to 8. + */ + zeros = __builtin_ctz(buf) & -8U; + buf += ZERO_CHARS; /* BCD -> ASCII. */ + buf >>= zeros; /* Shift away leading zero characters */ + memcpy(out, &buf, 4); + + /* zeros is in bits; convert to bytes to find actual length. */ + return out + 4 - zeros / 8; +} + +/** + * 32 bit helpers for truncation by constant. + * + * We only need them because GCC is stupid with likely/unlikely + * annotations: unlikely code is compiled with an extreme emphasis on + * size, up to compiling integer division by constants to actual div + * instructions. In turn, we want likely annotations because we only + * get a nice ladder of forward conditional jumps when there is no + * code between if blocks. We convince GCC that our "special" cases + * for shorter integers aren't slowpathed guards by marking each + * conditional as likely. + * + * The constants are easily proven correct (or compared with those + * generated by a reference compiler, e.g., GCC or clang). For + * example, + * + * 1/10000 ~= k = 3518437209 / 2**45 = 1/10000 + 73/21990232555520000. + * + * Let eps = 73/21990232555520000; for any 0 <= x < 2**32, + * floor(k * x) <= floor(x / 10000 + x * eps) + * <= floor(x / 10000 + 2**32 * eps) + * <= floor(x / 10000 + 2e-5). + * + * Given that x is unsigned, flooring the left and right -hand sides + * will yield the same value as long as the error term + * (x * eps <= 2e-5) is less than 1/10000, and 2e-5 < 10000. We finally + * conclude that 3518437209 / 2**45, our fixed point approximation of + * 1/10000, is always correct for truncated division of 32 bit + * unsigned ints. + */ + +/** + * Divide a 32 bit int by 1e4. + */ +INLINE uint32_t +idiv_PO4(uint32_t x) +{ + uint64_t wide = x; + uint64_t mul = 3518437209UL; + + return (wide * mul) >> 45; +} + +/** + * Divide a 32 bit int by 1e8. + */ +INLINE uint64_t +idiv_PO8(uint32_t x) +{ + uint64_t wide = x; + uint64_t mul = 1441151881UL; + + return (wide * mul) >> 57; +} + +INLINE +char* +an_itoa(char* out, uint32_t x) +{ + uint64_t buf; + uint32_t x_div_PO4; + uint32_t x_mod_PO4; + uint32_t x_div_PO8; + + /* + * Smaller numbers can be encoded more quickly. Special + * casing them makes a significant difference compared to + * always going through 8-digit encoding. + */ + if (LIKELY(x < PO2)) { + return itoa_hundred(out, x); + } + + if (LIKELY(x < PO4)) { + return itoa_ten_thousand(out, x); + } + + /* + * Manual souped up common subexpression elimination. + * + * The sequel always needs x / PO4 and x % PO4. Compute them + * here, before branching. We may also need x / PO8 if + * x >= PO8. Benchmarking shows that performing this division + * by constant unconditionally doesn't hurt. If x >= PO8, we'll + * always want x_div_PO4 = (x % PO8) / PO4. We compute that + * in a roundabout manner to reduce the makespan, i.e., the + * length of the dependency chain for (x % PO8) % PO4 = x % PO4. + */ + x_div_PO4 = idiv_PO4(x); + x_mod_PO4 = x - x_div_PO4 * PO4; + x_div_PO8 = idiv_PO8(x); + /* + * We actually want x_div_PO4 = (x % PO8) / PO4. + * Subtract what would have been removed by (x % PO8) from + * x_div_PO4. + */ + x_div_PO4 -= x_div_PO8 * PO4; + /* + * Finally, we can unconditionally encode_ten_thousands the + * values we obtain after division by PO8 and fixup by + * x_div_PO8 * PO4. + */ + buf = encode_ten_thousands(x_div_PO4, x_mod_PO4); + + if (LIKELY(x < PO8)) { + unsigned zeros; + + zeros = __builtin_ctzll(buf) & -8U; + buf += ZERO_CHARS; + buf >>= zeros; + + memcpy(out, &buf, 8); + return out + 8 - zeros / 8; + } + + /* 32 bit integers are always below 1e10. */ + buf += ZERO_CHARS; + out = itoa_hundred(out, x_div_PO8); + memcpy(out, &buf, 8); + return out + 8; +} + +/** + * 64 bit helpers for truncation by constant. + */ + +/** + * Divide a 64 bit int by 1e4. + */ +INLINE uint64_t +ldiv_PO4(uint64_t x) +{ + uint128_t wide = x; + uint128_t mul = 3777893186295716171ULL; + + return (wide * mul) >> 75; +} + +/** + * Divide a 64 bit int by 1e8. + */ +INLINE uint64_t +ldiv_PO8(uint64_t x) +{ + uint128_t wide = x; + uint128_t mul = 12379400392853802749ULL; + + return (wide * mul) >> 90; +} + +/** + * Divide a 64 bit int by 1e16. + */ +INLINE uint64_t +ldiv_PO16(uint64_t x) +{ + uint128_t wide = x; + uint128_t mul = 4153837486827862103ULL; + + return (wide * mul) >> 115; +} + +INLINE +char* +an_ltoa(char* out, uint64_t x) +{ + uint64_t x_div_PO4; + uint64_t x_mod_PO4; + uint64_t x_div_PO8; + uint64_t buf; + + if (LIKELY(x < PO2)) { + return itoa_hundred(out, x); + } + + if (LIKELY(x < PO4)) { + return itoa_ten_thousand(out, x); + } + + x_div_PO4 = ldiv_PO4(x); + x_mod_PO4 = x - x_div_PO4 * PO4; + + /* + * Benchmarking shows the long division by PO8 hurts + * performance for PO4 <= x < PO8. Keep encode_ten_thousands + * conditional for an_ltoa. + */ + if (LIKELY(x < PO8)) { + uint64_t buf; + unsigned zeros; + + buf = encode_ten_thousands(x_div_PO4, x_mod_PO4); + zeros = __builtin_ctzll(buf) & -8U; + buf += ZERO_CHARS; + buf >>= zeros; + + memcpy(out, &buf, 8); + return out + 8 - zeros / 8; + } + + /* See block comment in an_itoa. */ + x_div_PO8 = ldiv_PO8(x); + x_div_PO4 = x_div_PO4 - x_div_PO8 * PO4; + buf = encode_ten_thousands(x_div_PO4, x_mod_PO4) + ZERO_CHARS; + + /* + * Add a case for PO8 <= x < PO10 because itoa_hundred is much + * quicker than a second call to encode_ten_thousands; the + * same isn't true of itoa_ten_thousand. + */ + if (LIKELY(x < PO10)) { + out = itoa_hundred(out, x_div_PO8); + memcpy(out, &buf, 8); + return out + 8; + } + + /* + * Again, long division by PO16 hurts, so do the rest + * conditionally. + */ + if (LIKELY(x < PO16)) { + uint64_t buf_hi; + uint32_t hi_hi, hi_lo; + unsigned zeros; + + /* x_div_PO8 < PO8 < 2**32, so idiv_PO4 is safe. */ + hi_hi = idiv_PO4(x_div_PO8); + hi_lo = x_div_PO8 - hi_hi * PO4; + buf_hi = encode_ten_thousands(hi_hi, hi_lo); + zeros = __builtin_ctzll(buf_hi) & -8U; + buf_hi += ZERO_CHARS; + buf_hi >>= zeros; + + memcpy(out, &buf_hi, 8); + out += 8 - zeros / 8; + memcpy(out, &buf, 8); + return out + 8; + } else { + uint64_t hi = ldiv_PO16(x); + uint64_t mid = x_div_PO8 - hi * PO8; + uint64_t buf_mid; + uint32_t mid_hi, mid_lo; + + mid_hi = idiv_PO4(mid); + mid_lo = mid - mid_hi * PO4; + buf_mid = encode_ten_thousands(mid_hi, mid_lo) + ZERO_CHARS; + + out = itoa_ten_thousand(out, hi); + memcpy(out, &buf_mid, 8); + memcpy(out + 8, &buf, 8); + return out + 16; + } +} + + + +void u32toa_acf(uint32_t value, char* buffer) { + *an_itoa(buffer, value) = '\0'; +} + +void i32toa_acf(int32_t value, char* buffer) { + uint32_t u = static_cast(value); + if (value < 0) { + *buffer++ = '-'; + u = ~u + 1; + } + u32toa_acf(u, buffer); +} + +void u64toa_acf(uint64_t value, char* buffer) { + *an_ltoa(buffer, value) = '\0'; +} + +void i64toa_acf(int64_t value, char* buffer) { + uint64_t u = static_cast(value); + if (value < 0) { + *buffer++ = '-'; + u = ~u + 1; + } + u64toa_acf(u, buffer); +} + +REGISTER_TEST(acf); +