vpaes-x86.S 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__i386__)
  4. #if defined(BORINGSSL_PREFIX)
  5. #include <boringssl_prefix_symbols_asm.h>
  6. #endif
  7. .text
  8. #ifdef BORINGSSL_DISPATCH_TEST
  9. #endif
  10. .align 64
  11. .L_vpaes_consts:
  12. .long 218628480,235210255,168496130,67568393
  13. .long 252381056,17041926,33884169,51187212
  14. .long 252645135,252645135,252645135,252645135
  15. .long 1512730624,3266504856,1377990664,3401244816
  16. .long 830229760,1275146365,2969422977,3447763452
  17. .long 3411033600,2979783055,338359620,2782886510
  18. .long 4209124096,907596821,221174255,1006095553
  19. .long 191964160,3799684038,3164090317,1589111125
  20. .long 182528256,1777043520,2877432650,3265356744
  21. .long 1874708224,3503451415,3305285752,363511674
  22. .long 1606117888,3487855781,1093350906,2384367825
  23. .long 197121,67569157,134941193,202313229
  24. .long 67569157,134941193,202313229,197121
  25. .long 134941193,202313229,197121,67569157
  26. .long 202313229,197121,67569157,134941193
  27. .long 33619971,100992007,168364043,235736079
  28. .long 235736079,33619971,100992007,168364043
  29. .long 168364043,235736079,33619971,100992007
  30. .long 100992007,168364043,235736079,33619971
  31. .long 50462976,117835012,185207048,252579084
  32. .long 252314880,51251460,117574920,184942860
  33. .long 184682752,252054788,50987272,118359308
  34. .long 118099200,185467140,251790600,50727180
  35. .long 2946363062,528716217,1300004225,1881839624
  36. .long 1532713819,1532713819,1532713819,1532713819
  37. .long 3602276352,4288629033,3737020424,4153884961
  38. .long 1354558464,32357713,2958822624,3775749553
  39. .long 1201988352,132424512,1572796698,503232858
  40. .long 2213177600,1597421020,4103937655,675398315
  41. .long 2749646592,4273543773,1511898873,121693092
  42. .long 3040248576,1103263732,2871565598,1608280554
  43. .long 2236667136,2588920351,482954393,64377734
  44. .long 3069987328,291237287,2117370568,3650299247
  45. .long 533321216,3573750986,2572112006,1401264716
  46. .long 1339849704,2721158661,548607111,3445553514
  47. .long 2128193280,3054596040,2183486460,1257083700
  48. .long 655635200,1165381986,3923443150,2344132524
  49. .long 190078720,256924420,290342170,357187870
  50. .long 1610966272,2263057382,4103205268,309794674
  51. .long 2592527872,2233205587,1335446729,3402964816
  52. .long 3973531904,3225098121,3002836325,1918774430
  53. .long 3870401024,2102906079,2284471353,4117666579
  54. .long 617007872,1021508343,366931923,691083277
  55. .long 2528395776,3491914898,2968704004,1613121270
  56. .long 3445188352,3247741094,844474987,4093578302
  57. .long 651481088,1190302358,1689581232,574775300
  58. .long 4289380608,206939853,2555985458,2489840491
  59. .long 2130264064,327674451,3566485037,3349835193
  60. .long 2470714624,316102159,3636825756,3393945945
  61. .byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
  62. .byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
  63. .byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
  64. .byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
  65. .byte 118,101,114,115,105,116,121,41,0
  66. .align 64
  67. .hidden _vpaes_preheat
  68. .type _vpaes_preheat,@function
  69. .align 16
  70. _vpaes_preheat:
  71. addl (%esp),%ebp
  72. movdqa -48(%ebp),%xmm7
  73. movdqa -16(%ebp),%xmm6
  74. ret
  75. .size _vpaes_preheat,.-_vpaes_preheat
  76. .hidden _vpaes_encrypt_core
  77. .type _vpaes_encrypt_core,@function
  78. .align 16
  79. _vpaes_encrypt_core:
  80. movl $16,%ecx
  81. movl 240(%edx),%eax
  82. movdqa %xmm6,%xmm1
  83. movdqa (%ebp),%xmm2
  84. pandn %xmm0,%xmm1
  85. pand %xmm6,%xmm0
  86. movdqu (%edx),%xmm5
  87. .byte 102,15,56,0,208
  88. movdqa 16(%ebp),%xmm0
  89. pxor %xmm5,%xmm2
  90. psrld $4,%xmm1
  91. addl $16,%edx
  92. .byte 102,15,56,0,193
  93. leal 192(%ebp),%ebx
  94. pxor %xmm2,%xmm0
  95. jmp .L000enc_entry
  96. .align 16
  97. .L001enc_loop:
  98. movdqa 32(%ebp),%xmm4
  99. movdqa 48(%ebp),%xmm0
  100. .byte 102,15,56,0,226
  101. .byte 102,15,56,0,195
  102. pxor %xmm5,%xmm4
  103. movdqa 64(%ebp),%xmm5
  104. pxor %xmm4,%xmm0
  105. movdqa -64(%ebx,%ecx,1),%xmm1
  106. .byte 102,15,56,0,234
  107. movdqa 80(%ebp),%xmm2
  108. movdqa (%ebx,%ecx,1),%xmm4
  109. .byte 102,15,56,0,211
  110. movdqa %xmm0,%xmm3
  111. pxor %xmm5,%xmm2
  112. .byte 102,15,56,0,193
  113. addl $16,%edx
  114. pxor %xmm2,%xmm0
  115. .byte 102,15,56,0,220
  116. addl $16,%ecx
  117. pxor %xmm0,%xmm3
  118. .byte 102,15,56,0,193
  119. andl $48,%ecx
  120. subl $1,%eax
  121. pxor %xmm3,%xmm0
  122. .L000enc_entry:
  123. movdqa %xmm6,%xmm1
  124. movdqa -32(%ebp),%xmm5
  125. pandn %xmm0,%xmm1
  126. psrld $4,%xmm1
  127. pand %xmm6,%xmm0
  128. .byte 102,15,56,0,232
  129. movdqa %xmm7,%xmm3
  130. pxor %xmm1,%xmm0
  131. .byte 102,15,56,0,217
  132. movdqa %xmm7,%xmm4
  133. pxor %xmm5,%xmm3
  134. .byte 102,15,56,0,224
  135. movdqa %xmm7,%xmm2
  136. pxor %xmm5,%xmm4
  137. .byte 102,15,56,0,211
  138. movdqa %xmm7,%xmm3
  139. pxor %xmm0,%xmm2
  140. .byte 102,15,56,0,220
  141. movdqu (%edx),%xmm5
  142. pxor %xmm1,%xmm3
  143. jnz .L001enc_loop
  144. movdqa 96(%ebp),%xmm4
  145. movdqa 112(%ebp),%xmm0
  146. .byte 102,15,56,0,226
  147. pxor %xmm5,%xmm4
  148. .byte 102,15,56,0,195
  149. movdqa 64(%ebx,%ecx,1),%xmm1
  150. pxor %xmm4,%xmm0
  151. .byte 102,15,56,0,193
  152. ret
  153. .size _vpaes_encrypt_core,.-_vpaes_encrypt_core
  154. .hidden _vpaes_decrypt_core
  155. .type _vpaes_decrypt_core,@function
  156. .align 16
  157. _vpaes_decrypt_core:
  158. leal 608(%ebp),%ebx
  159. movl 240(%edx),%eax
  160. movdqa %xmm6,%xmm1
  161. movdqa -64(%ebx),%xmm2
  162. pandn %xmm0,%xmm1
  163. movl %eax,%ecx
  164. psrld $4,%xmm1
  165. movdqu (%edx),%xmm5
  166. shll $4,%ecx
  167. pand %xmm6,%xmm0
  168. .byte 102,15,56,0,208
  169. movdqa -48(%ebx),%xmm0
  170. xorl $48,%ecx
  171. .byte 102,15,56,0,193
  172. andl $48,%ecx
  173. pxor %xmm5,%xmm2
  174. movdqa 176(%ebp),%xmm5
  175. pxor %xmm2,%xmm0
  176. addl $16,%edx
  177. leal -352(%ebx,%ecx,1),%ecx
  178. jmp .L002dec_entry
  179. .align 16
  180. .L003dec_loop:
  181. movdqa -32(%ebx),%xmm4
  182. movdqa -16(%ebx),%xmm1
  183. .byte 102,15,56,0,226
  184. .byte 102,15,56,0,203
  185. pxor %xmm4,%xmm0
  186. movdqa (%ebx),%xmm4
  187. pxor %xmm1,%xmm0
  188. movdqa 16(%ebx),%xmm1
  189. .byte 102,15,56,0,226
  190. .byte 102,15,56,0,197
  191. .byte 102,15,56,0,203
  192. pxor %xmm4,%xmm0
  193. movdqa 32(%ebx),%xmm4
  194. pxor %xmm1,%xmm0
  195. movdqa 48(%ebx),%xmm1
  196. .byte 102,15,56,0,226
  197. .byte 102,15,56,0,197
  198. .byte 102,15,56,0,203
  199. pxor %xmm4,%xmm0
  200. movdqa 64(%ebx),%xmm4
  201. pxor %xmm1,%xmm0
  202. movdqa 80(%ebx),%xmm1
  203. .byte 102,15,56,0,226
  204. .byte 102,15,56,0,197
  205. .byte 102,15,56,0,203
  206. pxor %xmm4,%xmm0
  207. addl $16,%edx
  208. .byte 102,15,58,15,237,12
  209. pxor %xmm1,%xmm0
  210. subl $1,%eax
  211. .L002dec_entry:
  212. movdqa %xmm6,%xmm1
  213. movdqa -32(%ebp),%xmm2
  214. pandn %xmm0,%xmm1
  215. pand %xmm6,%xmm0
  216. psrld $4,%xmm1
  217. .byte 102,15,56,0,208
  218. movdqa %xmm7,%xmm3
  219. pxor %xmm1,%xmm0
  220. .byte 102,15,56,0,217
  221. movdqa %xmm7,%xmm4
  222. pxor %xmm2,%xmm3
  223. .byte 102,15,56,0,224
  224. pxor %xmm2,%xmm4
  225. movdqa %xmm7,%xmm2
  226. .byte 102,15,56,0,211
  227. movdqa %xmm7,%xmm3
  228. pxor %xmm0,%xmm2
  229. .byte 102,15,56,0,220
  230. movdqu (%edx),%xmm0
  231. pxor %xmm1,%xmm3
  232. jnz .L003dec_loop
  233. movdqa 96(%ebx),%xmm4
  234. .byte 102,15,56,0,226
  235. pxor %xmm0,%xmm4
  236. movdqa 112(%ebx),%xmm0
  237. movdqa (%ecx),%xmm2
  238. .byte 102,15,56,0,195
  239. pxor %xmm4,%xmm0
  240. .byte 102,15,56,0,194
  241. ret
  242. .size _vpaes_decrypt_core,.-_vpaes_decrypt_core
  243. .hidden _vpaes_schedule_core
  244. .type _vpaes_schedule_core,@function
  245. .align 16
  246. _vpaes_schedule_core:
  247. addl (%esp),%ebp
  248. movdqu (%esi),%xmm0
  249. movdqa 320(%ebp),%xmm2
  250. movdqa %xmm0,%xmm3
  251. leal (%ebp),%ebx
  252. movdqa %xmm2,4(%esp)
  253. call _vpaes_schedule_transform
  254. movdqa %xmm0,%xmm7
  255. testl %edi,%edi
  256. jnz .L004schedule_am_decrypting
  257. movdqu %xmm0,(%edx)
  258. jmp .L005schedule_go
  259. .L004schedule_am_decrypting:
  260. movdqa 256(%ebp,%ecx,1),%xmm1
  261. .byte 102,15,56,0,217
  262. movdqu %xmm3,(%edx)
  263. xorl $48,%ecx
  264. .L005schedule_go:
  265. cmpl $192,%eax
  266. ja .L006schedule_256
  267. je .L007schedule_192
  268. .L008schedule_128:
  269. movl $10,%eax
  270. .L009loop_schedule_128:
  271. call _vpaes_schedule_round
  272. decl %eax
  273. jz .L010schedule_mangle_last
  274. call _vpaes_schedule_mangle
  275. jmp .L009loop_schedule_128
  276. .align 16
  277. .L007schedule_192:
  278. movdqu 8(%esi),%xmm0
  279. call _vpaes_schedule_transform
  280. movdqa %xmm0,%xmm6
  281. pxor %xmm4,%xmm4
  282. movhlps %xmm4,%xmm6
  283. movl $4,%eax
  284. .L011loop_schedule_192:
  285. call _vpaes_schedule_round
  286. .byte 102,15,58,15,198,8
  287. call _vpaes_schedule_mangle
  288. call _vpaes_schedule_192_smear
  289. call _vpaes_schedule_mangle
  290. call _vpaes_schedule_round
  291. decl %eax
  292. jz .L010schedule_mangle_last
  293. call _vpaes_schedule_mangle
  294. call _vpaes_schedule_192_smear
  295. jmp .L011loop_schedule_192
  296. .align 16
  297. .L006schedule_256:
  298. movdqu 16(%esi),%xmm0
  299. call _vpaes_schedule_transform
  300. movl $7,%eax
  301. .L012loop_schedule_256:
  302. call _vpaes_schedule_mangle
  303. movdqa %xmm0,%xmm6
  304. call _vpaes_schedule_round
  305. decl %eax
  306. jz .L010schedule_mangle_last
  307. call _vpaes_schedule_mangle
  308. pshufd $255,%xmm0,%xmm0
  309. movdqa %xmm7,20(%esp)
  310. movdqa %xmm6,%xmm7
  311. call .L_vpaes_schedule_low_round
  312. movdqa 20(%esp),%xmm7
  313. jmp .L012loop_schedule_256
  314. .align 16
  315. .L010schedule_mangle_last:
  316. leal 384(%ebp),%ebx
  317. testl %edi,%edi
  318. jnz .L013schedule_mangle_last_dec
  319. movdqa 256(%ebp,%ecx,1),%xmm1
  320. .byte 102,15,56,0,193
  321. leal 352(%ebp),%ebx
  322. addl $32,%edx
  323. .L013schedule_mangle_last_dec:
  324. addl $-16,%edx
  325. pxor 336(%ebp),%xmm0
  326. call _vpaes_schedule_transform
  327. movdqu %xmm0,(%edx)
  328. pxor %xmm0,%xmm0
  329. pxor %xmm1,%xmm1
  330. pxor %xmm2,%xmm2
  331. pxor %xmm3,%xmm3
  332. pxor %xmm4,%xmm4
  333. pxor %xmm5,%xmm5
  334. pxor %xmm6,%xmm6
  335. pxor %xmm7,%xmm7
  336. ret
  337. .size _vpaes_schedule_core,.-_vpaes_schedule_core
  338. .hidden _vpaes_schedule_192_smear
  339. .type _vpaes_schedule_192_smear,@function
  340. .align 16
  341. _vpaes_schedule_192_smear:
  342. pshufd $128,%xmm6,%xmm1
  343. pshufd $254,%xmm7,%xmm0
  344. pxor %xmm1,%xmm6
  345. pxor %xmm1,%xmm1
  346. pxor %xmm0,%xmm6
  347. movdqa %xmm6,%xmm0
  348. movhlps %xmm1,%xmm6
  349. ret
  350. .size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
  351. .hidden _vpaes_schedule_round
  352. .type _vpaes_schedule_round,@function
  353. .align 16
  354. _vpaes_schedule_round:
  355. movdqa 8(%esp),%xmm2
  356. pxor %xmm1,%xmm1
  357. .byte 102,15,58,15,202,15
  358. .byte 102,15,58,15,210,15
  359. pxor %xmm1,%xmm7
  360. pshufd $255,%xmm0,%xmm0
  361. .byte 102,15,58,15,192,1
  362. movdqa %xmm2,8(%esp)
  363. .L_vpaes_schedule_low_round:
  364. movdqa %xmm7,%xmm1
  365. pslldq $4,%xmm7
  366. pxor %xmm1,%xmm7
  367. movdqa %xmm7,%xmm1
  368. pslldq $8,%xmm7
  369. pxor %xmm1,%xmm7
  370. pxor 336(%ebp),%xmm7
  371. movdqa -16(%ebp),%xmm4
  372. movdqa -48(%ebp),%xmm5
  373. movdqa %xmm4,%xmm1
  374. pandn %xmm0,%xmm1
  375. psrld $4,%xmm1
  376. pand %xmm4,%xmm0
  377. movdqa -32(%ebp),%xmm2
  378. .byte 102,15,56,0,208
  379. pxor %xmm1,%xmm0
  380. movdqa %xmm5,%xmm3
  381. .byte 102,15,56,0,217
  382. pxor %xmm2,%xmm3
  383. movdqa %xmm5,%xmm4
  384. .byte 102,15,56,0,224
  385. pxor %xmm2,%xmm4
  386. movdqa %xmm5,%xmm2
  387. .byte 102,15,56,0,211
  388. pxor %xmm0,%xmm2
  389. movdqa %xmm5,%xmm3
  390. .byte 102,15,56,0,220
  391. pxor %xmm1,%xmm3
  392. movdqa 32(%ebp),%xmm4
  393. .byte 102,15,56,0,226
  394. movdqa 48(%ebp),%xmm0
  395. .byte 102,15,56,0,195
  396. pxor %xmm4,%xmm0
  397. pxor %xmm7,%xmm0
  398. movdqa %xmm0,%xmm7
  399. ret
  400. .size _vpaes_schedule_round,.-_vpaes_schedule_round
  401. .hidden _vpaes_schedule_transform
  402. .type _vpaes_schedule_transform,@function
  403. .align 16
  404. _vpaes_schedule_transform:
  405. movdqa -16(%ebp),%xmm2
  406. movdqa %xmm2,%xmm1
  407. pandn %xmm0,%xmm1
  408. psrld $4,%xmm1
  409. pand %xmm2,%xmm0
  410. movdqa (%ebx),%xmm2
  411. .byte 102,15,56,0,208
  412. movdqa 16(%ebx),%xmm0
  413. .byte 102,15,56,0,193
  414. pxor %xmm2,%xmm0
  415. ret
  416. .size _vpaes_schedule_transform,.-_vpaes_schedule_transform
  417. .hidden _vpaes_schedule_mangle
  418. .type _vpaes_schedule_mangle,@function
  419. .align 16
  420. _vpaes_schedule_mangle:
  421. movdqa %xmm0,%xmm4
  422. movdqa 128(%ebp),%xmm5
  423. testl %edi,%edi
  424. jnz .L014schedule_mangle_dec
  425. addl $16,%edx
  426. pxor 336(%ebp),%xmm4
  427. .byte 102,15,56,0,229
  428. movdqa %xmm4,%xmm3
  429. .byte 102,15,56,0,229
  430. pxor %xmm4,%xmm3
  431. .byte 102,15,56,0,229
  432. pxor %xmm4,%xmm3
  433. jmp .L015schedule_mangle_both
  434. .align 16
  435. .L014schedule_mangle_dec:
  436. movdqa -16(%ebp),%xmm2
  437. leal 416(%ebp),%esi
  438. movdqa %xmm2,%xmm1
  439. pandn %xmm4,%xmm1
  440. psrld $4,%xmm1
  441. pand %xmm2,%xmm4
  442. movdqa (%esi),%xmm2
  443. .byte 102,15,56,0,212
  444. movdqa 16(%esi),%xmm3
  445. .byte 102,15,56,0,217
  446. pxor %xmm2,%xmm3
  447. .byte 102,15,56,0,221
  448. movdqa 32(%esi),%xmm2
  449. .byte 102,15,56,0,212
  450. pxor %xmm3,%xmm2
  451. movdqa 48(%esi),%xmm3
  452. .byte 102,15,56,0,217
  453. pxor %xmm2,%xmm3
  454. .byte 102,15,56,0,221
  455. movdqa 64(%esi),%xmm2
  456. .byte 102,15,56,0,212
  457. pxor %xmm3,%xmm2
  458. movdqa 80(%esi),%xmm3
  459. .byte 102,15,56,0,217
  460. pxor %xmm2,%xmm3
  461. .byte 102,15,56,0,221
  462. movdqa 96(%esi),%xmm2
  463. .byte 102,15,56,0,212
  464. pxor %xmm3,%xmm2
  465. movdqa 112(%esi),%xmm3
  466. .byte 102,15,56,0,217
  467. pxor %xmm2,%xmm3
  468. addl $-16,%edx
  469. .L015schedule_mangle_both:
  470. movdqa 256(%ebp,%ecx,1),%xmm1
  471. .byte 102,15,56,0,217
  472. addl $-16,%ecx
  473. andl $48,%ecx
  474. movdqu %xmm3,(%edx)
  475. ret
  476. .size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
  477. .globl vpaes_set_encrypt_key
  478. .hidden vpaes_set_encrypt_key
  479. .type vpaes_set_encrypt_key,@function
  480. .align 16
  481. vpaes_set_encrypt_key:
  482. .L_vpaes_set_encrypt_key_begin:
  483. pushl %ebp
  484. pushl %ebx
  485. pushl %esi
  486. pushl %edi
  487. #ifdef BORINGSSL_DISPATCH_TEST
  488. pushl %ebx
  489. pushl %edx
  490. call .L016pic
  491. .L016pic:
  492. popl %ebx
  493. leal BORINGSSL_function_hit+5-.L016pic(%ebx),%ebx
  494. movl $1,%edx
  495. movb %dl,(%ebx)
  496. popl %edx
  497. popl %ebx
  498. #endif
  499. movl 20(%esp),%esi
  500. leal -56(%esp),%ebx
  501. movl 24(%esp),%eax
  502. andl $-16,%ebx
  503. movl 28(%esp),%edx
  504. xchgl %esp,%ebx
  505. movl %ebx,48(%esp)
  506. movl %eax,%ebx
  507. shrl $5,%ebx
  508. addl $5,%ebx
  509. movl %ebx,240(%edx)
  510. movl $48,%ecx
  511. movl $0,%edi
  512. leal .L_vpaes_consts+0x30-.L017pic_point,%ebp
  513. call _vpaes_schedule_core
  514. .L017pic_point:
  515. movl 48(%esp),%esp
  516. xorl %eax,%eax
  517. popl %edi
  518. popl %esi
  519. popl %ebx
  520. popl %ebp
  521. ret
  522. .size vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
  523. .globl vpaes_set_decrypt_key
  524. .hidden vpaes_set_decrypt_key
  525. .type vpaes_set_decrypt_key,@function
  526. .align 16
  527. vpaes_set_decrypt_key:
  528. .L_vpaes_set_decrypt_key_begin:
  529. pushl %ebp
  530. pushl %ebx
  531. pushl %esi
  532. pushl %edi
  533. movl 20(%esp),%esi
  534. leal -56(%esp),%ebx
  535. movl 24(%esp),%eax
  536. andl $-16,%ebx
  537. movl 28(%esp),%edx
  538. xchgl %esp,%ebx
  539. movl %ebx,48(%esp)
  540. movl %eax,%ebx
  541. shrl $5,%ebx
  542. addl $5,%ebx
  543. movl %ebx,240(%edx)
  544. shll $4,%ebx
  545. leal 16(%edx,%ebx,1),%edx
  546. movl $1,%edi
  547. movl %eax,%ecx
  548. shrl $1,%ecx
  549. andl $32,%ecx
  550. xorl $32,%ecx
  551. leal .L_vpaes_consts+0x30-.L018pic_point,%ebp
  552. call _vpaes_schedule_core
  553. .L018pic_point:
  554. movl 48(%esp),%esp
  555. xorl %eax,%eax
  556. popl %edi
  557. popl %esi
  558. popl %ebx
  559. popl %ebp
  560. ret
  561. .size vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
  562. .globl vpaes_encrypt
  563. .hidden vpaes_encrypt
  564. .type vpaes_encrypt,@function
  565. .align 16
  566. vpaes_encrypt:
  567. .L_vpaes_encrypt_begin:
  568. pushl %ebp
  569. pushl %ebx
  570. pushl %esi
  571. pushl %edi
  572. #ifdef BORINGSSL_DISPATCH_TEST
  573. pushl %ebx
  574. pushl %edx
  575. call .L019pic
  576. .L019pic:
  577. popl %ebx
  578. leal BORINGSSL_function_hit+4-.L019pic(%ebx),%ebx
  579. movl $1,%edx
  580. movb %dl,(%ebx)
  581. popl %edx
  582. popl %ebx
  583. #endif
  584. leal .L_vpaes_consts+0x30-.L020pic_point,%ebp
  585. call _vpaes_preheat
  586. .L020pic_point:
  587. movl 20(%esp),%esi
  588. leal -56(%esp),%ebx
  589. movl 24(%esp),%edi
  590. andl $-16,%ebx
  591. movl 28(%esp),%edx
  592. xchgl %esp,%ebx
  593. movl %ebx,48(%esp)
  594. movdqu (%esi),%xmm0
  595. call _vpaes_encrypt_core
  596. movdqu %xmm0,(%edi)
  597. movl 48(%esp),%esp
  598. popl %edi
  599. popl %esi
  600. popl %ebx
  601. popl %ebp
  602. ret
  603. .size vpaes_encrypt,.-.L_vpaes_encrypt_begin
  604. .globl vpaes_decrypt
  605. .hidden vpaes_decrypt
  606. .type vpaes_decrypt,@function
  607. .align 16
  608. vpaes_decrypt:
  609. .L_vpaes_decrypt_begin:
  610. pushl %ebp
  611. pushl %ebx
  612. pushl %esi
  613. pushl %edi
  614. leal .L_vpaes_consts+0x30-.L021pic_point,%ebp
  615. call _vpaes_preheat
  616. .L021pic_point:
  617. movl 20(%esp),%esi
  618. leal -56(%esp),%ebx
  619. movl 24(%esp),%edi
  620. andl $-16,%ebx
  621. movl 28(%esp),%edx
  622. xchgl %esp,%ebx
  623. movl %ebx,48(%esp)
  624. movdqu (%esi),%xmm0
  625. call _vpaes_decrypt_core
  626. movdqu %xmm0,(%edi)
  627. movl 48(%esp),%esp
  628. popl %edi
  629. popl %esi
  630. popl %ebx
  631. popl %ebp
  632. ret
  633. .size vpaes_decrypt,.-.L_vpaes_decrypt_begin
  634. .globl vpaes_cbc_encrypt
  635. .hidden vpaes_cbc_encrypt
  636. .type vpaes_cbc_encrypt,@function
  637. .align 16
  638. vpaes_cbc_encrypt:
  639. .L_vpaes_cbc_encrypt_begin:
  640. pushl %ebp
  641. pushl %ebx
  642. pushl %esi
  643. pushl %edi
  644. movl 20(%esp),%esi
  645. movl 24(%esp),%edi
  646. movl 28(%esp),%eax
  647. movl 32(%esp),%edx
  648. subl $16,%eax
  649. jc .L022cbc_abort
  650. leal -56(%esp),%ebx
  651. movl 36(%esp),%ebp
  652. andl $-16,%ebx
  653. movl 40(%esp),%ecx
  654. xchgl %esp,%ebx
  655. movdqu (%ebp),%xmm1
  656. subl %esi,%edi
  657. movl %ebx,48(%esp)
  658. movl %edi,(%esp)
  659. movl %edx,4(%esp)
  660. movl %ebp,8(%esp)
  661. movl %eax,%edi
  662. leal .L_vpaes_consts+0x30-.L023pic_point,%ebp
  663. call _vpaes_preheat
  664. .L023pic_point:
  665. cmpl $0,%ecx
  666. je .L024cbc_dec_loop
  667. jmp .L025cbc_enc_loop
  668. .align 16
  669. .L025cbc_enc_loop:
  670. movdqu (%esi),%xmm0
  671. pxor %xmm1,%xmm0
  672. call _vpaes_encrypt_core
  673. movl (%esp),%ebx
  674. movl 4(%esp),%edx
  675. movdqa %xmm0,%xmm1
  676. movdqu %xmm0,(%ebx,%esi,1)
  677. leal 16(%esi),%esi
  678. subl $16,%edi
  679. jnc .L025cbc_enc_loop
  680. jmp .L026cbc_done
  681. .align 16
  682. .L024cbc_dec_loop:
  683. movdqu (%esi),%xmm0
  684. movdqa %xmm1,16(%esp)
  685. movdqa %xmm0,32(%esp)
  686. call _vpaes_decrypt_core
  687. movl (%esp),%ebx
  688. movl 4(%esp),%edx
  689. pxor 16(%esp),%xmm0
  690. movdqa 32(%esp),%xmm1
  691. movdqu %xmm0,(%ebx,%esi,1)
  692. leal 16(%esi),%esi
  693. subl $16,%edi
  694. jnc .L024cbc_dec_loop
  695. .L026cbc_done:
  696. movl 8(%esp),%ebx
  697. movl 48(%esp),%esp
  698. movdqu %xmm1,(%ebx)
  699. .L022cbc_abort:
  700. popl %edi
  701. popl %esi
  702. popl %ebx
  703. popl %ebp
  704. ret
  705. .size vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
  706. #endif
  707. .section .note.GNU-stack,"",@progbits