101dfbcc4SRoy Oursler #include <stdio.h>
201dfbcc4SRoy Oursler #include <stdlib.h>
301dfbcc4SRoy Oursler #include <stdint.h>
401dfbcc4SRoy Oursler #include <memory.h>
501dfbcc4SRoy Oursler #include <assert.h>
601dfbcc4SRoy Oursler
752bb3229SJean-Yves VET #if __x86_64__ || __i386__ || _M_X64 || _M_IX86
801dfbcc4SRoy Oursler #ifdef _MSC_VER
901dfbcc4SRoy Oursler #include <intrin.h>
1001dfbcc4SRoy Oursler #else
1101dfbcc4SRoy Oursler #include <x86intrin.h>
1201dfbcc4SRoy Oursler #endif
1352bb3229SJean-Yves VET #endif //__x86_64__ || __i386__ || _M_X64 || _M_IX86
1401dfbcc4SRoy Oursler
1501dfbcc4SRoy Oursler #include "encode_df.h"
1601dfbcc4SRoy Oursler #include "bitbuf2.h"
1701dfbcc4SRoy Oursler
18*55fbfabfSMarcel Cornu struct deflate_icf *
encode_deflate_icf_base(struct deflate_icf * next_in,struct deflate_icf * end_in,struct BitBuf2 * bb,struct hufftables_icf * hufftables)19*55fbfabfSMarcel Cornu encode_deflate_icf_base(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb,
2001dfbcc4SRoy Oursler struct hufftables_icf *hufftables)
2101dfbcc4SRoy Oursler {
2201dfbcc4SRoy Oursler struct huff_code lsym, dsym;
2301dfbcc4SRoy Oursler
2401dfbcc4SRoy Oursler while (next_in < end_in && !is_full(bb)) {
2501dfbcc4SRoy Oursler lsym = hufftables->lit_len_table[next_in->lit_len];
26c0467e56SRoy Oursler dsym = hufftables->dist_lit_table[next_in->lit_dist];
2701dfbcc4SRoy Oursler
2801dfbcc4SRoy Oursler // insert ll code, dist_code, and extra_bits
2901dfbcc4SRoy Oursler write_bits_unsafe(bb, lsym.code_and_extra, lsym.length);
3001dfbcc4SRoy Oursler write_bits_unsafe(bb, dsym.code, dsym.length);
3101dfbcc4SRoy Oursler write_bits_unsafe(bb, next_in->dist_extra, dsym.extra_bit_count);
3201dfbcc4SRoy Oursler flush_bits(bb);
3301dfbcc4SRoy Oursler
3401dfbcc4SRoy Oursler next_in++;
3501dfbcc4SRoy Oursler }
3601dfbcc4SRoy Oursler
3701dfbcc4SRoy Oursler return next_in;
3801dfbcc4SRoy Oursler }
39