• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/sys/contrib/xz-embedded/linux/lib/xz/

Lines Matching refs:rc

263 	struct rc_dec rc;
438 static void rc_reset(struct rc_dec *rc)
440 rc->range = (uint32_t)-1;
441 rc->code = 0;
442 rc->init_bytes_left = RC_INIT_BYTES;
446 * Read the first five initial bytes into rc->code if they haven't been
449 static bool rc_read_init(struct rc_dec *rc, struct xz_buf *b)
451 while (rc->init_bytes_left > 0) {
455 rc->code = (rc->code << 8) + b->in[b->in_pos++];
456 --rc->init_bytes_left;
463 static inline bool rc_limit_exceeded(const struct rc_dec *rc)
465 return rc->in_pos > rc->in_limit;
472 static inline bool rc_is_finished(const struct rc_dec *rc)
474 return rc->code == 0;
478 static __always_inline void rc_normalize(struct rc_dec *rc)
480 if (rc->range < RC_TOP_VALUE) {
481 rc->range <<= RC_SHIFT_BITS;
482 rc->code = (rc->code << RC_SHIFT_BITS) + rc->in[rc->in_pos++];
497 static __always_inline int rc_bit(struct rc_dec *rc, uint16_t *prob)
502 rc_normalize(rc);
503 bound = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) * *prob;
504 if (rc->code < bound) {
505 rc->range = bound;
509 rc->range -= bound;
510 rc->code -= bound;
519 static __always_inline uint32_t rc_bittree(struct rc_dec *rc,
525 if (rc_bit(rc, &probs[symbol]))
535 static __always_inline void rc_bittree_reverse(struct rc_dec *rc,
543 if (rc_bit(rc, &probs[symbol])) {
553 static inline void rc_direct(struct rc_dec *rc, uint32_t *dest, uint32_t limit)
558 rc_normalize(rc);
559 rc->range >>= 1;
560 rc->code -= rc->range;
561 mask = (uint32_t)0 - (rc->code >> 31);
562 rc->code += rc->range & mask;
593 symbol = rc_bittree(&s->rc, probs, 0x100);
604 if (rc_bit(&s->rc, &probs[i])) {
625 if (!rc_bit(&s->rc, &l->choice)) {
630 if (!rc_bit(&s->rc, &l->choice2)) {
642 s->lzma.len += rc_bittree(&s->rc, probs, limit) - limit;
661 dist_slot = rc_bittree(&s->rc, probs, DIST_SLOTS) - DIST_SLOTS;
673 rc_bittree_reverse(&s->rc, probs,
676 rc_direct(&s->rc, &s->lzma.rep0, limit - ALIGN_BITS);
678 rc_bittree_reverse(&s->rc, s->lzma.dist_align,
692 if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) {
693 if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[
700 if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) {
703 if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) {
737 while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) {
740 if (!rc_bit(&s->rc, &s->lzma.is_match[
744 if (rc_bit(&s->rc, &s->lzma.is_rep[s->lzma.state]))
758 rc_normalize(&s->rc);
791 rc_reset(&s->rc);
835 * The LZMA decoder assumes that if the input limit (s->rc.in_limit) hasn't
865 s->rc.in_limit = s->temp.size + tmp;
871 s->rc.in_limit = s->temp.size + tmp - LZMA_IN_REQUIRED;
874 s->rc.in = s->temp.buf;
875 s->rc.in_pos = 0;
877 if (!lzma_main(s) || s->rc.in_pos > s->temp.size + tmp)
880 s->lzma2.compressed -= s->rc.in_pos;
882 if (s->rc.in_pos < s->temp.size) {
883 s->temp.size -= s->rc.in_pos;
884 memmove(s->temp.buf, s->temp.buf + s->rc.in_pos,
889 b->in_pos += s->rc.in_pos - s->temp.size;
895 s->rc.in = b->in;
896 s->rc.in_pos = b->in_pos;
899 s->rc.in_limit = b->in_pos + s->lzma2.compressed;
901 s->rc.in_limit = b->in_size - LZMA_IN_REQUIRED;
906 in_avail = s->rc.in_pos - b->in_pos;
911 b->in_pos = s->rc.in_pos;
1050 if (!rc_read_init(&s->rc, b))
1076 || !rc_is_finished(&s->rc))
1079 rc_reset(&s->rc);