-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
DavidX
authored and
DavidX
committed
May 8, 2015
0 parents
commit 67c9b64
Showing
7,459 changed files
with
1,839,749 additions
and
0 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
CODE32 | ||
|
||
EXPORT |CrcUpdateT4@16| | ||
|
||
AREA |.text|, CODE, ARM | ||
|
||
MACRO | ||
CRC32_STEP_1 | ||
|
||
ldrb r4, [r1], #1 | ||
subs r2, r2, #1 | ||
eor r4, r4, r0 | ||
and r4, r4, #0xFF | ||
ldr r4, [r3, +r4, lsl #2] | ||
eor r0, r4, r0, lsr #8 | ||
|
||
MEND | ||
|
||
|
||
MACRO | ||
CRC32_STEP_4 $STREAM_WORD | ||
eor r7, r7, r8 | ||
eor r7, r7, r9 | ||
eor r0, r0, r7 | ||
eor r0, r0, $STREAM_WORD | ||
ldr $STREAM_WORD, [r1], #4 | ||
and r7, r0, #0xFF | ||
and r8, r0, #0xFF00 | ||
and r9, r0, #0xFF0000 | ||
and r0, r0, #0xFF000000 | ||
|
||
ldr r7, [r6, +r7, lsl #2] | ||
ldr r8, [r5, +r8, lsr #6] | ||
ldr r9, [r4, +r9, lsr #14] | ||
ldr r0, [r3, +r0, lsr #22] | ||
MEND | ||
|
||
|
||
|CrcUpdateT4@16| PROC | ||
|
||
stmdb sp!, {r4-r11, lr} | ||
cmp r2, #0 | ||
beq |$fin| | ||
|
||
|$v1| | ||
tst r1, #7 | ||
beq |$v2| | ||
CRC32_STEP_1 | ||
bne |$v1| | ||
|
||
|$v2| | ||
cmp r2, #16 | ||
blo |$v3| | ||
|
||
ldr r10, [r1], #4 | ||
ldr r11, [r1], #4 | ||
|
||
add r4, r3, #0x400 | ||
add r5, r3, #0x800 | ||
add r6, r3, #0xC00 | ||
|
||
mov r7, #0 | ||
mov r8, #0 | ||
mov r9, #0 | ||
|
||
sub r2, r2, #16 | ||
|
||
|$loop| | ||
; pld [r1, #0x40] | ||
|
||
CRC32_STEP_4 r10 | ||
CRC32_STEP_4 r11 | ||
|
||
subs r2, r2, #8 | ||
bhs |$loop| | ||
|
||
sub r1, r1, #8 | ||
add r2, r2, #16 | ||
|
||
eor r7, r7, r8 | ||
eor r7, r7, r9 | ||
eor r0, r0, r7 | ||
|
||
|$v3| | ||
cmp r2, #0 | ||
beq |$fin| | ||
|
||
|$v4| | ||
CRC32_STEP_1 | ||
bne |$v4| | ||
|
||
|$fin| | ||
ldmia sp!, {r4-r11, pc} | ||
|
||
|CrcUpdateT4@16| ENDP | ||
|
||
END |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
; 7zAsm.asm -- ASM macros | ||
; 2009-12-12 : Igor Pavlov : Public domain | ||
|
||
MY_ASM_START macro | ||
ifdef x64 | ||
.code | ||
else | ||
.386 | ||
.model flat | ||
_TEXT$00 SEGMENT PARA PUBLIC 'CODE' | ||
endif | ||
endm | ||
|
||
MY_PROC macro name:req, numParams:req | ||
align 16 | ||
proc_numParams equ numParams | ||
ifdef x64 | ||
proc_name equ name | ||
name PROC | ||
else | ||
proc_fastcall_name equ @CatStr(@,name,@, %numParams * 4) | ||
public proc_fastcall_name | ||
proc_fastcall_name: | ||
endif | ||
endm | ||
|
||
MY_ENDP macro | ||
ifdef x64 | ||
ret | ||
proc_name ENDP | ||
else | ||
ret (proc_numParams - 2) * 4 | ||
endif | ||
endm | ||
|
||
ifdef x64 | ||
REG_SIZE equ 8 | ||
else | ||
REG_SIZE equ 4 | ||
endif | ||
|
||
x0 equ EAX | ||
x1 equ ECX | ||
x2 equ EDX | ||
x3 equ EBX | ||
x4 equ ESP | ||
x5 equ EBP | ||
x6 equ ESI | ||
x7 equ EDI | ||
|
||
x0_L equ AL | ||
x1_L equ CL | ||
x2_L equ DL | ||
x3_L equ BL | ||
|
||
x0_H equ AH | ||
x1_H equ CH | ||
x2_H equ DH | ||
x3_H equ BH | ||
|
||
ifdef x64 | ||
r0 equ RAX | ||
r1 equ RCX | ||
r2 equ RDX | ||
r3 equ RBX | ||
r4 equ RSP | ||
r5 equ RBP | ||
r6 equ RSI | ||
r7 equ RDI | ||
else | ||
r0 equ x0 | ||
r1 equ x1 | ||
r2 equ x2 | ||
r3 equ x3 | ||
r4 equ x4 | ||
r5 equ x5 | ||
r6 equ x6 | ||
r7 equ x7 | ||
endif | ||
|
||
MY_PUSH_4_REGS macro | ||
push r3 | ||
push r5 | ||
push r6 | ||
push r7 | ||
endm | ||
|
||
MY_POP_4_REGS macro | ||
pop r7 | ||
pop r6 | ||
pop r5 | ||
pop r3 | ||
endm |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
; 7zCrcOpt.asm -- CRC32 calculation : optimized version | ||
; 2009-12-12 : Igor Pavlov : Public domain | ||
|
||
include 7zAsm.asm | ||
|
||
MY_ASM_START | ||
|
||
rD equ r2 | ||
rN equ r7 | ||
|
||
ifdef x64 | ||
num_VAR equ r8 | ||
table_VAR equ r9 | ||
else | ||
data_size equ (REG_SIZE * 5) | ||
crc_table equ (REG_SIZE + data_size) | ||
num_VAR equ [r4 + data_size] | ||
table_VAR equ [r4 + crc_table] | ||
endif | ||
|
||
SRCDAT equ rN + rD + 4 * | ||
|
||
CRC macro op:req, dest:req, src:req, t:req | ||
op dest, DWORD PTR [r5 + src * 4 + 0400h * t] | ||
endm | ||
|
||
CRC_XOR macro dest:req, src:req, t:req | ||
CRC xor, dest, src, t | ||
endm | ||
|
||
CRC_MOV macro dest:req, src:req, t:req | ||
CRC mov, dest, src, t | ||
endm | ||
|
||
CRC1b macro | ||
movzx x6, BYTE PTR [rD] | ||
inc rD | ||
movzx x3, x0_L | ||
xor x6, x3 | ||
shr x0, 8 | ||
CRC xor, x0, r6, 0 | ||
dec rN | ||
endm | ||
|
||
MY_PROLOG macro crc_end:req | ||
MY_PUSH_4_REGS | ||
mov x0, x1 | ||
mov rN, num_VAR | ||
mov r5, table_VAR | ||
test rN, rN | ||
jz crc_end | ||
@@: | ||
test rD, 7 | ||
jz @F | ||
CRC1b | ||
jnz @B | ||
@@: | ||
cmp rN, 16 | ||
jb crc_end | ||
add rN, rD | ||
mov num_VAR, rN | ||
sub rN, 8 | ||
and rN, NOT 7 | ||
sub rD, rN | ||
xor x0, [SRCDAT 0] | ||
endm | ||
|
||
MY_EPILOG macro crc_end:req | ||
xor x0, [SRCDAT 0] | ||
mov rD, rN | ||
mov rN, num_VAR | ||
sub rN, rD | ||
crc_end: | ||
test rN, rN | ||
jz @F | ||
CRC1b | ||
jmp crc_end | ||
@@: | ||
MY_POP_4_REGS | ||
endm | ||
|
||
MY_PROC CrcUpdateT8, 4 | ||
MY_PROLOG crc_end_8 | ||
mov x1, [SRCDAT 1] | ||
align 16 | ||
main_loop_8: | ||
mov x6, [SRCDAT 2] | ||
movzx x3, x1_L | ||
CRC_XOR x6, r3, 3 | ||
movzx x3, x1_H | ||
CRC_XOR x6, r3, 2 | ||
shr x1, 16 | ||
movzx x3, x1_L | ||
movzx x1, x1_H | ||
CRC_XOR x6, r3, 1 | ||
movzx x3, x0_L | ||
CRC_XOR x6, r1, 0 | ||
|
||
mov x1, [SRCDAT 3] | ||
CRC_XOR x6, r3, 7 | ||
movzx x3, x0_H | ||
shr x0, 16 | ||
CRC_XOR x6, r3, 6 | ||
movzx x3, x0_L | ||
CRC_XOR x6, r3, 5 | ||
movzx x3, x0_H | ||
CRC_MOV x0, r3, 4 | ||
xor x0, x6 | ||
add rD, 8 | ||
jnz main_loop_8 | ||
|
||
MY_EPILOG crc_end_8 | ||
MY_ENDP | ||
|
||
MY_PROC CrcUpdateT4, 4 | ||
MY_PROLOG crc_end_4 | ||
align 16 | ||
main_loop_4: | ||
movzx x1, x0_L | ||
movzx x3, x0_H | ||
shr x0, 16 | ||
movzx x6, x0_H | ||
and x0, 0FFh | ||
CRC_MOV x1, r1, 3 | ||
xor x1, [SRCDAT 1] | ||
CRC_XOR x1, r3, 2 | ||
CRC_XOR x1, r6, 0 | ||
CRC_XOR x1, r0, 1 | ||
movzx x0, x1_L | ||
movzx x3, x1_H | ||
shr x1, 16 | ||
movzx x6, x1_H | ||
and x1, 0FFh | ||
CRC_MOV x0, r0, 3 | ||
xor x0, [SRCDAT 2] | ||
CRC_XOR x0, r3, 2 | ||
CRC_XOR x0, r6, 0 | ||
CRC_XOR x0, r1, 1 | ||
add rD, 8 | ||
jnz main_loop_4 | ||
|
||
MY_EPILOG crc_end_4 | ||
MY_ENDP | ||
|
||
end |
Oops, something went wrong.