Skip to content

Commit 985c31b

Browse files
committed
Imported Upstream version 15.09+dfsg
1 parent 83a8e8a commit 985c31b

File tree

1,209 files changed

+217231
-126209
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,209 files changed

+217231
-126209
lines changed

Asm/x64/7zCrcT8U.asm

-103
This file was deleted.

Asm/x86/7zAsm.asm

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
; 7zAsm.asm -- ASM macros
2+
; 2009-12-12 : Igor Pavlov : Public domain
3+
; 2011-10-12 : P7ZIP : Public domain
4+
5+
%define NOT ~
6+
7+
%macro MY_ASM_START 0
8+
SECTION .text
9+
%endmacro
10+
11+
%macro MY_PROC 2 ; macro name:req, numParams:req
12+
align 16
13+
%define proc_numParams %2 ; numParams
14+
global %1
15+
global _%1
16+
%1:
17+
_%1:
18+
%endmacro
19+
20+
%macro MY_ENDP 0
21+
%ifdef x64
22+
ret
23+
; proc_name ENDP
24+
%else
25+
ret ; (proc_numParams - 2) * 4
26+
%endif
27+
%endmacro
28+
29+
%ifdef x64
30+
REG_SIZE equ 8
31+
%else
32+
REG_SIZE equ 4
33+
%endif
34+
35+
%define x0 EAX
36+
%define x1 ECX
37+
%define x2 EDX
38+
%define x3 EBX
39+
%define x4 ESP
40+
%define x5 EBP
41+
%define x6 ESI
42+
%define x7 EDI
43+
44+
%define x0_L AL
45+
%define x1_L CL
46+
%define x2_L DL
47+
%define x3_L BL
48+
49+
%define x0_H AH
50+
%define x1_H CH
51+
%define x2_H DH
52+
%define x3_H BH
53+
54+
%ifdef x64
55+
%define r0 RAX
56+
%define r1 RCX
57+
%define r2 RDX
58+
%define r3 RBX
59+
%define r4 RSP
60+
%define r5 RBP
61+
%define r6 RSI
62+
%define r7 RDI
63+
%else
64+
%define r0 x0
65+
%define r1 x1
66+
%define r2 x2
67+
%define r3 x3
68+
%define r4 x4
69+
%define r5 x5
70+
%define r6 x6
71+
%define r7 x7
72+
%endif
73+
74+
%macro MY_PUSH_4_REGS 0
75+
push r3
76+
push r5
77+
%ifdef x64
78+
%ifdef CYGWIN64
79+
push r6
80+
push r7
81+
%endif
82+
%else
83+
push r6
84+
push r7
85+
%endif
86+
%endmacro
87+
88+
%macro MY_POP_4_REGS 0
89+
%ifdef x64
90+
%ifdef CYGWIN64
91+
pop r7
92+
pop r6
93+
%endif
94+
%else
95+
pop r7
96+
pop r6
97+
%endif
98+
pop r5
99+
pop r3
100+
%endmacro

Asm/x86/7zCrcOpt_asm.asm

