blob: cc53fa46df4a72878e6df5ecc8f191332977e3e8 [file] [log] [blame]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001#if defined(__i386__)
Adam Langleyd9e397b2015-01-22 14:27:53 -08002.text
3.globl aesni_encrypt
4.hidden aesni_encrypt
5.type aesni_encrypt,@function
6.align 16
7aesni_encrypt:
8.L_aesni_encrypt_begin:
9 movl 4(%esp),%eax
10 movl 12(%esp),%edx
11 movups (%eax),%xmm2
12 movl 240(%edx),%ecx
13 movl 8(%esp),%eax
14 movups (%edx),%xmm0
15 movups 16(%edx),%xmm1
16 leal 32(%edx),%edx
17 xorps %xmm0,%xmm2
18.L000enc1_loop_1:
19.byte 102,15,56,220,209
20 decl %ecx
21 movups (%edx),%xmm1
22 leal 16(%edx),%edx
23 jnz .L000enc1_loop_1
24.byte 102,15,56,221,209
Adam Langleye9ada862015-05-11 17:20:37 -070025 pxor %xmm0,%xmm0
26 pxor %xmm1,%xmm1
Adam Langleyd9e397b2015-01-22 14:27:53 -080027 movups %xmm2,(%eax)
Adam Langleye9ada862015-05-11 17:20:37 -070028 pxor %xmm2,%xmm2
Adam Langleyd9e397b2015-01-22 14:27:53 -080029 ret
30.size aesni_encrypt,.-.L_aesni_encrypt_begin
31.globl aesni_decrypt
32.hidden aesni_decrypt
33.type aesni_decrypt,@function
34.align 16
35aesni_decrypt:
36.L_aesni_decrypt_begin:
37 movl 4(%esp),%eax
38 movl 12(%esp),%edx
39 movups (%eax),%xmm2
40 movl 240(%edx),%ecx
41 movl 8(%esp),%eax
42 movups (%edx),%xmm0
43 movups 16(%edx),%xmm1
44 leal 32(%edx),%edx
45 xorps %xmm0,%xmm2
46.L001dec1_loop_2:
47.byte 102,15,56,222,209
48 decl %ecx
49 movups (%edx),%xmm1
50 leal 16(%edx),%edx
51 jnz .L001dec1_loop_2
52.byte 102,15,56,223,209
Adam Langleye9ada862015-05-11 17:20:37 -070053 pxor %xmm0,%xmm0
54 pxor %xmm1,%xmm1
Adam Langleyd9e397b2015-01-22 14:27:53 -080055 movups %xmm2,(%eax)
Adam Langleye9ada862015-05-11 17:20:37 -070056 pxor %xmm2,%xmm2
Adam Langleyd9e397b2015-01-22 14:27:53 -080057 ret
58.size aesni_decrypt,.-.L_aesni_decrypt_begin
59.hidden _aesni_encrypt2
60.type _aesni_encrypt2,@function
61.align 16
62_aesni_encrypt2:
63 movups (%edx),%xmm0
64 shll $4,%ecx
65 movups 16(%edx),%xmm1
66 xorps %xmm0,%xmm2
67 pxor %xmm0,%xmm3
68 movups 32(%edx),%xmm0
69 leal 32(%edx,%ecx,1),%edx
70 negl %ecx
71 addl $16,%ecx
72.L002enc2_loop:
73.byte 102,15,56,220,209
74.byte 102,15,56,220,217
75 movups (%edx,%ecx,1),%xmm1
76 addl $32,%ecx
77.byte 102,15,56,220,208
78.byte 102,15,56,220,216
79 movups -16(%edx,%ecx,1),%xmm0
80 jnz .L002enc2_loop
81.byte 102,15,56,220,209
82.byte 102,15,56,220,217
83.byte 102,15,56,221,208
84.byte 102,15,56,221,216
85 ret
86.size _aesni_encrypt2,.-_aesni_encrypt2
87.hidden _aesni_decrypt2
88.type _aesni_decrypt2,@function
89.align 16
90_aesni_decrypt2:
91 movups (%edx),%xmm0
92 shll $4,%ecx
93 movups 16(%edx),%xmm1
94 xorps %xmm0,%xmm2
95 pxor %xmm0,%xmm3
96 movups 32(%edx),%xmm0
97 leal 32(%edx,%ecx,1),%edx
98 negl %ecx
99 addl $16,%ecx
100.L003dec2_loop:
101.byte 102,15,56,222,209
102.byte 102,15,56,222,217
103 movups (%edx,%ecx,1),%xmm1
104 addl $32,%ecx
105.byte 102,15,56,222,208
106.byte 102,15,56,222,216
107 movups -16(%edx,%ecx,1),%xmm0
108 jnz .L003dec2_loop
109.byte 102,15,56,222,209
110.byte 102,15,56,222,217
111.byte 102,15,56,223,208
112.byte 102,15,56,223,216
113 ret
114.size _aesni_decrypt2,.-_aesni_decrypt2
115.hidden _aesni_encrypt3
116.type _aesni_encrypt3,@function
117.align 16
118_aesni_encrypt3:
119 movups (%edx),%xmm0
120 shll $4,%ecx
121 movups 16(%edx),%xmm1
122 xorps %xmm0,%xmm2
123 pxor %xmm0,%xmm3
124 pxor %xmm0,%xmm4
125 movups 32(%edx),%xmm0
126 leal 32(%edx,%ecx,1),%edx
127 negl %ecx
128 addl $16,%ecx
129.L004enc3_loop:
130.byte 102,15,56,220,209
131.byte 102,15,56,220,217
132.byte 102,15,56,220,225
133 movups (%edx,%ecx,1),%xmm1
134 addl $32,%ecx
135.byte 102,15,56,220,208
136.byte 102,15,56,220,216
137.byte 102,15,56,220,224
138 movups -16(%edx,%ecx,1),%xmm0
139 jnz .L004enc3_loop
140.byte 102,15,56,220,209
141.byte 102,15,56,220,217
142.byte 102,15,56,220,225
143.byte 102,15,56,221,208
144.byte 102,15,56,221,216
145.byte 102,15,56,221,224
146 ret
147.size _aesni_encrypt3,.-_aesni_encrypt3
148.hidden _aesni_decrypt3
149.type _aesni_decrypt3,@function
150.align 16
151_aesni_decrypt3:
152 movups (%edx),%xmm0
153 shll $4,%ecx
154 movups 16(%edx),%xmm1
155 xorps %xmm0,%xmm2
156 pxor %xmm0,%xmm3
157 pxor %xmm0,%xmm4
158 movups 32(%edx),%xmm0
159 leal 32(%edx,%ecx,1),%edx
160 negl %ecx
161 addl $16,%ecx
162.L005dec3_loop:
163.byte 102,15,56,222,209
164.byte 102,15,56,222,217
165.byte 102,15,56,222,225
166 movups (%edx,%ecx,1),%xmm1
167 addl $32,%ecx
168.byte 102,15,56,222,208
169.byte 102,15,56,222,216
170.byte 102,15,56,222,224
171 movups -16(%edx,%ecx,1),%xmm0
172 jnz .L005dec3_loop
173.byte 102,15,56,222,209
174.byte 102,15,56,222,217
175.byte 102,15,56,222,225
176.byte 102,15,56,223,208
177.byte 102,15,56,223,216
178.byte 102,15,56,223,224
179 ret
180.size _aesni_decrypt3,.-_aesni_decrypt3
181.hidden _aesni_encrypt4
182.type _aesni_encrypt4,@function
183.align 16
184_aesni_encrypt4:
185 movups (%edx),%xmm0
186 movups 16(%edx),%xmm1
187 shll $4,%ecx
188 xorps %xmm0,%xmm2
189 pxor %xmm0,%xmm3
190 pxor %xmm0,%xmm4
191 pxor %xmm0,%xmm5
192 movups 32(%edx),%xmm0
193 leal 32(%edx,%ecx,1),%edx
194 negl %ecx
195.byte 15,31,64,0
196 addl $16,%ecx
197.L006enc4_loop:
198.byte 102,15,56,220,209
199.byte 102,15,56,220,217
200.byte 102,15,56,220,225
201.byte 102,15,56,220,233
202 movups (%edx,%ecx,1),%xmm1
203 addl $32,%ecx
204.byte 102,15,56,220,208
205.byte 102,15,56,220,216
206.byte 102,15,56,220,224
207.byte 102,15,56,220,232
208 movups -16(%edx,%ecx,1),%xmm0
209 jnz .L006enc4_loop
210.byte 102,15,56,220,209
211.byte 102,15,56,220,217
212.byte 102,15,56,220,225
213.byte 102,15,56,220,233
214.byte 102,15,56,221,208
215.byte 102,15,56,221,216
216.byte 102,15,56,221,224
217.byte 102,15,56,221,232
218 ret
219.size _aesni_encrypt4,.-_aesni_encrypt4
220.hidden _aesni_decrypt4
221.type _aesni_decrypt4,@function
222.align 16
223_aesni_decrypt4:
224 movups (%edx),%xmm0
225 movups 16(%edx),%xmm1
226 shll $4,%ecx
227 xorps %xmm0,%xmm2
228 pxor %xmm0,%xmm3
229 pxor %xmm0,%xmm4
230 pxor %xmm0,%xmm5
231 movups 32(%edx),%xmm0
232 leal 32(%edx,%ecx,1),%edx
233 negl %ecx
234.byte 15,31,64,0
235 addl $16,%ecx
236.L007dec4_loop:
237.byte 102,15,56,222,209
238.byte 102,15,56,222,217
239.byte 102,15,56,222,225
240.byte 102,15,56,222,233
241 movups (%edx,%ecx,1),%xmm1
242 addl $32,%ecx
243.byte 102,15,56,222,208
244.byte 102,15,56,222,216
245.byte 102,15,56,222,224
246.byte 102,15,56,222,232
247 movups -16(%edx,%ecx,1),%xmm0
248 jnz .L007dec4_loop
249.byte 102,15,56,222,209
250.byte 102,15,56,222,217
251.byte 102,15,56,222,225
252.byte 102,15,56,222,233
253.byte 102,15,56,223,208
254.byte 102,15,56,223,216
255.byte 102,15,56,223,224
256.byte 102,15,56,223,232
257 ret
258.size _aesni_decrypt4,.-_aesni_decrypt4
259.hidden _aesni_encrypt6
260.type _aesni_encrypt6,@function
261.align 16
262_aesni_encrypt6:
263 movups (%edx),%xmm0
264 shll $4,%ecx
265 movups 16(%edx),%xmm1
266 xorps %xmm0,%xmm2
267 pxor %xmm0,%xmm3
268 pxor %xmm0,%xmm4
269.byte 102,15,56,220,209
270 pxor %xmm0,%xmm5
271 pxor %xmm0,%xmm6
272.byte 102,15,56,220,217
273 leal 32(%edx,%ecx,1),%edx
274 negl %ecx
275.byte 102,15,56,220,225
276 pxor %xmm0,%xmm7
Adam Langleye9ada862015-05-11 17:20:37 -0700277 movups (%edx,%ecx,1),%xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -0800278 addl $16,%ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700279 jmp .L008_aesni_encrypt6_inner
Adam Langleyd9e397b2015-01-22 14:27:53 -0800280.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700281.L009enc6_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800282.byte 102,15,56,220,209
283.byte 102,15,56,220,217
284.byte 102,15,56,220,225
Adam Langleye9ada862015-05-11 17:20:37 -0700285.L008_aesni_encrypt6_inner:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800286.byte 102,15,56,220,233
287.byte 102,15,56,220,241
288.byte 102,15,56,220,249
289.L_aesni_encrypt6_enter:
290 movups (%edx,%ecx,1),%xmm1
291 addl $32,%ecx
292.byte 102,15,56,220,208
293.byte 102,15,56,220,216
294.byte 102,15,56,220,224
295.byte 102,15,56,220,232
296.byte 102,15,56,220,240
297.byte 102,15,56,220,248
298 movups -16(%edx,%ecx,1),%xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700299 jnz .L009enc6_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800300.byte 102,15,56,220,209
301.byte 102,15,56,220,217
302.byte 102,15,56,220,225
303.byte 102,15,56,220,233
304.byte 102,15,56,220,241
305.byte 102,15,56,220,249
306.byte 102,15,56,221,208
307.byte 102,15,56,221,216
308.byte 102,15,56,221,224
309.byte 102,15,56,221,232
310.byte 102,15,56,221,240
311.byte 102,15,56,221,248
312 ret
313.size _aesni_encrypt6,.-_aesni_encrypt6
314.hidden _aesni_decrypt6
315.type _aesni_decrypt6,@function
316.align 16
317_aesni_decrypt6:
318 movups (%edx),%xmm0
319 shll $4,%ecx
320 movups 16(%edx),%xmm1
321 xorps %xmm0,%xmm2
322 pxor %xmm0,%xmm3
323 pxor %xmm0,%xmm4
324.byte 102,15,56,222,209
325 pxor %xmm0,%xmm5
326 pxor %xmm0,%xmm6
327.byte 102,15,56,222,217
328 leal 32(%edx,%ecx,1),%edx
329 negl %ecx
330.byte 102,15,56,222,225
331 pxor %xmm0,%xmm7
Adam Langleye9ada862015-05-11 17:20:37 -0700332 movups (%edx,%ecx,1),%xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -0800333 addl $16,%ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700334 jmp .L010_aesni_decrypt6_inner
Adam Langleyd9e397b2015-01-22 14:27:53 -0800335.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700336.L011dec6_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800337.byte 102,15,56,222,209
338.byte 102,15,56,222,217
339.byte 102,15,56,222,225
Adam Langleye9ada862015-05-11 17:20:37 -0700340.L010_aesni_decrypt6_inner:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800341.byte 102,15,56,222,233
342.byte 102,15,56,222,241
343.byte 102,15,56,222,249
344.L_aesni_decrypt6_enter:
345 movups (%edx,%ecx,1),%xmm1
346 addl $32,%ecx
347.byte 102,15,56,222,208
348.byte 102,15,56,222,216
349.byte 102,15,56,222,224
350.byte 102,15,56,222,232
351.byte 102,15,56,222,240
352.byte 102,15,56,222,248
353 movups -16(%edx,%ecx,1),%xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700354 jnz .L011dec6_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800355.byte 102,15,56,222,209
356.byte 102,15,56,222,217
357.byte 102,15,56,222,225
358.byte 102,15,56,222,233
359.byte 102,15,56,222,241
360.byte 102,15,56,222,249
361.byte 102,15,56,223,208
362.byte 102,15,56,223,216
363.byte 102,15,56,223,224
364.byte 102,15,56,223,232
365.byte 102,15,56,223,240
366.byte 102,15,56,223,248
367 ret
368.size _aesni_decrypt6,.-_aesni_decrypt6
369.globl aesni_ecb_encrypt
370.hidden aesni_ecb_encrypt
371.type aesni_ecb_encrypt,@function
372.align 16
373aesni_ecb_encrypt:
374.L_aesni_ecb_encrypt_begin:
375 pushl %ebp
376 pushl %ebx
377 pushl %esi
378 pushl %edi
379 movl 20(%esp),%esi
380 movl 24(%esp),%edi
381 movl 28(%esp),%eax
382 movl 32(%esp),%edx
383 movl 36(%esp),%ebx
384 andl $-16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700385 jz .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800386 movl 240(%edx),%ecx
387 testl %ebx,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -0700388 jz .L013ecb_decrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -0800389 movl %edx,%ebp
390 movl %ecx,%ebx
391 cmpl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700392 jb .L014ecb_enc_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -0800393 movdqu (%esi),%xmm2
394 movdqu 16(%esi),%xmm3
395 movdqu 32(%esi),%xmm4
396 movdqu 48(%esi),%xmm5
397 movdqu 64(%esi),%xmm6
398 movdqu 80(%esi),%xmm7
399 leal 96(%esi),%esi
400 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700401 jmp .L015ecb_enc_loop6_enter
Adam Langleyd9e397b2015-01-22 14:27:53 -0800402.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700403.L016ecb_enc_loop6:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800404 movups %xmm2,(%edi)
405 movdqu (%esi),%xmm2
406 movups %xmm3,16(%edi)
407 movdqu 16(%esi),%xmm3
408 movups %xmm4,32(%edi)
409 movdqu 32(%esi),%xmm4
410 movups %xmm5,48(%edi)
411 movdqu 48(%esi),%xmm5
412 movups %xmm6,64(%edi)
413 movdqu 64(%esi),%xmm6
414 movups %xmm7,80(%edi)
415 leal 96(%edi),%edi
416 movdqu 80(%esi),%xmm7
417 leal 96(%esi),%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700418.L015ecb_enc_loop6_enter:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800419 call _aesni_encrypt6
420 movl %ebp,%edx
421 movl %ebx,%ecx
422 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700423 jnc .L016ecb_enc_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800424 movups %xmm2,(%edi)
425 movups %xmm3,16(%edi)
426 movups %xmm4,32(%edi)
427 movups %xmm5,48(%edi)
428 movups %xmm6,64(%edi)
429 movups %xmm7,80(%edi)
430 leal 96(%edi),%edi
431 addl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700432 jz .L012ecb_ret
433.L014ecb_enc_tail:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800434 movups (%esi),%xmm2
435 cmpl $32,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700436 jb .L017ecb_enc_one
Adam Langleyd9e397b2015-01-22 14:27:53 -0800437 movups 16(%esi),%xmm3
Adam Langleye9ada862015-05-11 17:20:37 -0700438 je .L018ecb_enc_two
Adam Langleyd9e397b2015-01-22 14:27:53 -0800439 movups 32(%esi),%xmm4
440 cmpl $64,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700441 jb .L019ecb_enc_three
Adam Langleyd9e397b2015-01-22 14:27:53 -0800442 movups 48(%esi),%xmm5
Adam Langleye9ada862015-05-11 17:20:37 -0700443 je .L020ecb_enc_four
Adam Langleyd9e397b2015-01-22 14:27:53 -0800444 movups 64(%esi),%xmm6
445 xorps %xmm7,%xmm7
446 call _aesni_encrypt6
447 movups %xmm2,(%edi)
448 movups %xmm3,16(%edi)
449 movups %xmm4,32(%edi)
450 movups %xmm5,48(%edi)
451 movups %xmm6,64(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700452 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800453.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700454.L017ecb_enc_one:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800455 movups (%edx),%xmm0
456 movups 16(%edx),%xmm1
457 leal 32(%edx),%edx
458 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -0700459.L021enc1_loop_3:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800460.byte 102,15,56,220,209
461 decl %ecx
462 movups (%edx),%xmm1
463 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -0700464 jnz .L021enc1_loop_3
Adam Langleyd9e397b2015-01-22 14:27:53 -0800465.byte 102,15,56,221,209
466 movups %xmm2,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700467 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800468.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700469.L018ecb_enc_two:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800470 call _aesni_encrypt2
471 movups %xmm2,(%edi)
472 movups %xmm3,16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700473 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800474.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700475.L019ecb_enc_three:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800476 call _aesni_encrypt3
477 movups %xmm2,(%edi)
478 movups %xmm3,16(%edi)
479 movups %xmm4,32(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700480 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800481.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700482.L020ecb_enc_four:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800483 call _aesni_encrypt4
484 movups %xmm2,(%edi)
485 movups %xmm3,16(%edi)
486 movups %xmm4,32(%edi)
487 movups %xmm5,48(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700488 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800489.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700490.L013ecb_decrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800491 movl %edx,%ebp
492 movl %ecx,%ebx
493 cmpl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700494 jb .L022ecb_dec_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -0800495 movdqu (%esi),%xmm2
496 movdqu 16(%esi),%xmm3
497 movdqu 32(%esi),%xmm4
498 movdqu 48(%esi),%xmm5
499 movdqu 64(%esi),%xmm6
500 movdqu 80(%esi),%xmm7
501 leal 96(%esi),%esi
502 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700503 jmp .L023ecb_dec_loop6_enter
Adam Langleyd9e397b2015-01-22 14:27:53 -0800504.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700505.L024ecb_dec_loop6:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800506 movups %xmm2,(%edi)
507 movdqu (%esi),%xmm2
508 movups %xmm3,16(%edi)
509 movdqu 16(%esi),%xmm3
510 movups %xmm4,32(%edi)
511 movdqu 32(%esi),%xmm4
512 movups %xmm5,48(%edi)
513 movdqu 48(%esi),%xmm5
514 movups %xmm6,64(%edi)
515 movdqu 64(%esi),%xmm6
516 movups %xmm7,80(%edi)
517 leal 96(%edi),%edi
518 movdqu 80(%esi),%xmm7
519 leal 96(%esi),%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700520.L023ecb_dec_loop6_enter:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800521 call _aesni_decrypt6
522 movl %ebp,%edx
523 movl %ebx,%ecx
524 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700525 jnc .L024ecb_dec_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800526 movups %xmm2,(%edi)
527 movups %xmm3,16(%edi)
528 movups %xmm4,32(%edi)
529 movups %xmm5,48(%edi)
530 movups %xmm6,64(%edi)
531 movups %xmm7,80(%edi)
532 leal 96(%edi),%edi
533 addl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700534 jz .L012ecb_ret
535.L022ecb_dec_tail:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800536 movups (%esi),%xmm2
537 cmpl $32,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700538 jb .L025ecb_dec_one
Adam Langleyd9e397b2015-01-22 14:27:53 -0800539 movups 16(%esi),%xmm3
Adam Langleye9ada862015-05-11 17:20:37 -0700540 je .L026ecb_dec_two
Adam Langleyd9e397b2015-01-22 14:27:53 -0800541 movups 32(%esi),%xmm4
542 cmpl $64,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700543 jb .L027ecb_dec_three
Adam Langleyd9e397b2015-01-22 14:27:53 -0800544 movups 48(%esi),%xmm5
Adam Langleye9ada862015-05-11 17:20:37 -0700545 je .L028ecb_dec_four
Adam Langleyd9e397b2015-01-22 14:27:53 -0800546 movups 64(%esi),%xmm6
547 xorps %xmm7,%xmm7
548 call _aesni_decrypt6
549 movups %xmm2,(%edi)
550 movups %xmm3,16(%edi)
551 movups %xmm4,32(%edi)
552 movups %xmm5,48(%edi)
553 movups %xmm6,64(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700554 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800555.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700556.L025ecb_dec_one:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800557 movups (%edx),%xmm0
558 movups 16(%edx),%xmm1
559 leal 32(%edx),%edx
560 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -0700561.L029dec1_loop_4:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800562.byte 102,15,56,222,209
563 decl %ecx
564 movups (%edx),%xmm1
565 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -0700566 jnz .L029dec1_loop_4
Adam Langleyd9e397b2015-01-22 14:27:53 -0800567.byte 102,15,56,223,209
568 movups %xmm2,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700569 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800570.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700571.L026ecb_dec_two:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800572 call _aesni_decrypt2
573 movups %xmm2,(%edi)
574 movups %xmm3,16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700575 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800576.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700577.L027ecb_dec_three:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800578 call _aesni_decrypt3
579 movups %xmm2,(%edi)
580 movups %xmm3,16(%edi)
581 movups %xmm4,32(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700582 jmp .L012ecb_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800583.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700584.L028ecb_dec_four:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800585 call _aesni_decrypt4
586 movups %xmm2,(%edi)
587 movups %xmm3,16(%edi)
588 movups %xmm4,32(%edi)
589 movups %xmm5,48(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700590.L012ecb_ret:
591 pxor %xmm0,%xmm0
592 pxor %xmm1,%xmm1
593 pxor %xmm2,%xmm2
594 pxor %xmm3,%xmm3
595 pxor %xmm4,%xmm4
596 pxor %xmm5,%xmm5
597 pxor %xmm6,%xmm6
598 pxor %xmm7,%xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800599 popl %edi
600 popl %esi
601 popl %ebx
602 popl %ebp
603 ret
604.size aesni_ecb_encrypt,.-.L_aesni_ecb_encrypt_begin
605.globl aesni_ccm64_encrypt_blocks
606.hidden aesni_ccm64_encrypt_blocks
607.type aesni_ccm64_encrypt_blocks,@function
608.align 16
609aesni_ccm64_encrypt_blocks:
610.L_aesni_ccm64_encrypt_blocks_begin:
611 pushl %ebp
612 pushl %ebx
613 pushl %esi
614 pushl %edi
615 movl 20(%esp),%esi
616 movl 24(%esp),%edi
617 movl 28(%esp),%eax
618 movl 32(%esp),%edx
619 movl 36(%esp),%ebx
620 movl 40(%esp),%ecx
621 movl %esp,%ebp
622 subl $60,%esp
623 andl $-16,%esp
624 movl %ebp,48(%esp)
625 movdqu (%ebx),%xmm7
626 movdqu (%ecx),%xmm3
627 movl 240(%edx),%ecx
628 movl $202182159,(%esp)
629 movl $134810123,4(%esp)
630 movl $67438087,8(%esp)
631 movl $66051,12(%esp)
632 movl $1,%ebx
633 xorl %ebp,%ebp
634 movl %ebx,16(%esp)
635 movl %ebp,20(%esp)
636 movl %ebp,24(%esp)
637 movl %ebp,28(%esp)
638 shll $4,%ecx
639 movl $16,%ebx
640 leal (%edx),%ebp
641 movdqa (%esp),%xmm5
642 movdqa %xmm7,%xmm2
643 leal 32(%edx,%ecx,1),%edx
644 subl %ecx,%ebx
645.byte 102,15,56,0,253
Adam Langleye9ada862015-05-11 17:20:37 -0700646.L030ccm64_enc_outer:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800647 movups (%ebp),%xmm0
648 movl %ebx,%ecx
649 movups (%esi),%xmm6
650 xorps %xmm0,%xmm2
651 movups 16(%ebp),%xmm1
652 xorps %xmm6,%xmm0
653 xorps %xmm0,%xmm3
654 movups 32(%ebp),%xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700655.L031ccm64_enc2_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800656.byte 102,15,56,220,209
657.byte 102,15,56,220,217
658 movups (%edx,%ecx,1),%xmm1
659 addl $32,%ecx
660.byte 102,15,56,220,208
661.byte 102,15,56,220,216
662 movups -16(%edx,%ecx,1),%xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700663 jnz .L031ccm64_enc2_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800664.byte 102,15,56,220,209
665.byte 102,15,56,220,217
666 paddq 16(%esp),%xmm7
667 decl %eax
668.byte 102,15,56,221,208
669.byte 102,15,56,221,216
670 leal 16(%esi),%esi
671 xorps %xmm2,%xmm6
672 movdqa %xmm7,%xmm2
673 movups %xmm6,(%edi)
674.byte 102,15,56,0,213
675 leal 16(%edi),%edi
Adam Langleye9ada862015-05-11 17:20:37 -0700676 jnz .L030ccm64_enc_outer
Adam Langleyd9e397b2015-01-22 14:27:53 -0800677 movl 48(%esp),%esp
678 movl 40(%esp),%edi
679 movups %xmm3,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700680 pxor %xmm0,%xmm0
681 pxor %xmm1,%xmm1
682 pxor %xmm2,%xmm2
683 pxor %xmm3,%xmm3
684 pxor %xmm4,%xmm4
685 pxor %xmm5,%xmm5
686 pxor %xmm6,%xmm6
687 pxor %xmm7,%xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800688 popl %edi
689 popl %esi
690 popl %ebx
691 popl %ebp
692 ret
693.size aesni_ccm64_encrypt_blocks,.-.L_aesni_ccm64_encrypt_blocks_begin
694.globl aesni_ccm64_decrypt_blocks
695.hidden aesni_ccm64_decrypt_blocks
696.type aesni_ccm64_decrypt_blocks,@function
697.align 16
698aesni_ccm64_decrypt_blocks:
699.L_aesni_ccm64_decrypt_blocks_begin:
700 pushl %ebp
701 pushl %ebx
702 pushl %esi
703 pushl %edi
704 movl 20(%esp),%esi
705 movl 24(%esp),%edi
706 movl 28(%esp),%eax
707 movl 32(%esp),%edx
708 movl 36(%esp),%ebx
709 movl 40(%esp),%ecx
710 movl %esp,%ebp
711 subl $60,%esp
712 andl $-16,%esp
713 movl %ebp,48(%esp)
714 movdqu (%ebx),%xmm7
715 movdqu (%ecx),%xmm3
716 movl 240(%edx),%ecx
717 movl $202182159,(%esp)
718 movl $134810123,4(%esp)
719 movl $67438087,8(%esp)
720 movl $66051,12(%esp)
721 movl $1,%ebx
722 xorl %ebp,%ebp
723 movl %ebx,16(%esp)
724 movl %ebp,20(%esp)
725 movl %ebp,24(%esp)
726 movl %ebp,28(%esp)
727 movdqa (%esp),%xmm5
728 movdqa %xmm7,%xmm2
729 movl %edx,%ebp
730 movl %ecx,%ebx
731.byte 102,15,56,0,253
732 movups (%edx),%xmm0
733 movups 16(%edx),%xmm1
734 leal 32(%edx),%edx
735 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -0700736.L032enc1_loop_5:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800737.byte 102,15,56,220,209
738 decl %ecx
739 movups (%edx),%xmm1
740 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -0700741 jnz .L032enc1_loop_5
Adam Langleyd9e397b2015-01-22 14:27:53 -0800742.byte 102,15,56,221,209
743 shll $4,%ebx
744 movl $16,%ecx
745 movups (%esi),%xmm6
746 paddq 16(%esp),%xmm7
747 leal 16(%esi),%esi
748 subl %ebx,%ecx
749 leal 32(%ebp,%ebx,1),%edx
750 movl %ecx,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -0700751 jmp .L033ccm64_dec_outer
Adam Langleyd9e397b2015-01-22 14:27:53 -0800752.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700753.L033ccm64_dec_outer:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800754 xorps %xmm2,%xmm6
755 movdqa %xmm7,%xmm2
756 movups %xmm6,(%edi)
757 leal 16(%edi),%edi
758.byte 102,15,56,0,213
759 subl $1,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700760 jz .L034ccm64_dec_break
Adam Langleyd9e397b2015-01-22 14:27:53 -0800761 movups (%ebp),%xmm0
762 movl %ebx,%ecx
763 movups 16(%ebp),%xmm1
764 xorps %xmm0,%xmm6
765 xorps %xmm0,%xmm2
766 xorps %xmm6,%xmm3
767 movups 32(%ebp),%xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700768.L035ccm64_dec2_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800769.byte 102,15,56,220,209
770.byte 102,15,56,220,217
771 movups (%edx,%ecx,1),%xmm1
772 addl $32,%ecx
773.byte 102,15,56,220,208
774.byte 102,15,56,220,216
775 movups -16(%edx,%ecx,1),%xmm0
Adam Langleye9ada862015-05-11 17:20:37 -0700776 jnz .L035ccm64_dec2_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -0800777 movups (%esi),%xmm6
778 paddq 16(%esp),%xmm7
779.byte 102,15,56,220,209
780.byte 102,15,56,220,217
781.byte 102,15,56,221,208
782.byte 102,15,56,221,216
783 leal 16(%esi),%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700784 jmp .L033ccm64_dec_outer
Adam Langleyd9e397b2015-01-22 14:27:53 -0800785.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700786.L034ccm64_dec_break:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800787 movl 240(%ebp),%ecx
788 movl %ebp,%edx
789 movups (%edx),%xmm0
790 movups 16(%edx),%xmm1
791 xorps %xmm0,%xmm6
792 leal 32(%edx),%edx
793 xorps %xmm6,%xmm3
Adam Langleye9ada862015-05-11 17:20:37 -0700794.L036enc1_loop_6:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800795.byte 102,15,56,220,217
796 decl %ecx
797 movups (%edx),%xmm1
798 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -0700799 jnz .L036enc1_loop_6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800800.byte 102,15,56,221,217
801 movl 48(%esp),%esp
802 movl 40(%esp),%edi
803 movups %xmm3,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700804 pxor %xmm0,%xmm0
805 pxor %xmm1,%xmm1
806 pxor %xmm2,%xmm2
807 pxor %xmm3,%xmm3
808 pxor %xmm4,%xmm4
809 pxor %xmm5,%xmm5
810 pxor %xmm6,%xmm6
811 pxor %xmm7,%xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800812 popl %edi
813 popl %esi
814 popl %ebx
815 popl %ebp
816 ret
817.size aesni_ccm64_decrypt_blocks,.-.L_aesni_ccm64_decrypt_blocks_begin
818.globl aesni_ctr32_encrypt_blocks
819.hidden aesni_ctr32_encrypt_blocks
820.type aesni_ctr32_encrypt_blocks,@function
821.align 16
822aesni_ctr32_encrypt_blocks:
823.L_aesni_ctr32_encrypt_blocks_begin:
824 pushl %ebp
825 pushl %ebx
826 pushl %esi
827 pushl %edi
828 movl 20(%esp),%esi
829 movl 24(%esp),%edi
830 movl 28(%esp),%eax
831 movl 32(%esp),%edx
832 movl 36(%esp),%ebx
833 movl %esp,%ebp
834 subl $88,%esp
835 andl $-16,%esp
836 movl %ebp,80(%esp)
837 cmpl $1,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700838 je .L037ctr32_one_shortcut
Adam Langleyd9e397b2015-01-22 14:27:53 -0800839 movdqu (%ebx),%xmm7
840 movl $202182159,(%esp)
841 movl $134810123,4(%esp)
842 movl $67438087,8(%esp)
843 movl $66051,12(%esp)
844 movl $6,%ecx
845 xorl %ebp,%ebp
846 movl %ecx,16(%esp)
847 movl %ecx,20(%esp)
848 movl %ecx,24(%esp)
849 movl %ebp,28(%esp)
850.byte 102,15,58,22,251,3
851.byte 102,15,58,34,253,3
852 movl 240(%edx),%ecx
853 bswap %ebx
854 pxor %xmm0,%xmm0
855 pxor %xmm1,%xmm1
856 movdqa (%esp),%xmm2
857.byte 102,15,58,34,195,0
858 leal 3(%ebx),%ebp
859.byte 102,15,58,34,205,0
860 incl %ebx
861.byte 102,15,58,34,195,1
862 incl %ebp
863.byte 102,15,58,34,205,1
864 incl %ebx
865.byte 102,15,58,34,195,2
866 incl %ebp
867.byte 102,15,58,34,205,2
868 movdqa %xmm0,48(%esp)
869.byte 102,15,56,0,194
870 movdqu (%edx),%xmm6
871 movdqa %xmm1,64(%esp)
872.byte 102,15,56,0,202
873 pshufd $192,%xmm0,%xmm2
874 pshufd $128,%xmm0,%xmm3
875 cmpl $6,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700876 jb .L038ctr32_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -0800877 pxor %xmm6,%xmm7
878 shll $4,%ecx
879 movl $16,%ebx
880 movdqa %xmm7,32(%esp)
881 movl %edx,%ebp
882 subl %ecx,%ebx
883 leal 32(%edx,%ecx,1),%edx
884 subl $6,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700885 jmp .L039ctr32_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800886.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700887.L039ctr32_loop6:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800888 pshufd $64,%xmm0,%xmm4
889 movdqa 32(%esp),%xmm0
890 pshufd $192,%xmm1,%xmm5
891 pxor %xmm0,%xmm2
892 pshufd $128,%xmm1,%xmm6
893 pxor %xmm0,%xmm3
894 pshufd $64,%xmm1,%xmm7
895 movups 16(%ebp),%xmm1
896 pxor %xmm0,%xmm4
897 pxor %xmm0,%xmm5
898.byte 102,15,56,220,209
899 pxor %xmm0,%xmm6
900 pxor %xmm0,%xmm7
901.byte 102,15,56,220,217
902 movups 32(%ebp),%xmm0
903 movl %ebx,%ecx
904.byte 102,15,56,220,225
905.byte 102,15,56,220,233
906.byte 102,15,56,220,241
907.byte 102,15,56,220,249
908 call .L_aesni_encrypt6_enter
909 movups (%esi),%xmm1
910 movups 16(%esi),%xmm0
911 xorps %xmm1,%xmm2
912 movups 32(%esi),%xmm1
913 xorps %xmm0,%xmm3
914 movups %xmm2,(%edi)
915 movdqa 16(%esp),%xmm0
916 xorps %xmm1,%xmm4
917 movdqa 64(%esp),%xmm1
918 movups %xmm3,16(%edi)
919 movups %xmm4,32(%edi)
920 paddd %xmm0,%xmm1
921 paddd 48(%esp),%xmm0
922 movdqa (%esp),%xmm2
923 movups 48(%esi),%xmm3
924 movups 64(%esi),%xmm4
925 xorps %xmm3,%xmm5
926 movups 80(%esi),%xmm3
927 leal 96(%esi),%esi
928 movdqa %xmm0,48(%esp)
929.byte 102,15,56,0,194
930 xorps %xmm4,%xmm6
931 movups %xmm5,48(%edi)
932 xorps %xmm3,%xmm7
933 movdqa %xmm1,64(%esp)
934.byte 102,15,56,0,202
935 movups %xmm6,64(%edi)
936 pshufd $192,%xmm0,%xmm2
937 movups %xmm7,80(%edi)
938 leal 96(%edi),%edi
939 pshufd $128,%xmm0,%xmm3
940 subl $6,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700941 jnc .L039ctr32_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -0800942 addl $6,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700943 jz .L040ctr32_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800944 movdqu (%ebp),%xmm7
945 movl %ebp,%edx
946 pxor 32(%esp),%xmm7
947 movl 240(%ebp),%ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700948.L038ctr32_tail:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800949 por %xmm7,%xmm2
950 cmpl $2,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700951 jb .L041ctr32_one
Adam Langleyd9e397b2015-01-22 14:27:53 -0800952 pshufd $64,%xmm0,%xmm4
953 por %xmm7,%xmm3
Adam Langleye9ada862015-05-11 17:20:37 -0700954 je .L042ctr32_two
Adam Langleyd9e397b2015-01-22 14:27:53 -0800955 pshufd $192,%xmm1,%xmm5
956 por %xmm7,%xmm4
957 cmpl $4,%eax
Adam Langleye9ada862015-05-11 17:20:37 -0700958 jb .L043ctr32_three
Adam Langleyd9e397b2015-01-22 14:27:53 -0800959 pshufd $128,%xmm1,%xmm6
960 por %xmm7,%xmm5
Adam Langleye9ada862015-05-11 17:20:37 -0700961 je .L044ctr32_four
Adam Langleyd9e397b2015-01-22 14:27:53 -0800962 por %xmm7,%xmm6
963 call _aesni_encrypt6
964 movups (%esi),%xmm1
965 movups 16(%esi),%xmm0
966 xorps %xmm1,%xmm2
967 movups 32(%esi),%xmm1
968 xorps %xmm0,%xmm3
969 movups 48(%esi),%xmm0
970 xorps %xmm1,%xmm4
971 movups 64(%esi),%xmm1
972 xorps %xmm0,%xmm5
973 movups %xmm2,(%edi)
974 xorps %xmm1,%xmm6
975 movups %xmm3,16(%edi)
976 movups %xmm4,32(%edi)
977 movups %xmm5,48(%edi)
978 movups %xmm6,64(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700979 jmp .L040ctr32_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -0800980.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700981.L037ctr32_one_shortcut:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800982 movups (%ebx),%xmm2
983 movl 240(%edx),%ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700984.L041ctr32_one:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800985 movups (%edx),%xmm0
986 movups 16(%edx),%xmm1
987 leal 32(%edx),%edx
988 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -0700989.L045enc1_loop_7:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800990.byte 102,15,56,220,209
991 decl %ecx
992 movups (%edx),%xmm1
993 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -0700994 jnz .L045enc1_loop_7
Adam Langleyd9e397b2015-01-22 14:27:53 -0800995.byte 102,15,56,221,209
996 movups (%esi),%xmm6
997 xorps %xmm2,%xmm6
998 movups %xmm6,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -0700999 jmp .L040ctr32_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001000.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001001.L042ctr32_two:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001002 call _aesni_encrypt2
1003 movups (%esi),%xmm5
1004 movups 16(%esi),%xmm6
1005 xorps %xmm5,%xmm2
1006 xorps %xmm6,%xmm3
1007 movups %xmm2,(%edi)
1008 movups %xmm3,16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001009 jmp .L040ctr32_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001010.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001011.L043ctr32_three:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001012 call _aesni_encrypt3
1013 movups (%esi),%xmm5
1014 movups 16(%esi),%xmm6
1015 xorps %xmm5,%xmm2
1016 movups 32(%esi),%xmm7
1017 xorps %xmm6,%xmm3
1018 movups %xmm2,(%edi)
1019 xorps %xmm7,%xmm4
1020 movups %xmm3,16(%edi)
1021 movups %xmm4,32(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001022 jmp .L040ctr32_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001023.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001024.L044ctr32_four:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001025 call _aesni_encrypt4
1026 movups (%esi),%xmm6
1027 movups 16(%esi),%xmm7
1028 movups 32(%esi),%xmm1
1029 xorps %xmm6,%xmm2
1030 movups 48(%esi),%xmm0
1031 xorps %xmm7,%xmm3
1032 movups %xmm2,(%edi)
1033 xorps %xmm1,%xmm4
1034 movups %xmm3,16(%edi)
1035 xorps %xmm0,%xmm5
1036 movups %xmm4,32(%edi)
1037 movups %xmm5,48(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001038.L040ctr32_ret:
1039 pxor %xmm0,%xmm0
1040 pxor %xmm1,%xmm1
1041 pxor %xmm2,%xmm2
1042 pxor %xmm3,%xmm3
1043 pxor %xmm4,%xmm4
1044 movdqa %xmm0,32(%esp)
1045 pxor %xmm5,%xmm5
1046 movdqa %xmm0,48(%esp)
1047 pxor %xmm6,%xmm6
1048 movdqa %xmm0,64(%esp)
1049 pxor %xmm7,%xmm7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001050 movl 80(%esp),%esp
1051 popl %edi
1052 popl %esi
1053 popl %ebx
1054 popl %ebp
1055 ret
1056.size aesni_ctr32_encrypt_blocks,.-.L_aesni_ctr32_encrypt_blocks_begin
1057.globl aesni_xts_encrypt
1058.hidden aesni_xts_encrypt
1059.type aesni_xts_encrypt,@function
1060.align 16
1061aesni_xts_encrypt:
1062.L_aesni_xts_encrypt_begin:
1063 pushl %ebp
1064 pushl %ebx
1065 pushl %esi
1066 pushl %edi
1067 movl 36(%esp),%edx
1068 movl 40(%esp),%esi
1069 movl 240(%edx),%ecx
1070 movups (%esi),%xmm2
1071 movups (%edx),%xmm0
1072 movups 16(%edx),%xmm1
1073 leal 32(%edx),%edx
1074 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001075.L046enc1_loop_8:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001076.byte 102,15,56,220,209
1077 decl %ecx
1078 movups (%edx),%xmm1
1079 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001080 jnz .L046enc1_loop_8
Adam Langleyd9e397b2015-01-22 14:27:53 -08001081.byte 102,15,56,221,209
1082 movl 20(%esp),%esi
1083 movl 24(%esp),%edi
1084 movl 28(%esp),%eax
1085 movl 32(%esp),%edx
1086 movl %esp,%ebp
1087 subl $120,%esp
1088 movl 240(%edx),%ecx
1089 andl $-16,%esp
1090 movl $135,96(%esp)
1091 movl $0,100(%esp)
1092 movl $1,104(%esp)
1093 movl $0,108(%esp)
1094 movl %eax,112(%esp)
1095 movl %ebp,116(%esp)
1096 movdqa %xmm2,%xmm1
1097 pxor %xmm0,%xmm0
1098 movdqa 96(%esp),%xmm3
1099 pcmpgtd %xmm1,%xmm0
1100 andl $-16,%eax
1101 movl %edx,%ebp
1102 movl %ecx,%ebx
1103 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001104 jc .L047xts_enc_short
Adam Langleyd9e397b2015-01-22 14:27:53 -08001105 shll $4,%ecx
1106 movl $16,%ebx
1107 subl %ecx,%ebx
1108 leal 32(%edx,%ecx,1),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001109 jmp .L048xts_enc_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001110.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001111.L048xts_enc_loop6:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001112 pshufd $19,%xmm0,%xmm2
1113 pxor %xmm0,%xmm0
1114 movdqa %xmm1,(%esp)
1115 paddq %xmm1,%xmm1
1116 pand %xmm3,%xmm2
1117 pcmpgtd %xmm1,%xmm0
1118 pxor %xmm2,%xmm1
1119 pshufd $19,%xmm0,%xmm2
1120 pxor %xmm0,%xmm0
1121 movdqa %xmm1,16(%esp)
1122 paddq %xmm1,%xmm1
1123 pand %xmm3,%xmm2
1124 pcmpgtd %xmm1,%xmm0
1125 pxor %xmm2,%xmm1
1126 pshufd $19,%xmm0,%xmm2
1127 pxor %xmm0,%xmm0
1128 movdqa %xmm1,32(%esp)
1129 paddq %xmm1,%xmm1
1130 pand %xmm3,%xmm2
1131 pcmpgtd %xmm1,%xmm0
1132 pxor %xmm2,%xmm1
1133 pshufd $19,%xmm0,%xmm2
1134 pxor %xmm0,%xmm0
1135 movdqa %xmm1,48(%esp)
1136 paddq %xmm1,%xmm1
1137 pand %xmm3,%xmm2
1138 pcmpgtd %xmm1,%xmm0
1139 pxor %xmm2,%xmm1
1140 pshufd $19,%xmm0,%xmm7
1141 movdqa %xmm1,64(%esp)
1142 paddq %xmm1,%xmm1
1143 movups (%ebp),%xmm0
1144 pand %xmm3,%xmm7
1145 movups (%esi),%xmm2
1146 pxor %xmm1,%xmm7
1147 movl %ebx,%ecx
1148 movdqu 16(%esi),%xmm3
1149 xorps %xmm0,%xmm2
1150 movdqu 32(%esi),%xmm4
1151 pxor %xmm0,%xmm3
1152 movdqu 48(%esi),%xmm5
1153 pxor %xmm0,%xmm4
1154 movdqu 64(%esi),%xmm6
1155 pxor %xmm0,%xmm5
1156 movdqu 80(%esi),%xmm1
1157 pxor %xmm0,%xmm6
1158 leal 96(%esi),%esi
1159 pxor (%esp),%xmm2
1160 movdqa %xmm7,80(%esp)
1161 pxor %xmm1,%xmm7
1162 movups 16(%ebp),%xmm1
1163 pxor 16(%esp),%xmm3
1164 pxor 32(%esp),%xmm4
1165.byte 102,15,56,220,209
1166 pxor 48(%esp),%xmm5
1167 pxor 64(%esp),%xmm6
1168.byte 102,15,56,220,217
1169 pxor %xmm0,%xmm7
1170 movups 32(%ebp),%xmm0
1171.byte 102,15,56,220,225
1172.byte 102,15,56,220,233
1173.byte 102,15,56,220,241
1174.byte 102,15,56,220,249
1175 call .L_aesni_encrypt6_enter
1176 movdqa 80(%esp),%xmm1
1177 pxor %xmm0,%xmm0
1178 xorps (%esp),%xmm2
1179 pcmpgtd %xmm1,%xmm0
1180 xorps 16(%esp),%xmm3
1181 movups %xmm2,(%edi)
1182 xorps 32(%esp),%xmm4
1183 movups %xmm3,16(%edi)
1184 xorps 48(%esp),%xmm5
1185 movups %xmm4,32(%edi)
1186 xorps 64(%esp),%xmm6
1187 movups %xmm5,48(%edi)
1188 xorps %xmm1,%xmm7
1189 movups %xmm6,64(%edi)
1190 pshufd $19,%xmm0,%xmm2
1191 movups %xmm7,80(%edi)
1192 leal 96(%edi),%edi
1193 movdqa 96(%esp),%xmm3
1194 pxor %xmm0,%xmm0
1195 paddq %xmm1,%xmm1
1196 pand %xmm3,%xmm2
1197 pcmpgtd %xmm1,%xmm0
1198 pxor %xmm2,%xmm1
1199 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001200 jnc .L048xts_enc_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001201 movl 240(%ebp),%ecx
1202 movl %ebp,%edx
1203 movl %ecx,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -07001204.L047xts_enc_short:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001205 addl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001206 jz .L049xts_enc_done6x
Adam Langleyd9e397b2015-01-22 14:27:53 -08001207 movdqa %xmm1,%xmm5
1208 cmpl $32,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001209 jb .L050xts_enc_one
Adam Langleyd9e397b2015-01-22 14:27:53 -08001210 pshufd $19,%xmm0,%xmm2
1211 pxor %xmm0,%xmm0
1212 paddq %xmm1,%xmm1
1213 pand %xmm3,%xmm2
1214 pcmpgtd %xmm1,%xmm0
1215 pxor %xmm2,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001216 je .L051xts_enc_two
Adam Langleyd9e397b2015-01-22 14:27:53 -08001217 pshufd $19,%xmm0,%xmm2
1218 pxor %xmm0,%xmm0
1219 movdqa %xmm1,%xmm6
1220 paddq %xmm1,%xmm1
1221 pand %xmm3,%xmm2
1222 pcmpgtd %xmm1,%xmm0
1223 pxor %xmm2,%xmm1
1224 cmpl $64,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001225 jb .L052xts_enc_three
Adam Langleyd9e397b2015-01-22 14:27:53 -08001226 pshufd $19,%xmm0,%xmm2
1227 pxor %xmm0,%xmm0
1228 movdqa %xmm1,%xmm7
1229 paddq %xmm1,%xmm1
1230 pand %xmm3,%xmm2
1231 pcmpgtd %xmm1,%xmm0
1232 pxor %xmm2,%xmm1
1233 movdqa %xmm5,(%esp)
1234 movdqa %xmm6,16(%esp)
Adam Langleye9ada862015-05-11 17:20:37 -07001235 je .L053xts_enc_four
Adam Langleyd9e397b2015-01-22 14:27:53 -08001236 movdqa %xmm7,32(%esp)
1237 pshufd $19,%xmm0,%xmm7
1238 movdqa %xmm1,48(%esp)
1239 paddq %xmm1,%xmm1
1240 pand %xmm3,%xmm7
1241 pxor %xmm1,%xmm7
1242 movdqu (%esi),%xmm2
1243 movdqu 16(%esi),%xmm3
1244 movdqu 32(%esi),%xmm4
1245 pxor (%esp),%xmm2
1246 movdqu 48(%esi),%xmm5
1247 pxor 16(%esp),%xmm3
1248 movdqu 64(%esi),%xmm6
1249 pxor 32(%esp),%xmm4
1250 leal 80(%esi),%esi
1251 pxor 48(%esp),%xmm5
1252 movdqa %xmm7,64(%esp)
1253 pxor %xmm7,%xmm6
1254 call _aesni_encrypt6
1255 movaps 64(%esp),%xmm1
1256 xorps (%esp),%xmm2
1257 xorps 16(%esp),%xmm3
1258 xorps 32(%esp),%xmm4
1259 movups %xmm2,(%edi)
1260 xorps 48(%esp),%xmm5
1261 movups %xmm3,16(%edi)
1262 xorps %xmm1,%xmm6
1263 movups %xmm4,32(%edi)
1264 movups %xmm5,48(%edi)
1265 movups %xmm6,64(%edi)
1266 leal 80(%edi),%edi
Adam Langleye9ada862015-05-11 17:20:37 -07001267 jmp .L054xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001268.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001269.L050xts_enc_one:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001270 movups (%esi),%xmm2
1271 leal 16(%esi),%esi
1272 xorps %xmm5,%xmm2
1273 movups (%edx),%xmm0
1274 movups 16(%edx),%xmm1
1275 leal 32(%edx),%edx
1276 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001277.L055enc1_loop_9:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001278.byte 102,15,56,220,209
1279 decl %ecx
1280 movups (%edx),%xmm1
1281 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001282 jnz .L055enc1_loop_9
Adam Langleyd9e397b2015-01-22 14:27:53 -08001283.byte 102,15,56,221,209
1284 xorps %xmm5,%xmm2
1285 movups %xmm2,(%edi)
1286 leal 16(%edi),%edi
1287 movdqa %xmm5,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001288 jmp .L054xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001289.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001290.L051xts_enc_two:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001291 movaps %xmm1,%xmm6
1292 movups (%esi),%xmm2
1293 movups 16(%esi),%xmm3
1294 leal 32(%esi),%esi
1295 xorps %xmm5,%xmm2
1296 xorps %xmm6,%xmm3
1297 call _aesni_encrypt2
1298 xorps %xmm5,%xmm2
1299 xorps %xmm6,%xmm3
1300 movups %xmm2,(%edi)
1301 movups %xmm3,16(%edi)
1302 leal 32(%edi),%edi
1303 movdqa %xmm6,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001304 jmp .L054xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001305.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001306.L052xts_enc_three:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001307 movaps %xmm1,%xmm7
1308 movups (%esi),%xmm2
1309 movups 16(%esi),%xmm3
1310 movups 32(%esi),%xmm4
1311 leal 48(%esi),%esi
1312 xorps %xmm5,%xmm2
1313 xorps %xmm6,%xmm3
1314 xorps %xmm7,%xmm4
1315 call _aesni_encrypt3
1316 xorps %xmm5,%xmm2
1317 xorps %xmm6,%xmm3
1318 xorps %xmm7,%xmm4
1319 movups %xmm2,(%edi)
1320 movups %xmm3,16(%edi)
1321 movups %xmm4,32(%edi)
1322 leal 48(%edi),%edi
1323 movdqa %xmm7,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001324 jmp .L054xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001325.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001326.L053xts_enc_four:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001327 movaps %xmm1,%xmm6
1328 movups (%esi),%xmm2
1329 movups 16(%esi),%xmm3
1330 movups 32(%esi),%xmm4
1331 xorps (%esp),%xmm2
1332 movups 48(%esi),%xmm5
1333 leal 64(%esi),%esi
1334 xorps 16(%esp),%xmm3
1335 xorps %xmm7,%xmm4
1336 xorps %xmm6,%xmm5
1337 call _aesni_encrypt4
1338 xorps (%esp),%xmm2
1339 xorps 16(%esp),%xmm3
1340 xorps %xmm7,%xmm4
1341 movups %xmm2,(%edi)
1342 xorps %xmm6,%xmm5
1343 movups %xmm3,16(%edi)
1344 movups %xmm4,32(%edi)
1345 movups %xmm5,48(%edi)
1346 leal 64(%edi),%edi
1347 movdqa %xmm6,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001348 jmp .L054xts_enc_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001349.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001350.L049xts_enc_done6x:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001351 movl 112(%esp),%eax
1352 andl $15,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001353 jz .L056xts_enc_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001354 movdqa %xmm1,%xmm5
1355 movl %eax,112(%esp)
Adam Langleye9ada862015-05-11 17:20:37 -07001356 jmp .L057xts_enc_steal
Adam Langleyd9e397b2015-01-22 14:27:53 -08001357.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001358.L054xts_enc_done:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001359 movl 112(%esp),%eax
1360 pxor %xmm0,%xmm0
1361 andl $15,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001362 jz .L056xts_enc_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001363 pcmpgtd %xmm1,%xmm0
1364 movl %eax,112(%esp)
1365 pshufd $19,%xmm0,%xmm5
1366 paddq %xmm1,%xmm1
1367 pand 96(%esp),%xmm5
1368 pxor %xmm1,%xmm5
Adam Langleye9ada862015-05-11 17:20:37 -07001369.L057xts_enc_steal:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001370 movzbl (%esi),%ecx
1371 movzbl -16(%edi),%edx
1372 leal 1(%esi),%esi
1373 movb %cl,-16(%edi)
1374 movb %dl,(%edi)
1375 leal 1(%edi),%edi
1376 subl $1,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001377 jnz .L057xts_enc_steal
Adam Langleyd9e397b2015-01-22 14:27:53 -08001378 subl 112(%esp),%edi
1379 movl %ebp,%edx
1380 movl %ebx,%ecx
1381 movups -16(%edi),%xmm2
1382 xorps %xmm5,%xmm2
1383 movups (%edx),%xmm0
1384 movups 16(%edx),%xmm1
1385 leal 32(%edx),%edx
1386 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001387.L058enc1_loop_10:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001388.byte 102,15,56,220,209
1389 decl %ecx
1390 movups (%edx),%xmm1
1391 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001392 jnz .L058enc1_loop_10
Adam Langleyd9e397b2015-01-22 14:27:53 -08001393.byte 102,15,56,221,209
1394 xorps %xmm5,%xmm2
1395 movups %xmm2,-16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001396.L056xts_enc_ret:
1397 pxor %xmm0,%xmm0
1398 pxor %xmm1,%xmm1
1399 pxor %xmm2,%xmm2
1400 movdqa %xmm0,(%esp)
1401 pxor %xmm3,%xmm3
1402 movdqa %xmm0,16(%esp)
1403 pxor %xmm4,%xmm4
1404 movdqa %xmm0,32(%esp)
1405 pxor %xmm5,%xmm5
1406 movdqa %xmm0,48(%esp)
1407 pxor %xmm6,%xmm6
1408 movdqa %xmm0,64(%esp)
1409 pxor %xmm7,%xmm7
1410 movdqa %xmm0,80(%esp)
Adam Langleyd9e397b2015-01-22 14:27:53 -08001411 movl 116(%esp),%esp
1412 popl %edi
1413 popl %esi
1414 popl %ebx
1415 popl %ebp
1416 ret
1417.size aesni_xts_encrypt,.-.L_aesni_xts_encrypt_begin
1418.globl aesni_xts_decrypt
1419.hidden aesni_xts_decrypt
1420.type aesni_xts_decrypt,@function
1421.align 16
1422aesni_xts_decrypt:
1423.L_aesni_xts_decrypt_begin:
1424 pushl %ebp
1425 pushl %ebx
1426 pushl %esi
1427 pushl %edi
1428 movl 36(%esp),%edx
1429 movl 40(%esp),%esi
1430 movl 240(%edx),%ecx
1431 movups (%esi),%xmm2
1432 movups (%edx),%xmm0
1433 movups 16(%edx),%xmm1
1434 leal 32(%edx),%edx
1435 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001436.L059enc1_loop_11:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001437.byte 102,15,56,220,209
1438 decl %ecx
1439 movups (%edx),%xmm1
1440 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001441 jnz .L059enc1_loop_11
Adam Langleyd9e397b2015-01-22 14:27:53 -08001442.byte 102,15,56,221,209
1443 movl 20(%esp),%esi
1444 movl 24(%esp),%edi
1445 movl 28(%esp),%eax
1446 movl 32(%esp),%edx
1447 movl %esp,%ebp
1448 subl $120,%esp
1449 andl $-16,%esp
1450 xorl %ebx,%ebx
1451 testl $15,%eax
1452 setnz %bl
1453 shll $4,%ebx
1454 subl %ebx,%eax
1455 movl $135,96(%esp)
1456 movl $0,100(%esp)
1457 movl $1,104(%esp)
1458 movl $0,108(%esp)
1459 movl %eax,112(%esp)
1460 movl %ebp,116(%esp)
1461 movl 240(%edx),%ecx
1462 movl %edx,%ebp
1463 movl %ecx,%ebx
1464 movdqa %xmm2,%xmm1
1465 pxor %xmm0,%xmm0
1466 movdqa 96(%esp),%xmm3
1467 pcmpgtd %xmm1,%xmm0
1468 andl $-16,%eax
1469 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001470 jc .L060xts_dec_short
Adam Langleyd9e397b2015-01-22 14:27:53 -08001471 shll $4,%ecx
1472 movl $16,%ebx
1473 subl %ecx,%ebx
1474 leal 32(%edx,%ecx,1),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001475 jmp .L061xts_dec_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001476.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001477.L061xts_dec_loop6:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001478 pshufd $19,%xmm0,%xmm2
1479 pxor %xmm0,%xmm0
1480 movdqa %xmm1,(%esp)
1481 paddq %xmm1,%xmm1
1482 pand %xmm3,%xmm2
1483 pcmpgtd %xmm1,%xmm0
1484 pxor %xmm2,%xmm1
1485 pshufd $19,%xmm0,%xmm2
1486 pxor %xmm0,%xmm0
1487 movdqa %xmm1,16(%esp)
1488 paddq %xmm1,%xmm1
1489 pand %xmm3,%xmm2
1490 pcmpgtd %xmm1,%xmm0
1491 pxor %xmm2,%xmm1
1492 pshufd $19,%xmm0,%xmm2
1493 pxor %xmm0,%xmm0
1494 movdqa %xmm1,32(%esp)
1495 paddq %xmm1,%xmm1
1496 pand %xmm3,%xmm2
1497 pcmpgtd %xmm1,%xmm0
1498 pxor %xmm2,%xmm1
1499 pshufd $19,%xmm0,%xmm2
1500 pxor %xmm0,%xmm0
1501 movdqa %xmm1,48(%esp)
1502 paddq %xmm1,%xmm1
1503 pand %xmm3,%xmm2
1504 pcmpgtd %xmm1,%xmm0
1505 pxor %xmm2,%xmm1
1506 pshufd $19,%xmm0,%xmm7
1507 movdqa %xmm1,64(%esp)
1508 paddq %xmm1,%xmm1
1509 movups (%ebp),%xmm0
1510 pand %xmm3,%xmm7
1511 movups (%esi),%xmm2
1512 pxor %xmm1,%xmm7
1513 movl %ebx,%ecx
1514 movdqu 16(%esi),%xmm3
1515 xorps %xmm0,%xmm2
1516 movdqu 32(%esi),%xmm4
1517 pxor %xmm0,%xmm3
1518 movdqu 48(%esi),%xmm5
1519 pxor %xmm0,%xmm4
1520 movdqu 64(%esi),%xmm6
1521 pxor %xmm0,%xmm5
1522 movdqu 80(%esi),%xmm1
1523 pxor %xmm0,%xmm6
1524 leal 96(%esi),%esi
1525 pxor (%esp),%xmm2
1526 movdqa %xmm7,80(%esp)
1527 pxor %xmm1,%xmm7
1528 movups 16(%ebp),%xmm1
1529 pxor 16(%esp),%xmm3
1530 pxor 32(%esp),%xmm4
1531.byte 102,15,56,222,209
1532 pxor 48(%esp),%xmm5
1533 pxor 64(%esp),%xmm6
1534.byte 102,15,56,222,217
1535 pxor %xmm0,%xmm7
1536 movups 32(%ebp),%xmm0
1537.byte 102,15,56,222,225
1538.byte 102,15,56,222,233
1539.byte 102,15,56,222,241
1540.byte 102,15,56,222,249
1541 call .L_aesni_decrypt6_enter
1542 movdqa 80(%esp),%xmm1
1543 pxor %xmm0,%xmm0
1544 xorps (%esp),%xmm2
1545 pcmpgtd %xmm1,%xmm0
1546 xorps 16(%esp),%xmm3
1547 movups %xmm2,(%edi)
1548 xorps 32(%esp),%xmm4
1549 movups %xmm3,16(%edi)
1550 xorps 48(%esp),%xmm5
1551 movups %xmm4,32(%edi)
1552 xorps 64(%esp),%xmm6
1553 movups %xmm5,48(%edi)
1554 xorps %xmm1,%xmm7
1555 movups %xmm6,64(%edi)
1556 pshufd $19,%xmm0,%xmm2
1557 movups %xmm7,80(%edi)
1558 leal 96(%edi),%edi
1559 movdqa 96(%esp),%xmm3
1560 pxor %xmm0,%xmm0
1561 paddq %xmm1,%xmm1
1562 pand %xmm3,%xmm2
1563 pcmpgtd %xmm1,%xmm0
1564 pxor %xmm2,%xmm1
1565 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001566 jnc .L061xts_dec_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001567 movl 240(%ebp),%ecx
1568 movl %ebp,%edx
1569 movl %ecx,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -07001570.L060xts_dec_short:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001571 addl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001572 jz .L062xts_dec_done6x
Adam Langleyd9e397b2015-01-22 14:27:53 -08001573 movdqa %xmm1,%xmm5
1574 cmpl $32,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001575 jb .L063xts_dec_one
Adam Langleyd9e397b2015-01-22 14:27:53 -08001576 pshufd $19,%xmm0,%xmm2
1577 pxor %xmm0,%xmm0
1578 paddq %xmm1,%xmm1
1579 pand %xmm3,%xmm2
1580 pcmpgtd %xmm1,%xmm0
1581 pxor %xmm2,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001582 je .L064xts_dec_two
Adam Langleyd9e397b2015-01-22 14:27:53 -08001583 pshufd $19,%xmm0,%xmm2
1584 pxor %xmm0,%xmm0
1585 movdqa %xmm1,%xmm6
1586 paddq %xmm1,%xmm1
1587 pand %xmm3,%xmm2
1588 pcmpgtd %xmm1,%xmm0
1589 pxor %xmm2,%xmm1
1590 cmpl $64,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001591 jb .L065xts_dec_three
Adam Langleyd9e397b2015-01-22 14:27:53 -08001592 pshufd $19,%xmm0,%xmm2
1593 pxor %xmm0,%xmm0
1594 movdqa %xmm1,%xmm7
1595 paddq %xmm1,%xmm1
1596 pand %xmm3,%xmm2
1597 pcmpgtd %xmm1,%xmm0
1598 pxor %xmm2,%xmm1
1599 movdqa %xmm5,(%esp)
1600 movdqa %xmm6,16(%esp)
Adam Langleye9ada862015-05-11 17:20:37 -07001601 je .L066xts_dec_four
Adam Langleyd9e397b2015-01-22 14:27:53 -08001602 movdqa %xmm7,32(%esp)
1603 pshufd $19,%xmm0,%xmm7
1604 movdqa %xmm1,48(%esp)
1605 paddq %xmm1,%xmm1
1606 pand %xmm3,%xmm7
1607 pxor %xmm1,%xmm7
1608 movdqu (%esi),%xmm2
1609 movdqu 16(%esi),%xmm3
1610 movdqu 32(%esi),%xmm4
1611 pxor (%esp),%xmm2
1612 movdqu 48(%esi),%xmm5
1613 pxor 16(%esp),%xmm3
1614 movdqu 64(%esi),%xmm6
1615 pxor 32(%esp),%xmm4
1616 leal 80(%esi),%esi
1617 pxor 48(%esp),%xmm5
1618 movdqa %xmm7,64(%esp)
1619 pxor %xmm7,%xmm6
1620 call _aesni_decrypt6
1621 movaps 64(%esp),%xmm1
1622 xorps (%esp),%xmm2
1623 xorps 16(%esp),%xmm3
1624 xorps 32(%esp),%xmm4
1625 movups %xmm2,(%edi)
1626 xorps 48(%esp),%xmm5
1627 movups %xmm3,16(%edi)
1628 xorps %xmm1,%xmm6
1629 movups %xmm4,32(%edi)
1630 movups %xmm5,48(%edi)
1631 movups %xmm6,64(%edi)
1632 leal 80(%edi),%edi
Adam Langleye9ada862015-05-11 17:20:37 -07001633 jmp .L067xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001634.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001635.L063xts_dec_one:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001636 movups (%esi),%xmm2
1637 leal 16(%esi),%esi
1638 xorps %xmm5,%xmm2
1639 movups (%edx),%xmm0
1640 movups 16(%edx),%xmm1
1641 leal 32(%edx),%edx
1642 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001643.L068dec1_loop_12:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001644.byte 102,15,56,222,209
1645 decl %ecx
1646 movups (%edx),%xmm1
1647 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001648 jnz .L068dec1_loop_12
Adam Langleyd9e397b2015-01-22 14:27:53 -08001649.byte 102,15,56,223,209
1650 xorps %xmm5,%xmm2
1651 movups %xmm2,(%edi)
1652 leal 16(%edi),%edi
1653 movdqa %xmm5,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001654 jmp .L067xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001655.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001656.L064xts_dec_two:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001657 movaps %xmm1,%xmm6
1658 movups (%esi),%xmm2
1659 movups 16(%esi),%xmm3
1660 leal 32(%esi),%esi
1661 xorps %xmm5,%xmm2
1662 xorps %xmm6,%xmm3
1663 call _aesni_decrypt2
1664 xorps %xmm5,%xmm2
1665 xorps %xmm6,%xmm3
1666 movups %xmm2,(%edi)
1667 movups %xmm3,16(%edi)
1668 leal 32(%edi),%edi
1669 movdqa %xmm6,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001670 jmp .L067xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001671.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001672.L065xts_dec_three:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001673 movaps %xmm1,%xmm7
1674 movups (%esi),%xmm2
1675 movups 16(%esi),%xmm3
1676 movups 32(%esi),%xmm4
1677 leal 48(%esi),%esi
1678 xorps %xmm5,%xmm2
1679 xorps %xmm6,%xmm3
1680 xorps %xmm7,%xmm4
1681 call _aesni_decrypt3
1682 xorps %xmm5,%xmm2
1683 xorps %xmm6,%xmm3
1684 xorps %xmm7,%xmm4
1685 movups %xmm2,(%edi)
1686 movups %xmm3,16(%edi)
1687 movups %xmm4,32(%edi)
1688 leal 48(%edi),%edi
1689 movdqa %xmm7,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001690 jmp .L067xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001691.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001692.L066xts_dec_four:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001693 movaps %xmm1,%xmm6
1694 movups (%esi),%xmm2
1695 movups 16(%esi),%xmm3
1696 movups 32(%esi),%xmm4
1697 xorps (%esp),%xmm2
1698 movups 48(%esi),%xmm5
1699 leal 64(%esi),%esi
1700 xorps 16(%esp),%xmm3
1701 xorps %xmm7,%xmm4
1702 xorps %xmm6,%xmm5
1703 call _aesni_decrypt4
1704 xorps (%esp),%xmm2
1705 xorps 16(%esp),%xmm3
1706 xorps %xmm7,%xmm4
1707 movups %xmm2,(%edi)
1708 xorps %xmm6,%xmm5
1709 movups %xmm3,16(%edi)
1710 movups %xmm4,32(%edi)
1711 movups %xmm5,48(%edi)
1712 leal 64(%edi),%edi
1713 movdqa %xmm6,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001714 jmp .L067xts_dec_done
Adam Langleyd9e397b2015-01-22 14:27:53 -08001715.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001716.L062xts_dec_done6x:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001717 movl 112(%esp),%eax
1718 andl $15,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001719 jz .L069xts_dec_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001720 movl %eax,112(%esp)
Adam Langleye9ada862015-05-11 17:20:37 -07001721 jmp .L070xts_dec_only_one_more
Adam Langleyd9e397b2015-01-22 14:27:53 -08001722.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001723.L067xts_dec_done:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001724 movl 112(%esp),%eax
1725 pxor %xmm0,%xmm0
1726 andl $15,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001727 jz .L069xts_dec_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08001728 pcmpgtd %xmm1,%xmm0
1729 movl %eax,112(%esp)
1730 pshufd $19,%xmm0,%xmm2
1731 pxor %xmm0,%xmm0
1732 movdqa 96(%esp),%xmm3
1733 paddq %xmm1,%xmm1
1734 pand %xmm3,%xmm2
1735 pcmpgtd %xmm1,%xmm0
1736 pxor %xmm2,%xmm1
Adam Langleye9ada862015-05-11 17:20:37 -07001737.L070xts_dec_only_one_more:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001738 pshufd $19,%xmm0,%xmm5
1739 movdqa %xmm1,%xmm6
1740 paddq %xmm1,%xmm1
1741 pand %xmm3,%xmm5
1742 pxor %xmm1,%xmm5
1743 movl %ebp,%edx
1744 movl %ebx,%ecx
1745 movups (%esi),%xmm2
1746 xorps %xmm5,%xmm2
1747 movups (%edx),%xmm0
1748 movups 16(%edx),%xmm1
1749 leal 32(%edx),%edx
1750 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001751.L071dec1_loop_13:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001752.byte 102,15,56,222,209
1753 decl %ecx
1754 movups (%edx),%xmm1
1755 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001756 jnz .L071dec1_loop_13
Adam Langleyd9e397b2015-01-22 14:27:53 -08001757.byte 102,15,56,223,209
1758 xorps %xmm5,%xmm2
1759 movups %xmm2,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001760.L072xts_dec_steal:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001761 movzbl 16(%esi),%ecx
1762 movzbl (%edi),%edx
1763 leal 1(%esi),%esi
1764 movb %cl,(%edi)
1765 movb %dl,16(%edi)
1766 leal 1(%edi),%edi
1767 subl $1,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001768 jnz .L072xts_dec_steal
Adam Langleyd9e397b2015-01-22 14:27:53 -08001769 subl 112(%esp),%edi
1770 movl %ebp,%edx
1771 movl %ebx,%ecx
1772 movups (%edi),%xmm2
1773 xorps %xmm6,%xmm2
1774 movups (%edx),%xmm0
1775 movups 16(%edx),%xmm1
1776 leal 32(%edx),%edx
1777 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001778.L073dec1_loop_14:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001779.byte 102,15,56,222,209
1780 decl %ecx
1781 movups (%edx),%xmm1
1782 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001783 jnz .L073dec1_loop_14
Adam Langleyd9e397b2015-01-22 14:27:53 -08001784.byte 102,15,56,223,209
1785 xorps %xmm6,%xmm2
1786 movups %xmm2,(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001787.L069xts_dec_ret:
1788 pxor %xmm0,%xmm0
1789 pxor %xmm1,%xmm1
1790 pxor %xmm2,%xmm2
1791 movdqa %xmm0,(%esp)
1792 pxor %xmm3,%xmm3
1793 movdqa %xmm0,16(%esp)
1794 pxor %xmm4,%xmm4
1795 movdqa %xmm0,32(%esp)
1796 pxor %xmm5,%xmm5
1797 movdqa %xmm0,48(%esp)
1798 pxor %xmm6,%xmm6
1799 movdqa %xmm0,64(%esp)
1800 pxor %xmm7,%xmm7
1801 movdqa %xmm0,80(%esp)
Adam Langleyd9e397b2015-01-22 14:27:53 -08001802 movl 116(%esp),%esp
1803 popl %edi
1804 popl %esi
1805 popl %ebx
1806 popl %ebp
1807 ret
1808.size aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin
1809.globl aesni_cbc_encrypt
1810.hidden aesni_cbc_encrypt
1811.type aesni_cbc_encrypt,@function
1812.align 16
1813aesni_cbc_encrypt:
1814.L_aesni_cbc_encrypt_begin:
1815 pushl %ebp
1816 pushl %ebx
1817 pushl %esi
1818 pushl %edi
1819 movl 20(%esp),%esi
1820 movl %esp,%ebx
1821 movl 24(%esp),%edi
1822 subl $24,%ebx
1823 movl 28(%esp),%eax
1824 andl $-16,%ebx
1825 movl 32(%esp),%edx
1826 movl 36(%esp),%ebp
1827 testl %eax,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001828 jz .L074cbc_abort
Adam Langleyd9e397b2015-01-22 14:27:53 -08001829 cmpl $0,40(%esp)
1830 xchgl %esp,%ebx
1831 movups (%ebp),%xmm7
1832 movl 240(%edx),%ecx
1833 movl %edx,%ebp
1834 movl %ebx,16(%esp)
1835 movl %ecx,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -07001836 je .L075cbc_decrypt
Adam Langleyd9e397b2015-01-22 14:27:53 -08001837 movaps %xmm7,%xmm2
1838 cmpl $16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001839 jb .L076cbc_enc_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -08001840 subl $16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001841 jmp .L077cbc_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001842.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001843.L077cbc_enc_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001844 movups (%esi),%xmm7
1845 leal 16(%esi),%esi
1846 movups (%edx),%xmm0
1847 movups 16(%edx),%xmm1
1848 xorps %xmm0,%xmm7
1849 leal 32(%edx),%edx
1850 xorps %xmm7,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001851.L078enc1_loop_15:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001852.byte 102,15,56,220,209
1853 decl %ecx
1854 movups (%edx),%xmm1
1855 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001856 jnz .L078enc1_loop_15
Adam Langleyd9e397b2015-01-22 14:27:53 -08001857.byte 102,15,56,221,209
1858 movl %ebx,%ecx
1859 movl %ebp,%edx
1860 movups %xmm2,(%edi)
1861 leal 16(%edi),%edi
1862 subl $16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001863 jnc .L077cbc_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001864 addl $16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001865 jnz .L076cbc_enc_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -08001866 movaps %xmm2,%xmm7
Adam Langleye9ada862015-05-11 17:20:37 -07001867 pxor %xmm2,%xmm2
1868 jmp .L079cbc_ret
1869.L076cbc_enc_tail:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001870 movl %eax,%ecx
1871.long 2767451785
1872 movl $16,%ecx
1873 subl %eax,%ecx
1874 xorl %eax,%eax
1875.long 2868115081
1876 leal -16(%edi),%edi
1877 movl %ebx,%ecx
1878 movl %edi,%esi
1879 movl %ebp,%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001880 jmp .L077cbc_enc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001881.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001882.L075cbc_decrypt:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001883 cmpl $80,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001884 jbe .L080cbc_dec_tail
Adam Langleyd9e397b2015-01-22 14:27:53 -08001885 movaps %xmm7,(%esp)
1886 subl $80,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001887 jmp .L081cbc_dec_loop6_enter
Adam Langleyd9e397b2015-01-22 14:27:53 -08001888.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001889.L082cbc_dec_loop6:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001890 movaps %xmm0,(%esp)
1891 movups %xmm7,(%edi)
1892 leal 16(%edi),%edi
Adam Langleye9ada862015-05-11 17:20:37 -07001893.L081cbc_dec_loop6_enter:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001894 movdqu (%esi),%xmm2
1895 movdqu 16(%esi),%xmm3
1896 movdqu 32(%esi),%xmm4
1897 movdqu 48(%esi),%xmm5
1898 movdqu 64(%esi),%xmm6
1899 movdqu 80(%esi),%xmm7
1900 call _aesni_decrypt6
1901 movups (%esi),%xmm1
1902 movups 16(%esi),%xmm0
1903 xorps (%esp),%xmm2
1904 xorps %xmm1,%xmm3
1905 movups 32(%esi),%xmm1
1906 xorps %xmm0,%xmm4
1907 movups 48(%esi),%xmm0
1908 xorps %xmm1,%xmm5
1909 movups 64(%esi),%xmm1
1910 xorps %xmm0,%xmm6
1911 movups 80(%esi),%xmm0
1912 xorps %xmm1,%xmm7
1913 movups %xmm2,(%edi)
1914 movups %xmm3,16(%edi)
1915 leal 96(%esi),%esi
1916 movups %xmm4,32(%edi)
1917 movl %ebx,%ecx
1918 movups %xmm5,48(%edi)
1919 movl %ebp,%edx
1920 movups %xmm6,64(%edi)
1921 leal 80(%edi),%edi
1922 subl $96,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001923 ja .L082cbc_dec_loop6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001924 movaps %xmm7,%xmm2
1925 movaps %xmm0,%xmm7
1926 addl $80,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001927 jle .L083cbc_dec_clear_tail_collected
Adam Langleyd9e397b2015-01-22 14:27:53 -08001928 movups %xmm2,(%edi)
1929 leal 16(%edi),%edi
Adam Langleye9ada862015-05-11 17:20:37 -07001930.L080cbc_dec_tail:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001931 movups (%esi),%xmm2
1932 movaps %xmm2,%xmm6
1933 cmpl $16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001934 jbe .L084cbc_dec_one
Adam Langleyd9e397b2015-01-22 14:27:53 -08001935 movups 16(%esi),%xmm3
1936 movaps %xmm3,%xmm5
1937 cmpl $32,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001938 jbe .L085cbc_dec_two
Adam Langleyd9e397b2015-01-22 14:27:53 -08001939 movups 32(%esi),%xmm4
1940 cmpl $48,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001941 jbe .L086cbc_dec_three
Adam Langleyd9e397b2015-01-22 14:27:53 -08001942 movups 48(%esi),%xmm5
1943 cmpl $64,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001944 jbe .L087cbc_dec_four
Adam Langleyd9e397b2015-01-22 14:27:53 -08001945 movups 64(%esi),%xmm6
1946 movaps %xmm7,(%esp)
1947 movups (%esi),%xmm2
1948 xorps %xmm7,%xmm7
1949 call _aesni_decrypt6
1950 movups (%esi),%xmm1
1951 movups 16(%esi),%xmm0
1952 xorps (%esp),%xmm2
1953 xorps %xmm1,%xmm3
1954 movups 32(%esi),%xmm1
1955 xorps %xmm0,%xmm4
1956 movups 48(%esi),%xmm0
1957 xorps %xmm1,%xmm5
1958 movups 64(%esi),%xmm7
1959 xorps %xmm0,%xmm6
1960 movups %xmm2,(%edi)
1961 movups %xmm3,16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001962 pxor %xmm3,%xmm3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001963 movups %xmm4,32(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001964 pxor %xmm4,%xmm4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001965 movups %xmm5,48(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07001966 pxor %xmm5,%xmm5
Adam Langleyd9e397b2015-01-22 14:27:53 -08001967 leal 64(%edi),%edi
1968 movaps %xmm6,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001969 pxor %xmm6,%xmm6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001970 subl $80,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001971 jmp .L088cbc_dec_tail_collected
Adam Langleyd9e397b2015-01-22 14:27:53 -08001972.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001973.L084cbc_dec_one:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001974 movups (%edx),%xmm0
1975 movups 16(%edx),%xmm1
1976 leal 32(%edx),%edx
1977 xorps %xmm0,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001978.L089dec1_loop_16:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001979.byte 102,15,56,222,209
1980 decl %ecx
1981 movups (%edx),%xmm1
1982 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07001983 jnz .L089dec1_loop_16
Adam Langleyd9e397b2015-01-22 14:27:53 -08001984.byte 102,15,56,223,209
1985 xorps %xmm7,%xmm2
1986 movaps %xmm6,%xmm7
1987 subl $16,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001988 jmp .L088cbc_dec_tail_collected
Adam Langleyd9e397b2015-01-22 14:27:53 -08001989.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07001990.L085cbc_dec_two:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001991 call _aesni_decrypt2
1992 xorps %xmm7,%xmm2
1993 xorps %xmm6,%xmm3
1994 movups %xmm2,(%edi)
1995 movaps %xmm3,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07001996 pxor %xmm3,%xmm3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001997 leal 16(%edi),%edi
1998 movaps %xmm5,%xmm7
1999 subl $32,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002000 jmp .L088cbc_dec_tail_collected
Adam Langleyd9e397b2015-01-22 14:27:53 -08002001.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002002.L086cbc_dec_three:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002003 call _aesni_decrypt3
2004 xorps %xmm7,%xmm2
2005 xorps %xmm6,%xmm3
2006 xorps %xmm5,%xmm4
2007 movups %xmm2,(%edi)
2008 movaps %xmm4,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07002009 pxor %xmm4,%xmm4
Adam Langleyd9e397b2015-01-22 14:27:53 -08002010 movups %xmm3,16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07002011 pxor %xmm3,%xmm3
Adam Langleyd9e397b2015-01-22 14:27:53 -08002012 leal 32(%edi),%edi
2013 movups 32(%esi),%xmm7
2014 subl $48,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002015 jmp .L088cbc_dec_tail_collected
Adam Langleyd9e397b2015-01-22 14:27:53 -08002016.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002017.L087cbc_dec_four:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002018 call _aesni_decrypt4
2019 movups 16(%esi),%xmm1
2020 movups 32(%esi),%xmm0
2021 xorps %xmm7,%xmm2
2022 movups 48(%esi),%xmm7
2023 xorps %xmm6,%xmm3
2024 movups %xmm2,(%edi)
2025 xorps %xmm1,%xmm4
2026 movups %xmm3,16(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07002027 pxor %xmm3,%xmm3
Adam Langleyd9e397b2015-01-22 14:27:53 -08002028 xorps %xmm0,%xmm5
2029 movups %xmm4,32(%edi)
Adam Langleye9ada862015-05-11 17:20:37 -07002030 pxor %xmm4,%xmm4
Adam Langleyd9e397b2015-01-22 14:27:53 -08002031 leal 48(%edi),%edi
2032 movaps %xmm5,%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07002033 pxor %xmm5,%xmm5
Adam Langleyd9e397b2015-01-22 14:27:53 -08002034 subl $64,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002035 jmp .L088cbc_dec_tail_collected
Adam Langleyd9e397b2015-01-22 14:27:53 -08002036.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002037.L083cbc_dec_clear_tail_collected:
2038 pxor %xmm3,%xmm3
2039 pxor %xmm4,%xmm4
2040 pxor %xmm5,%xmm5
2041 pxor %xmm6,%xmm6
2042.L088cbc_dec_tail_collected:
2043 andl $15,%eax
2044 jnz .L090cbc_dec_tail_partial
2045 movups %xmm2,(%edi)
2046 pxor %xmm0,%xmm0
2047 jmp .L079cbc_ret
2048.align 16
2049.L090cbc_dec_tail_partial:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002050 movaps %xmm2,(%esp)
Adam Langleye9ada862015-05-11 17:20:37 -07002051 pxor %xmm0,%xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -08002052 movl $16,%ecx
2053 movl %esp,%esi
2054 subl %eax,%ecx
2055.long 2767451785
Adam Langleye9ada862015-05-11 17:20:37 -07002056 movdqa %xmm2,(%esp)
2057.L079cbc_ret:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002058 movl 16(%esp),%esp
2059 movl 36(%esp),%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07002060 pxor %xmm2,%xmm2
2061 pxor %xmm1,%xmm1
Adam Langleyd9e397b2015-01-22 14:27:53 -08002062 movups %xmm7,(%ebp)
Adam Langleye9ada862015-05-11 17:20:37 -07002063 pxor %xmm7,%xmm7
2064.L074cbc_abort:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002065 popl %edi
2066 popl %esi
2067 popl %ebx
2068 popl %ebp
2069 ret
2070.size aesni_cbc_encrypt,.-.L_aesni_cbc_encrypt_begin
2071.hidden _aesni_set_encrypt_key
2072.type _aesni_set_encrypt_key,@function
2073.align 16
2074_aesni_set_encrypt_key:
Adam Langleye9ada862015-05-11 17:20:37 -07002075 pushl %ebp
2076 pushl %ebx
Adam Langleyd9e397b2015-01-22 14:27:53 -08002077 testl %eax,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002078 jz .L091bad_pointer
Adam Langleyd9e397b2015-01-22 14:27:53 -08002079 testl %edx,%edx
Adam Langleye9ada862015-05-11 17:20:37 -07002080 jz .L091bad_pointer
2081 call .L092pic
2082.L092pic:
2083 popl %ebx
2084 leal .Lkey_const-.L092pic(%ebx),%ebx
2085 leal OPENSSL_ia32cap_P-.Lkey_const(%ebx),%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -08002086 movups (%eax),%xmm0
2087 xorps %xmm4,%xmm4
Adam Langleye9ada862015-05-11 17:20:37 -07002088 movl 4(%ebp),%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -08002089 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07002090 andl $268437504,%ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -08002091 cmpl $256,%ecx
Adam Langleye9ada862015-05-11 17:20:37 -07002092 je .L09314rounds
Adam Langleyd9e397b2015-01-22 14:27:53 -08002093 cmpl $192,%ecx
Adam Langleye9ada862015-05-11 17:20:37 -07002094 je .L09412rounds
Adam Langleyd9e397b2015-01-22 14:27:53 -08002095 cmpl $128,%ecx
Adam Langleye9ada862015-05-11 17:20:37 -07002096 jne .L095bad_keybits
Adam Langleyd9e397b2015-01-22 14:27:53 -08002097.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002098.L09610rounds:
2099 cmpl $268435456,%ebp
2100 je .L09710rounds_alt
Adam Langleyd9e397b2015-01-22 14:27:53 -08002101 movl $9,%ecx
2102 movups %xmm0,-16(%edx)
2103.byte 102,15,58,223,200,1
Adam Langleye9ada862015-05-11 17:20:37 -07002104 call .L098key_128_cold
Adam Langleyd9e397b2015-01-22 14:27:53 -08002105.byte 102,15,58,223,200,2
Adam Langleye9ada862015-05-11 17:20:37 -07002106 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002107.byte 102,15,58,223,200,4
Adam Langleye9ada862015-05-11 17:20:37 -07002108 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002109.byte 102,15,58,223,200,8
Adam Langleye9ada862015-05-11 17:20:37 -07002110 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002111.byte 102,15,58,223,200,16
Adam Langleye9ada862015-05-11 17:20:37 -07002112 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002113.byte 102,15,58,223,200,32
Adam Langleye9ada862015-05-11 17:20:37 -07002114 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002115.byte 102,15,58,223,200,64
Adam Langleye9ada862015-05-11 17:20:37 -07002116 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002117.byte 102,15,58,223,200,128
Adam Langleye9ada862015-05-11 17:20:37 -07002118 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002119.byte 102,15,58,223,200,27
Adam Langleye9ada862015-05-11 17:20:37 -07002120 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002121.byte 102,15,58,223,200,54
Adam Langleye9ada862015-05-11 17:20:37 -07002122 call .L099key_128
Adam Langleyd9e397b2015-01-22 14:27:53 -08002123 movups %xmm0,(%edx)
2124 movl %ecx,80(%edx)
Adam Langleye9ada862015-05-11 17:20:37 -07002125 jmp .L100good_key
Adam Langleyd9e397b2015-01-22 14:27:53 -08002126.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002127.L099key_128:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002128 movups %xmm0,(%edx)
2129 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07002130.L098key_128_cold:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002131 shufps $16,%xmm0,%xmm4
2132 xorps %xmm4,%xmm0
2133 shufps $140,%xmm0,%xmm4
2134 xorps %xmm4,%xmm0
2135 shufps $255,%xmm1,%xmm1
2136 xorps %xmm1,%xmm0
2137 ret
2138.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002139.L09710rounds_alt:
2140 movdqa (%ebx),%xmm5
2141 movl $8,%ecx
2142 movdqa 32(%ebx),%xmm4
2143 movdqa %xmm0,%xmm2
2144 movdqu %xmm0,-16(%edx)
2145.L101loop_key128:
2146.byte 102,15,56,0,197
2147.byte 102,15,56,221,196
2148 pslld $1,%xmm4
2149 leal 16(%edx),%edx
2150 movdqa %xmm2,%xmm3
2151 pslldq $4,%xmm2
2152 pxor %xmm2,%xmm3
2153 pslldq $4,%xmm2
2154 pxor %xmm2,%xmm3
2155 pslldq $4,%xmm2
2156 pxor %xmm3,%xmm2
2157 pxor %xmm2,%xmm0
2158 movdqu %xmm0,-16(%edx)
2159 movdqa %xmm0,%xmm2
2160 decl %ecx
2161 jnz .L101loop_key128
2162 movdqa 48(%ebx),%xmm4
2163.byte 102,15,56,0,197
2164.byte 102,15,56,221,196
2165 pslld $1,%xmm4
2166 movdqa %xmm2,%xmm3
2167 pslldq $4,%xmm2
2168 pxor %xmm2,%xmm3
2169 pslldq $4,%xmm2
2170 pxor %xmm2,%xmm3
2171 pslldq $4,%xmm2
2172 pxor %xmm3,%xmm2
2173 pxor %xmm2,%xmm0
2174 movdqu %xmm0,(%edx)
2175 movdqa %xmm0,%xmm2
2176.byte 102,15,56,0,197
2177.byte 102,15,56,221,196
2178 movdqa %xmm2,%xmm3
2179 pslldq $4,%xmm2
2180 pxor %xmm2,%xmm3
2181 pslldq $4,%xmm2
2182 pxor %xmm2,%xmm3
2183 pslldq $4,%xmm2
2184 pxor %xmm3,%xmm2
2185 pxor %xmm2,%xmm0
2186 movdqu %xmm0,16(%edx)
2187 movl $9,%ecx
2188 movl %ecx,96(%edx)
2189 jmp .L100good_key
2190.align 16
2191.L09412rounds:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002192 movq 16(%eax),%xmm2
Adam Langleye9ada862015-05-11 17:20:37 -07002193 cmpl $268435456,%ebp
2194 je .L10212rounds_alt
Adam Langleyd9e397b2015-01-22 14:27:53 -08002195 movl $11,%ecx
2196 movups %xmm0,-16(%edx)
2197.byte 102,15,58,223,202,1
Adam Langleye9ada862015-05-11 17:20:37 -07002198 call .L103key_192a_cold
Adam Langleyd9e397b2015-01-22 14:27:53 -08002199.byte 102,15,58,223,202,2
Adam Langleye9ada862015-05-11 17:20:37 -07002200 call .L104key_192b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002201.byte 102,15,58,223,202,4
Adam Langleye9ada862015-05-11 17:20:37 -07002202 call .L105key_192a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002203.byte 102,15,58,223,202,8
Adam Langleye9ada862015-05-11 17:20:37 -07002204 call .L104key_192b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002205.byte 102,15,58,223,202,16
Adam Langleye9ada862015-05-11 17:20:37 -07002206 call .L105key_192a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002207.byte 102,15,58,223,202,32
Adam Langleye9ada862015-05-11 17:20:37 -07002208 call .L104key_192b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002209.byte 102,15,58,223,202,64
Adam Langleye9ada862015-05-11 17:20:37 -07002210 call .L105key_192a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002211.byte 102,15,58,223,202,128
Adam Langleye9ada862015-05-11 17:20:37 -07002212 call .L104key_192b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002213 movups %xmm0,(%edx)
2214 movl %ecx,48(%edx)
Adam Langleye9ada862015-05-11 17:20:37 -07002215 jmp .L100good_key
Adam Langleyd9e397b2015-01-22 14:27:53 -08002216.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002217.L105key_192a:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002218 movups %xmm0,(%edx)
2219 leal 16(%edx),%edx
2220.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002221.L103key_192a_cold:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002222 movaps %xmm2,%xmm5
Adam Langleye9ada862015-05-11 17:20:37 -07002223.L106key_192b_warm:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002224 shufps $16,%xmm0,%xmm4
2225 movdqa %xmm2,%xmm3
2226 xorps %xmm4,%xmm0
2227 shufps $140,%xmm0,%xmm4
2228 pslldq $4,%xmm3
2229 xorps %xmm4,%xmm0
2230 pshufd $85,%xmm1,%xmm1
2231 pxor %xmm3,%xmm2
2232 pxor %xmm1,%xmm0
2233 pshufd $255,%xmm0,%xmm3
2234 pxor %xmm3,%xmm2
2235 ret
2236.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002237.L104key_192b:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002238 movaps %xmm0,%xmm3
2239 shufps $68,%xmm0,%xmm5
2240 movups %xmm5,(%edx)
2241 shufps $78,%xmm2,%xmm3
2242 movups %xmm3,16(%edx)
2243 leal 32(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07002244 jmp .L106key_192b_warm
Adam Langleyd9e397b2015-01-22 14:27:53 -08002245.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002246.L10212rounds_alt:
2247 movdqa 16(%ebx),%xmm5
2248 movdqa 32(%ebx),%xmm4
2249 movl $8,%ecx
2250 movdqu %xmm0,-16(%edx)
2251.L107loop_key192:
2252 movq %xmm2,(%edx)
2253 movdqa %xmm2,%xmm1
2254.byte 102,15,56,0,213
2255.byte 102,15,56,221,212
2256 pslld $1,%xmm4
2257 leal 24(%edx),%edx
2258 movdqa %xmm0,%xmm3
2259 pslldq $4,%xmm0
2260 pxor %xmm0,%xmm3
2261 pslldq $4,%xmm0
2262 pxor %xmm0,%xmm3
2263 pslldq $4,%xmm0
2264 pxor %xmm3,%xmm0
2265 pshufd $255,%xmm0,%xmm3
2266 pxor %xmm1,%xmm3
2267 pslldq $4,%xmm1
2268 pxor %xmm1,%xmm3
2269 pxor %xmm2,%xmm0
2270 pxor %xmm3,%xmm2
2271 movdqu %xmm0,-16(%edx)
2272 decl %ecx
2273 jnz .L107loop_key192
2274 movl $11,%ecx
2275 movl %ecx,32(%edx)
2276 jmp .L100good_key
2277.align 16
2278.L09314rounds:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002279 movups 16(%eax),%xmm2
Adam Langleyd9e397b2015-01-22 14:27:53 -08002280 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07002281 cmpl $268435456,%ebp
2282 je .L10814rounds_alt
2283 movl $13,%ecx
Adam Langleyd9e397b2015-01-22 14:27:53 -08002284 movups %xmm0,-32(%edx)
2285 movups %xmm2,-16(%edx)
2286.byte 102,15,58,223,202,1
Adam Langleye9ada862015-05-11 17:20:37 -07002287 call .L109key_256a_cold
Adam Langleyd9e397b2015-01-22 14:27:53 -08002288.byte 102,15,58,223,200,1
Adam Langleye9ada862015-05-11 17:20:37 -07002289 call .L110key_256b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002290.byte 102,15,58,223,202,2
Adam Langleye9ada862015-05-11 17:20:37 -07002291 call .L111key_256a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002292.byte 102,15,58,223,200,2
Adam Langleye9ada862015-05-11 17:20:37 -07002293 call .L110key_256b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002294.byte 102,15,58,223,202,4
Adam Langleye9ada862015-05-11 17:20:37 -07002295 call .L111key_256a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002296.byte 102,15,58,223,200,4
Adam Langleye9ada862015-05-11 17:20:37 -07002297 call .L110key_256b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002298.byte 102,15,58,223,202,8
Adam Langleye9ada862015-05-11 17:20:37 -07002299 call .L111key_256a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002300.byte 102,15,58,223,200,8
Adam Langleye9ada862015-05-11 17:20:37 -07002301 call .L110key_256b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002302.byte 102,15,58,223,202,16
Adam Langleye9ada862015-05-11 17:20:37 -07002303 call .L111key_256a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002304.byte 102,15,58,223,200,16
Adam Langleye9ada862015-05-11 17:20:37 -07002305 call .L110key_256b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002306.byte 102,15,58,223,202,32
Adam Langleye9ada862015-05-11 17:20:37 -07002307 call .L111key_256a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002308.byte 102,15,58,223,200,32
Adam Langleye9ada862015-05-11 17:20:37 -07002309 call .L110key_256b
Adam Langleyd9e397b2015-01-22 14:27:53 -08002310.byte 102,15,58,223,202,64
Adam Langleye9ada862015-05-11 17:20:37 -07002311 call .L111key_256a
Adam Langleyd9e397b2015-01-22 14:27:53 -08002312 movups %xmm0,(%edx)
2313 movl %ecx,16(%edx)
2314 xorl %eax,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002315 jmp .L100good_key
Adam Langleyd9e397b2015-01-22 14:27:53 -08002316.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002317.L111key_256a:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002318 movups %xmm2,(%edx)
2319 leal 16(%edx),%edx
Adam Langleye9ada862015-05-11 17:20:37 -07002320.L109key_256a_cold:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002321 shufps $16,%xmm0,%xmm4
2322 xorps %xmm4,%xmm0
2323 shufps $140,%xmm0,%xmm4
2324 xorps %xmm4,%xmm0
2325 shufps $255,%xmm1,%xmm1
2326 xorps %xmm1,%xmm0
2327 ret
2328.align 16
Adam Langleye9ada862015-05-11 17:20:37 -07002329.L110key_256b:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002330 movups %xmm0,(%edx)
2331 leal 16(%edx),%edx
2332 shufps $16,%xmm2,%xmm4
2333 xorps %xmm4,%xmm2
2334 shufps $140,%xmm2,%xmm4
2335 xorps %xmm4,%xmm2
2336 shufps $170,%xmm1,%xmm1
2337 xorps %xmm1,%xmm2
2338 ret
Adam Langleye9ada862015-05-11 17:20:37 -07002339.align 16
2340.L10814rounds_alt:
2341 movdqa (%ebx),%xmm5
2342 movdqa 32(%ebx),%xmm4
2343 movl $7,%ecx
2344 movdqu %xmm0,-32(%edx)
2345 movdqa %xmm2,%xmm1
2346 movdqu %xmm2,-16(%edx)
2347.L112loop_key256:
2348.byte 102,15,56,0,213
2349.byte 102,15,56,221,212
2350 movdqa %xmm0,%xmm3
2351 pslldq $4,%xmm0
2352 pxor %xmm0,%xmm3
2353 pslldq $4,%xmm0
2354 pxor %xmm0,%xmm3
2355 pslldq $4,%xmm0
2356 pxor %xmm3,%xmm0
2357 pslld $1,%xmm4
2358 pxor %xmm2,%xmm0
2359 movdqu %xmm0,(%edx)
2360 decl %ecx
2361 jz .L113done_key256
2362 pshufd $255,%xmm0,%xmm2
2363 pxor %xmm3,%xmm3
2364.byte 102,15,56,221,211
2365 movdqa %xmm1,%xmm3
2366 pslldq $4,%xmm1
2367 pxor %xmm1,%xmm3
2368 pslldq $4,%xmm1
2369 pxor %xmm1,%xmm3
2370 pslldq $4,%xmm1
2371 pxor %xmm3,%xmm1
2372 pxor %xmm1,%xmm2
2373 movdqu %xmm2,16(%edx)
2374 leal 32(%edx),%edx
2375 movdqa %xmm2,%xmm1
2376 jmp .L112loop_key256
2377.L113done_key256:
2378 movl $13,%ecx
2379 movl %ecx,16(%edx)
2380.L100good_key:
2381 pxor %xmm0,%xmm0
2382 pxor %xmm1,%xmm1
2383 pxor %xmm2,%xmm2
2384 pxor %xmm3,%xmm3
2385 pxor %xmm4,%xmm4
2386 pxor %xmm5,%xmm5
2387 xorl %eax,%eax
2388 popl %ebx
2389 popl %ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -08002390 ret
2391.align 4
Adam Langleye9ada862015-05-11 17:20:37 -07002392.L091bad_pointer:
2393 movl $-1,%eax
2394 popl %ebx
2395 popl %ebp
2396 ret
2397.align 4
2398.L095bad_keybits:
2399 pxor %xmm0,%xmm0
Adam Langleyd9e397b2015-01-22 14:27:53 -08002400 movl $-2,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002401 popl %ebx
2402 popl %ebp
Adam Langleyd9e397b2015-01-22 14:27:53 -08002403 ret
2404.size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key
2405.globl aesni_set_encrypt_key
2406.hidden aesni_set_encrypt_key
2407.type aesni_set_encrypt_key,@function
2408.align 16
2409aesni_set_encrypt_key:
2410.L_aesni_set_encrypt_key_begin:
2411 movl 4(%esp),%eax
2412 movl 8(%esp),%ecx
2413 movl 12(%esp),%edx
2414 call _aesni_set_encrypt_key
2415 ret
2416.size aesni_set_encrypt_key,.-.L_aesni_set_encrypt_key_begin
2417.globl aesni_set_decrypt_key
2418.hidden aesni_set_decrypt_key
2419.type aesni_set_decrypt_key,@function
2420.align 16
2421aesni_set_decrypt_key:
2422.L_aesni_set_decrypt_key_begin:
2423 movl 4(%esp),%eax
2424 movl 8(%esp),%ecx
2425 movl 12(%esp),%edx
2426 call _aesni_set_encrypt_key
2427 movl 12(%esp),%edx
2428 shll $4,%ecx
2429 testl %eax,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002430 jnz .L114dec_key_ret
Adam Langleyd9e397b2015-01-22 14:27:53 -08002431 leal 16(%edx,%ecx,1),%eax
2432 movups (%edx),%xmm0
2433 movups (%eax),%xmm1
2434 movups %xmm0,(%eax)
2435 movups %xmm1,(%edx)
2436 leal 16(%edx),%edx
2437 leal -16(%eax),%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002438.L115dec_key_inverse:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002439 movups (%edx),%xmm0
2440 movups (%eax),%xmm1
2441.byte 102,15,56,219,192
2442.byte 102,15,56,219,201
2443 leal 16(%edx),%edx
2444 leal -16(%eax),%eax
2445 movups %xmm0,16(%eax)
2446 movups %xmm1,-16(%edx)
2447 cmpl %edx,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002448 ja .L115dec_key_inverse
Adam Langleyd9e397b2015-01-22 14:27:53 -08002449 movups (%edx),%xmm0
2450.byte 102,15,56,219,192
2451 movups %xmm0,(%edx)
Adam Langleye9ada862015-05-11 17:20:37 -07002452 pxor %xmm0,%xmm0
2453 pxor %xmm1,%xmm1
Adam Langleyd9e397b2015-01-22 14:27:53 -08002454 xorl %eax,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07002455.L114dec_key_ret:
Adam Langleyd9e397b2015-01-22 14:27:53 -08002456 ret
2457.size aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
Adam Langleye9ada862015-05-11 17:20:37 -07002458.align 64
2459.Lkey_const:
2460.long 202313229,202313229,202313229,202313229
2461.long 67569157,67569157,67569157,67569157
2462.long 1,1,1,1
2463.long 27,27,27,27
Adam Langleyd9e397b2015-01-22 14:27:53 -08002464.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
2465.byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
2466.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
2467.byte 115,108,46,111,114,103,62,0
2468#endif