GPUs have cmovs as standard.
Showing the changes to libavcodec (1 of 1 file). Show all
Unified · Split
| @@ -219,7 +219,7 @@ void refill(inout RangeCoder c) · 218 unmodified lines | ||
| 219 | 219 | c.range <<= 8; |
| 220 | 220 | c.low <<= 8; |
| 221 | 221 | if (c.bytestream < c.bytestream_end) { |
| 222 | − c.low += u8buf(c.bytestream).v; | |
| 222 | + c.low |= u8buf(c.bytestream).v; | |
| 223 | 223 | c.bytestream++; |
| 224 | 224 | } else { |
| 225 | 225 | overread++; |
| @@ -234,11 +234,10 @@ bool get_rac(inout RangeCoder c, uint64_t state) · 8 unmodified lines | ||
| 234 | 234 | int ranged = c.range + range1; |
| 235 | 235 | |
| 236 | 236 | bool bit = c.low >= ranged; |
| 237 | − int bv = bit ? 0xFFFFFFFF : 0; | |
| 238 | − sb.v = zero_one_state[(bv & 0x100) + val]; | |
| 237 | + sb.v = zero_one_state[val + (bit ? 256 : 0)]; | |
| 239 | 238 | |
| 240 | − c.low = c.low - (bv & ranged); | |
| 241 | − c.range = (ranged & ~bv) - (range1 & bv); | |
| 239 | + c.low = c.low - (bit ? ranged : 0); | |
| 240 | + c.range = (bit ? 0 : ranged) - (bit ? range1 : 0); | |
| 242 | 241 | |
| 243 | 242 | if (c.range < 0x100) |
| 244 | 243 | refill(c); |