mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
103 lines
1.6 KiB
ArmAsm
103 lines
1.6 KiB
ArmAsm
|
|
|
||
|
|
SECTION .text
|
||
|
|
|
||
|
|
%macro CRC1b 0
|
||
|
|
movzx EDX, BYTE [ESI]
|
||
|
|
inc ESI
|
||
|
|
movzx EBX, AL
|
||
|
|
xor EDX, EBX
|
||
|
|
shr EAX, 8
|
||
|
|
xor EAX, [EBP + EDX * 4]
|
||
|
|
dec EDI
|
||
|
|
%endmacro
|
||
|
|
|
||
|
|
data_size equ (28)
|
||
|
|
crc_table equ (data_size + 4)
|
||
|
|
|
||
|
|
align 16
|
||
|
|
global CrcUpdateT8
|
||
|
|
global _CrcUpdateT8
|
||
|
|
CrcUpdateT8:
|
||
|
|
_CrcUpdateT8:
|
||
|
|
push EBX
|
||
|
|
push ESI
|
||
|
|
push EDI
|
||
|
|
push EBP
|
||
|
|
|
||
|
|
mov EAX, [ESP + 20]
|
||
|
|
mov ESI, [ESP + 24]
|
||
|
|
mov EDI, [ESP + data_size]
|
||
|
|
mov EBP, [ESP + crc_table]
|
||
|
|
|
||
|
|
test EDI, EDI
|
||
|
|
jz sl_end
|
||
|
|
sl:
|
||
|
|
test ESI, 7
|
||
|
|
jz sl_end
|
||
|
|
CRC1b
|
||
|
|
jnz sl
|
||
|
|
sl_end:
|
||
|
|
|
||
|
|
cmp EDI, 16
|
||
|
|
jb NEAR crc_end
|
||
|
|
mov [ESP + data_size], EDI
|
||
|
|
sub EDI, 8
|
||
|
|
and EDI, ~ 7
|
||
|
|
sub [ESP + data_size], EDI
|
||
|
|
|
||
|
|
add EDI, ESI
|
||
|
|
xor EAX, [ESI]
|
||
|
|
mov EBX, [ESI + 4]
|
||
|
|
movzx ECX, BL
|
||
|
|
align 16
|
||
|
|
main_loop:
|
||
|
|
mov EDX, [EBP + ECX*4 + 0C00h]
|
||
|
|
movzx ECX, BH
|
||
|
|
xor EDX, [EBP + ECX*4 + 0800h]
|
||
|
|
shr EBX, 16
|
||
|
|
movzx ECX, BL
|
||
|
|
xor EDX, [EBP + ECX*4 + 0400h]
|
||
|
|
xor EDX, [ESI + 8]
|
||
|
|
movzx ECX, AL
|
||
|
|
movzx EBX, BH
|
||
|
|
xor EDX, [EBP + EBX*4 + 0000h]
|
||
|
|
|
||
|
|
mov EBX, [ESI + 12]
|
||
|
|
|
||
|
|
xor EDX, [EBP + ECX*4 + 01C00h]
|
||
|
|
movzx ECX, AH
|
||
|
|
add ESI, 8
|
||
|
|
shr EAX, 16
|
||
|
|
xor EDX, [EBP + ECX*4 + 01800h]
|
||
|
|
movzx ECX, AL
|
||
|
|
xor EDX, [EBP + ECX*4 + 01400h]
|
||
|
|
movzx ECX, AH
|
||
|
|
mov EAX, [EBP + ECX*4 + 01000h]
|
||
|
|
movzx ECX, BL
|
||
|
|
xor EAX,EDX
|
||
|
|
|
||
|
|
cmp ESI, EDI
|
||
|
|
jne main_loop
|
||
|
|
xor EAX, [ESI]
|
||
|
|
|
||
|
|
mov EDI, [ESP + data_size]
|
||
|
|
|
||
|
|
crc_end:
|
||
|
|
|
||
|
|
test EDI, EDI
|
||
|
|
jz fl_end
|
||
|
|
fl:
|
||
|
|
CRC1b
|
||
|
|
jnz fl
|
||
|
|
fl_end:
|
||
|
|
|
||
|
|
pop EBP
|
||
|
|
pop EDI
|
||
|
|
pop ESI
|
||
|
|
pop EBX
|
||
|
|
ret
|
||
|
|
|
||
|
|
%ifidn __OUTPUT_FORMAT__,elf
|
||
|
|
section .note.GNU-stack noalloc noexec nowrite progbits
|
||
|
|
%endif
|