static inline void refill_32(BitstreamContext *bc)
{
    if (bc->ptr >= bc->buffer_end)
        return;
#ifdef BITSTREAM_READER_LE
    bc->bits       = (uint64_t)AV_RL32(bc->ptr) << bc->bits_left | bc->bits;
#else
    bc->bits       = bc->bits | (uint64_t)AV_RB32(bc->ptr) << (32 - bc->bits_left);
#endif
    bc->ptr       += 4;
    bc->bits_left += 32;
}
['static float wv_get_value_float(WavpackFrameContext *s, uint32_t *crc, int S)\n{\n    union {\n        float    f;\n        uint32_t u;\n    } value;\n    unsigned int sign;\n    int exp = s->float_max_exp;\n    if (s->got_extra_bits) {\n        const int max_bits  = 1 + 23 + 8 + 1;\n        const int left_bits = bitstream_bits_left(&s->bc_extra_bits);\n        if (left_bits + 8 * AV_INPUT_BUFFER_PADDING_SIZE < max_bits)\n            return 0.0;\n    }\n    if (S) {\n        S  <<= s->float_shift;\n        sign = S < 0;\n        if (sign)\n            S = -S;\n        if (S >= 0x1000000) {\n            if (s->got_extra_bits && bitstream_read_bit(&s->bc_extra_bits))\n                S = bitstream_read(&s->bc_extra_bits, 23);\n            else\n                S = 0;\n            exp = 255;\n        } else if (exp) {\n            int shift = 23 - av_log2(S);\n            exp = s->float_max_exp;\n            if (exp <= shift)\n                shift = --exp;\n            exp -= shift;\n            if (shift) {\n                S <<= shift;\n                if ((s->float_flag & WV_FLT_SHIFT_ONES) ||\n                    (s->got_extra_bits &&\n                     (s->float_flag & WV_FLT_SHIFT_SAME) &&\n                     bitstream_read_bit(&s->bc_extra_bits))) {\n                    S |= (1 << shift) - 1;\n                } else if (s->got_extra_bits &&\n                           (s->float_flag & WV_FLT_SHIFT_SENT)) {\n                    S |= bitstream_read(&s->bc_extra_bits, shift);\n                }\n            }\n        } else {\n            exp = s->float_max_exp;\n        }\n        S &= 0x7fffff;\n    } else {\n        sign = 0;\n        exp  = 0;\n        if (s->got_extra_bits && (s->float_flag & WV_FLT_ZERO_SENT)) {\n            if (bitstream_read_bit(&s->bc_extra_bits)) {\n                S = bitstream_read(&s->bc_extra_bits, 23);\n                if (s->float_max_exp >= 25)\n                    exp = bitstream_read(&s->bc_extra_bits, 8);\n                sign = bitstream_read_bit(&s->bc_extra_bits);\n            } else {\n                if (s->float_flag & WV_FLT_ZERO_SIGN)\n                    sign = bitstream_read_bit(&s->bc_extra_bits);\n            }\n        }\n    }\n    *crc = *crc * 27 + S * 9 + exp * 3 + sign;\n    value.u = (sign << 31) | (exp << 23) | S;\n    return value.f;\n}', 'static inline unsigned bitstream_read_bit(BitstreamContext *bc)\n{\n    if (!bc->bits_left)\n        refill_64(bc);\n    return get_val(bc, 1);\n}', 'static inline uint64_t get_val(BitstreamContext *bc, unsigned n)\n{\n#ifdef BITSTREAM_READER_LE\n    uint64_t ret = bc->bits & ((UINT64_C(1) << n) - 1);\n    bc->bits >>= n;\n#else\n    uint64_t ret = bc->bits >> (64 - n);\n    bc->bits <<= n;\n#endif\n    bc->bits_left -= n;\n    return ret;\n}', 'static inline uint32_t bitstream_read(BitstreamContext *bc, unsigned n)\n{\n    if (!n)\n        return 0;\n    if (n > bc->bits_left) {\n        refill_32(bc);\n        if (bc->bits_left < 32)\n            bc->bits_left = n;\n    }\n    return get_val(bc, n);\n}', 'static inline void refill_32(BitstreamContext *bc)\n{\n    if (bc->ptr >= bc->buffer_end)\n        return;\n#ifdef BITSTREAM_READER_LE\n    bc->bits       = (uint64_t)AV_RL32(bc->ptr) << bc->bits_left | bc->bits;\n#else\n    bc->bits       = bc->bits | (uint64_t)AV_RB32(bc->ptr) << (32 - bc->bits_left);\n#endif\n    bc->ptr       += 4;\n    bc->bits_left += 32;\n}']