simplify OD_UNBIASED_RSHIFT in case the compiler can't figure it out

This should be a bit more predictable w.r.t. what the compiler generates from it.
You're assuming a fixed size for the type of (_a), but not actually using types with a defined size, and actively breaking this if it gets used for other sizes (one potential future optimization we'll want to do is to keep things in 16-bit for smaller block sizes once we've done the overflow analysis, so this will matter down the road).

If you want to make a version that bakes in this strength reduction, please name it OD_UNBIASED_RSHIFT32() and use ogg_uint32_t/ogg_int32_t in the casts (yes, yes, we'll be converting to stdint.h types once we have infrastructure in place to support compilers without them). You'll also need to document that it does not work with (_b) == 0 (which is not something we need, but something that an unsuspecting coder might reasonably expect a right shift to support).

Alternatively, you can use the strength reduction in the comment on line 33, which works for all integer sizes and correctly handles (_b) == 0, though it does cost one extra instruction for constant (_b).