igzip: Remove BITBUF8 and BITBUF_ELSE compile options

Change-Id: Iad3b2e6f9a32473b6e59910494c75d82558fc28e
Signed-off-by: Roy Oursler <roy.j.oursler@intel.com>
This commit is contained in:
Roy Oursler 2017-05-25 10:06:34 -07:00 committed by Xiaodong Liu
parent edacadc8fb
commit f4a5b303e2
4 changed files with 21 additions and 220 deletions

View File

@ -33,156 +33,6 @@
; Clobbers RCX ; Clobbers RCX
; code is clobbered ; code is clobbered
; write_bits_always m_bits, m_bit_count, code, count, m_out_buf, tmp1 ; write_bits_always m_bits, m_bit_count, code, count, m_out_buf, tmp1
%macro write_bits_always 6
%define %%m_bits %1
%define %%m_bit_count %2
%define %%code %3
%define %%count %4
%define %%m_out_buf %5
%define %%tmp1 %6
%ifdef USE_HSWNI
shlx %%code, %%code, %%m_bit_count
%else
mov rcx, %%m_bit_count
shl %%code, cl
%endif
or %%m_bits, %%code
add %%m_bit_count, %%count
movnti [%%m_out_buf], %%m_bits
mov rcx, %%m_bit_count
shr rcx, 3 ; rcx = bytes
add %%m_out_buf, rcx
shl rcx, 3 ; rcx = bits
sub %%m_bit_count, rcx
%ifdef USE_HSWNI
shrx %%m_bits, %%m_bits, rcx
%else
shr %%m_bits, cl
%endif
%endm
; Assumes m_out_buf is a register
; Clobbers RCX
; code is clobbered
; write_bits_safe m_bits, m_bit_count, code, count, m_out_buf, tmp1
%macro write_bits_safe 6
%define %%m_bits %1
%define %%m_bit_count %2
%define %%code %3
%define %%count %4
%define %%m_out_buf %5
%define %%tmp1 %6
mov %%tmp1, %%code
%ifdef USE_HSWNI
shlx %%tmp1, %%tmp1, %%m_bit_count
%else
mov rcx, %%m_bit_count
shl %%tmp1, cl
%endif
or %%m_bits, %%tmp1
add %%m_bit_count, %%count
cmp %%m_bit_count, 64
jb %%not_full
sub %%m_bit_count, 64
movnti [%%m_out_buf], %%m_bits
add %%m_out_buf, 8
mov rcx, %%count
sub rcx, %%m_bit_count
mov %%m_bits, %%code
%ifdef USE_HSWNI
shrx %%m_bits, %%m_bits, rcx
%else
shr %%m_bits, cl
%endif
%%not_full:
%endm
; Assumes m_out_buf is a register
; Clobbers RCX
;; check_space num_bits, m_bits, m_bit_count, m_out_buf, tmp1
%macro check_space 5
%define %%num_bits %1
%define %%m_bits %2
%define %%m_bit_count %3
%define %%m_out_buf %4
%define %%tmp1 %5
mov %%tmp1, 63
sub %%tmp1, %%m_bit_count
cmp %%tmp1, %%num_bits
jae %%space_ok
; if (63 - m_bit_count < num_bits)
movnti [%%m_out_buf], %%m_bits
mov rcx, %%m_bit_count
shr rcx, 3 ; rcx = bytes
add %%m_out_buf, rcx
shl rcx, 3 ; rcx = bits
sub %%m_bit_count, rcx
%ifdef USE_HSWNI
shrx %%m_bits, %%m_bits, rcx
%else
shr %%m_bits, cl
%endif
%%space_ok:
%endm
; rcx is clobbered
; code is clobbered
; write_bits_unsafe m_bits, m_bit_count, code, count
%macro write_bits_unsafe 4
%define %%m_bits %1
%define %%m_bit_count %2
%define %%code %3
%define %%count %4
%ifdef USE_HSWNI
shlx %%code, %%code, %%m_bit_count
%else
mov rcx, %%m_bit_count
shl %%code, cl
%endif
or %%m_bits, %%code
add %%m_bit_count, %%count
%endm
; pad_to_byte m_bit_count, extra_bits
%macro pad_to_byte 2
%define %%m_bit_count %1
%define %%extra_bits %2
mov %%extra_bits, %%m_bit_count
neg %%extra_bits
and %%extra_bits, 7
add %%m_bit_count, %%extra_bits
%endm
; Assumes m_out_buf is a memory reference
; flush m_bits, m_bit_count, m_out_buf, tmp1
%macro flush 4
%define %%m_bits %1
%define %%m_bit_count %2
%define %%m_out_buf %3
%define %%tmp1 %4
test %%m_bit_count, %%m_bit_count
jz %%bit_count_is_zero
mov %%tmp1, %%m_out_buf
movnti [%%tmp1], %%m_bits
add %%m_bit_count, 7
shr %%m_bit_count, 3 ; bytes
add %%tmp1, %%m_bit_count
mov %%m_out_buf, %%tmp1
%%bit_count_is_zero:
xor %%m_bits, %%m_bits
xor %%m_bit_count, %%m_bit_count
%endm
%macro write_bits 6 %macro write_bits 6
%define %%m_bits %1 %define %%m_bits %1
%define %%m_bit_count %2 %define %%m_bit_count %2
@ -191,16 +41,25 @@
%define %%m_out_buf %5 %define %%m_out_buf %5
%define %%tmp1 %6 %define %%tmp1 %6
%ifdef USE_BITBUF8 %ifdef USE_HSWNI
write_bits_safe %%m_bits, %%m_bit_count, %%code, %%count, %%m_out_buf, %%tmp1 shlx %%code, %%code, %%m_bit_count
%elifdef USE_BITBUFB
write_bits_always %%m_bits, %%m_bit_count, %%code, %%count, %%m_out_buf, %%tmp1
%else %else
; state->bitbuf.check_space(code_len2); mov rcx, %%m_bit_count
check_space %%count, %%m_bits, %%m_bit_count, %%m_out_buf, %%tmp1 shl %%code, cl
; state->bitbuf.write_bits(code2, code_len2); %endif
write_bits_unsafe %%m_bits, %%m_bit_count, %%code, %%count or %%m_bits, %%code
; code2 is clobbered, rcx is clobbered add %%m_bit_count, %%count
movnti [%%m_out_buf], %%m_bits
mov rcx, %%m_bit_count
shr rcx, 3 ; rcx = bytes
add %%m_out_buf, rcx
shl rcx, 3 ; rcx = bits
sub %%m_bit_count, rcx
%ifdef USE_HSWNI
shrx %%m_bits, %%m_bits, rcx
%else
shr %%m_bits, cl
%endif %endif
%endm %endm

