xref: /isa-l/igzip/bitbuf2.asm (revision 623d2f0dc01a6fad43bcb168e8b090ed586726b4)
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;  Copyright(c) 2011-2016 Intel Corporation All rights reserved.
3;
4;  Redistribution and use in source and binary forms, with or without
5;  modification, are permitted provided that the following conditions
6;  are met:
7;    * Redistributions of source code must retain the above copyright
8;      notice, this list of conditions and the following disclaimer.
9;    * Redistributions in binary form must reproduce the above copyright
10;      notice, this list of conditions and the following disclaimer in
11;      the documentation and/or other materials provided with the
12;      distribution.
13;    * Neither the name of Intel Corporation nor the names of its
14;      contributors may be used to endorse or promote products derived
15;      from this software without specific prior written permission.
16;
17;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24;  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25;  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26;  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27;  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29
30%include "options.asm"
31%include "stdmac.asm"
32
33; Assumes m_out_buf is a register
34; Clobbers RCX
35; code is clobbered
36; write_bits_always	m_bits, m_bit_count, code, count, m_out_buf
37%macro write_bits 5
38%define %%m_bits	%1
39%define %%m_bit_count	%2
40%define %%code		%3
41%define %%count		%4
42%define %%m_out_buf	%5
43
44	SHLX	%%code, %%code, %%m_bit_count
45
46	or	%%m_bits, %%code
47	add	%%m_bit_count, %%count
48
49	mov	[%%m_out_buf], %%m_bits
50	mov	rcx, %%m_bit_count
51	shr	rcx, 3			; rcx = bytes
52	add	%%m_out_buf, rcx
53	shl	rcx, 3			; rcx = bits
54	and	%%m_bit_count, 0x7
55
56	SHRX	%%m_bits, %%m_bits, rcx
57%endm
58
59%macro write_dword 2
60%define %%data %1d
61%define %%addr %2
62	mov	[%%addr], %%data
63	add	%%addr, 4
64%endm
65