Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: third_party/boringssl/win-x86_64/crypto/rc4/rc4-x86_64.asm

Issue 693893006: Roll BoringSSL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@nasm
Patch Set: roll further Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 OPTION» DOTNAME 1 default»rel
2 .text$» SEGMENT ALIGN(256) 'CODE' 2 %define XMMWORD
3 EXTERN» OPENSSL_ia32cap_P:NEAR 3 %define YMMWORD
4 %define ZMMWORD
5 section».text code align=64
4 6
5 PUBLIC» asm_RC4 7 EXTERN» OPENSSL_ia32cap_P
8
9 global» asm_RC4
6 10
7 ALIGN 16 11 ALIGN 16
8 asm_RC4»PROC PUBLIC 12 asm_RC4:
9 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 13 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
10 » mov» QWORD PTR[16+rsp],rsi 14 » mov» QWORD[16+rsp],rsi
11 mov rax,rsp 15 mov rax,rsp
12 $L$SEH_begin_asm_RC4:: 16 $L$SEH_begin_asm_RC4:
13 mov rdi,rcx 17 mov rdi,rcx
14 mov rsi,rdx 18 mov rsi,rdx
15 mov rdx,r8 19 mov rdx,r8
16 mov rcx,r9 20 mov rcx,r9
17 21
18 22
19 or rsi,rsi 23 or rsi,rsi
20 » jne» $L$entry 24 » jne» NEAR $L$entry
21 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 25 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
22 » mov» rsi,QWORD PTR[16+rsp] 26 » mov» rsi,QWORD[16+rsp]
23 DB 0F3h,0C3h ;repret 27 DB 0F3h,0C3h ;repret
24 $L$entry:: 28 $L$entry:
25 push rbx 29 push rbx
26 push r12 30 push r12
27 push r13 31 push r13
28 $L$prologue:: 32 $L$prologue:
29 mov r11,rsi 33 mov r11,rsi
30 mov r12,rdx 34 mov r12,rdx
31 mov r13,rcx 35 mov r13,rcx
32 xor r10,r10 36 xor r10,r10
33 xor rcx,rcx 37 xor rcx,rcx
34 38
35 » lea» rdi,QWORD PTR[8+rdi] 39 » lea» rdi,[8+rdi]
36 » mov» r10b,BYTE PTR[((-8))+rdi] 40 » mov» r10b,BYTE[((-8))+rdi]
37 » mov» cl,BYTE PTR[((-4))+rdi] 41 » mov» cl,BYTE[((-4))+rdi]
38 » cmp» DWORD PTR[256+rdi],-1 42 » cmp» DWORD[256+rdi],-1
39 » je» $L$RC4_CHAR 43 » je» NEAR $L$RC4_CHAR
40 » mov» r8d,DWORD PTR[OPENSSL_ia32cap_P] 44 » mov» r8d,DWORD[OPENSSL_ia32cap_P]
41 xor rbx,rbx 45 xor rbx,rbx
42 inc r10b 46 inc r10b
43 sub rbx,r10 47 sub rbx,r10
44 sub r13,r12 48 sub r13,r12
45 » mov» eax,DWORD PTR[r10*4+rdi] 49 » mov» eax,DWORD[r10*4+rdi]
46 test r11,-16 50 test r11,-16
47 » jz» $L$loop1 51 » jz» NEAR $L$loop1
48 bt r8d,30 52 bt r8d,30
49 » jc» $L$intel 53 » jc» NEAR $L$intel
50 and rbx,7 54 and rbx,7
51 » lea» rsi,QWORD PTR[1+r10] 55 » lea» rsi,[1+r10]
52 » jz» $L$oop8 56 » jz» NEAR $L$oop8
53 sub r11,rbx 57 sub r11,rbx
54 $L$oop8_warmup:: 58 $L$oop8_warmup:
55 » add» cl,al 59 » add» cl,al
56 » mov» edx,DWORD PTR[rcx*4+rdi] 60 » mov» edx,DWORD[rcx*4+rdi]
57 » mov» DWORD PTR[rcx*4+rdi],eax 61 » mov» DWORD[rcx*4+rdi],eax
58 » mov» DWORD PTR[r10*4+rdi],edx 62 » mov» DWORD[r10*4+rdi],edx
59 add al,dl 63 add al,dl
60 inc r10b 64 inc r10b
61 » mov» edx,DWORD PTR[rax*4+rdi] 65 » mov» edx,DWORD[rax*4+rdi]
62 » mov» eax,DWORD PTR[r10*4+rdi] 66 » mov» eax,DWORD[r10*4+rdi]
63 » xor» dl,BYTE PTR[r12] 67 » xor» dl,BYTE[r12]
64 » mov» BYTE PTR[r13*1+r12],dl 68 » mov» BYTE[r13*1+r12],dl
65 » lea» r12,QWORD PTR[1+r12] 69 » lea» r12,[1+r12]
66 dec rbx 70 dec rbx
67 » jnz» $L$oop8_warmup 71 » jnz» NEAR $L$oop8_warmup
68 72
69 » lea» rsi,QWORD PTR[1+r10] 73 » lea» rsi,[1+r10]
70 » jmp» $L$oop8 74 » jmp» NEAR $L$oop8
71 ALIGN» 16 75 ALIGN» 16
72 $L$oop8:: 76 $L$oop8:
73 » add» cl,al 77 » add» cl,al
74 » mov» edx,DWORD PTR[rcx*4+rdi] 78 » mov» edx,DWORD[rcx*4+rdi]
75 » mov» DWORD PTR[rcx*4+rdi],eax 79 » mov» DWORD[rcx*4+rdi],eax
76 » mov» ebx,DWORD PTR[rsi*4+rdi] 80 » mov» ebx,DWORD[rsi*4+rdi]
77 » ror» r8,8 81 » ror» r8,8
78 » mov» DWORD PTR[r10*4+rdi],edx 82 » mov» DWORD[r10*4+rdi],edx
79 » add» dl,al 83 » add» dl,al
80 » mov» r8b,BYTE PTR[rdx*4+rdi] 84 » mov» r8b,BYTE[rdx*4+rdi]
81 » add» cl,bl 85 » add» cl,bl
82 » mov» edx,DWORD PTR[rcx*4+rdi] 86 » mov» edx,DWORD[rcx*4+rdi]
83 » mov» DWORD PTR[rcx*4+rdi],ebx 87 » mov» DWORD[rcx*4+rdi],ebx
84 » mov» eax,DWORD PTR[4+rsi*4+rdi] 88 » mov» eax,DWORD[4+rsi*4+rdi]
85 » ror» r8,8 89 » ror» r8,8
86 » mov» DWORD PTR[4+r10*4+rdi],edx 90 » mov» DWORD[4+r10*4+rdi],edx
87 » add» dl,bl 91 » add» dl,bl
88 » mov» r8b,BYTE PTR[rdx*4+rdi] 92 » mov» r8b,BYTE[rdx*4+rdi]
89 » add» cl,al 93 » add» cl,al
90 » mov» edx,DWORD PTR[rcx*4+rdi] 94 » mov» edx,DWORD[rcx*4+rdi]
91 » mov» DWORD PTR[rcx*4+rdi],eax 95 » mov» DWORD[rcx*4+rdi],eax
92 » mov» ebx,DWORD PTR[8+rsi*4+rdi] 96 » mov» ebx,DWORD[8+rsi*4+rdi]
93 » ror» r8,8 97 » ror» r8,8
94 » mov» DWORD PTR[8+r10*4+rdi],edx 98 » mov» DWORD[8+r10*4+rdi],edx
95 » add» dl,al 99 » add» dl,al
96 » mov» r8b,BYTE PTR[rdx*4+rdi] 100 » mov» r8b,BYTE[rdx*4+rdi]
97 » add» cl,bl 101 » add» cl,bl
98 » mov» edx,DWORD PTR[rcx*4+rdi] 102 » mov» edx,DWORD[rcx*4+rdi]
99 » mov» DWORD PTR[rcx*4+rdi],ebx 103 » mov» DWORD[rcx*4+rdi],ebx
100 » mov» eax,DWORD PTR[12+rsi*4+rdi] 104 » mov» eax,DWORD[12+rsi*4+rdi]
101 » ror» r8,8 105 » ror» r8,8
102 » mov» DWORD PTR[12+r10*4+rdi],edx 106 » mov» DWORD[12+r10*4+rdi],edx
103 » add» dl,bl 107 » add» dl,bl
104 » mov» r8b,BYTE PTR[rdx*4+rdi] 108 » mov» r8b,BYTE[rdx*4+rdi]
105 » add» cl,al 109 » add» cl,al
106 » mov» edx,DWORD PTR[rcx*4+rdi] 110 » mov» edx,DWORD[rcx*4+rdi]
107 » mov» DWORD PTR[rcx*4+rdi],eax 111 » mov» DWORD[rcx*4+rdi],eax
108 » mov» ebx,DWORD PTR[16+rsi*4+rdi] 112 » mov» ebx,DWORD[16+rsi*4+rdi]
109 » ror» r8,8 113 » ror» r8,8
110 » mov» DWORD PTR[16+r10*4+rdi],edx 114 » mov» DWORD[16+r10*4+rdi],edx
111 » add» dl,al 115 » add» dl,al
112 » mov» r8b,BYTE PTR[rdx*4+rdi] 116 » mov» r8b,BYTE[rdx*4+rdi]
113 » add» cl,bl 117 » add» cl,bl
114 » mov» edx,DWORD PTR[rcx*4+rdi] 118 » mov» edx,DWORD[rcx*4+rdi]
115 » mov» DWORD PTR[rcx*4+rdi],ebx 119 » mov» DWORD[rcx*4+rdi],ebx
116 » mov» eax,DWORD PTR[20+rsi*4+rdi] 120 » mov» eax,DWORD[20+rsi*4+rdi]
117 » ror» r8,8 121 » ror» r8,8
118 » mov» DWORD PTR[20+r10*4+rdi],edx 122 » mov» DWORD[20+r10*4+rdi],edx
119 » add» dl,bl 123 » add» dl,bl
120 » mov» r8b,BYTE PTR[rdx*4+rdi] 124 » mov» r8b,BYTE[rdx*4+rdi]
121 » add» cl,al 125 » add» cl,al
122 » mov» edx,DWORD PTR[rcx*4+rdi] 126 » mov» edx,DWORD[rcx*4+rdi]
123 » mov» DWORD PTR[rcx*4+rdi],eax 127 » mov» DWORD[rcx*4+rdi],eax
124 » mov» ebx,DWORD PTR[24+rsi*4+rdi] 128 » mov» ebx,DWORD[24+rsi*4+rdi]
125 » ror» r8,8 129 » ror» r8,8
126 » mov» DWORD PTR[24+r10*4+rdi],edx 130 » mov» DWORD[24+r10*4+rdi],edx
127 » add» dl,al 131 » add» dl,al
128 » mov» r8b,BYTE PTR[rdx*4+rdi] 132 » mov» r8b,BYTE[rdx*4+rdi]
129 add sil,8 133 add sil,8
130 add cl,bl 134 add cl,bl
131 » mov» edx,DWORD PTR[rcx*4+rdi] 135 » mov» edx,DWORD[rcx*4+rdi]
132 » mov» DWORD PTR[rcx*4+rdi],ebx 136 » mov» DWORD[rcx*4+rdi],ebx
133 » mov» eax,DWORD PTR[((-4))+rsi*4+rdi] 137 » mov» eax,DWORD[((-4))+rsi*4+rdi]
134 » ror» r8,8 138 » ror» r8,8
135 » mov» DWORD PTR[28+r10*4+rdi],edx 139 » mov» DWORD[28+r10*4+rdi],edx
136 » add» dl,bl 140 » add» dl,bl
137 » mov» r8b,BYTE PTR[rdx*4+rdi] 141 » mov» r8b,BYTE[rdx*4+rdi]
138 add r10b,8 142 add r10b,8
139 ror r8,8 143 ror r8,8
140 sub r11,8 144 sub r11,8
141 145
142 » xor» r8,QWORD PTR[r12] 146 » xor» r8,QWORD[r12]
143 » mov» QWORD PTR[r13*1+r12],r8 147 » mov» QWORD[r13*1+r12],r8
144 » lea» r12,QWORD PTR[8+r12] 148 » lea» r12,[8+r12]
145 149
146 test r11,-8 150 test r11,-8
147 » jnz» $L$oop8 151 » jnz» NEAR $L$oop8
148 cmp r11,0 152 cmp r11,0
149 » jne» $L$loop1 153 » jne» NEAR $L$loop1
150 » jmp» $L$exit 154 » jmp» NEAR $L$exit
151 155
152 ALIGN» 16 156 ALIGN» 16
153 $L$intel:: 157 $L$intel:
154 test r11,-32 158 test r11,-32
155 » jz» $L$loop1 159 » jz» NEAR $L$loop1
156 and rbx,15 160 and rbx,15
157 » jz» $L$oop16_is_hot 161 » jz» NEAR $L$oop16_is_hot
158 sub r11,rbx 162 sub r11,rbx
159 $L$oop16_warmup:: 163 $L$oop16_warmup:
160 » add» cl,al 164 » add» cl,al
161 » mov» edx,DWORD PTR[rcx*4+rdi] 165 » mov» edx,DWORD[rcx*4+rdi]
162 » mov» DWORD PTR[rcx*4+rdi],eax 166 » mov» DWORD[rcx*4+rdi],eax
163 » mov» DWORD PTR[r10*4+rdi],edx 167 » mov» DWORD[r10*4+rdi],edx
164 add al,dl 168 add al,dl
165 inc r10b 169 inc r10b
166 » mov» edx,DWORD PTR[rax*4+rdi] 170 » mov» edx,DWORD[rax*4+rdi]
167 » mov» eax,DWORD PTR[r10*4+rdi] 171 » mov» eax,DWORD[r10*4+rdi]
168 » xor» dl,BYTE PTR[r12] 172 » xor» dl,BYTE[r12]
169 » mov» BYTE PTR[r13*1+r12],dl 173 » mov» BYTE[r13*1+r12],dl
170 » lea» r12,QWORD PTR[1+r12] 174 » lea» r12,[1+r12]
171 dec rbx 175 dec rbx
172 » jnz» $L$oop16_warmup 176 » jnz» NEAR $L$oop16_warmup
173 177
174 mov rbx,rcx 178 mov rbx,rcx
175 xor rcx,rcx 179 xor rcx,rcx
176 mov cl,bl 180 mov cl,bl
177 181
178 $L$oop16_is_hot:: 182 $L$oop16_is_hot:
179 » lea» rsi,QWORD PTR[r10*4+rdi] 183 » lea» rsi,[r10*4+rdi]
180 » add» cl,al 184 » add» cl,al
181 » mov» edx,DWORD PTR[rcx*4+rdi] 185 » mov» edx,DWORD[rcx*4+rdi]
182 pxor xmm0,xmm0 186 pxor xmm0,xmm0
183 » mov» DWORD PTR[rcx*4+rdi],eax 187 » mov» DWORD[rcx*4+rdi],eax
184 » add» al,dl 188 » add» al,dl
185 » mov» ebx,DWORD PTR[4+rsi] 189 » mov» ebx,DWORD[4+rsi]
186 » movzx» eax,al 190 » movzx» eax,al
187 » mov» DWORD PTR[rsi],edx 191 » mov» DWORD[rsi],edx
188 » add» cl,bl 192 » add» cl,bl
189 » pinsrw» xmm0,WORD PTR[rax*4+rdi],0 193 » pinsrw» xmm0,WORD[rax*4+rdi],0
190 » jmp» $L$oop16_enter 194 » jmp» NEAR $L$oop16_enter
191 ALIGN» 16 195 ALIGN» 16
192 $L$oop16:: 196 $L$oop16:
193 » add» cl,al 197 » add» cl,al
194 » mov» edx,DWORD PTR[rcx*4+rdi] 198 » mov» edx,DWORD[rcx*4+rdi]
195 pxor xmm2,xmm0 199 pxor xmm2,xmm0
196 psllq xmm1,8 200 psllq xmm1,8
197 pxor xmm0,xmm0 201 pxor xmm0,xmm0
198 » mov» DWORD PTR[rcx*4+rdi],eax 202 » mov» DWORD[rcx*4+rdi],eax
199 » add» al,dl 203 » add» al,dl
200 » mov» ebx,DWORD PTR[4+rsi] 204 » mov» ebx,DWORD[4+rsi]
201 » movzx» eax,al 205 » movzx» eax,al
202 » mov» DWORD PTR[rsi],edx 206 » mov» DWORD[rsi],edx
203 pxor xmm2,xmm1 207 pxor xmm2,xmm1
204 add cl,bl 208 add cl,bl
205 » pinsrw» xmm0,WORD PTR[rax*4+rdi],0 209 » pinsrw» xmm0,WORD[rax*4+rdi],0
206 » movdqu» XMMWORD PTR[r13*1+r12],xmm2 210 » movdqu» XMMWORD[r13*1+r12],xmm2
207 » lea» r12,QWORD PTR[16+r12] 211 » lea» r12,[16+r12]
208 $L$oop16_enter:: 212 $L$oop16_enter:
209 » mov» edx,DWORD PTR[rcx*4+rdi] 213 » mov» edx,DWORD[rcx*4+rdi]
210 pxor xmm1,xmm1 214 pxor xmm1,xmm1
211 » mov» DWORD PTR[rcx*4+rdi],ebx 215 » mov» DWORD[rcx*4+rdi],ebx
212 » add» bl,dl 216 » add» bl,dl
213 » mov» eax,DWORD PTR[8+rsi] 217 » mov» eax,DWORD[8+rsi]
214 » movzx» ebx,bl 218 » movzx» ebx,bl
215 » mov» DWORD PTR[4+rsi],edx 219 » mov» DWORD[4+rsi],edx
216 » add» cl,al 220 » add» cl,al
217 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],0 221 » pinsrw» xmm1,WORD[rbx*4+rdi],0
218 » mov» edx,DWORD PTR[rcx*4+rdi] 222 » mov» edx,DWORD[rcx*4+rdi]
219 » mov» DWORD PTR[rcx*4+rdi],eax 223 » mov» DWORD[rcx*4+rdi],eax
220 » add» al,dl 224 » add» al,dl
221 » mov» ebx,DWORD PTR[12+rsi] 225 » mov» ebx,DWORD[12+rsi]
222 » movzx» eax,al 226 » movzx» eax,al
223 » mov» DWORD PTR[8+rsi],edx 227 » mov» DWORD[8+rsi],edx
224 » add» cl,bl 228 » add» cl,bl
225 » pinsrw» xmm0,WORD PTR[rax*4+rdi],1 229 » pinsrw» xmm0,WORD[rax*4+rdi],1
226 » mov» edx,DWORD PTR[rcx*4+rdi] 230 » mov» edx,DWORD[rcx*4+rdi]
227 » mov» DWORD PTR[rcx*4+rdi],ebx 231 » mov» DWORD[rcx*4+rdi],ebx
228 » add» bl,dl 232 » add» bl,dl
229 » mov» eax,DWORD PTR[16+rsi] 233 » mov» eax,DWORD[16+rsi]
230 » movzx» ebx,bl 234 » movzx» ebx,bl
231 » mov» DWORD PTR[12+rsi],edx 235 » mov» DWORD[12+rsi],edx
232 » add» cl,al 236 » add» cl,al
233 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],1 237 » pinsrw» xmm1,WORD[rbx*4+rdi],1
234 » mov» edx,DWORD PTR[rcx*4+rdi] 238 » mov» edx,DWORD[rcx*4+rdi]
235 » mov» DWORD PTR[rcx*4+rdi],eax 239 » mov» DWORD[rcx*4+rdi],eax
236 » add» al,dl 240 » add» al,dl
237 » mov» ebx,DWORD PTR[20+rsi] 241 » mov» ebx,DWORD[20+rsi]
238 » movzx» eax,al 242 » movzx» eax,al
239 » mov» DWORD PTR[16+rsi],edx 243 » mov» DWORD[16+rsi],edx
240 » add» cl,bl 244 » add» cl,bl
241 » pinsrw» xmm0,WORD PTR[rax*4+rdi],2 245 » pinsrw» xmm0,WORD[rax*4+rdi],2
242 » mov» edx,DWORD PTR[rcx*4+rdi] 246 » mov» edx,DWORD[rcx*4+rdi]
243 » mov» DWORD PTR[rcx*4+rdi],ebx 247 » mov» DWORD[rcx*4+rdi],ebx
244 » add» bl,dl 248 » add» bl,dl
245 » mov» eax,DWORD PTR[24+rsi] 249 » mov» eax,DWORD[24+rsi]
246 » movzx» ebx,bl 250 » movzx» ebx,bl
247 » mov» DWORD PTR[20+rsi],edx 251 » mov» DWORD[20+rsi],edx
248 » add» cl,al 252 » add» cl,al
249 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],2 253 » pinsrw» xmm1,WORD[rbx*4+rdi],2
250 » mov» edx,DWORD PTR[rcx*4+rdi] 254 » mov» edx,DWORD[rcx*4+rdi]
251 » mov» DWORD PTR[rcx*4+rdi],eax 255 » mov» DWORD[rcx*4+rdi],eax
252 » add» al,dl 256 » add» al,dl
253 » mov» ebx,DWORD PTR[28+rsi] 257 » mov» ebx,DWORD[28+rsi]
254 » movzx» eax,al 258 » movzx» eax,al
255 » mov» DWORD PTR[24+rsi],edx 259 » mov» DWORD[24+rsi],edx
256 » add» cl,bl 260 » add» cl,bl
257 » pinsrw» xmm0,WORD PTR[rax*4+rdi],3 261 » pinsrw» xmm0,WORD[rax*4+rdi],3
258 » mov» edx,DWORD PTR[rcx*4+rdi] 262 » mov» edx,DWORD[rcx*4+rdi]
259 » mov» DWORD PTR[rcx*4+rdi],ebx 263 » mov» DWORD[rcx*4+rdi],ebx
260 » add» bl,dl 264 » add» bl,dl
261 » mov» eax,DWORD PTR[32+rsi] 265 » mov» eax,DWORD[32+rsi]
262 » movzx» ebx,bl 266 » movzx» ebx,bl
263 » mov» DWORD PTR[28+rsi],edx 267 » mov» DWORD[28+rsi],edx
264 » add» cl,al 268 » add» cl,al
265 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],3 269 » pinsrw» xmm1,WORD[rbx*4+rdi],3
266 » mov» edx,DWORD PTR[rcx*4+rdi] 270 » mov» edx,DWORD[rcx*4+rdi]
267 » mov» DWORD PTR[rcx*4+rdi],eax 271 » mov» DWORD[rcx*4+rdi],eax
268 » add» al,dl 272 » add» al,dl
269 » mov» ebx,DWORD PTR[36+rsi] 273 » mov» ebx,DWORD[36+rsi]
270 » movzx» eax,al 274 » movzx» eax,al
271 » mov» DWORD PTR[32+rsi],edx 275 » mov» DWORD[32+rsi],edx
272 » add» cl,bl 276 » add» cl,bl
273 » pinsrw» xmm0,WORD PTR[rax*4+rdi],4 277 » pinsrw» xmm0,WORD[rax*4+rdi],4
274 » mov» edx,DWORD PTR[rcx*4+rdi] 278 » mov» edx,DWORD[rcx*4+rdi]
275 » mov» DWORD PTR[rcx*4+rdi],ebx 279 » mov» DWORD[rcx*4+rdi],ebx
276 » add» bl,dl 280 » add» bl,dl
277 » mov» eax,DWORD PTR[40+rsi] 281 » mov» eax,DWORD[40+rsi]
278 » movzx» ebx,bl 282 » movzx» ebx,bl
279 » mov» DWORD PTR[36+rsi],edx 283 » mov» DWORD[36+rsi],edx
280 » add» cl,al 284 » add» cl,al
281 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],4 285 » pinsrw» xmm1,WORD[rbx*4+rdi],4
282 » mov» edx,DWORD PTR[rcx*4+rdi] 286 » mov» edx,DWORD[rcx*4+rdi]
283 » mov» DWORD PTR[rcx*4+rdi],eax 287 » mov» DWORD[rcx*4+rdi],eax
284 » add» al,dl 288 » add» al,dl
285 » mov» ebx,DWORD PTR[44+rsi] 289 » mov» ebx,DWORD[44+rsi]
286 » movzx» eax,al 290 » movzx» eax,al
287 » mov» DWORD PTR[40+rsi],edx 291 » mov» DWORD[40+rsi],edx
288 » add» cl,bl 292 » add» cl,bl
289 » pinsrw» xmm0,WORD PTR[rax*4+rdi],5 293 » pinsrw» xmm0,WORD[rax*4+rdi],5
290 » mov» edx,DWORD PTR[rcx*4+rdi] 294 » mov» edx,DWORD[rcx*4+rdi]
291 » mov» DWORD PTR[rcx*4+rdi],ebx 295 » mov» DWORD[rcx*4+rdi],ebx
292 » add» bl,dl 296 » add» bl,dl
293 » mov» eax,DWORD PTR[48+rsi] 297 » mov» eax,DWORD[48+rsi]
294 » movzx» ebx,bl 298 » movzx» ebx,bl
295 » mov» DWORD PTR[44+rsi],edx 299 » mov» DWORD[44+rsi],edx
296 » add» cl,al 300 » add» cl,al
297 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],5 301 » pinsrw» xmm1,WORD[rbx*4+rdi],5
298 » mov» edx,DWORD PTR[rcx*4+rdi] 302 » mov» edx,DWORD[rcx*4+rdi]
299 » mov» DWORD PTR[rcx*4+rdi],eax 303 » mov» DWORD[rcx*4+rdi],eax
300 » add» al,dl 304 » add» al,dl
301 » mov» ebx,DWORD PTR[52+rsi] 305 » mov» ebx,DWORD[52+rsi]
302 » movzx» eax,al 306 » movzx» eax,al
303 » mov» DWORD PTR[48+rsi],edx 307 » mov» DWORD[48+rsi],edx
304 » add» cl,bl 308 » add» cl,bl
305 » pinsrw» xmm0,WORD PTR[rax*4+rdi],6 309 » pinsrw» xmm0,WORD[rax*4+rdi],6
306 » mov» edx,DWORD PTR[rcx*4+rdi] 310 » mov» edx,DWORD[rcx*4+rdi]
307 » mov» DWORD PTR[rcx*4+rdi],ebx 311 » mov» DWORD[rcx*4+rdi],ebx
308 » add» bl,dl 312 » add» bl,dl
309 » mov» eax,DWORD PTR[56+rsi] 313 » mov» eax,DWORD[56+rsi]
310 » movzx» ebx,bl 314 » movzx» ebx,bl
311 » mov» DWORD PTR[52+rsi],edx 315 » mov» DWORD[52+rsi],edx
312 » add» cl,al 316 » add» cl,al
313 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],6 317 » pinsrw» xmm1,WORD[rbx*4+rdi],6
314 » mov» edx,DWORD PTR[rcx*4+rdi] 318 » mov» edx,DWORD[rcx*4+rdi]
315 » mov» DWORD PTR[rcx*4+rdi],eax 319 » mov» DWORD[rcx*4+rdi],eax
316 » add» al,dl 320 » add» al,dl
317 » mov» ebx,DWORD PTR[60+rsi] 321 » mov» ebx,DWORD[60+rsi]
318 » movzx» eax,al 322 » movzx» eax,al
319 » mov» DWORD PTR[56+rsi],edx 323 » mov» DWORD[56+rsi],edx
320 » add» cl,bl 324 » add» cl,bl
321 » pinsrw» xmm0,WORD PTR[rax*4+rdi],7 325 » pinsrw» xmm0,WORD[rax*4+rdi],7
322 add r10b,16 326 add r10b,16
323 » movdqu» xmm2,XMMWORD PTR[r12] 327 » movdqu» xmm2,XMMWORD[r12]
324 » mov» edx,DWORD PTR[rcx*4+rdi] 328 » mov» edx,DWORD[rcx*4+rdi]
325 » mov» DWORD PTR[rcx*4+rdi],ebx 329 » mov» DWORD[rcx*4+rdi],ebx
326 » add» bl,dl 330 » add» bl,dl
327 » movzx» ebx,bl 331 » movzx» ebx,bl
328 » mov» DWORD PTR[60+rsi],edx 332 » mov» DWORD[60+rsi],edx
329 » lea» rsi,QWORD PTR[r10*4+rdi] 333 » lea» rsi,[r10*4+rdi]
330 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],7 334 » pinsrw» xmm1,WORD[rbx*4+rdi],7
331 » mov» eax,DWORD PTR[rsi] 335 » mov» eax,DWORD[rsi]
332 mov rbx,rcx 336 mov rbx,rcx
333 xor rcx,rcx 337 xor rcx,rcx
334 sub r11,16 338 sub r11,16
335 mov cl,bl 339 mov cl,bl
336 test r11,-16 340 test r11,-16
337 » jnz» $L$oop16 341 » jnz» NEAR $L$oop16
338 342
339 psllq xmm1,8 343 psllq xmm1,8
340 pxor xmm2,xmm0 344 pxor xmm2,xmm0
341 pxor xmm2,xmm1 345 pxor xmm2,xmm1
342 » movdqu» XMMWORD PTR[r13*1+r12],xmm2 346 » movdqu» XMMWORD[r13*1+r12],xmm2
343 » lea» r12,QWORD PTR[16+r12] 347 » lea» r12,[16+r12]
344 348
345 cmp r11,0 349 cmp r11,0
346 » jne» $L$loop1 350 » jne» NEAR $L$loop1
347 » jmp» $L$exit 351 » jmp» NEAR $L$exit
348 352
349 ALIGN» 16 353 ALIGN» 16
350 $L$loop1:: 354 $L$loop1:
351 » add» cl,al 355 » add» cl,al
352 » mov» edx,DWORD PTR[rcx*4+rdi] 356 » mov» edx,DWORD[rcx*4+rdi]
353 » mov» DWORD PTR[rcx*4+rdi],eax 357 » mov» DWORD[rcx*4+rdi],eax
354 » mov» DWORD PTR[r10*4+rdi],edx 358 » mov» DWORD[r10*4+rdi],edx
355 add al,dl 359 add al,dl
356 inc r10b 360 inc r10b
357 » mov» edx,DWORD PTR[rax*4+rdi] 361 » mov» edx,DWORD[rax*4+rdi]
358 » mov» eax,DWORD PTR[r10*4+rdi] 362 » mov» eax,DWORD[r10*4+rdi]
359 » xor» dl,BYTE PTR[r12] 363 » xor» dl,BYTE[r12]
360 » mov» BYTE PTR[r13*1+r12],dl 364 » mov» BYTE[r13*1+r12],dl
361 » lea» r12,QWORD PTR[1+r12] 365 » lea» r12,[1+r12]
362 dec r11 366 dec r11
363 » jnz» $L$loop1 367 » jnz» NEAR $L$loop1
364 » jmp» $L$exit 368 » jmp» NEAR $L$exit
365 369
366 ALIGN» 16 370 ALIGN» 16
367 $L$RC4_CHAR:: 371 $L$RC4_CHAR:
368 add r10b,1 372 add r10b,1
369 » movzx» eax,BYTE PTR[r10*1+rdi] 373 » movzx» eax,BYTE[r10*1+rdi]
370 test r11,-8 374 test r11,-8
371 » jz» $L$cloop1 375 » jz» NEAR $L$cloop1
372 » jmp» $L$cloop8 376 » jmp» NEAR $L$cloop8
373 ALIGN» 16 377 ALIGN» 16
374 $L$cloop8:: 378 $L$cloop8:
375 » mov» r8d,DWORD PTR[r12] 379 » mov» r8d,DWORD[r12]
376 » mov» r9d,DWORD PTR[4+r12] 380 » mov» r9d,DWORD[4+r12]
377 » add» cl,al 381 » add» cl,al
378 » lea» rsi,QWORD PTR[1+r10] 382 » lea» rsi,[1+r10]
379 » movzx» edx,BYTE PTR[rcx*1+rdi] 383 » movzx» edx,BYTE[rcx*1+rdi]
380 movzx esi,sil 384 movzx esi,sil
381 » movzx» ebx,BYTE PTR[rsi*1+rdi] 385 » movzx» ebx,BYTE[rsi*1+rdi]
382 » mov» BYTE PTR[rcx*1+rdi],al 386 » mov» BYTE[rcx*1+rdi],al
383 cmp rcx,rsi 387 cmp rcx,rsi
384 » mov» BYTE PTR[r10*1+rdi],dl 388 » mov» BYTE[r10*1+rdi],dl
385 » jne» $L$cmov0 389 » jne» NEAR $L$cmov0
386 mov rbx,rax 390 mov rbx,rax
387 $L$cmov0:: 391 $L$cmov0:
388 » add» dl,al 392 » add» dl,al
389 » xor» r8b,BYTE PTR[rdx*1+rdi] 393 » xor» r8b,BYTE[rdx*1+rdi]
390 ror r8d,8 394 ror r8d,8
391 add cl,bl 395 add cl,bl
392 » lea» r10,QWORD PTR[1+rsi] 396 » lea» r10,[1+rsi]
393 » movzx» edx,BYTE PTR[rcx*1+rdi] 397 » movzx» edx,BYTE[rcx*1+rdi]
394 movzx r10d,r10b 398 movzx r10d,r10b
395 » movzx» eax,BYTE PTR[r10*1+rdi] 399 » movzx» eax,BYTE[r10*1+rdi]
396 » mov» BYTE PTR[rcx*1+rdi],bl 400 » mov» BYTE[rcx*1+rdi],bl
397 cmp rcx,r10 401 cmp rcx,r10
398 » mov» BYTE PTR[rsi*1+rdi],dl 402 » mov» BYTE[rsi*1+rdi],dl
399 » jne» $L$cmov1 403 » jne» NEAR $L$cmov1
400 mov rax,rbx 404 mov rax,rbx
401 $L$cmov1:: 405 $L$cmov1:
402 » add» dl,bl 406 » add» dl,bl
403 » xor» r8b,BYTE PTR[rdx*1+rdi] 407 » xor» r8b,BYTE[rdx*1+rdi]
404 ror r8d,8 408 ror r8d,8
405 add cl,al 409 add cl,al
406 » lea» rsi,QWORD PTR[1+r10] 410 » lea» rsi,[1+r10]
407 » movzx» edx,BYTE PTR[rcx*1+rdi] 411 » movzx» edx,BYTE[rcx*1+rdi]
408 movzx esi,sil 412 movzx esi,sil
409 » movzx» ebx,BYTE PTR[rsi*1+rdi] 413 » movzx» ebx,BYTE[rsi*1+rdi]
410 » mov» BYTE PTR[rcx*1+rdi],al 414 » mov» BYTE[rcx*1+rdi],al
411 cmp rcx,rsi 415 cmp rcx,rsi
412 » mov» BYTE PTR[r10*1+rdi],dl 416 » mov» BYTE[r10*1+rdi],dl
413 » jne» $L$cmov2 417 » jne» NEAR $L$cmov2
414 mov rbx,rax 418 mov rbx,rax
415 $L$cmov2:: 419 $L$cmov2:
416 » add» dl,al 420 » add» dl,al
417 » xor» r8b,BYTE PTR[rdx*1+rdi] 421 » xor» r8b,BYTE[rdx*1+rdi]
418 ror r8d,8 422 ror r8d,8
419 add cl,bl 423 add cl,bl
420 » lea» r10,QWORD PTR[1+rsi] 424 » lea» r10,[1+rsi]
421 » movzx» edx,BYTE PTR[rcx*1+rdi] 425 » movzx» edx,BYTE[rcx*1+rdi]
422 movzx r10d,r10b 426 movzx r10d,r10b
423 » movzx» eax,BYTE PTR[r10*1+rdi] 427 » movzx» eax,BYTE[r10*1+rdi]
424 » mov» BYTE PTR[rcx*1+rdi],bl 428 » mov» BYTE[rcx*1+rdi],bl
425 cmp rcx,r10 429 cmp rcx,r10
426 » mov» BYTE PTR[rsi*1+rdi],dl 430 » mov» BYTE[rsi*1+rdi],dl
427 » jne» $L$cmov3 431 » jne» NEAR $L$cmov3
428 mov rax,rbx 432 mov rax,rbx
429 $L$cmov3:: 433 $L$cmov3:
430 » add» dl,bl 434 » add» dl,bl
431 » xor» r8b,BYTE PTR[rdx*1+rdi] 435 » xor» r8b,BYTE[rdx*1+rdi]
432 ror r8d,8 436 ror r8d,8
433 add cl,al 437 add cl,al
434 » lea» rsi,QWORD PTR[1+r10] 438 » lea» rsi,[1+r10]
435 » movzx» edx,BYTE PTR[rcx*1+rdi] 439 » movzx» edx,BYTE[rcx*1+rdi]
436 movzx esi,sil 440 movzx esi,sil
437 » movzx» ebx,BYTE PTR[rsi*1+rdi] 441 » movzx» ebx,BYTE[rsi*1+rdi]
438 » mov» BYTE PTR[rcx*1+rdi],al 442 » mov» BYTE[rcx*1+rdi],al
439 cmp rcx,rsi 443 cmp rcx,rsi
440 » mov» BYTE PTR[r10*1+rdi],dl 444 » mov» BYTE[r10*1+rdi],dl
441 » jne» $L$cmov4 445 » jne» NEAR $L$cmov4
442 mov rbx,rax 446 mov rbx,rax
443 $L$cmov4:: 447 $L$cmov4:
444 » add» dl,al 448 » add» dl,al
445 » xor» r9b,BYTE PTR[rdx*1+rdi] 449 » xor» r9b,BYTE[rdx*1+rdi]
446 ror r9d,8 450 ror r9d,8
447 add cl,bl 451 add cl,bl
448 » lea» r10,QWORD PTR[1+rsi] 452 » lea» r10,[1+rsi]
449 » movzx» edx,BYTE PTR[rcx*1+rdi] 453 » movzx» edx,BYTE[rcx*1+rdi]
450 movzx r10d,r10b 454 movzx r10d,r10b
451 » movzx» eax,BYTE PTR[r10*1+rdi] 455 » movzx» eax,BYTE[r10*1+rdi]
452 » mov» BYTE PTR[rcx*1+rdi],bl 456 » mov» BYTE[rcx*1+rdi],bl
453 cmp rcx,r10 457 cmp rcx,r10
454 » mov» BYTE PTR[rsi*1+rdi],dl 458 » mov» BYTE[rsi*1+rdi],dl
455 » jne» $L$cmov5 459 » jne» NEAR $L$cmov5
456 mov rax,rbx 460 mov rax,rbx
457 $L$cmov5:: 461 $L$cmov5:
458 » add» dl,bl 462 » add» dl,bl
459 » xor» r9b,BYTE PTR[rdx*1+rdi] 463 » xor» r9b,BYTE[rdx*1+rdi]
460 ror r9d,8 464 ror r9d,8
461 add cl,al 465 add cl,al
462 » lea» rsi,QWORD PTR[1+r10] 466 » lea» rsi,[1+r10]
463 » movzx» edx,BYTE PTR[rcx*1+rdi] 467 » movzx» edx,BYTE[rcx*1+rdi]
464 movzx esi,sil 468 movzx esi,sil
465 » movzx» ebx,BYTE PTR[rsi*1+rdi] 469 » movzx» ebx,BYTE[rsi*1+rdi]
466 » mov» BYTE PTR[rcx*1+rdi],al 470 » mov» BYTE[rcx*1+rdi],al
467 cmp rcx,rsi 471 cmp rcx,rsi
468 » mov» BYTE PTR[r10*1+rdi],dl 472 » mov» BYTE[r10*1+rdi],dl
469 » jne» $L$cmov6 473 » jne» NEAR $L$cmov6
470 mov rbx,rax 474 mov rbx,rax
471 $L$cmov6:: 475 $L$cmov6:
472 » add» dl,al 476 » add» dl,al
473 » xor» r9b,BYTE PTR[rdx*1+rdi] 477 » xor» r9b,BYTE[rdx*1+rdi]
474 ror r9d,8 478 ror r9d,8
475 add cl,bl 479 add cl,bl
476 » lea» r10,QWORD PTR[1+rsi] 480 » lea» r10,[1+rsi]
477 » movzx» edx,BYTE PTR[rcx*1+rdi] 481 » movzx» edx,BYTE[rcx*1+rdi]
478 movzx r10d,r10b 482 movzx r10d,r10b
479 » movzx» eax,BYTE PTR[r10*1+rdi] 483 » movzx» eax,BYTE[r10*1+rdi]
480 » mov» BYTE PTR[rcx*1+rdi],bl 484 » mov» BYTE[rcx*1+rdi],bl
481 cmp rcx,r10 485 cmp rcx,r10
482 » mov» BYTE PTR[rsi*1+rdi],dl 486 » mov» BYTE[rsi*1+rdi],dl
483 » jne» $L$cmov7 487 » jne» NEAR $L$cmov7
484 mov rax,rbx 488 mov rax,rbx
485 $L$cmov7:: 489 $L$cmov7:
486 » add» dl,bl 490 » add» dl,bl
487 » xor» r9b,BYTE PTR[rdx*1+rdi] 491 » xor» r9b,BYTE[rdx*1+rdi]
488 ror r9d,8 492 ror r9d,8
489 » lea» r11,QWORD PTR[((-8))+r11] 493 » lea» r11,[((-8))+r11]
490 » mov» DWORD PTR[r13],r8d 494 » mov» DWORD[r13],r8d
491 » lea» r12,QWORD PTR[8+r12] 495 » lea» r12,[8+r12]
492 » mov» DWORD PTR[4+r13],r9d 496 » mov» DWORD[4+r13],r9d
493 » lea» r13,QWORD PTR[8+r13] 497 » lea» r13,[8+r13]
494 498
495 test r11,-8 499 test r11,-8
496 » jnz» $L$cloop8 500 » jnz» NEAR $L$cloop8
497 cmp r11,0 501 cmp r11,0
498 » jne» $L$cloop1 502 » jne» NEAR $L$cloop1
499 » jmp» $L$exit 503 » jmp» NEAR $L$exit
500 ALIGN» 16 504 ALIGN» 16
501 $L$cloop1:: 505 $L$cloop1:
502 add cl,al 506 add cl,al
503 movzx ecx,cl 507 movzx ecx,cl
504 » movzx» edx,BYTE PTR[rcx*1+rdi] 508 » movzx» edx,BYTE[rcx*1+rdi]
505 » mov» BYTE PTR[rcx*1+rdi],al 509 » mov» BYTE[rcx*1+rdi],al
506 » mov» BYTE PTR[r10*1+rdi],dl 510 » mov» BYTE[r10*1+rdi],dl
507 add dl,al 511 add dl,al
508 add r10b,1 512 add r10b,1
509 movzx edx,dl 513 movzx edx,dl
510 movzx r10d,r10b 514 movzx r10d,r10b
511 » movzx» edx,BYTE PTR[rdx*1+rdi] 515 » movzx» edx,BYTE[rdx*1+rdi]
512 » movzx» eax,BYTE PTR[r10*1+rdi] 516 » movzx» eax,BYTE[r10*1+rdi]
513 » xor» dl,BYTE PTR[r12] 517 » xor» dl,BYTE[r12]
514 » lea» r12,QWORD PTR[1+r12] 518 » lea» r12,[1+r12]
515 » mov» BYTE PTR[r13],dl 519 » mov» BYTE[r13],dl
516 » lea» r13,QWORD PTR[1+r13] 520 » lea» r13,[1+r13]
517 sub r11,1 521 sub r11,1
518 » jnz» $L$cloop1 522 » jnz» NEAR $L$cloop1
519 » jmp» $L$exit 523 » jmp» NEAR $L$exit
520 524
521 ALIGN» 16 525 ALIGN» 16
522 $L$exit:: 526 $L$exit:
523 sub r10b,1 527 sub r10b,1
524 » mov» DWORD PTR[((-8))+rdi],r10d 528 » mov» DWORD[((-8))+rdi],r10d
525 » mov» DWORD PTR[((-4))+rdi],ecx 529 » mov» DWORD[((-4))+rdi],ecx
526 530
527 » mov» r13,QWORD PTR[rsp] 531 » mov» r13,QWORD[rsp]
528 » mov» r12,QWORD PTR[8+rsp] 532 » mov» r12,QWORD[8+rsp]
529 » mov» rbx,QWORD PTR[16+rsp] 533 » mov» rbx,QWORD[16+rsp]
530 add rsp,24 534 add rsp,24
531 $L$epilogue:: 535 $L$epilogue:
532 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 536 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
533 » mov» rsi,QWORD PTR[16+rsp] 537 » mov» rsi,QWORD[16+rsp]
534 DB 0F3h,0C3h ;repret 538 DB 0F3h,0C3h ;repret
535 $L$SEH_end_asm_RC4:: 539 $L$SEH_end_asm_RC4:
536 asm_RC4»ENDP 540 global» asm_RC4_set_key
537 PUBLIC» asm_RC4_set_key 541
538 542 ALIGN» 16
539 ALIGN» 16 543 asm_RC4_set_key:
540 asm_RC4_set_key»PROC PUBLIC 544 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue
541 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue 545 » mov» QWORD[16+rsp],rsi
542 » mov» QWORD PTR[16+rsp],rsi
543 mov rax,rsp 546 mov rax,rsp
544 $L$SEH_begin_asm_RC4_set_key:: 547 $L$SEH_begin_asm_RC4_set_key:
545 mov rdi,rcx 548 mov rdi,rcx
546 mov rsi,rdx 549 mov rsi,rdx
547 mov rdx,r8 550 mov rdx,r8
548 551
549 552
550 » lea» rdi,QWORD PTR[8+rdi] 553 » lea» rdi,[8+rdi]
551 » lea» rdx,QWORD PTR[rsi*1+rdx] 554 » lea» rdx,[rsi*1+rdx]
552 neg rsi 555 neg rsi
553 mov rcx,rsi 556 mov rcx,rsi
554 xor eax,eax 557 xor eax,eax
555 xor r9,r9 558 xor r9,r9
556 xor r10,r10 559 xor r10,r10
557 xor r11,r11 560 xor r11,r11
558 561
559 » mov» r8d,DWORD PTR[OPENSSL_ia32cap_P] 562 » mov» r8d,DWORD[OPENSSL_ia32cap_P]
560 bt r8d,20 563 bt r8d,20
561 » jc» $L$c1stloop 564 » jc» NEAR $L$c1stloop
562 » jmp» $L$w1stloop 565 » jmp» NEAR $L$w1stloop
563 566
564 ALIGN 16 567 ALIGN 16
565 $L$w1stloop:: 568 $L$w1stloop:
566 » mov» DWORD PTR[rax*4+rdi],eax 569 » mov» DWORD[rax*4+rdi],eax
567 add al,1 570 add al,1
568 » jnc» $L$w1stloop 571 » jnc» NEAR $L$w1stloop
569 572
570 xor r9,r9 573 xor r9,r9
571 xor r8,r8 574 xor r8,r8
572 ALIGN 16 575 ALIGN 16
573 $L$w2ndloop:: 576 $L$w2ndloop:
574 » mov» r10d,DWORD PTR[r9*4+rdi] 577 » mov» r10d,DWORD[r9*4+rdi]
575 » add» r8b,BYTE PTR[rsi*1+rdx] 578 » add» r8b,BYTE[rsi*1+rdx]
576 add r8b,r10b 579 add r8b,r10b
577 add rsi,1 580 add rsi,1
578 » mov» r11d,DWORD PTR[r8*4+rdi] 581 » mov» r11d,DWORD[r8*4+rdi]
579 cmovz rsi,rcx 582 cmovz rsi,rcx
580 » mov» DWORD PTR[r8*4+rdi],r10d 583 » mov» DWORD[r8*4+rdi],r10d
581 » mov» DWORD PTR[r9*4+rdi],r11d 584 » mov» DWORD[r9*4+rdi],r11d
582 add r9b,1 585 add r9b,1
583 » jnc» $L$w2ndloop 586 » jnc» NEAR $L$w2ndloop
584 » jmp» $L$exit_key 587 » jmp» NEAR $L$exit_key
585 588
586 ALIGN 16 589 ALIGN 16
587 $L$c1stloop:: 590 $L$c1stloop:
588 » mov» BYTE PTR[rax*1+rdi],al 591 » mov» BYTE[rax*1+rdi],al
589 add al,1 592 add al,1
590 » jnc» $L$c1stloop 593 » jnc» NEAR $L$c1stloop
591 594
592 xor r9,r9 595 xor r9,r9
593 xor r8,r8 596 xor r8,r8
594 ALIGN 16 597 ALIGN 16
595 $L$c2ndloop:: 598 $L$c2ndloop:
596 » mov» r10b,BYTE PTR[r9*1+rdi] 599 » mov» r10b,BYTE[r9*1+rdi]
597 » add» r8b,BYTE PTR[rsi*1+rdx] 600 » add» r8b,BYTE[rsi*1+rdx]
598 add r8b,r10b 601 add r8b,r10b
599 add rsi,1 602 add rsi,1
600 » mov» r11b,BYTE PTR[r8*1+rdi] 603 » mov» r11b,BYTE[r8*1+rdi]
601 » jnz» $L$cnowrap 604 » jnz» NEAR $L$cnowrap
602 mov rsi,rcx 605 mov rsi,rcx
603 $L$cnowrap:: 606 $L$cnowrap:
604 » mov» BYTE PTR[r8*1+rdi],r10b 607 » mov» BYTE[r8*1+rdi],r10b
605 » mov» BYTE PTR[r9*1+rdi],r11b 608 » mov» BYTE[r9*1+rdi],r11b
606 add r9b,1 609 add r9b,1
607 » jnc» $L$c2ndloop 610 » jnc» NEAR $L$c2ndloop
608 » mov» DWORD PTR[256+rdi],-1 611 » mov» DWORD[256+rdi],-1
609 612
610 ALIGN 16 613 ALIGN 16
611 $L$exit_key:: 614 $L$exit_key:
612 xor eax,eax 615 xor eax,eax
613 » mov» DWORD PTR[((-8))+rdi],eax 616 » mov» DWORD[((-8))+rdi],eax
614 » mov» DWORD PTR[((-4))+rdi],eax 617 » mov» DWORD[((-4))+rdi],eax
615 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue 618 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue
616 » mov» rsi,QWORD PTR[16+rsp] 619 » mov» rsi,QWORD[16+rsp]
617 DB 0F3h,0C3h ;repret 620 DB 0F3h,0C3h ;repret
618 $L$SEH_end_asm_RC4_set_key:: 621 $L$SEH_end_asm_RC4_set_key:
619 asm_RC4_set_key»ENDP
620 622
621 PUBLIC» RC4_options 623 global» RC4_options
622 624
623 ALIGN 16 625 ALIGN 16
624 RC4_options» PROC PUBLIC 626 RC4_options:
625 » lea» rax,QWORD PTR[$L$opts] 627 » lea» rax,[$L$opts]
626 » mov» rdx,QWORD PTR[OPENSSL_ia32cap_P] 628 » mov» rdx,QWORD[OPENSSL_ia32cap_P]
627 » mov» edx,DWORD PTR[rdx] 629 » mov» edx,DWORD[rdx]
628 bt edx,20 630 bt edx,20
629 » jc» $L$8xchar 631 » jc» NEAR $L$8xchar
630 bt edx,30 632 bt edx,30
631 » jnc» $L$done 633 » jnc» NEAR $L$done
632 add rax,25 634 add rax,25
633 DB 0F3h,0C3h ;repret 635 DB 0F3h,0C3h ;repret
634 $L$8xchar:: 636 $L$8xchar:
635 add rax,12 637 add rax,12
636 $L$done:: 638 $L$done:
637 DB 0F3h,0C3h ;repret 639 DB 0F3h,0C3h ;repret
638 ALIGN 64 640 ALIGN 64
639 $L$opts:: 641 $L$opts:
640 DB 114,99,52,40,56,120,44,105,110,116,41,0 642 DB 114,99,52,40,56,120,44,105,110,116,41,0
641 DB 114,99,52,40,56,120,44,99,104,97,114,41,0 643 DB 114,99,52,40,56,120,44,99,104,97,114,41,0
642 DB 114,99,52,40,49,54,120,44,105,110,116,41,0 644 DB 114,99,52,40,49,54,120,44,105,110,116,41,0
643 DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32 645 DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32
644 DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 646 DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
645 DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 647 DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
646 DB 62,0 648 DB 62,0
647 ALIGN 64 649 ALIGN 64
648 RC4_options» ENDP 650
649 EXTERN» __imp_RtlVirtualUnwind:NEAR 651 EXTERN» __imp_RtlVirtualUnwind
650 652
651 ALIGN 16 653 ALIGN 16
652 stream_se_handler» PROC PRIVATE 654 stream_se_handler:
653 push rsi 655 push rsi
654 push rdi 656 push rdi
655 push rbx 657 push rbx
656 push rbp 658 push rbp
657 push r12 659 push r12
658 push r13 660 push r13
659 push r14 661 push r14
660 push r15 662 push r15
661 pushfq 663 pushfq
662 sub rsp,64 664 sub rsp,64
663 665
664 » mov» rax,QWORD PTR[120+r8] 666 » mov» rax,QWORD[120+r8]
665 » mov» rbx,QWORD PTR[248+r8] 667 » mov» rbx,QWORD[248+r8]
666 668
667 » lea» r10,QWORD PTR[$L$prologue] 669 » lea» r10,[$L$prologue]
668 cmp rbx,r10 670 cmp rbx,r10
669 » jb» $L$in_prologue 671 » jb» NEAR $L$in_prologue
670 672
671 » mov» rax,QWORD PTR[152+r8] 673 » mov» rax,QWORD[152+r8]
672 674
673 » lea» r10,QWORD PTR[$L$epilogue] 675 » lea» r10,[$L$epilogue]
674 cmp rbx,r10 676 cmp rbx,r10
675 » jae» $L$in_prologue 677 » jae» NEAR $L$in_prologue
676 678
677 » lea» rax,QWORD PTR[24+rax] 679 » lea» rax,[24+rax]
678 680
679 » mov» rbx,QWORD PTR[((-8))+rax] 681 » mov» rbx,QWORD[((-8))+rax]
680 » mov» r12,QWORD PTR[((-16))+rax] 682 » mov» r12,QWORD[((-16))+rax]
681 » mov» r13,QWORD PTR[((-24))+rax] 683 » mov» r13,QWORD[((-24))+rax]
682 » mov» QWORD PTR[144+r8],rbx 684 » mov» QWORD[144+r8],rbx
683 » mov» QWORD PTR[216+r8],r12 685 » mov» QWORD[216+r8],r12
684 » mov» QWORD PTR[224+r8],r13 686 » mov» QWORD[224+r8],r13
685 687
686 $L$in_prologue:: 688 $L$in_prologue:
687 » mov» rdi,QWORD PTR[8+rax] 689 » mov» rdi,QWORD[8+rax]
688 » mov» rsi,QWORD PTR[16+rax] 690 » mov» rsi,QWORD[16+rax]
689 » mov» QWORD PTR[152+r8],rax 691 » mov» QWORD[152+r8],rax
690 » mov» QWORD PTR[168+r8],rsi 692 » mov» QWORD[168+r8],rsi
691 » mov» QWORD PTR[176+r8],rdi 693 » mov» QWORD[176+r8],rdi
692 694
693 » jmp» $L$common_seh_exit 695 » jmp» NEAR $L$common_seh_exit
694 stream_se_handler» ENDP 696
695 697
696 698
697 ALIGN 16 699 ALIGN 16
698 key_se_handler» PROC PRIVATE 700 key_se_handler:
699 push rsi 701 push rsi
700 push rdi 702 push rdi
701 push rbx 703 push rbx
702 push rbp 704 push rbp
703 push r12 705 push r12
704 push r13 706 push r13
705 push r14 707 push r14
706 push r15 708 push r15
707 pushfq 709 pushfq
708 sub rsp,64 710 sub rsp,64
709 711
710 » mov» rax,QWORD PTR[152+r8] 712 » mov» rax,QWORD[152+r8]
711 » mov» rdi,QWORD PTR[8+rax] 713 » mov» rdi,QWORD[8+rax]
712 » mov» rsi,QWORD PTR[16+rax] 714 » mov» rsi,QWORD[16+rax]
713 » mov» QWORD PTR[168+r8],rsi 715 » mov» QWORD[168+r8],rsi
714 » mov» QWORD PTR[176+r8],rdi 716 » mov» QWORD[176+r8],rdi
715 717
716 $L$common_seh_exit:: 718 $L$common_seh_exit:
717 719
718 » mov» rdi,QWORD PTR[40+r9] 720 » mov» rdi,QWORD[40+r9]
719 mov rsi,r8 721 mov rsi,r8
720 mov ecx,154 722 mov ecx,154
721 » DD» 0a548f3fch 723 » DD» 0xa548f3fc
722 724
723 mov rsi,r9 725 mov rsi,r9
724 xor rcx,rcx 726 xor rcx,rcx
725 » mov» rdx,QWORD PTR[8+rsi] 727 » mov» rdx,QWORD[8+rsi]
726 » mov» r8,QWORD PTR[rsi] 728 » mov» r8,QWORD[rsi]
727 » mov» r9,QWORD PTR[16+rsi] 729 » mov» r9,QWORD[16+rsi]
728 » mov» r10,QWORD PTR[40+rsi] 730 » mov» r10,QWORD[40+rsi]
729 » lea» r11,QWORD PTR[56+rsi] 731 » lea» r11,[56+rsi]
730 » lea» r12,QWORD PTR[24+rsi] 732 » lea» r12,[24+rsi]
731 » mov» QWORD PTR[32+rsp],r10 733 » mov» QWORD[32+rsp],r10
732 » mov» QWORD PTR[40+rsp],r11 734 » mov» QWORD[40+rsp],r11
733 » mov» QWORD PTR[48+rsp],r12 735 » mov» QWORD[48+rsp],r12
734 » mov» QWORD PTR[56+rsp],rcx 736 » mov» QWORD[56+rsp],rcx
735 » call» QWORD PTR[__imp_RtlVirtualUnwind] 737 » call» QWORD[__imp_RtlVirtualUnwind]
736 738
737 mov eax,1 739 mov eax,1
738 add rsp,64 740 add rsp,64
739 popfq 741 popfq
740 pop r15 742 pop r15
741 pop r14 743 pop r14
742 pop r13 744 pop r13
743 pop r12 745 pop r12
744 pop rbp 746 pop rbp
745 pop rbx 747 pop rbx
746 pop rdi 748 pop rdi
747 pop rsi 749 pop rsi
748 DB 0F3h,0C3h ;repret 750 DB 0F3h,0C3h ;repret
749 key_se_handler ENDP
750 751
751 .text$» ENDS 752
752 .pdata» SEGMENT READONLY ALIGN(4) 753 section».pdata rdata align=4
753 ALIGN 4 754 ALIGN 4
754 » DD» imagerel $L$SEH_begin_asm_RC4 755 » DD» $L$SEH_begin_asm_RC4 wrt ..imagebase
755 » DD» imagerel $L$SEH_end_asm_RC4 756 » DD» $L$SEH_end_asm_RC4 wrt ..imagebase
756 » DD» imagerel $L$SEH_info_asm_RC4 757 » DD» $L$SEH_info_asm_RC4 wrt ..imagebase
757 758
758 » DD» imagerel $L$SEH_begin_asm_RC4_set_key 759 » DD» $L$SEH_begin_asm_RC4_set_key wrt ..imagebase
759 » DD» imagerel $L$SEH_end_asm_RC4_set_key 760 » DD» $L$SEH_end_asm_RC4_set_key wrt ..imagebase
760 » DD» imagerel $L$SEH_info_asm_RC4_set_key 761 » DD» $L$SEH_info_asm_RC4_set_key wrt ..imagebase
761 762
762 .pdata» ENDS 763 section».xdata rdata align=8
763 .xdata» SEGMENT READONLY ALIGN(8)
764 ALIGN 8 764 ALIGN 8
765 $L$SEH_info_asm_RC4:: 765 $L$SEH_info_asm_RC4:
766 DB 9,0,0,0 766 DB 9,0,0,0
767 » DD» imagerel stream_se_handler 767 » DD» stream_se_handler wrt ..imagebase
768 $L$SEH_info_asm_RC4_set_key:: 768 $L$SEH_info_asm_RC4_set_key:
769 DB 9,0,0,0 769 DB 9,0,0,0
770 » DD» imagerel key_se_handler 770 » DD» key_se_handler wrt ..imagebase
771
772 .xdata» ENDS
773 END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698