mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
106 lines
1.4 KiB
ArmAsm
106 lines
1.4 KiB
ArmAsm
|
|
SECTION .text
|
|
|
|
|
|
|
|
|
|
%macro CRC1b 0
|
|
movzx EDX, BYTE [RSI]
|
|
inc RSI
|
|
movzx EBX, AL
|
|
xor EDX, EBX
|
|
shr EAX, 8
|
|
xor EAX, [RDI + RDX * 4]
|
|
dec R8
|
|
%endmacro
|
|
|
|
|
|
|
|
|
|
align 16
|
|
global CrcUpdateT8
|
|
|
|
CrcUpdateT8:
|
|
|
|
push RBX
|
|
push RSI
|
|
push RDI
|
|
push RBP
|
|
|
|
mov EAX, ECX
|
|
mov RSI, RDX
|
|
mov RDI, R9
|
|
|
|
|
|
test R8, R8
|
|
jz sl_end
|
|
sl:
|
|
test RSI, 7
|
|
jz sl_end
|
|
CRC1b
|
|
jnz sl
|
|
sl_end:
|
|
|
|
cmp R8, 16
|
|
jb crc_end
|
|
mov R9, R8
|
|
and R8, 7
|
|
add R8, 8
|
|
sub R9, R8
|
|
|
|
add R9, RSI
|
|
xor EAX, [RSI]
|
|
mov EBX, [RSI + 4]
|
|
movzx ECX, BL
|
|
align 16
|
|
main_loop:
|
|
mov EDX, [RDI + RCX*4 + 0C00h]
|
|
movzx EBP, BH
|
|
xor EDX, [RDI + RBP*4 + 0800h]
|
|
shr EBX, 16
|
|
movzx ECX, BL
|
|
xor EDX, [RSI + 8]
|
|
xor EDX, [RDI + RCX*4 + 0400h]
|
|
movzx ECX, AL
|
|
movzx EBP, BH
|
|
xor EDX, [RDI + RBP*4 + 0000h]
|
|
|
|
mov EBX, [RSI + 12]
|
|
|
|
xor EDX, [RDI + RCX*4 + 01C00h]
|
|
movzx EBP, AH
|
|
shr EAX, 16
|
|
movzx ECX, AL
|
|
xor EDX, [RDI + RBP*4 + 01800h]
|
|
movzx EBP, AH
|
|
mov EAX, [RDI + RCX*4 + 01400h]
|
|
add RSI, 8
|
|
xor EAX, [RDI + RBP*4 + 01000h]
|
|
movzx ECX, BL
|
|
xor EAX,EDX
|
|
|
|
cmp RSI, R9
|
|
jne main_loop
|
|
xor EAX, [RSI]
|
|
|
|
|
|
|
|
crc_end:
|
|
|
|
test R8, R8
|
|
jz fl_end
|
|
fl:
|
|
CRC1b
|
|
jnz fl
|
|
fl_end:
|
|
|
|
pop RBP
|
|
pop RDI
|
|
pop RSI
|
|
pop RBX
|
|
ret
|
|
|
|
%ifidn __OUTPUT_FORMAT__,elf
|
|
section .note.GNU-stack noalloc noexec nowrite progbits
|
|
%endif
|