This was the fastest variant tested.
Unified · Split
| @@ -78,13 +78,11 @@ int get_isymbol(inout RangeCoder c, uint64_t state) · 77 unmodified lines | ||
| 78 | 78 | |
| 79 | 79 | state += 21; |
| 80 | 80 | |
| 81 | − int a = 1 << e; | |
| 82 | − int i; | |
| 83 | − for (i = e - 1; i >= 9; i--) | |
| 84 | − a |= int(get_rac(c, state + 9)) << i; // 22..31 | |
| 85 | − | |
| 86 | − for (; i >= 0; i--) | |
| 87 | − a |= int(get_rac(c, state + i)) << i; // 22..31 | |
| 81 | + int a = 1; | |
| 82 | + for (int i = e - 1; i >= 0; i--) { | |
| 83 | + a <<= 1; | |
| 84 | + a |= int(get_rac(c, state + min(i, 9))); // 22..31 | |
| 85 | + } | |
| 88 | 86 | |
| 89 | 87 | return get_rac(c, state - 11 + min(e, 10)) ? -a : a; |
| 90 | 88 | } |