aesni-mb-x86_64.s 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507
  1. .text
  2. .globl _aesni_multi_cbc_encrypt
  3. .p2align 5
  4. _aesni_multi_cbc_encrypt:
  5. cmpl $2,%edx
  6. jb L$enc_non_avx
  7. movl _OPENSSL_ia32cap_P+4(%rip),%ecx
  8. testl $268435456,%ecx
  9. jnz _avx_cbc_enc_shortcut
  10. jmp L$enc_non_avx
  11. .p2align 4
  12. L$enc_non_avx:
  13. movq %rsp,%rax
  14. pushq %rbx
  15. pushq %rbp
  16. pushq %r12
  17. pushq %r13
  18. pushq %r14
  19. pushq %r15
  20. subq $48,%rsp
  21. andq $-64,%rsp
  22. movq %rax,16(%rsp)
  23. L$enc4x_body:
  24. movdqu (%rsi),%xmm12
  25. leaq 120(%rsi),%rsi
  26. leaq 80(%rdi),%rdi
  27. L$enc4x_loop_grande:
  28. movl %edx,24(%rsp)
  29. xorl %edx,%edx
  30. movl -64(%rdi),%ecx
  31. movq -80(%rdi),%r8
  32. cmpl %edx,%ecx
  33. movq -72(%rdi),%r12
  34. cmovgl %ecx,%edx
  35. testl %ecx,%ecx
  36. movdqu -56(%rdi),%xmm2
  37. movl %ecx,32(%rsp)
  38. cmovleq %rsp,%r8
  39. movl -24(%rdi),%ecx
  40. movq -40(%rdi),%r9
  41. cmpl %edx,%ecx
  42. movq -32(%rdi),%r13
  43. cmovgl %ecx,%edx
  44. testl %ecx,%ecx
  45. movdqu -16(%rdi),%xmm3
  46. movl %ecx,36(%rsp)
  47. cmovleq %rsp,%r9
  48. movl 16(%rdi),%ecx
  49. movq 0(%rdi),%r10
  50. cmpl %edx,%ecx
  51. movq 8(%rdi),%r14
  52. cmovgl %ecx,%edx
  53. testl %ecx,%ecx
  54. movdqu 24(%rdi),%xmm4
  55. movl %ecx,40(%rsp)
  56. cmovleq %rsp,%r10
  57. movl 56(%rdi),%ecx
  58. movq 40(%rdi),%r11
  59. cmpl %edx,%ecx
  60. movq 48(%rdi),%r15
  61. cmovgl %ecx,%edx
  62. testl %ecx,%ecx
  63. movdqu 64(%rdi),%xmm5
  64. movl %ecx,44(%rsp)
  65. cmovleq %rsp,%r11
  66. testl %edx,%edx
  67. jz L$enc4x_done
  68. movups 16-120(%rsi),%xmm1
  69. pxor %xmm12,%xmm2
  70. movups 32-120(%rsi),%xmm0
  71. pxor %xmm12,%xmm3
  72. movl 240-120(%rsi),%eax
  73. pxor %xmm12,%xmm4
  74. movdqu (%r8),%xmm6
  75. pxor %xmm12,%xmm5
  76. movdqu (%r9),%xmm7
  77. pxor %xmm6,%xmm2
  78. movdqu (%r10),%xmm8
  79. pxor %xmm7,%xmm3
  80. movdqu (%r11),%xmm9
  81. pxor %xmm8,%xmm4
  82. pxor %xmm9,%xmm5
  83. movdqa 32(%rsp),%xmm10
  84. xorq %rbx,%rbx
  85. jmp L$oop_enc4x
  86. .p2align 5
  87. L$oop_enc4x:
  88. addq $16,%rbx
  89. leaq 16(%rsp),%rbp
  90. movl $1,%ecx
  91. subq %rbx,%rbp
  92. .byte 102,15,56,220,209
  93. prefetcht0 31(%r8,%rbx,1)
  94. prefetcht0 31(%r9,%rbx,1)
  95. .byte 102,15,56,220,217
  96. prefetcht0 31(%r10,%rbx,1)
  97. prefetcht0 31(%r10,%rbx,1)
  98. .byte 102,15,56,220,225
  99. .byte 102,15,56,220,233
  100. movups 48-120(%rsi),%xmm1
  101. cmpl 32(%rsp),%ecx
  102. .byte 102,15,56,220,208
  103. .byte 102,15,56,220,216
  104. .byte 102,15,56,220,224
  105. cmovgeq %rbp,%r8
  106. cmovgq %rbp,%r12
  107. .byte 102,15,56,220,232
  108. movups -56(%rsi),%xmm0
  109. cmpl 36(%rsp),%ecx
  110. .byte 102,15,56,220,209
  111. .byte 102,15,56,220,217
  112. .byte 102,15,56,220,225
  113. cmovgeq %rbp,%r9
  114. cmovgq %rbp,%r13
  115. .byte 102,15,56,220,233
  116. movups -40(%rsi),%xmm1
  117. cmpl 40(%rsp),%ecx
  118. .byte 102,15,56,220,208
  119. .byte 102,15,56,220,216
  120. .byte 102,15,56,220,224
  121. cmovgeq %rbp,%r10
  122. cmovgq %rbp,%r14
  123. .byte 102,15,56,220,232
  124. movups -24(%rsi),%xmm0
  125. cmpl 44(%rsp),%ecx
  126. .byte 102,15,56,220,209
  127. .byte 102,15,56,220,217
  128. .byte 102,15,56,220,225
  129. cmovgeq %rbp,%r11
  130. cmovgq %rbp,%r15
  131. .byte 102,15,56,220,233
  132. movups -8(%rsi),%xmm1
  133. movdqa %xmm10,%xmm11
  134. .byte 102,15,56,220,208
  135. prefetcht0 15(%r12,%rbx,1)
  136. prefetcht0 15(%r13,%rbx,1)
  137. .byte 102,15,56,220,216
  138. prefetcht0 15(%r14,%rbx,1)
  139. prefetcht0 15(%r15,%rbx,1)
  140. .byte 102,15,56,220,224
  141. .byte 102,15,56,220,232
  142. movups 128-120(%rsi),%xmm0
  143. pxor %xmm12,%xmm12
  144. .byte 102,15,56,220,209
  145. pcmpgtd %xmm12,%xmm11
  146. movdqu -120(%rsi),%xmm12
  147. .byte 102,15,56,220,217
  148. paddd %xmm11,%xmm10
  149. movdqa %xmm10,32(%rsp)
  150. .byte 102,15,56,220,225
  151. .byte 102,15,56,220,233
  152. movups 144-120(%rsi),%xmm1
  153. cmpl $11,%eax
  154. .byte 102,15,56,220,208
  155. .byte 102,15,56,220,216
  156. .byte 102,15,56,220,224
  157. .byte 102,15,56,220,232
  158. movups 160-120(%rsi),%xmm0
  159. jb L$enc4x_tail
  160. .byte 102,15,56,220,209
  161. .byte 102,15,56,220,217
  162. .byte 102,15,56,220,225
  163. .byte 102,15,56,220,233
  164. movups 176-120(%rsi),%xmm1
  165. .byte 102,15,56,220,208
  166. .byte 102,15,56,220,216
  167. .byte 102,15,56,220,224
  168. .byte 102,15,56,220,232
  169. movups 192-120(%rsi),%xmm0
  170. je L$enc4x_tail
  171. .byte 102,15,56,220,209
  172. .byte 102,15,56,220,217
  173. .byte 102,15,56,220,225
  174. .byte 102,15,56,220,233
  175. movups 208-120(%rsi),%xmm1
  176. .byte 102,15,56,220,208
  177. .byte 102,15,56,220,216
  178. .byte 102,15,56,220,224
  179. .byte 102,15,56,220,232
  180. movups 224-120(%rsi),%xmm0
  181. jmp L$enc4x_tail
  182. .p2align 5
  183. L$enc4x_tail:
  184. .byte 102,15,56,220,209
  185. .byte 102,15,56,220,217
  186. .byte 102,15,56,220,225
  187. .byte 102,15,56,220,233
  188. movdqu (%r8,%rbx,1),%xmm6
  189. movdqu 16-120(%rsi),%xmm1
  190. .byte 102,15,56,221,208
  191. movdqu (%r9,%rbx,1),%xmm7
  192. pxor %xmm12,%xmm6
  193. .byte 102,15,56,221,216
  194. movdqu (%r10,%rbx,1),%xmm8
  195. pxor %xmm12,%xmm7
  196. .byte 102,15,56,221,224
  197. movdqu (%r11,%rbx,1),%xmm9
  198. pxor %xmm12,%xmm8
  199. .byte 102,15,56,221,232
  200. movdqu 32-120(%rsi),%xmm0
  201. pxor %xmm12,%xmm9
  202. movups %xmm2,-16(%r12,%rbx,1)
  203. pxor %xmm6,%xmm2
  204. movups %xmm3,-16(%r13,%rbx,1)
  205. pxor %xmm7,%xmm3
  206. movups %xmm4,-16(%r14,%rbx,1)
  207. pxor %xmm8,%xmm4
  208. movups %xmm5,-16(%r15,%rbx,1)
  209. pxor %xmm9,%xmm5
  210. decl %edx
  211. jnz L$oop_enc4x
  212. movq 16(%rsp),%rax
  213. movl 24(%rsp),%edx
  214. leaq 160(%rdi),%rdi
  215. decl %edx
  216. jnz L$enc4x_loop_grande
  217. L$enc4x_done:
  218. movq -48(%rax),%r15
  219. movq -40(%rax),%r14
  220. movq -32(%rax),%r13
  221. movq -24(%rax),%r12
  222. movq -16(%rax),%rbp
  223. movq -8(%rax),%rbx
  224. leaq (%rax),%rsp
  225. L$enc4x_epilogue:
  226. .byte 0xf3,0xc3
  227. .globl _aesni_multi_cbc_decrypt
  228. .p2align 5
  229. _aesni_multi_cbc_decrypt:
  230. cmpl $2,%edx
  231. jb L$dec_non_avx
  232. movl _OPENSSL_ia32cap_P+4(%rip),%ecx
  233. testl $268435456,%ecx
  234. jnz _avx_cbc_dec_shortcut
  235. jmp L$dec_non_avx
  236. .p2align 4
  237. L$dec_non_avx:
  238. movq %rsp,%rax
  239. pushq %rbx
  240. pushq %rbp
  241. pushq %r12
  242. pushq %r13
  243. pushq %r14
  244. pushq %r15
  245. subq $48,%rsp
  246. andq $-64,%rsp
  247. movq %rax,16(%rsp)
  248. L$dec4x_body:
  249. movdqu (%rsi),%xmm12
  250. leaq 120(%rsi),%rsi
  251. leaq 80(%rdi),%rdi
  252. L$dec4x_loop_grande:
  253. movl %edx,24(%rsp)
  254. xorl %edx,%edx
  255. movl -64(%rdi),%ecx
  256. movq -80(%rdi),%r8
  257. cmpl %edx,%ecx
  258. movq -72(%rdi),%r12
  259. cmovgl %ecx,%edx
  260. testl %ecx,%ecx
  261. movdqu -56(%rdi),%xmm6
  262. movl %ecx,32(%rsp)
  263. cmovleq %rsp,%r8
  264. movl -24(%rdi),%ecx
  265. movq -40(%rdi),%r9
  266. cmpl %edx,%ecx
  267. movq -32(%rdi),%r13
  268. cmovgl %ecx,%edx
  269. testl %ecx,%ecx
  270. movdqu -16(%rdi),%xmm7
  271. movl %ecx,36(%rsp)
  272. cmovleq %rsp,%r9
  273. movl 16(%rdi),%ecx
  274. movq 0(%rdi),%r10
  275. cmpl %edx,%ecx
  276. movq 8(%rdi),%r14
  277. cmovgl %ecx,%edx
  278. testl %ecx,%ecx
  279. movdqu 24(%rdi),%xmm8
  280. movl %ecx,40(%rsp)
  281. cmovleq %rsp,%r10
  282. movl 56(%rdi),%ecx
  283. movq 40(%rdi),%r11
  284. cmpl %edx,%ecx
  285. movq 48(%rdi),%r15
  286. cmovgl %ecx,%edx
  287. testl %ecx,%ecx
  288. movdqu 64(%rdi),%xmm9
  289. movl %ecx,44(%rsp)
  290. cmovleq %rsp,%r11
  291. testl %edx,%edx
  292. jz L$dec4x_done
  293. movups 16-120(%rsi),%xmm1
  294. movups 32-120(%rsi),%xmm0
  295. movl 240-120(%rsi),%eax
  296. movdqu (%r8),%xmm2
  297. movdqu (%r9),%xmm3
  298. pxor %xmm12,%xmm2
  299. movdqu (%r10),%xmm4
  300. pxor %xmm12,%xmm3
  301. movdqu (%r11),%xmm5
  302. pxor %xmm12,%xmm4
  303. pxor %xmm12,%xmm5
  304. movdqa 32(%rsp),%xmm10
  305. xorq %rbx,%rbx
  306. jmp L$oop_dec4x
  307. .p2align 5
  308. L$oop_dec4x:
  309. addq $16,%rbx
  310. leaq 16(%rsp),%rbp
  311. movl $1,%ecx
  312. subq %rbx,%rbp
  313. .byte 102,15,56,222,209
  314. prefetcht0 31(%r8,%rbx,1)
  315. prefetcht0 31(%r9,%rbx,1)
  316. .byte 102,15,56,222,217
  317. prefetcht0 31(%r10,%rbx,1)
  318. prefetcht0 31(%r11,%rbx,1)
  319. .byte 102,15,56,222,225
  320. .byte 102,15,56,222,233
  321. movups 48-120(%rsi),%xmm1
  322. cmpl 32(%rsp),%ecx
  323. .byte 102,15,56,222,208
  324. .byte 102,15,56,222,216
  325. .byte 102,15,56,222,224
  326. cmovgeq %rbp,%r8
  327. cmovgq %rbp,%r12
  328. .byte 102,15,56,222,232
  329. movups -56(%rsi),%xmm0
  330. cmpl 36(%rsp),%ecx
  331. .byte 102,15,56,222,209
  332. .byte 102,15,56,222,217
  333. .byte 102,15,56,222,225
  334. cmovgeq %rbp,%r9
  335. cmovgq %rbp,%r13
  336. .byte 102,15,56,222,233
  337. movups -40(%rsi),%xmm1
  338. cmpl 40(%rsp),%ecx
  339. .byte 102,15,56,222,208
  340. .byte 102,15,56,222,216
  341. .byte 102,15,56,222,224
  342. cmovgeq %rbp,%r10
  343. cmovgq %rbp,%r14
  344. .byte 102,15,56,222,232
  345. movups -24(%rsi),%xmm0
  346. cmpl 44(%rsp),%ecx
  347. .byte 102,15,56,222,209
  348. .byte 102,15,56,222,217
  349. .byte 102,15,56,222,225
  350. cmovgeq %rbp,%r11
  351. cmovgq %rbp,%r15
  352. .byte 102,15,56,222,233
  353. movups -8(%rsi),%xmm1
  354. movdqa %xmm10,%xmm11
  355. .byte 102,15,56,222,208
  356. prefetcht0 15(%r12,%rbx,1)
  357. prefetcht0 15(%r13,%rbx,1)
  358. .byte 102,15,56,222,216
  359. prefetcht0 15(%r14,%rbx,1)
  360. prefetcht0 15(%r15,%rbx,1)
  361. .byte 102,15,56,222,224
  362. .byte 102,15,56,222,232
  363. movups 128-120(%rsi),%xmm0
  364. pxor %xmm12,%xmm12
  365. .byte 102,15,56,222,209
  366. pcmpgtd %xmm12,%xmm11
  367. movdqu -120(%rsi),%xmm12
  368. .byte 102,15,56,222,217
  369. paddd %xmm11,%xmm10
  370. movdqa %xmm10,32(%rsp)
  371. .byte 102,15,56,222,225
  372. .byte 102,15,56,222,233
  373. movups 144-120(%rsi),%xmm1
  374. cmpl $11,%eax
  375. .byte 102,15,56,222,208
  376. .byte 102,15,56,222,216
  377. .byte 102,15,56,222,224
  378. .byte 102,15,56,222,232
  379. movups 160-120(%rsi),%xmm0
  380. jb L$dec4x_tail
  381. .byte 102,15,56,222,209
  382. .byte 102,15,56,222,217
  383. .byte 102,15,56,222,225
  384. .byte 102,15,56,222,233
  385. movups 176-120(%rsi),%xmm1
  386. .byte 102,15,56,222,208
  387. .byte 102,15,56,222,216
  388. .byte 102,15,56,222,224
  389. .byte 102,15,56,222,232
  390. movups 192-120(%rsi),%xmm0
  391. je L$dec4x_tail
  392. .byte 102,15,56,222,209
  393. .byte 102,15,56,222,217
  394. .byte 102,15,56,222,225
  395. .byte 102,15,56,222,233
  396. movups 208-120(%rsi),%xmm1
  397. .byte 102,15,56,222,208
  398. .byte 102,15,56,222,216
  399. .byte 102,15,56,222,224
  400. .byte 102,15,56,222,232
  401. movups 224-120(%rsi),%xmm0
  402. jmp L$dec4x_tail
  403. .p2align 5
  404. L$dec4x_tail:
  405. .byte 102,15,56,222,209
  406. .byte 102,15,56,222,217
  407. .byte 102,15,56,222,225
  408. pxor %xmm0,%xmm6
  409. pxor %xmm0,%xmm7
  410. .byte 102,15,56,222,233
  411. movdqu 16-120(%rsi),%xmm1
  412. pxor %xmm0,%xmm8
  413. pxor %xmm0,%xmm9
  414. movdqu 32-120(%rsi),%xmm0
  415. .byte 102,15,56,223,214
  416. .byte 102,15,56,223,223
  417. movdqu -16(%r8,%rbx,1),%xmm6
  418. movdqu -16(%r9,%rbx,1),%xmm7
  419. .byte 102,65,15,56,223,224
  420. .byte 102,65,15,56,223,233
  421. movdqu -16(%r10,%rbx,1),%xmm8
  422. movdqu -16(%r11,%rbx,1),%xmm9
  423. movups %xmm2,-16(%r12,%rbx,1)
  424. movdqu (%r8,%rbx,1),%xmm2
  425. movups %xmm3,-16(%r13,%rbx,1)
  426. movdqu (%r9,%rbx,1),%xmm3
  427. pxor %xmm12,%xmm2
  428. movups %xmm4,-16(%r14,%rbx,1)
  429. movdqu (%r10,%rbx,1),%xmm4
  430. pxor %xmm12,%xmm3
  431. movups %xmm5,-16(%r15,%rbx,1)
  432. movdqu (%r11,%rbx,1),%xmm5
  433. pxor %xmm12,%xmm4
  434. pxor %xmm12,%xmm5
  435. decl %edx
  436. jnz L$oop_dec4x
  437. movq 16(%rsp),%rax
  438. movl 24(%rsp),%edx
  439. leaq 160(%rdi),%rdi
  440. decl %edx
  441. jnz L$dec4x_loop_grande
  442. L$dec4x_done:
  443. movq -48(%rax),%r15
  444. movq -40(%rax),%r14
  445. movq -32(%rax),%r13
  446. movq -24(%rax),%r12
  447. movq -16(%rax),%rbp
  448. movq -8(%rax),%rbx
  449. leaq (%rax),%rsp
  450. L$dec4x_epilogue:
  451. .byte 0xf3,0xc3
  452. .p2align 5
  453. aesni_multi_cbc_encrypt_avx:
  454. _avx_cbc_enc_shortcut:
  455. movq %rsp,%rax
  456. pushq %rbx
  457. pushq %rbp
  458. pushq %r12
  459. pushq %r13
  460. pushq %r14
  461. pushq %r15
  462. subq $192,%rsp
  463. andq $-128,%rsp
  464. movq %rax,16(%rsp)
  465. L$enc8x_body:
  466. vzeroupper
  467. vmovdqu (%rsi),%xmm15
  468. leaq 120(%rsi),%rsi
  469. leaq 160(%rdi),%rdi
  470. shrl $1,%edx
  471. L$enc8x_loop_grande:
  472. xorl %edx,%edx
  473. movl -144(%rdi),%ecx
  474. movq -160(%rdi),%r8
  475. cmpl %edx,%ecx
  476. movq -152(%rdi),%rbx
  477. cmovgl %ecx,%edx
  478. testl %ecx,%ecx
  479. vmovdqu -136(%rdi),%xmm2
  480. movl %ecx,32(%rsp)
  481. cmovleq %rsp,%r8
  482. subq %r8,%rbx
  483. movq %rbx,64(%rsp)
  484. movl -104(%rdi),%ecx
  485. movq -120(%rdi),%r9
  486. cmpl %edx,%ecx
  487. movq -112(%rdi),%rbp
  488. cmovgl %ecx,%edx
  489. testl %ecx,%ecx
  490. vmovdqu -96(%rdi),%xmm3
  491. movl %ecx,36(%rsp)
  492. cmovleq %rsp,%r9
  493. subq %r9,%rbp
  494. movq %rbp,72(%rsp)
  495. movl -64(%rdi),%ecx
  496. movq -80(%rdi),%r10
  497. cmpl %edx,%ecx
  498. movq -72(%rdi),%rbp
  499. cmovgl %ecx,%edx
  500. testl %ecx,%ecx
  501. vmovdqu -56(%rdi),%xmm4
  502. movl %ecx,40(%rsp)
  503. cmovleq %rsp,%r10
  504. subq %r10,%rbp
  505. movq %rbp,80(%rsp)
  506. movl -24(%rdi),%ecx
  507. movq -40(%rdi),%r11
  508. cmpl %edx,%ecx
  509. movq -32(%rdi),%rbp
  510. cmovgl %ecx,%edx
  511. testl %ecx,%ecx
  512. vmovdqu -16(%rdi),%xmm5
  513. movl %ecx,44(%rsp)
  514. cmovleq %rsp,%r11
  515. subq %r11,%rbp
  516. movq %rbp,88(%rsp)
  517. movl 16(%rdi),%ecx
  518. movq 0(%rdi),%r12
  519. cmpl %edx,%ecx
  520. movq 8(%rdi),%rbp
  521. cmovgl %ecx,%edx
  522. testl %ecx,%ecx
  523. vmovdqu 24(%rdi),%xmm6
  524. movl %ecx,48(%rsp)
  525. cmovleq %rsp,%r12
  526. subq %r12,%rbp
  527. movq %rbp,96(%rsp)
  528. movl 56(%rdi),%ecx
  529. movq 40(%rdi),%r13
  530. cmpl %edx,%ecx
  531. movq 48(%rdi),%rbp
  532. cmovgl %ecx,%edx
  533. testl %ecx,%ecx
  534. vmovdqu 64(%rdi),%xmm7
  535. movl %ecx,52(%rsp)
  536. cmovleq %rsp,%r13
  537. subq %r13,%rbp
  538. movq %rbp,104(%rsp)
  539. movl 96(%rdi),%ecx
  540. movq 80(%rdi),%r14
  541. cmpl %edx,%ecx
  542. movq 88(%rdi),%rbp
  543. cmovgl %ecx,%edx
  544. testl %ecx,%ecx
  545. vmovdqu 104(%rdi),%xmm8
  546. movl %ecx,56(%rsp)
  547. cmovleq %rsp,%r14
  548. subq %r14,%rbp
  549. movq %rbp,112(%rsp)
  550. movl 136(%rdi),%ecx
  551. movq 120(%rdi),%r15
  552. cmpl %edx,%ecx
  553. movq 128(%rdi),%rbp
  554. cmovgl %ecx,%edx
  555. testl %ecx,%ecx
  556. vmovdqu 144(%rdi),%xmm9
  557. movl %ecx,60(%rsp)
  558. cmovleq %rsp,%r15
  559. subq %r15,%rbp
  560. movq %rbp,120(%rsp)
  561. testl %edx,%edx
  562. jz L$enc8x_done
  563. vmovups 16-120(%rsi),%xmm1
  564. vmovups 32-120(%rsi),%xmm0
  565. movl 240-120(%rsi),%eax
  566. vpxor (%r8),%xmm15,%xmm10
  567. leaq 128(%rsp),%rbp
  568. vpxor (%r9),%xmm15,%xmm11
  569. vpxor (%r10),%xmm15,%xmm12
  570. vpxor (%r11),%xmm15,%xmm13
  571. vpxor %xmm10,%xmm2,%xmm2
  572. vpxor (%r12),%xmm15,%xmm10
  573. vpxor %xmm11,%xmm3,%xmm3
  574. vpxor (%r13),%xmm15,%xmm11
  575. vpxor %xmm12,%xmm4,%xmm4
  576. vpxor (%r14),%xmm15,%xmm12
  577. vpxor %xmm13,%xmm5,%xmm5
  578. vpxor (%r15),%xmm15,%xmm13
  579. vpxor %xmm10,%xmm6,%xmm6
  580. movl $1,%ecx
  581. vpxor %xmm11,%xmm7,%xmm7
  582. vpxor %xmm12,%xmm8,%xmm8
  583. vpxor %xmm13,%xmm9,%xmm9
  584. jmp L$oop_enc8x
  585. .p2align 5
  586. L$oop_enc8x:
  587. vaesenc %xmm1,%xmm2,%xmm2
  588. cmpl 32+0(%rsp),%ecx
  589. vaesenc %xmm1,%xmm3,%xmm3
  590. prefetcht0 31(%r8)
  591. vaesenc %xmm1,%xmm4,%xmm4
  592. vaesenc %xmm1,%xmm5,%xmm5
  593. leaq (%r8,%rbx,1),%rbx
  594. cmovgeq %rsp,%r8
  595. vaesenc %xmm1,%xmm6,%xmm6
  596. cmovgq %rsp,%rbx
  597. vaesenc %xmm1,%xmm7,%xmm7
  598. subq %r8,%rbx
  599. vaesenc %xmm1,%xmm8,%xmm8
  600. vpxor 16(%r8),%xmm15,%xmm10
  601. movq %rbx,64+0(%rsp)
  602. vaesenc %xmm1,%xmm9,%xmm9
  603. vmovups -72(%rsi),%xmm1
  604. leaq 16(%r8,%rbx,1),%r8
  605. vmovdqu %xmm10,0(%rbp)
  606. vaesenc %xmm0,%xmm2,%xmm2
  607. cmpl 32+4(%rsp),%ecx
  608. movq 64+8(%rsp),%rbx
  609. vaesenc %xmm0,%xmm3,%xmm3
  610. prefetcht0 31(%r9)
  611. vaesenc %xmm0,%xmm4,%xmm4
  612. vaesenc %xmm0,%xmm5,%xmm5
  613. leaq (%r9,%rbx,1),%rbx
  614. cmovgeq %rsp,%r9
  615. vaesenc %xmm0,%xmm6,%xmm6
  616. cmovgq %rsp,%rbx
  617. vaesenc %xmm0,%xmm7,%xmm7
  618. subq %r9,%rbx
  619. vaesenc %xmm0,%xmm8,%xmm8
  620. vpxor 16(%r9),%xmm15,%xmm11
  621. movq %rbx,64+8(%rsp)
  622. vaesenc %xmm0,%xmm9,%xmm9
  623. vmovups -56(%rsi),%xmm0
  624. leaq 16(%r9,%rbx,1),%r9
  625. vmovdqu %xmm11,16(%rbp)
  626. vaesenc %xmm1,%xmm2,%xmm2
  627. cmpl 32+8(%rsp),%ecx
  628. movq 64+16(%rsp),%rbx
  629. vaesenc %xmm1,%xmm3,%xmm3
  630. prefetcht0 31(%r10)
  631. vaesenc %xmm1,%xmm4,%xmm4
  632. prefetcht0 15(%r8)
  633. vaesenc %xmm1,%xmm5,%xmm5
  634. leaq (%r10,%rbx,1),%rbx
  635. cmovgeq %rsp,%r10
  636. vaesenc %xmm1,%xmm6,%xmm6
  637. cmovgq %rsp,%rbx
  638. vaesenc %xmm1,%xmm7,%xmm7
  639. subq %r10,%rbx
  640. vaesenc %xmm1,%xmm8,%xmm8
  641. vpxor 16(%r10),%xmm15,%xmm12
  642. movq %rbx,64+16(%rsp)
  643. vaesenc %xmm1,%xmm9,%xmm9
  644. vmovups -40(%rsi),%xmm1
  645. leaq 16(%r10,%rbx,1),%r10
  646. vmovdqu %xmm12,32(%rbp)
  647. vaesenc %xmm0,%xmm2,%xmm2
  648. cmpl 32+12(%rsp),%ecx
  649. movq 64+24(%rsp),%rbx
  650. vaesenc %xmm0,%xmm3,%xmm3
  651. prefetcht0 31(%r11)
  652. vaesenc %xmm0,%xmm4,%xmm4
  653. prefetcht0 15(%r9)
  654. vaesenc %xmm0,%xmm5,%xmm5
  655. leaq (%r11,%rbx,1),%rbx
  656. cmovgeq %rsp,%r11
  657. vaesenc %xmm0,%xmm6,%xmm6
  658. cmovgq %rsp,%rbx
  659. vaesenc %xmm0,%xmm7,%xmm7
  660. subq %r11,%rbx
  661. vaesenc %xmm0,%xmm8,%xmm8
  662. vpxor 16(%r11),%xmm15,%xmm13
  663. movq %rbx,64+24(%rsp)
  664. vaesenc %xmm0,%xmm9,%xmm9
  665. vmovups -24(%rsi),%xmm0
  666. leaq 16(%r11,%rbx,1),%r11
  667. vmovdqu %xmm13,48(%rbp)
  668. vaesenc %xmm1,%xmm2,%xmm2
  669. cmpl 32+16(%rsp),%ecx
  670. movq 64+32(%rsp),%rbx
  671. vaesenc %xmm1,%xmm3,%xmm3
  672. prefetcht0 31(%r12)
  673. vaesenc %xmm1,%xmm4,%xmm4
  674. prefetcht0 15(%r10)
  675. vaesenc %xmm1,%xmm5,%xmm5
  676. leaq (%r12,%rbx,1),%rbx
  677. cmovgeq %rsp,%r12
  678. vaesenc %xmm1,%xmm6,%xmm6
  679. cmovgq %rsp,%rbx
  680. vaesenc %xmm1,%xmm7,%xmm7
  681. subq %r12,%rbx
  682. vaesenc %xmm1,%xmm8,%xmm8
  683. vpxor 16(%r12),%xmm15,%xmm10
  684. movq %rbx,64+32(%rsp)
  685. vaesenc %xmm1,%xmm9,%xmm9
  686. vmovups -8(%rsi),%xmm1
  687. leaq 16(%r12,%rbx,1),%r12
  688. vaesenc %xmm0,%xmm2,%xmm2
  689. cmpl 32+20(%rsp),%ecx
  690. movq 64+40(%rsp),%rbx
  691. vaesenc %xmm0,%xmm3,%xmm3
  692. prefetcht0 31(%r13)
  693. vaesenc %xmm0,%xmm4,%xmm4
  694. prefetcht0 15(%r11)
  695. vaesenc %xmm0,%xmm5,%xmm5
  696. leaq (%rbx,%r13,1),%rbx
  697. cmovgeq %rsp,%r13
  698. vaesenc %xmm0,%xmm6,%xmm6
  699. cmovgq %rsp,%rbx
  700. vaesenc %xmm0,%xmm7,%xmm7
  701. subq %r13,%rbx
  702. vaesenc %xmm0,%xmm8,%xmm8
  703. vpxor 16(%r13),%xmm15,%xmm11
  704. movq %rbx,64+40(%rsp)
  705. vaesenc %xmm0,%xmm9,%xmm9
  706. vmovups 8(%rsi),%xmm0
  707. leaq 16(%r13,%rbx,1),%r13
  708. vaesenc %xmm1,%xmm2,%xmm2
  709. cmpl 32+24(%rsp),%ecx
  710. movq 64+48(%rsp),%rbx
  711. vaesenc %xmm1,%xmm3,%xmm3
  712. prefetcht0 31(%r14)
  713. vaesenc %xmm1,%xmm4,%xmm4
  714. prefetcht0 15(%r12)
  715. vaesenc %xmm1,%xmm5,%xmm5
  716. leaq (%r14,%rbx,1),%rbx
  717. cmovgeq %rsp,%r14
  718. vaesenc %xmm1,%xmm6,%xmm6
  719. cmovgq %rsp,%rbx
  720. vaesenc %xmm1,%xmm7,%xmm7
  721. subq %r14,%rbx
  722. vaesenc %xmm1,%xmm8,%xmm8
  723. vpxor 16(%r14),%xmm15,%xmm12
  724. movq %rbx,64+48(%rsp)
  725. vaesenc %xmm1,%xmm9,%xmm9
  726. vmovups 24(%rsi),%xmm1
  727. leaq 16(%r14,%rbx,1),%r14
  728. vaesenc %xmm0,%xmm2,%xmm2
  729. cmpl 32+28(%rsp),%ecx
  730. movq 64+56(%rsp),%rbx
  731. vaesenc %xmm0,%xmm3,%xmm3
  732. prefetcht0 31(%r15)
  733. vaesenc %xmm0,%xmm4,%xmm4
  734. prefetcht0 15(%r13)
  735. vaesenc %xmm0,%xmm5,%xmm5
  736. leaq (%r15,%rbx,1),%rbx
  737. cmovgeq %rsp,%r15
  738. vaesenc %xmm0,%xmm6,%xmm6
  739. cmovgq %rsp,%rbx
  740. vaesenc %xmm0,%xmm7,%xmm7
  741. subq %r15,%rbx
  742. vaesenc %xmm0,%xmm8,%xmm8
  743. vpxor 16(%r15),%xmm15,%xmm13
  744. movq %rbx,64+56(%rsp)
  745. vaesenc %xmm0,%xmm9,%xmm9
  746. vmovups 40(%rsi),%xmm0
  747. leaq 16(%r15,%rbx,1),%r15
  748. vmovdqu 32(%rsp),%xmm14
  749. prefetcht0 15(%r14)
  750. prefetcht0 15(%r15)
  751. cmpl $11,%eax
  752. jb L$enc8x_tail
  753. vaesenc %xmm1,%xmm2,%xmm2
  754. vaesenc %xmm1,%xmm3,%xmm3
  755. vaesenc %xmm1,%xmm4,%xmm4
  756. vaesenc %xmm1,%xmm5,%xmm5
  757. vaesenc %xmm1,%xmm6,%xmm6
  758. vaesenc %xmm1,%xmm7,%xmm7
  759. vaesenc %xmm1,%xmm8,%xmm8
  760. vaesenc %xmm1,%xmm9,%xmm9
  761. vmovups 176-120(%rsi),%xmm1
  762. vaesenc %xmm0,%xmm2,%xmm2
  763. vaesenc %xmm0,%xmm3,%xmm3
  764. vaesenc %xmm0,%xmm4,%xmm4
  765. vaesenc %xmm0,%xmm5,%xmm5
  766. vaesenc %xmm0,%xmm6,%xmm6
  767. vaesenc %xmm0,%xmm7,%xmm7
  768. vaesenc %xmm0,%xmm8,%xmm8
  769. vaesenc %xmm0,%xmm9,%xmm9
  770. vmovups 192-120(%rsi),%xmm0
  771. je L$enc8x_tail
  772. vaesenc %xmm1,%xmm2,%xmm2
  773. vaesenc %xmm1,%xmm3,%xmm3
  774. vaesenc %xmm1,%xmm4,%xmm4
  775. vaesenc %xmm1,%xmm5,%xmm5
  776. vaesenc %xmm1,%xmm6,%xmm6
  777. vaesenc %xmm1,%xmm7,%xmm7
  778. vaesenc %xmm1,%xmm8,%xmm8
  779. vaesenc %xmm1,%xmm9,%xmm9
  780. vmovups 208-120(%rsi),%xmm1
  781. vaesenc %xmm0,%xmm2,%xmm2
  782. vaesenc %xmm0,%xmm3,%xmm3
  783. vaesenc %xmm0,%xmm4,%xmm4
  784. vaesenc %xmm0,%xmm5,%xmm5
  785. vaesenc %xmm0,%xmm6,%xmm6
  786. vaesenc %xmm0,%xmm7,%xmm7
  787. vaesenc %xmm0,%xmm8,%xmm8
  788. vaesenc %xmm0,%xmm9,%xmm9
  789. vmovups 224-120(%rsi),%xmm0
  790. L$enc8x_tail:
  791. vaesenc %xmm1,%xmm2,%xmm2
  792. vpxor %xmm15,%xmm15,%xmm15
  793. vaesenc %xmm1,%xmm3,%xmm3
  794. vaesenc %xmm1,%xmm4,%xmm4
  795. vpcmpgtd %xmm15,%xmm14,%xmm15
  796. vaesenc %xmm1,%xmm5,%xmm5
  797. vaesenc %xmm1,%xmm6,%xmm6
  798. vpaddd %xmm14,%xmm15,%xmm15
  799. vmovdqu 48(%rsp),%xmm14
  800. vaesenc %xmm1,%xmm7,%xmm7
  801. movq 64(%rsp),%rbx
  802. vaesenc %xmm1,%xmm8,%xmm8
  803. vaesenc %xmm1,%xmm9,%xmm9
  804. vmovups 16-120(%rsi),%xmm1
  805. vaesenclast %xmm0,%xmm2,%xmm2
  806. vmovdqa %xmm15,32(%rsp)
  807. vpxor %xmm15,%xmm15,%xmm15
  808. vaesenclast %xmm0,%xmm3,%xmm3
  809. vaesenclast %xmm0,%xmm4,%xmm4
  810. vpcmpgtd %xmm15,%xmm14,%xmm15
  811. vaesenclast %xmm0,%xmm5,%xmm5
  812. vaesenclast %xmm0,%xmm6,%xmm6
  813. vpaddd %xmm15,%xmm14,%xmm14
  814. vmovdqu -120(%rsi),%xmm15
  815. vaesenclast %xmm0,%xmm7,%xmm7
  816. vaesenclast %xmm0,%xmm8,%xmm8
  817. vmovdqa %xmm14,48(%rsp)
  818. vaesenclast %xmm0,%xmm9,%xmm9
  819. vmovups 32-120(%rsi),%xmm0
  820. vmovups %xmm2,-16(%r8)
  821. subq %rbx,%r8
  822. vpxor 0(%rbp),%xmm2,%xmm2
  823. vmovups %xmm3,-16(%r9)
  824. subq 72(%rsp),%r9
  825. vpxor 16(%rbp),%xmm3,%xmm3
  826. vmovups %xmm4,-16(%r10)
  827. subq 80(%rsp),%r10
  828. vpxor 32(%rbp),%xmm4,%xmm4
  829. vmovups %xmm5,-16(%r11)
  830. subq 88(%rsp),%r11
  831. vpxor 48(%rbp),%xmm5,%xmm5
  832. vmovups %xmm6,-16(%r12)
  833. subq 96(%rsp),%r12
  834. vpxor %xmm10,%xmm6,%xmm6
  835. vmovups %xmm7,-16(%r13)
  836. subq 104(%rsp),%r13
  837. vpxor %xmm11,%xmm7,%xmm7
  838. vmovups %xmm8,-16(%r14)
  839. subq 112(%rsp),%r14
  840. vpxor %xmm12,%xmm8,%xmm8
  841. vmovups %xmm9,-16(%r15)
  842. subq 120(%rsp),%r15
  843. vpxor %xmm13,%xmm9,%xmm9
  844. decl %edx
  845. jnz L$oop_enc8x
  846. movq 16(%rsp),%rax
  847. L$enc8x_done:
  848. vzeroupper
  849. movq -48(%rax),%r15
  850. movq -40(%rax),%r14
  851. movq -32(%rax),%r13
  852. movq -24(%rax),%r12
  853. movq -16(%rax),%rbp
  854. movq -8(%rax),%rbx
  855. leaq (%rax),%rsp
  856. L$enc8x_epilogue:
  857. .byte 0xf3,0xc3
  858. .p2align 5
  859. aesni_multi_cbc_decrypt_avx:
  860. _avx_cbc_dec_shortcut:
  861. movq %rsp,%rax
  862. pushq %rbx
  863. pushq %rbp
  864. pushq %r12
  865. pushq %r13
  866. pushq %r14
  867. pushq %r15
  868. subq $256,%rsp
  869. andq $-256,%rsp
  870. subq $192,%rsp
  871. movq %rax,16(%rsp)
  872. L$dec8x_body:
  873. vzeroupper
  874. vmovdqu (%rsi),%xmm15
  875. leaq 120(%rsi),%rsi
  876. leaq 160(%rdi),%rdi
  877. shrl $1,%edx
  878. L$dec8x_loop_grande:
  879. xorl %edx,%edx
  880. movl -144(%rdi),%ecx
  881. movq -160(%rdi),%r8
  882. cmpl %edx,%ecx
  883. movq -152(%rdi),%rbx
  884. cmovgl %ecx,%edx
  885. testl %ecx,%ecx
  886. vmovdqu -136(%rdi),%xmm2
  887. movl %ecx,32(%rsp)
  888. cmovleq %rsp,%r8
  889. subq %r8,%rbx
  890. movq %rbx,64(%rsp)
  891. vmovdqu %xmm2,192(%rsp)
  892. movl -104(%rdi),%ecx
  893. movq -120(%rdi),%r9
  894. cmpl %edx,%ecx
  895. movq -112(%rdi),%rbp
  896. cmovgl %ecx,%edx
  897. testl %ecx,%ecx
  898. vmovdqu -96(%rdi),%xmm3
  899. movl %ecx,36(%rsp)
  900. cmovleq %rsp,%r9
  901. subq %r9,%rbp
  902. movq %rbp,72(%rsp)
  903. vmovdqu %xmm3,208(%rsp)
  904. movl -64(%rdi),%ecx
  905. movq -80(%rdi),%r10
  906. cmpl %edx,%ecx
  907. movq -72(%rdi),%rbp
  908. cmovgl %ecx,%edx
  909. testl %ecx,%ecx
  910. vmovdqu -56(%rdi),%xmm4
  911. movl %ecx,40(%rsp)
  912. cmovleq %rsp,%r10
  913. subq %r10,%rbp
  914. movq %rbp,80(%rsp)
  915. vmovdqu %xmm4,224(%rsp)
  916. movl -24(%rdi),%ecx
  917. movq -40(%rdi),%r11
  918. cmpl %edx,%ecx
  919. movq -32(%rdi),%rbp
  920. cmovgl %ecx,%edx
  921. testl %ecx,%ecx
  922. vmovdqu -16(%rdi),%xmm5
  923. movl %ecx,44(%rsp)
  924. cmovleq %rsp,%r11
  925. subq %r11,%rbp
  926. movq %rbp,88(%rsp)
  927. vmovdqu %xmm5,240(%rsp)
  928. movl 16(%rdi),%ecx
  929. movq 0(%rdi),%r12
  930. cmpl %edx,%ecx
  931. movq 8(%rdi),%rbp
  932. cmovgl %ecx,%edx
  933. testl %ecx,%ecx
  934. vmovdqu 24(%rdi),%xmm6
  935. movl %ecx,48(%rsp)
  936. cmovleq %rsp,%r12
  937. subq %r12,%rbp
  938. movq %rbp,96(%rsp)
  939. vmovdqu %xmm6,256(%rsp)
  940. movl 56(%rdi),%ecx
  941. movq 40(%rdi),%r13
  942. cmpl %edx,%ecx
  943. movq 48(%rdi),%rbp
  944. cmovgl %ecx,%edx
  945. testl %ecx,%ecx
  946. vmovdqu 64(%rdi),%xmm7
  947. movl %ecx,52(%rsp)
  948. cmovleq %rsp,%r13
  949. subq %r13,%rbp
  950. movq %rbp,104(%rsp)
  951. vmovdqu %xmm7,272(%rsp)
  952. movl 96(%rdi),%ecx
  953. movq 80(%rdi),%r14
  954. cmpl %edx,%ecx
  955. movq 88(%rdi),%rbp
  956. cmovgl %ecx,%edx
  957. testl %ecx,%ecx
  958. vmovdqu 104(%rdi),%xmm8
  959. movl %ecx,56(%rsp)
  960. cmovleq %rsp,%r14
  961. subq %r14,%rbp
  962. movq %rbp,112(%rsp)
  963. vmovdqu %xmm8,288(%rsp)
  964. movl 136(%rdi),%ecx
  965. movq 120(%rdi),%r15
  966. cmpl %edx,%ecx
  967. movq 128(%rdi),%rbp
  968. cmovgl %ecx,%edx
  969. testl %ecx,%ecx
  970. vmovdqu 144(%rdi),%xmm9
  971. movl %ecx,60(%rsp)
  972. cmovleq %rsp,%r15
  973. subq %r15,%rbp
  974. movq %rbp,120(%rsp)
  975. vmovdqu %xmm9,304(%rsp)
  976. testl %edx,%edx
  977. jz L$dec8x_done
  978. vmovups 16-120(%rsi),%xmm1
  979. vmovups 32-120(%rsi),%xmm0
  980. movl 240-120(%rsi),%eax
  981. leaq 192+128(%rsp),%rbp
  982. vmovdqu (%r8),%xmm2
  983. vmovdqu (%r9),%xmm3
  984. vmovdqu (%r10),%xmm4
  985. vmovdqu (%r11),%xmm5
  986. vmovdqu (%r12),%xmm6
  987. vmovdqu (%r13),%xmm7
  988. vmovdqu (%r14),%xmm8
  989. vmovdqu (%r15),%xmm9
  990. vmovdqu %xmm2,0(%rbp)
  991. vpxor %xmm15,%xmm2,%xmm2
  992. vmovdqu %xmm3,16(%rbp)
  993. vpxor %xmm15,%xmm3,%xmm3
  994. vmovdqu %xmm4,32(%rbp)
  995. vpxor %xmm15,%xmm4,%xmm4
  996. vmovdqu %xmm5,48(%rbp)
  997. vpxor %xmm15,%xmm5,%xmm5
  998. vmovdqu %xmm6,64(%rbp)
  999. vpxor %xmm15,%xmm6,%xmm6
  1000. vmovdqu %xmm7,80(%rbp)
  1001. vpxor %xmm15,%xmm7,%xmm7
  1002. vmovdqu %xmm8,96(%rbp)
  1003. vpxor %xmm15,%xmm8,%xmm8
  1004. vmovdqu %xmm9,112(%rbp)
  1005. vpxor %xmm15,%xmm9,%xmm9
  1006. xorq $0x80,%rbp
  1007. movl $1,%ecx
  1008. jmp L$oop_dec8x
  1009. .p2align 5
  1010. L$oop_dec8x:
  1011. vaesdec %xmm1,%xmm2,%xmm2
  1012. cmpl 32+0(%rsp),%ecx
  1013. vaesdec %xmm1,%xmm3,%xmm3
  1014. prefetcht0 31(%r8)
  1015. vaesdec %xmm1,%xmm4,%xmm4
  1016. vaesdec %xmm1,%xmm5,%xmm5
  1017. leaq (%r8,%rbx,1),%rbx
  1018. cmovgeq %rsp,%r8
  1019. vaesdec %xmm1,%xmm6,%xmm6
  1020. cmovgq %rsp,%rbx
  1021. vaesdec %xmm1,%xmm7,%xmm7
  1022. subq %r8,%rbx
  1023. vaesdec %xmm1,%xmm8,%xmm8
  1024. vmovdqu 16(%r8),%xmm10
  1025. movq %rbx,64+0(%rsp)
  1026. vaesdec %xmm1,%xmm9,%xmm9
  1027. vmovups -72(%rsi),%xmm1
  1028. leaq 16(%r8,%rbx,1),%r8
  1029. vmovdqu %xmm10,128(%rsp)
  1030. vaesdec %xmm0,%xmm2,%xmm2
  1031. cmpl 32+4(%rsp),%ecx
  1032. movq 64+8(%rsp),%rbx
  1033. vaesdec %xmm0,%xmm3,%xmm3
  1034. prefetcht0 31(%r9)
  1035. vaesdec %xmm0,%xmm4,%xmm4
  1036. vaesdec %xmm0,%xmm5,%xmm5
  1037. leaq (%r9,%rbx,1),%rbx
  1038. cmovgeq %rsp,%r9
  1039. vaesdec %xmm0,%xmm6,%xmm6
  1040. cmovgq %rsp,%rbx
  1041. vaesdec %xmm0,%xmm7,%xmm7
  1042. subq %r9,%rbx
  1043. vaesdec %xmm0,%xmm8,%xmm8
  1044. vmovdqu 16(%r9),%xmm11
  1045. movq %rbx,64+8(%rsp)
  1046. vaesdec %xmm0,%xmm9,%xmm9
  1047. vmovups -56(%rsi),%xmm0
  1048. leaq 16(%r9,%rbx,1),%r9
  1049. vmovdqu %xmm11,144(%rsp)
  1050. vaesdec %xmm1,%xmm2,%xmm2
  1051. cmpl 32+8(%rsp),%ecx
  1052. movq 64+16(%rsp),%rbx
  1053. vaesdec %xmm1,%xmm3,%xmm3
  1054. prefetcht0 31(%r10)
  1055. vaesdec %xmm1,%xmm4,%xmm4
  1056. prefetcht0 15(%r8)
  1057. vaesdec %xmm1,%xmm5,%xmm5
  1058. leaq (%r10,%rbx,1),%rbx
  1059. cmovgeq %rsp,%r10
  1060. vaesdec %xmm1,%xmm6,%xmm6
  1061. cmovgq %rsp,%rbx
  1062. vaesdec %xmm1,%xmm7,%xmm7
  1063. subq %r10,%rbx
  1064. vaesdec %xmm1,%xmm8,%xmm8
  1065. vmovdqu 16(%r10),%xmm12
  1066. movq %rbx,64+16(%rsp)
  1067. vaesdec %xmm1,%xmm9,%xmm9
  1068. vmovups -40(%rsi),%xmm1
  1069. leaq 16(%r10,%rbx,1),%r10
  1070. vmovdqu %xmm12,160(%rsp)
  1071. vaesdec %xmm0,%xmm2,%xmm2
  1072. cmpl 32+12(%rsp),%ecx
  1073. movq 64+24(%rsp),%rbx
  1074. vaesdec %xmm0,%xmm3,%xmm3
  1075. prefetcht0 31(%r11)
  1076. vaesdec %xmm0,%xmm4,%xmm4
  1077. prefetcht0 15(%r9)
  1078. vaesdec %xmm0,%xmm5,%xmm5
  1079. leaq (%r11,%rbx,1),%rbx
  1080. cmovgeq %rsp,%r11
  1081. vaesdec %xmm0,%xmm6,%xmm6
  1082. cmovgq %rsp,%rbx
  1083. vaesdec %xmm0,%xmm7,%xmm7
  1084. subq %r11,%rbx
  1085. vaesdec %xmm0,%xmm8,%xmm8
  1086. vmovdqu 16(%r11),%xmm13
  1087. movq %rbx,64+24(%rsp)
  1088. vaesdec %xmm0,%xmm9,%xmm9
  1089. vmovups -24(%rsi),%xmm0
  1090. leaq 16(%r11,%rbx,1),%r11
  1091. vmovdqu %xmm13,176(%rsp)
  1092. vaesdec %xmm1,%xmm2,%xmm2
  1093. cmpl 32+16(%rsp),%ecx
  1094. movq 64+32(%rsp),%rbx
  1095. vaesdec %xmm1,%xmm3,%xmm3
  1096. prefetcht0 31(%r12)
  1097. vaesdec %xmm1,%xmm4,%xmm4
  1098. prefetcht0 15(%r10)
  1099. vaesdec %xmm1,%xmm5,%xmm5
  1100. leaq (%r12,%rbx,1),%rbx
  1101. cmovgeq %rsp,%r12
  1102. vaesdec %xmm1,%xmm6,%xmm6
  1103. cmovgq %rsp,%rbx
  1104. vaesdec %xmm1,%xmm7,%xmm7
  1105. subq %r12,%rbx
  1106. vaesdec %xmm1,%xmm8,%xmm8
  1107. vmovdqu 16(%r12),%xmm10
  1108. movq %rbx,64+32(%rsp)
  1109. vaesdec %xmm1,%xmm9,%xmm9
  1110. vmovups -8(%rsi),%xmm1
  1111. leaq 16(%r12,%rbx,1),%r12
  1112. vaesdec %xmm0,%xmm2,%xmm2
  1113. cmpl 32+20(%rsp),%ecx
  1114. movq 64+40(%rsp),%rbx
  1115. vaesdec %xmm0,%xmm3,%xmm3
  1116. prefetcht0 31(%r13)
  1117. vaesdec %xmm0,%xmm4,%xmm4
  1118. prefetcht0 15(%r11)
  1119. vaesdec %xmm0,%xmm5,%xmm5
  1120. leaq (%rbx,%r13,1),%rbx
  1121. cmovgeq %rsp,%r13
  1122. vaesdec %xmm0,%xmm6,%xmm6
  1123. cmovgq %rsp,%rbx
  1124. vaesdec %xmm0,%xmm7,%xmm7
  1125. subq %r13,%rbx
  1126. vaesdec %xmm0,%xmm8,%xmm8
  1127. vmovdqu 16(%r13),%xmm11
  1128. movq %rbx,64+40(%rsp)
  1129. vaesdec %xmm0,%xmm9,%xmm9
  1130. vmovups 8(%rsi),%xmm0
  1131. leaq 16(%r13,%rbx,1),%r13
  1132. vaesdec %xmm1,%xmm2,%xmm2
  1133. cmpl 32+24(%rsp),%ecx
  1134. movq 64+48(%rsp),%rbx
  1135. vaesdec %xmm1,%xmm3,%xmm3
  1136. prefetcht0 31(%r14)
  1137. vaesdec %xmm1,%xmm4,%xmm4
  1138. prefetcht0 15(%r12)
  1139. vaesdec %xmm1,%xmm5,%xmm5
  1140. leaq (%r14,%rbx,1),%rbx
  1141. cmovgeq %rsp,%r14
  1142. vaesdec %xmm1,%xmm6,%xmm6
  1143. cmovgq %rsp,%rbx
  1144. vaesdec %xmm1,%xmm7,%xmm7
  1145. subq %r14,%rbx
  1146. vaesdec %xmm1,%xmm8,%xmm8
  1147. vmovdqu 16(%r14),%xmm12
  1148. movq %rbx,64+48(%rsp)
  1149. vaesdec %xmm1,%xmm9,%xmm9
  1150. vmovups 24(%rsi),%xmm1
  1151. leaq 16(%r14,%rbx,1),%r14
  1152. vaesdec %xmm0,%xmm2,%xmm2
  1153. cmpl 32+28(%rsp),%ecx
  1154. movq 64+56(%rsp),%rbx
  1155. vaesdec %xmm0,%xmm3,%xmm3
  1156. prefetcht0 31(%r15)
  1157. vaesdec %xmm0,%xmm4,%xmm4
  1158. prefetcht0 15(%r13)
  1159. vaesdec %xmm0,%xmm5,%xmm5
  1160. leaq (%r15,%rbx,1),%rbx
  1161. cmovgeq %rsp,%r15
  1162. vaesdec %xmm0,%xmm6,%xmm6
  1163. cmovgq %rsp,%rbx
  1164. vaesdec %xmm0,%xmm7,%xmm7
  1165. subq %r15,%rbx
  1166. vaesdec %xmm0,%xmm8,%xmm8
  1167. vmovdqu 16(%r15),%xmm13
  1168. movq %rbx,64+56(%rsp)
  1169. vaesdec %xmm0,%xmm9,%xmm9
  1170. vmovups 40(%rsi),%xmm0
  1171. leaq 16(%r15,%rbx,1),%r15
  1172. vmovdqu 32(%rsp),%xmm14
  1173. prefetcht0 15(%r14)
  1174. prefetcht0 15(%r15)
  1175. cmpl $11,%eax
  1176. jb L$dec8x_tail
  1177. vaesdec %xmm1,%xmm2,%xmm2
  1178. vaesdec %xmm1,%xmm3,%xmm3
  1179. vaesdec %xmm1,%xmm4,%xmm4
  1180. vaesdec %xmm1,%xmm5,%xmm5
  1181. vaesdec %xmm1,%xmm6,%xmm6
  1182. vaesdec %xmm1,%xmm7,%xmm7
  1183. vaesdec %xmm1,%xmm8,%xmm8
  1184. vaesdec %xmm1,%xmm9,%xmm9
  1185. vmovups 176-120(%rsi),%xmm1
  1186. vaesdec %xmm0,%xmm2,%xmm2
  1187. vaesdec %xmm0,%xmm3,%xmm3
  1188. vaesdec %xmm0,%xmm4,%xmm4
  1189. vaesdec %xmm0,%xmm5,%xmm5
  1190. vaesdec %xmm0,%xmm6,%xmm6
  1191. vaesdec %xmm0,%xmm7,%xmm7
  1192. vaesdec %xmm0,%xmm8,%xmm8
  1193. vaesdec %xmm0,%xmm9,%xmm9
  1194. vmovups 192-120(%rsi),%xmm0
  1195. je L$dec8x_tail
  1196. vaesdec %xmm1,%xmm2,%xmm2
  1197. vaesdec %xmm1,%xmm3,%xmm3
  1198. vaesdec %xmm1,%xmm4,%xmm4
  1199. vaesdec %xmm1,%xmm5,%xmm5
  1200. vaesdec %xmm1,%xmm6,%xmm6
  1201. vaesdec %xmm1,%xmm7,%xmm7
  1202. vaesdec %xmm1,%xmm8,%xmm8
  1203. vaesdec %xmm1,%xmm9,%xmm9
  1204. vmovups 208-120(%rsi),%xmm1
  1205. vaesdec %xmm0,%xmm2,%xmm2
  1206. vaesdec %xmm0,%xmm3,%xmm3
  1207. vaesdec %xmm0,%xmm4,%xmm4
  1208. vaesdec %xmm0,%xmm5,%xmm5
  1209. vaesdec %xmm0,%xmm6,%xmm6
  1210. vaesdec %xmm0,%xmm7,%xmm7
  1211. vaesdec %xmm0,%xmm8,%xmm8
  1212. vaesdec %xmm0,%xmm9,%xmm9
  1213. vmovups 224-120(%rsi),%xmm0
  1214. L$dec8x_tail:
  1215. vaesdec %xmm1,%xmm2,%xmm2
  1216. vpxor %xmm15,%xmm15,%xmm15
  1217. vaesdec %xmm1,%xmm3,%xmm3
  1218. vaesdec %xmm1,%xmm4,%xmm4
  1219. vpcmpgtd %xmm15,%xmm14,%xmm15
  1220. vaesdec %xmm1,%xmm5,%xmm5
  1221. vaesdec %xmm1,%xmm6,%xmm6
  1222. vpaddd %xmm14,%xmm15,%xmm15
  1223. vmovdqu 48(%rsp),%xmm14
  1224. vaesdec %xmm1,%xmm7,%xmm7
  1225. movq 64(%rsp),%rbx
  1226. vaesdec %xmm1,%xmm8,%xmm8
  1227. vaesdec %xmm1,%xmm9,%xmm9
  1228. vmovups 16-120(%rsi),%xmm1
  1229. vaesdeclast %xmm0,%xmm2,%xmm2
  1230. vmovdqa %xmm15,32(%rsp)
  1231. vpxor %xmm15,%xmm15,%xmm15
  1232. vaesdeclast %xmm0,%xmm3,%xmm3
  1233. vpxor 0(%rbp),%xmm2,%xmm2
  1234. vaesdeclast %xmm0,%xmm4,%xmm4
  1235. vpxor 16(%rbp),%xmm3,%xmm3
  1236. vpcmpgtd %xmm15,%xmm14,%xmm15
  1237. vaesdeclast %xmm0,%xmm5,%xmm5
  1238. vpxor 32(%rbp),%xmm4,%xmm4
  1239. vaesdeclast %xmm0,%xmm6,%xmm6
  1240. vpxor 48(%rbp),%xmm5,%xmm5
  1241. vpaddd %xmm15,%xmm14,%xmm14
  1242. vmovdqu -120(%rsi),%xmm15
  1243. vaesdeclast %xmm0,%xmm7,%xmm7
  1244. vpxor 64(%rbp),%xmm6,%xmm6
  1245. vaesdeclast %xmm0,%xmm8,%xmm8
  1246. vpxor 80(%rbp),%xmm7,%xmm7
  1247. vmovdqa %xmm14,48(%rsp)
  1248. vaesdeclast %xmm0,%xmm9,%xmm9
  1249. vpxor 96(%rbp),%xmm8,%xmm8
  1250. vmovups 32-120(%rsi),%xmm0
  1251. vmovups %xmm2,-16(%r8)
  1252. subq %rbx,%r8
  1253. vmovdqu 128+0(%rsp),%xmm2
  1254. vpxor 112(%rbp),%xmm9,%xmm9
  1255. vmovups %xmm3,-16(%r9)
  1256. subq 72(%rsp),%r9
  1257. vmovdqu %xmm2,0(%rbp)
  1258. vpxor %xmm15,%xmm2,%xmm2
  1259. vmovdqu 128+16(%rsp),%xmm3
  1260. vmovups %xmm4,-16(%r10)
  1261. subq 80(%rsp),%r10
  1262. vmovdqu %xmm3,16(%rbp)
  1263. vpxor %xmm15,%xmm3,%xmm3
  1264. vmovdqu 128+32(%rsp),%xmm4
  1265. vmovups %xmm5,-16(%r11)
  1266. subq 88(%rsp),%r11
  1267. vmovdqu %xmm4,32(%rbp)
  1268. vpxor %xmm15,%xmm4,%xmm4
  1269. vmovdqu 128+48(%rsp),%xmm5
  1270. vmovups %xmm6,-16(%r12)
  1271. subq 96(%rsp),%r12
  1272. vmovdqu %xmm5,48(%rbp)
  1273. vpxor %xmm15,%xmm5,%xmm5
  1274. vmovdqu %xmm10,64(%rbp)
  1275. vpxor %xmm10,%xmm15,%xmm6
  1276. vmovups %xmm7,-16(%r13)
  1277. subq 104(%rsp),%r13
  1278. vmovdqu %xmm11,80(%rbp)
  1279. vpxor %xmm11,%xmm15,%xmm7
  1280. vmovups %xmm8,-16(%r14)
  1281. subq 112(%rsp),%r14
  1282. vmovdqu %xmm12,96(%rbp)
  1283. vpxor %xmm12,%xmm15,%xmm8
  1284. vmovups %xmm9,-16(%r15)
  1285. subq 120(%rsp),%r15
  1286. vmovdqu %xmm13,112(%rbp)
  1287. vpxor %xmm13,%xmm15,%xmm9
  1288. xorq $128,%rbp
  1289. decl %edx
  1290. jnz L$oop_dec8x
  1291. movq 16(%rsp),%rax
  1292. L$dec8x_done:
  1293. vzeroupper
  1294. movq -48(%rax),%r15
  1295. movq -40(%rax),%r14
  1296. movq -32(%rax),%r13
  1297. movq -24(%rax),%r12
  1298. movq -16(%rax),%rbp
  1299. movq -8(%rax),%rbx
  1300. leaq (%rax),%rsp
  1301. L$dec8x_epilogue:
  1302. .byte 0xf3,0xc3