+171
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
; 7zCrcOpt.asm -- CRC32 calculation : optimized version
2+
; 2009-12-12 : Igor Pavlov : Public domain
3+
4+
%include "7zAsm.asm"
5+
6+
MY_ASM_START
7+
8+
%define rD r2
9+
%define rN r7
10+
11+
%ifdef x64
12+
%define num_VAR r8
13+
%define table_VAR r9
14+
%else
15+
data_size equ (REG_SIZE * 7)
16+
crc_table equ (REG_SIZE + data_size)
17+
%define num_VAR [r4 + data_size]
18+
%define table_VAR [r4 + crc_table]
19+
%endif
20+
21+
%define SRCDAT rN + rD + 4 *
22+
23+
%macro CRC 4 ;CRC macro op:req, dest:req, src:req, t:req
24+
%1 %2, DWORD [r5 + %3 * 4 + 0400h * %4] ; op dest, DWORD [r5 + src * 4 + 0400h * t]
25+
%endmacro
26+
27+
%macro CRC_XOR 3 ; CRC_XOR macro dest:req, src:req, t:req
28+
CRC xor, %1, %2, %3
29+
%endmacro
30+
31+
%macro CRC_MOV 3 ; CRC_MOV macro dest:req, src:req, t:req
32+
CRC mov, %1, %2, %3 ; CRC mov, dest, src, t
33+
%endmacro
34+
35+
%macro CRC1b 0
36+
movzx x6, BYTE [rD]
37+
inc rD
38+
movzx x3, x0_L
39+
xor x6, x3
40+
shr x0, 8
41+
CRC xor, x0, r6, 0
42+
dec rN
43+
%endmacro
44+
45+
%macro MY_PROLOG 1 ; MY_PROLOG macro crc_end:req
46+
MY_PUSH_4_REGS
47+
48+
49+
%ifdef x64
50+
%ifdef CYGWIN64
51+
;ECX=CRC, RDX=buf, R8=size R9=table
52+
; already in R8 : mov num_VAR,R8 ; LEN
53+
; already in RDX : mov rD, RDX ; BUF
54+
; already in R9 : mov table_VAR,R9; table
55+
mov x0, ECX ; CRC
56+
%else
57+
;EDI=CRC, RSI=buf, RDX=size RCX=table
58+
mov num_VAR,RDX ; LEN
59+
mov rD, RSI ; BUF
60+
mov table_VAR,RCX; table
61+
mov x0, EDI ; CRC
62+
%endif
63+
%else
64+
mov x0, [r4 + 20] ; CRC
65+
mov rD, [r4 + 24] ; buf
66+
%endif
67+
mov rN, num_VAR
68+
mov r5, table_VAR
69+
test rN, rN
70+
jz near %1 ; crc_end
71+
%%sl:
72+
test rD, 7
73+
jz %%sl_end
74+
CRC1b
75+
jnz %%sl
76+
%%sl_end:
77+
cmp rN, 16
78+
jb near %1; crc_end
79+
add rN, rD
80+
mov num_VAR, rN
81+
sub rN, 8
82+
and rN, NOT 7
83+
sub rD, rN
84+
xor x0, [SRCDAT 0]
85+
%endmacro
86+
87+
%macro MY_EPILOG 1 ; MY_EPILOG macro crc_end:req
88+
xor x0, [SRCDAT 0]
89+
mov rD, rN
90+
mov rN, num_VAR
91+
sub rN, rD
92+
%1: ; crc_end:
93+
test rN, rN
94+
jz %%end ; @F
95+
CRC1b
96+
jmp %1 ; crc_end
97+
%%end:
98+
MY_POP_4_REGS
99+
%endmacro
100+
101+
MY_PROC CrcUpdateT8, 4
102+
MY_PROLOG crc_end_8
103+
mov x1, [SRCDAT 1]
104+
align 16
105+
main_loop_8:
106+
mov x6, [SRCDAT 2]
107+
movzx x3, x1_L
108+
CRC_XOR x6, r3, 3
109+
movzx x3, x1_H
110+
CRC_XOR x6, r3, 2
111+
shr x1, 16
112+
movzx x3, x1_L
113+
movzx x1, x1_H
114+
CRC_XOR x6, r3, 1
115+
movzx x3, x0_L
116+
CRC_XOR x6, r1, 0
117+
118+
mov x1, [SRCDAT 3]
119+
CRC_XOR x6, r3, 7
120+
movzx x3, x0_H
121+
shr x0, 16
122+
CRC_XOR x6, r3, 6
123+
movzx x3, x0_L
124+
CRC_XOR x6, r3, 5
125+
movzx x3, x0_H
126+
CRC_MOV x0, r3, 4
127+
xor x0, x6
128+
add rD, 8
129+
jnz main_loop_8
130+
131+
MY_EPILOG crc_end_8
132+
MY_ENDP
133+
134+
MY_PROC CrcUpdateT4, 4
135+
MY_PROLOG crc_end_4
136+
align 16
137+
138+
main_loop_4:
139+
movzx x1, x0_L
140+
movzx x3, x0_H
141+
shr x0, 16
142+
movzx x6, x0_H
143+
and x0, 0FFh
144+
CRC_MOV x1, r1, 3
145+
xor x1, [SRCDAT 1]
146+
CRC_XOR x1, r3, 2
147+
CRC_XOR x1, r6, 0
148+
CRC_XOR x1, r0, 1
149+
150+
movzx x0, x1_L
151+
movzx x3, x1_H
152+
shr x1, 16
153+
movzx x6, x1_H
154+
and x1, 0FFh
155+
CRC_MOV x0, r0, 3
156+
xor x0, [SRCDAT 2]
157+
CRC_XOR x0, r3, 2
158+
CRC_XOR x0, r6, 0
159+
CRC_XOR x0, r1, 1
160+
add rD, 8
161+
jnz main_loop_4
162+
163+
MY_EPILOG crc_end_4
164+
MY_ENDP
165+
166+
; end
167+
168+
%ifidn __OUTPUT_FORMAT__,elf
169+
section .note.GNU-stack noalloc noexec nowrite progbits
170+
%endif
171+

0 commit comments

Comments
 (0)