mirror of
https://github.com/intel/isa-l.git
synced 2024-12-12 17:33:50 +01:00
4ae2d1be29
Change-Id: I8cf5bcd56f290d17205ac36dc2828c8acfc66947 Signed-off-by: Roy Oursler <roy.j.oursler@intel.com>
130 lines
2.1 KiB
NASM
130 lines
2.1 KiB
NASM
%include "options.asm"
|
|
%include "lz0a_const.asm"
|
|
%include "data_struct2.asm"
|
|
%include "huffman.asm"
|
|
%include "reg_sizes.asm"
|
|
|
|
%define DICT_SLOP 8
|
|
%define DICT_END_SLOP 4
|
|
|
|
%ifidn __OUTPUT_FORMAT__, win64
|
|
%define arg1 rcx
|
|
%define arg2 rdx
|
|
%define arg3 r8
|
|
%define swap1 rdi
|
|
%define swap2 rsi
|
|
%else
|
|
%define arg1 rdi
|
|
%define arg2 rsi
|
|
%define arg3 rdx
|
|
%define swap1 r8
|
|
%define swap2 rcx
|
|
%endif
|
|
|
|
%define stream arg1
|
|
|
|
%define dict_offset arg2
|
|
|
|
%define dict_len arg3
|
|
%define f_i arg3
|
|
|
|
%define f_i_tmp swap1
|
|
|
|
%define hash swap2
|
|
|
|
%define hash2 r9
|
|
|
|
%define hash3 r10
|
|
|
|
%define hash4 r11
|
|
|
|
%define f_i_end rax
|
|
|
|
%macro FUNC_SAVE 0
|
|
%ifidn __OUTPUT_FORMAT__, win64
|
|
push rsi
|
|
push rdi
|
|
%endif
|
|
%endm
|
|
|
|
%macro FUNC_RESTORE 0
|
|
%ifidn __OUTPUT_FORMAT__, win64
|
|
pop rdi
|
|
pop rsi
|
|
%endif
|
|
%endm
|
|
|
|
global isal_deflate_hash_lvl0_01
|
|
isal_deflate_hash_lvl0_01:
|
|
FUNC_SAVE
|
|
|
|
%ifnidn (arg1, stream)
|
|
mov stream, arg1
|
|
%endif
|
|
%ifnidn (arg2, dict_next)
|
|
mov dict_offset, arg2
|
|
%endif
|
|
|
|
mov f_i_end %+ d, dword [stream + _total_in]
|
|
neg f_i
|
|
add f_i, f_i_end
|
|
|
|
sub dict_offset, f_i
|
|
|
|
sub f_i_end, DICT_SLOP
|
|
cmp f_i, f_i_end
|
|
jg end_main
|
|
|
|
main_loop:
|
|
lea f_i_tmp, [f_i + 2]
|
|
|
|
xor hash, hash
|
|
crc32 hash %+ d, dword [f_i + dict_offset]
|
|
|
|
xor hash2, hash2
|
|
crc32 hash2 %+ d, dword [f_i + dict_offset + 1]
|
|
|
|
xor hash3, hash3
|
|
crc32 hash3 %+ d, dword [f_i_tmp + dict_offset]
|
|
|
|
xor hash4, hash4
|
|
crc32 hash4 %+ d, dword [f_i_tmp + dict_offset + 1]
|
|
|
|
and hash, LVL0_HASH_MASK
|
|
and hash2, LVL0_HASH_MASK
|
|
and hash3, LVL0_HASH_MASK
|
|
and hash4, LVL0_HASH_MASK
|
|
|
|
mov [stream + _internal_state_head + 2 * hash], f_i %+ w
|
|
add f_i, 1
|
|
|
|
mov [stream + _internal_state_head + 2 * hash2], f_i %+ w
|
|
add f_i, 3
|
|
|
|
mov [stream + _internal_state_head + 2 * hash3], f_i_tmp %+ w
|
|
add f_i_tmp, 1
|
|
|
|
mov [stream + _internal_state_head + 2 * hash4], f_i_tmp %+ w
|
|
|
|
cmp f_i, f_i_end
|
|
jle main_loop
|
|
|
|
end_main:
|
|
add f_i_end, DICT_SLOP - DICT_END_SLOP
|
|
cmp f_i, f_i_end
|
|
jg end
|
|
|
|
end_loop:
|
|
xor hash, hash
|
|
crc32 hash %+ d, dword [f_i + dict_offset]
|
|
|
|
and hash, LVL0_HASH_MASK
|
|
mov [stream + _internal_state_head + 2 * hash], f_i %+ w
|
|
|
|
add f_i, 1
|
|
cmp f_i, f_i_end
|
|
jle end_loop
|
|
end:
|
|
FUNC_RESTORE
|
|
ret
|