OSDN Git Service

add japanese site html
[sevenzip/7-Zip.git] / 7z457 / Asm / x86 / 7zCrcT8U.asm
1 .386
2 .model flat
3
4 _TEXT$00   SEGMENT PARA PUBLIC 'CODE'
5
6 CRC1b macro
7     movzx EDX, BYTE PTR [ESI]
8     inc ESI
9     movzx EBX, AL
10     xor EDX, EBX 
11     shr EAX, 8
12     xor EAX, [EBP + EDX * 4]
13     dec EDI
14 endm
15
16 data_size equ (4 + 4*4)
17 crc_table equ (data_size + 4)
18
19 align 16
20 public @CrcUpdateT8@16
21 @CrcUpdateT8@16:
22     push EBX
23     push ESI
24     push EDI
25     push EBP
26
27     mov EAX, ECX
28     mov ESI, EDX
29     mov EDI, [ESP + data_size]
30     mov EBP, [ESP + crc_table]
31
32     test EDI, EDI
33     jz sl_end
34   sl:
35     test ESI, 7
36     jz sl_end
37     CRC1b
38     jnz sl
39   sl_end:
40
41     cmp EDI, 16
42     jb crc_end
43     mov [ESP + data_size], EDI
44     sub EDI, 8
45     and EDI, NOT 7
46     sub [ESP + data_size], EDI
47
48     add EDI, ESI
49     xor EAX, [ESI]
50     mov EBX, [ESI + 4]
51     movzx ECX, BL
52     align 16
53   main_loop:
54     mov EDX, [EBP + ECX*4 + 0C00h]
55     movzx ECX, BH
56     xor EDX, [EBP + ECX*4 + 0800h]
57     shr EBX, 16
58     movzx ECX, BL
59     xor EDX, [EBP + ECX*4 + 0400h]
60     xor EDX, [ESI + 8]
61     movzx ECX, AL
62     movzx EBX, BH
63     xor EDX, [EBP + EBX*4 + 0000h]
64
65     mov EBX, [ESI + 12]
66
67     xor EDX, [EBP + ECX*4 + 01C00h]
68     movzx ECX, AH
69     add ESI, 8
70     shr EAX, 16
71     xor EDX, [EBP + ECX*4 + 01800h]
72     movzx ECX, AL
73     xor EDX, [EBP + ECX*4 + 01400h]
74     movzx ECX, AH
75     mov EAX, [EBP + ECX*4 + 01000h]
76     movzx ECX, BL
77     xor EAX,EDX
78
79     cmp ESI, EDI
80     jne main_loop
81     xor EAX, [ESI]
82
83     mov EDI, [ESP + data_size]
84
85   crc_end:
86
87     test EDI, EDI
88     jz fl_end
89   fl:
90     CRC1b
91     jnz fl
92   fl_end:
93
94     pop EBP
95     pop EDI
96     pop ESI
97     pop EBX
98     ret 8
99
100
101 end