A common operation, that should be well recognized and optimized... or so you would imagine.
## MacOS/LLVM
```
...
...
@@ -113,9 +115,9 @@ number time per second test0
30 "int64_t variable left shift" 17.53 sec 2738.72 M 0.31
31 "int64_t repeated variable left shift" 50.07 sec 958.59 M 0.90
```
*we start off with a problem - unsigned 8 bit variable shift is much slower than other 8 bit shifts. We see the same problem for unsigned 16 bit, 32 bit, but not 64 bit (where signed right shift gets slower).
*repeated variable shifts are not being optimized down to a single shift by LLVM.
*for some reason the single variable 32 bit shifts are faster than 8 or 16 bit, except signed variable right shift. Something funny is going on in the optimizer here.
*We start off with a problem - unsigned 8 bit variable shift is much slower than other 8 bit shifts. We see the same problem for unsigned 16 bit, 32 bit, but not 64 bit (where signed right shift gets slower).
*Repeated variable shifts are not being optimized down to a single shift by LLVM.
*For some reason the single variable 32 bit shifts are faster than 8 or 16 bit, except signed variable right shift. Something funny is going on in the optimizer here.
### Constant Mask Low
...
...
@@ -140,7 +142,7 @@ number time per second test0
14 "int64_t constant mask low" 17.34 sec 2768.74 M 11.80
15 "int64_t constant mask low by shift" 17.32 sec 2771.50 M 11.78
```
*there are some speed glitches, but overall it appears that the constant mask low operations are being optimized correctly.
*There are some speed glitches, but overall it appears that the constant mask low operations are being optimized correctly.
### Variable Mask Low
...
...
@@ -165,7 +167,7 @@ number time per second test0
14 "int64_t variable mask low" 16.45 sec 2918.53 M 11.20
15 "int64_t variable mask low by shift" 26.89 sec 1784.96 M 18.31
```
* Wow, the variable mask low operations are not being optimized correctly!
* Wow, the variable mask low operations are not being optimized!
* How the heck are the unsigned mask operations so much slower?
...
...
@@ -205,36 +207,409 @@ number time per second test0
-------
## Windows/MSVC
```
##Compiler
Microsoft VisualC++ version 1912
Compiling for Windows 64 bit
##Operating System
Windows OS Version: 6.2, build 9200
```
### Constant Shifts
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant right shift" 18.94 sec 2533.78 M 1.00
1 "uint8_t repeated constant right shift" 18.94 sec 2534.59 M 1.00
2 "uint8_t constant left shift" 16.90 sec 2840.24 M 0.89
3 "uint8_t repeated constant left shift" 16.88 sec 2842.93 M 0.89
4 "uint8_t identity" 1.64 sec 29321.93 M 0.09
5 "uint8_t right shift zero" 1.64 sec 29304.03 M 0.09
6 "uint8_t left shift zero" 1.63 sec 29429.80 M 0.09
7 "int8_t constant right shift" 18.62 sec 2578.15 M 0.98
8 "int8_t repeated constant right shift" 19.10 sec 2513.09 M 1.01
9 "int8_t constant left shift" 16.87 sec 2845.79 M 0.89
10 "int8_t repeated constant left shift" 16.86 sec 2847.31 M 0.89
11 "int8_t identity" 1.61 sec 29869.32 M 0.08
12 "int8_t right shift zero" 1.63 sec 29484.03 M 0.09
13 "int8_t left shift zero" 1.60 sec 30000.00 M 0.08
14 "uint16_t constant right shift" 4.31 sec 11129.14 M 0.23
15 "uint16_t repeated constant right shift" 4.29 sec 11196.64 M 0.23
16 "uint16_t constant left shift" 4.30 sec 11165.39 M 0.23
17 "uint16_t repeated constant left shift" 4.29 sec 11180.99 M 0.23
18 "uint16_t identity" 3.22 sec 14920.73 M 0.17
19 "uint16_t right shift zero" 3.22 sec 14911.46 M 0.17
20 "uint16_t left shift zero" 3.24 sec 14833.13 M 0.17
21 "int16_t constant right shift" 4.31 sec 11134.31 M 0.23
22 "int16_t repeated constant right shift" 4.29 sec 11188.81 M 0.23
23 "int16_t constant left shift" 4.31 sec 11134.31 M 0.23
24 "int16_t repeated constant left shift" 4.31 sec 11136.89 M 0.23
25 "int16_t identity" 3.22 sec 14925.37 M 0.17
26 "int16_t right shift zero" 3.21 sec 14967.26 M 0.17
27 "int16_t left shift zero" 3.21 sec 14953.27 M 0.17
28 "uint32_t constant right shift" 8.53 sec 5627.86 M 0.45
29 "uint32_t repeated constant right shift" 8.55 sec 5614.69 M 0.45
30 "uint32_t constant left shift" 8.52 sec 5636.45 M 0.45
31 "uint32_t repeated constant left shift" 8.49 sec 5652.38 M 0.45
32 "uint32_t identity" 6.41 sec 7484.80 M 0.34
33 "uint32_t right shift zero" 6.38 sec 7528.23 M 0.34
34 "uint32_t left shift zero" 6.37 sec 7535.32 M 0.34
35 "int32_t constant right shift" 8.57 sec 5601.59 M 0.45
36 "int32_t repeated constant right shift" 8.57 sec 5601.59 M 0.45
37 "int32_t constant left shift" 8.75 sec 5485.71 M 0.46
38 "int32_t repeated constant left shift" 8.53 sec 5627.20 M 0.45
39 "int32_t identity" 6.37 sec 7531.77 M 0.34
40 "int32_t right shift zero" 6.37 sec 7532.96 M 0.34
41 "int32_t left shift zero" 6.36 sec 7553.11 M 0.34
42 "uint64_t constant right shift" 19.83 sec 2420.09 M 1.05
43 "uint64_t repeated constant right shift" 19.97 sec 2403.36 M 1.05
44 "uint64_t constant left shift" 19.81 sec 2423.02 M 1.05
45 "uint64_t repeated constant left shift" 20.48 sec 2343.98 M 1.08
46 "uint64_t identity" 18.04 sec 2660.16 M 0.95
47 "uint64_t right shift zero" 17.97 sec 2671.42 M 0.95
48 "uint64_t left shift zero" 17.79 sec 2698.15 M 0.94
49 "int64_t constant right shift" 25.73 sec 1865.16 M 1.36
50 "int64_t repeated constant right shift" 25.65 sec 1871.35 M 1.35
51 "int64_t constant left shift" 19.93 sec 2408.55 M 1.05
52 "int64_t repeated constant left shift" 19.88 sec 2414.61 M 1.05
53 "int64_t identity" 17.72 sec 2708.50 M 0.94
54 "int64_t right shift zero" 18.36 sec 2614.66 M 0.97
55 "int64_t left shift zero" 18.35 sec 2615.52 M 0.97
```
* The 8 bit shifts are remarkably slow.
* Identity operations seem to be optimized decently.
* Overall the results are a bit slower than MacOS/LLVM.
* For some reason unsigned 64 bit repeated constant left shifts are not as well optimized as repeated constant right shifts, or constant shifts.
* Signed 64 bit right shifts are noticeably slower than left shifts.
### Variable Shifts
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable right shift" 21.17 sec 2267.36 M 1.00
1 "uint8_t repeated variable right shift" 44.59 sec 1076.47 M 2.11
2 "uint8_t variable left shift" 20.69 sec 2320.07 M 0.98
3 "uint8_t repeated variable left shift" 45.02 sec 1066.29 M 2.13
4 "int8_t variable right shift" 21.02 sec 2283.00 M 0.99
5 "int8_t repeated variable right shift" 45.35 sec 1058.46 M 2.14
6 "int8_t variable left shift" 20.89 sec 2298.30 M 0.99
7 "int8_t repeated variable left shift" 44.97 sec 1067.50 M 2.12
8 "uint16_t variable right shift" 4.51 sec 10631.23 M 0.21
9 "uint16_t repeated variable right shift" 45.39 sec 1057.55 M 2.14
10 "uint16_t variable left shift" 4.40 sec 10906.61 M 0.21
11 "uint16_t repeated variable left shift" 44.48 sec 1079.26 M 2.10
12 "int16_t variable right shift" 4.35 sec 11042.10 M 0.21
13 "int16_t repeated variable right shift" 44.90 sec 1069.16 M 2.12
14 "int16_t variable left shift" 4.42 sec 10852.36 M 0.21
15 "int16_t repeated variable left shift" 44.90 sec 1069.16 M 2.12
16 "uint32_t variable right shift" 8.71 sec 5514.07 M 0.41
17 "uint32_t repeated variable right shift" 27.75 sec 1729.67 M 1.31
18 "uint32_t variable left shift" 8.71 sec 5508.38 M 0.41
19 "uint32_t repeated variable left shift" 27.71 sec 1732.41 M 1.31
20 "int32_t variable right shift" 8.95 sec 5366.13 M 0.42
21 "int32_t repeated variable right shift" 28.06 sec 1710.44 M 1.33
22 "int32_t variable left shift" 8.71 sec 5512.17 M 0.41
23 "int32_t repeated variable left shift" 27.80 sec 1726.49 M 1.31
24 "uint64_t variable right shift" 26.82 sec 1789.58 M 1.27
25 "uint64_t repeated variable right shift" 46.80 sec 1025.75 M 2.21
26 "uint64_t variable left shift" 26.61 sec 1803.63 M 1.26
27 "uint64_t repeated variable left shift" 46.05 sec 1042.46 M 2.18
28 "int64_t variable right shift" 26.42 sec 1817.01 M 1.25
29 "int64_t repeated variable right shift" 46.03 sec 1042.73 M 2.17
30 "int64_t variable left shift" 26.54 sec 1808.52 M 1.25
31 "int64_t repeated variable left shift" 46.38 sec 1035.02 M 2.19
```
* Variable repeated shifts are not being optimized, but even variable single shifts are slow for 8 and 64 bit. 16 and 32 bit seem ok for the variable single shifts.
### Constant Mask Low
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant mask low" 2.19 sec 21957.91 M 1.00
1 "uint8_t constant mask low by shift" 2.22 sec 21582.73 M 1.02
2 "int8_t constant mask low" 2.25 sec 21304.93 M 1.03
3 "int8_t constant mask low by shift" 2.23 sec 21543.99 M 1.02
4 "uint16_t constant mask low" 4.52 sec 10624.17 M 2.07
5 "uint16_t constant mask low by shift" 4.56 sec 10535.56 M 2.08
6 "int16_t constant mask low" 4.44 sec 10818.12 M 2.03
7 "int16_t constant mask low by shift" 4.43 sec 10832.77 M 2.03
8 "uint32_t constant mask low" 9.11 sec 5268.36 M 4.17
9 "uint32_t constant mask low by shift" 8.83 sec 5434.17 M 4.04
10 "int32_t constant mask low" 8.84 sec 5432.94 M 4.04
11 "int32_t constant mask low by shift" 8.75 sec 5483.21 M 4.00
12 "uint64_t constant mask low" 19.59 sec 2449.85 M 8.96
13 "uint64_t constant mask low by shift" 19.77 sec 2427.92 M 9.04
14 "int64_t constant mask low" 19.33 sec 2482.93 M 8.84
15 "int64_t constant mask low by shift" 20.04 sec 2395.45 M 9.17
```
* Constant mask low looks like it is being optimized, just not as well as MacOS/LLVM.
### Variable Mask Low
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable mask low" 29.20 sec 1643.84 M 1.00
1 "uint8_t variable mask low by shift" 19.19 sec 2500.78 M 0.66
2 "int8_t variable mask low" 30.49 sec 1574.18 M 1.04
3 "int8_t variable mask low by shift" 19.29 sec 2488.08 M 0.66
4 "uint16_t variable mask low" 24.44 sec 1963.91 M 0.84
5 "uint16_t variable mask low by shift" 19.78 sec 2427.06 M 0.68
6 "int16_t variable mask low" 24.40 sec 1967.05 M 0.84
7 "int16_t variable mask low by shift" 18.87 sec 2544.26 M 0.65
8 "uint32_t variable mask low" 20.33 sec 2361.16 M 0.70
9 "uint32_t variable mask low by shift" 11.54 sec 4159.81 M 0.40
10 "int32_t variable mask low" 20.15 sec 2382.61 M 0.69
11 "int32_t variable mask low by shift" 11.55 sec 4155.12 M 0.40
12 "uint64_t variable mask low" 26.16 sec 1834.65 M 0.90
13 "uint64_t variable mask low by shift" 25.91 sec 1852.35 M 0.89
14 "int64_t variable mask low" 25.90 sec 1853.42 M 0.89
15 "int64_t variable mask low by shift" 25.88 sec 1855.00 M 0.89
```
* When the hand optimized code is slower than unoptimized tests, and overall the code is slower than it should be, would that be considered a pessimizer, exacerbater, dis-optimizer, un-optimizer... come on, I need more antonyms here (and MS needs some bug fixes).
### Constant Mask High
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant mask high" 1.63 sec 29429.80 M 1.00
1 "uint8_t constant mask high by shift" 26.41 sec 1817.42 M 16.19
2 "uint16_t constant mask high" 3.21 sec 14943.96 M 1.97
3 "uint16_t constant mask high by shift" 23.14 sec 2074.06 M 14.19
4 "uint32_t constant mask high" 8.39 sec 5718.37 M 5.15
5 "uint32_t constant mask high by shift" 8.39 sec 5717.69 M 5.15
6 "uint64_t constant mask high" 19.20 sec 2500.39 M 11.77
7 "uint64_t constant mask high by shift" 19.21 sec 2499.22 M 11.78
```
* 8 and 16 bit are not being optimized, but it looks like 32 and 64 bit are.
### Variable Mask High
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable mask high" 11.34 sec 4231.68 M 1.00
1 "uint8_t variable mask high by shift" 16.78 sec 2861.23 M 1.48
2 "uint16_t variable mask high" 9.49 sec 5060.09 M 0.84
3 "uint16_t variable mask high by shift" 16.77 sec 2861.91 M 1.48
4 "uint32_t variable mask high" 8.41 sec 5704.10 M 0.74
5 "uint32_t variable mask high by shift" 10.91 sec 4399.63 M 0.96
6 "uint64_t variable mask high" 25.44 sec 1886.50 M 2.24
7 "uint64_t variable mask high by shift" 25.42 sec 1887.98 M 2.24
```
* Variable mask high by shift operations are not being optimized, and 8 bit optimized code is slower than 16 or 32 bit.
* And the fastest cases here are way slower than LLVM.
-------
## Linux/gcc
```
##Compiler
GCC version 8.1.0
##Operating System
Kernel OS Name: Linux
Kernel OS Release: 4.4.0-128-generic
Kernel OS Version: #154-Ubuntu SMP Fri May 25 14:14:58 UTC 2018
Kernel OS Machine: i686
```
### Constant Shifts
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant right shift" 32.65 sec 1470.10 M 1.00
1 "uint8_t repeated constant right shift" 33.47 sec 1433.92 M 1.03
2 "uint8_t constant left shift" 33.78 sec 1420.89 M 1.03
3 "uint8_t repeated constant left shift" 34.55 sec 1389.32 M 1.06
4 "uint8_t identity" 21.51 sec 2231.60 M 0.66
5 "uint8_t right shift zero" 21.39 sec 2244.34 M 0.66
6 "uint8_t left shift zero" 21.41 sec 2241.88 M 0.66
7 "int8_t constant right shift" 33.63 sec 1427.24 M 1.03
8 "int8_t repeated constant right shift" 33.78 sec 1420.86 M 1.03
9 "int8_t constant left shift" 34.01 sec 1411.48 M 1.04
10 "int8_t repeated constant left shift" 33.85 sec 1417.92 M 1.04
11 "int8_t identity" 34.14 sec 1406.15 M 1.05
12 "int8_t right shift zero" 33.58 sec 1429.30 M 1.03
13 "int8_t left shift zero" 33.63 sec 1427.36 M 1.03
14 "uint16_t constant right shift" 33.34 sec 1439.67 M 1.02
15 "uint16_t repeated constant right shift" 33.32 sec 1440.65 M 1.02
16 "uint16_t constant left shift" 33.55 sec 1430.80 M 1.03
17 "uint16_t repeated constant left shift" 33.53 sec 1431.68 M 1.03
18 "uint16_t identity" 33.35 sec 1439.36 M 1.02
19 "uint16_t right shift zero" 33.27 sec 1442.89 M 1.02
20 "uint16_t left shift zero" 33.29 sec 1442.02 M 1.02
21 "int16_t constant right shift" 33.33 sec 1440.19 M 1.02
22 "int16_t repeated constant right shift" 33.73 sec 1422.93 M 1.03
23 "int16_t constant left shift" 34.99 sec 1371.90 M 1.07
24 "int16_t repeated constant left shift" 36.29 sec 1322.67 M 1.11
25 "int16_t identity" 34.27 sec 1400.81 M 1.05
26 "int16_t right shift zero" 33.01 sec 1453.91 M 1.01
27 "int16_t left shift zero" 33.05 sec 1452.25 M 1.01
28 "uint32_t constant right shift" 32.64 sec 1470.70 M 1.00
29 "uint32_t repeated constant right shift" 32.96 sec 1456.29 M 1.01
30 "uint32_t constant left shift" 33.30 sec 1441.36 M 1.02
31 "uint32_t repeated constant left shift" 33.55 sec 1430.49 M 1.03
32 "uint32_t identity" 33.52 sec 1431.83 M 1.03
33 "uint32_t right shift zero" 33.78 sec 1421.16 M 1.03
34 "uint32_t left shift zero" 34.07 sec 1408.85 M 1.04
35 "int32_t constant right shift" 34.14 sec 1405.86 M 1.05
36 "int32_t repeated constant right shift" 34.42 sec 1394.64 M 1.05
37 "int32_t constant left shift" 34.38 sec 1396.31 M 1.05
38 "int32_t repeated constant left shift" 34.59 sec 1387.53 M 1.06
39 "int32_t identity" 33.98 sec 1412.67 M 1.04
40 "int32_t right shift zero" 34.22 sec 1402.58 M 1.05
41 "int32_t left shift zero" 33.64 sec 1426.68 M 1.03
42 "uint64_t constant right shift" 68.84 sec 697.22 M 2.11
43 "uint64_t repeated constant right shift" 69.44 sec 691.24 M 2.13
44 "uint64_t constant left shift" 69.06 sec 695.01 M 2.12
45 "uint64_t repeated constant left shift" 68.27 sec 703.05 M 2.09
46 "uint64_t identity" 50.46 sec 951.25 M 1.55
47 "uint64_t right shift zero" 50.76 sec 945.61 M 1.55
48 "uint64_t left shift zero" 51.09 sec 939.57 M 1.56
49 "int64_t constant right shift" 68.65 sec 699.17 M 2.10
50 "int64_t repeated constant right shift" 67.76 sec 708.34 M 2.08
51 "int64_t constant left shift" 67.46 sec 711.57 M 2.07
52 "int64_t repeated constant left shift" 67.09 sec 715.43 M 2.05
53 "int64_t identity" 49.83 sec 963.22 M 1.53
54 "int64_t right shift zero" 49.89 sec 962.11 M 1.53
55 "int64_t left shift zero" 49.54 sec 968.85 M 1.52
```
*
### Variable Shifts
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable right shift" 50.67 sec 947.27 M 1.00
1 "uint8_t repeated variable right shift" 52.74 sec 910.21 M 1.04
2 "uint8_t variable left shift" 49.79 sec 963.96 M 0.98
3 "uint8_t repeated variable left shift" 51.96 sec 923.86 M 1.03
4 "int8_t variable right shift" 49.52 sec 969.27 M 0.98
5 "int8_t repeated variable right shift" 52.40 sec 915.96 M 1.03
6 "int8_t variable left shift" 49.75 sec 964.89 M 0.98
7 "int8_t repeated variable left shift" 51.99 sec 923.27 M 1.03
8 "uint16_t variable right shift" 50.13 sec 957.58 M 0.99
9 "uint16_t repeated variable right shift" 54.44 sec 881.72 M 1.07
10 "uint16_t variable left shift" 50.97 sec 941.64 M 1.01
11 "uint16_t repeated variable left shift" 53.29 sec 900.81 M 1.05
12 "int16_t variable right shift" 51.06 sec 940.07 M 1.01
13 "int16_t repeated variable right shift" 54.12 sec 886.86 M 1.07
14 "int16_t variable left shift" 51.17 sec 938.03 M 1.01
15 "int16_t repeated variable left shift" 54.07 sec 887.81 M 1.07
16 "uint32_t variable right shift" 52.19 sec 919.79 M 1.03
17 "uint32_t repeated variable right shift" 54.40 sec 882.40 M 1.07
18 "uint32_t variable left shift" 52.79 sec 909.22 M 1.04
19 "uint32_t repeated variable left shift" 54.30 sec 883.91 M 1.07
20 "int32_t variable right shift" 51.08 sec 939.67 M 1.01
21 "int32_t repeated variable right shift" 55.80 sec 860.16 M 1.10
22 "int32_t variable left shift" 51.59 sec 930.45 M 1.02
23 "int32_t repeated variable left shift" 54.33 sec 883.56 M 1.07
24 "uint64_t variable right shift" 126.02 sec 380.89 M 2.49
25 "uint64_t repeated variable right shift" 188.24 sec 255.00 M 3.71
26 "uint64_t variable left shift" 126.85 sec 378.41 M 2.50
27 "uint64_t repeated variable left shift" 175.84 sec 272.97 M 3.47
28 "int64_t variable right shift" 130.42 sec 368.03 M 2.57
29 "int64_t repeated variable right shift" 185.46 sec 258.81 M 3.66
30 "int64_t variable left shift" 126.30 sec 380.05 M 2.49
31 "int64_t repeated variable left shift" 174.56 sec 274.97 M 3.44
```
*
### Constant Mask Low
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant mask low" 21.40 sec 2243.32 M 1.00
1 "uint8_t constant mask low by shift" 21.22 sec 2261.99 M 0.99
2 "int8_t constant mask low" 33.60 sec 1428.39 M 1.57
3 "int8_t constant mask low by shift" 33.69 sec 1424.89 M 1.57
4 "uint16_t constant mask low" 34.56 sec 1388.75 M 1.62
5 "uint16_t constant mask low by shift" 34.08 sec 1408.57 M 1.59
6 "int16_t constant mask low" 33.92 sec 1415.24 M 1.59
7 "int16_t constant mask low by shift" 33.92 sec 1415.19 M 1.59
8 "uint32_t constant mask low" 33.58 sec 1429.31 M 1.57
9 "uint32_t constant mask low by shift" 34.28 sec 1400.30 M 1.60
10 "int32_t constant mask low" 34.23 sec 1402.25 M 1.60
11 "int32_t constant mask low by shift" 33.83 sec 1419.04 M 1.58
12 "uint64_t constant mask low" 50.70 sec 946.76 M 2.37
13 "uint64_t constant mask low by shift" 50.77 sec 945.51 M 2.37
14 "int64_t constant mask low" 51.32 sec 935.27 M 2.40
15 "int64_t constant mask low by shift" 51.40 sec 933.92 M 2.40
```
*
### Variable Mask Low
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable mask low" 21.10 sec 2274.59 M 1.00
1 "uint8_t variable mask low by shift" 33.78 sec 1421.03 M 1.60
2 "int8_t variable mask low" 34.08 sec 1408.60 M 1.61
3 "int8_t variable mask low by shift" 33.81 sec 1419.66 M 1.60
4 "uint16_t variable mask low" 33.86 sec 1417.54 M 1.60
5 "uint16_t variable mask low by shift" 33.94 sec 1414.10 M 1.61
6 "int16_t variable mask low" 33.87 sec 1417.09 M 1.61
7 "int16_t variable mask low by shift" 33.34 sec 1439.73 M 1.58
8 "uint32_t variable mask low" 33.36 sec 1439.05 M 1.58
9 "uint32_t variable mask low by shift" 32.95 sec 1456.82 M 1.56
10 "int32_t variable mask low" 32.86 sec 1460.78 M 1.56
11 "int32_t variable mask low by shift" 33.27 sec 1442.64 M 1.58
12 "uint64_t variable mask low" 86.66 sec 553.89 M 4.11
13 "uint64_t variable mask low by shift" 87.08 sec 551.22 M 4.13
14 "int64_t variable mask low" 86.08 sec 557.61 M 4.08
15 "int64_t variable mask low by shift" 85.90 sec 558.78 M 4.07
```
*
### Constant Mask High
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t constant mask high" 21.06 sec 2278.86 M 1.00
1 "uint8_t constant mask high by shift" 33.53 sec 1431.60 M 1.59
2 "uint16_t constant mask high" 33.42 sec 1436.06 M 1.59
3 "uint16_t constant mask high by shift" 33.56 sec 1430.34 M 1.59
4 "uint32_t constant mask high" 50.42 sec 952.06 M 2.39
5 "uint32_t constant mask high by shift" 50.17 sec 956.67 M 2.38
6 "uint64_t constant mask high" 49.59 sec 967.99 M 2.35
7 "uint64_t constant mask high by shift" 49.07 sec 978.24 M 2.33
```
*
### Variable Mask High
```
test description absolute operations ratio with
number time per second test0
0 "uint8_t variable mask high" 20.37 sec 2356.31 M 1.00
1 "uint8_t variable mask high by shift" 32.75 sec 1465.68 M 1.61
2 "uint16_t variable mask high" 32.71 sec 1467.47 M 1.61
3 "uint16_t variable mask high by shift" 32.45 sec 1479.07 M 1.59
4 "uint32_t variable mask high" 32.50 sec 1476.75 M 1.60
5 "uint32_t variable mask high by shift" 32.93 sec 1457.85 M 1.62
6 "uint64_t variable mask high" 49.25 sec 974.53 M 2.42
7 "uint64_t variable mask high by shift" 49.34 sec 972.80 M 2.42