View File

@ -31,14 +31,6 @@
#include "igzip_lib.h" #include "igzip_lib.h"
/* bit buffer types
* BITBUF8: (e) Always write 8 bytes of data
* BITBUFB: (b) Always write data
*/
#if !(defined(USE_BITBUFB) || defined(USE_BITBUF8) || defined(USE_BITBUF_ELSE))
# define USE_BITBUFB
#endif
#if defined (__unix__) || (__APPLE__) || (__MINGW32__) #if defined (__unix__) || (__APPLE__) || (__MINGW32__)
#define _mm_stream_si64x(dst, src) *((uint64_t*)dst) = src #define _mm_stream_si64x(dst, src) *((uint64_t*)dst) = src
#else #else
@ -57,22 +49,7 @@
/* MAX_BITBUF_BIT WRITE is the maximum number of bits than can be safely written /* MAX_BITBUF_BIT WRITE is the maximum number of bits than can be safely written
* by consecutive calls of write_bits. Note this assumes the bitbuf is in a * by consecutive calls of write_bits. Note this assumes the bitbuf is in a
* state that is possible at the exit of write_bits */ * state that is possible at the exit of write_bits */
#ifdef USE_BITBUF8 /*Write bits safe */ #define MAX_BITBUF_BIT_WRITE 56
# define MAX_BITBUF_BIT_WRITE 63
#elif defined(USE_BITBUFB) /* Write bits always */
# define MAX_BITBUF_BIT_WRITE 56
#else /* USE_BITBUF_ELSE */
# define MAX_BITBUF_BIT_WRITE 56
#endif
static
inline void construct(struct BitBuf2 *me)
{
me->m_bits = 0;
me->m_bit_count = 0;
me->m_out_buf = me->m_out_start = me->m_out_end = NULL;
}
static inline void init(struct BitBuf2 *me) static inline void init(struct BitBuf2 *me)
{ {
@ -133,27 +110,10 @@ static inline void write_bits_unsafe(struct BitBuf2 *me, uint64_t code, uint32_t
} }
static inline void write_bits(struct BitBuf2 *me, uint64_t code, uint32_t count) static inline void write_bits(struct BitBuf2 *me, uint64_t code, uint32_t count)
{ { /* Assumes there is space to fit code into m_bits. */
#ifdef USE_BITBUF8 /*Write bits safe */
me->m_bits |= code << me->m_bit_count; me->m_bits |= code << me->m_bit_count;
me->m_bit_count += count; me->m_bit_count += count;
if (me->m_bit_count >= 64) { flush_bits(me);
_mm_stream_si64x((int64_t *) me->m_out_buf, me->m_bits);
me->m_out_buf += 8;
me->m_bit_count -= 64;
me->m_bits = code >> (count - me->m_bit_count);
}
#elif defined(USE_BITBUFB) /* Write bits always */
/* Assumes there is space to fit code into m_bits. */
me->m_bits |= code << me->m_bit_count;
me->m_bit_count += count;
if (me->m_bit_count >= 8)
flush_bits(me);
#else /* USE_BITBUF_ELSE */
check_space(me, count);
write_bits_unsafe(me, code, count);
#endif
} }
/* Can write up to 8 bytes to output buffer */ /* Can write up to 8 bytes to output buffer */

View File

@ -158,11 +158,7 @@ void sync_flush(struct isal_zstream *stream)
bits_to_write <<= flush_size + 3; bits_to_write <<= flush_size + 3;
bits_len = 32 + flush_size + 3; bits_len = 32 + flush_size + 3;
#ifdef USE_BITBUFB /* Write Bits Always */
state->state = ZSTATE_NEW_HDR; state->state = ZSTATE_NEW_HDR;
#else /* Not Write Bits Always */
state->state = ZSTATE_FLUSH_WRITE_BUFFER;
#endif
state->has_eob = 0; state->has_eob = 0;
write_bits(&state->bitbuf, bits_to_write, bits_len); write_bits(&state->bitbuf, bits_to_write, bits_len);
@ -204,11 +200,6 @@ static void flush_icf_block(struct isal_zstream *stream)
set_buf(write_buf, stream->next_out, stream->avail_out); set_buf(write_buf, stream->next_out, stream->avail_out);
#if defined (USE_BITBUF8) || (USE_BITBUF_ELSE)
if (!is_full(write_buf))
flush_bits(write_buf);
#endif
icf_buf_encoded_next = encode_deflate_icf(level_buf->icf_buf_start + state->count, icf_buf_encoded_next = encode_deflate_icf(level_buf->icf_buf_start + state->count,
level_buf->icf_buf_next, write_buf, level_buf->icf_buf_next, write_buf,
&level_buf->encode_tables); &level_buf->encode_tables);

View File

@ -56,15 +56,6 @@ default rel
%endif %endif
%endif %endif
%ifdef USE_BITBUFB
%elifdef USE_BITBUF8
%elifdef USE_BITBUF_ELSE
%else
; bit buffer types
; BITBUFB: (b) Always write data
%define USE_BITBUFB
%endif
; (h) limit hash update ; (h) limit hash update
%define LIMIT_HASH_UPDATE %define LIMIT_HASH_UPDATE