vpaes-x86.S 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  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 6,0x90
  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 6,0x90
  67. .private_extern __vpaes_preheat
  68. .align 4
  69. __vpaes_preheat:
  70. addl (%esp),%ebp
  71. movdqa -48(%ebp),%xmm7
  72. movdqa -16(%ebp),%xmm6
  73. ret
  74. .private_extern __vpaes_encrypt_core
  75. .align 4
  76. __vpaes_encrypt_core:
  77. movl $16,%ecx
  78. movl 240(%edx),%eax
  79. movdqa %xmm6,%xmm1
  80. movdqa (%ebp),%xmm2
  81. pandn %xmm0,%xmm1
  82. pand %xmm6,%xmm0
  83. movdqu (%edx),%xmm5
  84. .byte 102,15,56,0,208
  85. movdqa 16(%ebp),%xmm0
  86. pxor %xmm5,%xmm2
  87. psrld $4,%xmm1
  88. addl $16,%edx
  89. .byte 102,15,56,0,193
  90. leal 192(%ebp),%ebx
  91. pxor %xmm2,%xmm0
  92. jmp L000enc_entry
  93. .align 4,0x90
  94. L001enc_loop:
  95. movdqa 32(%ebp),%xmm4
  96. movdqa 48(%ebp),%xmm0
  97. .byte 102,15,56,0,226
  98. .byte 102,15,56,0,195
  99. pxor %xmm5,%xmm4
  100. movdqa 64(%ebp),%xmm5
  101. pxor %xmm4,%xmm0
  102. movdqa -64(%ebx,%ecx,1),%xmm1
  103. .byte 102,15,56,0,234
  104. movdqa 80(%ebp),%xmm2
  105. movdqa (%ebx,%ecx,1),%xmm4
  106. .byte 102,15,56,0,211
  107. movdqa %xmm0,%xmm3
  108. pxor %xmm5,%xmm2
  109. .byte 102,15,56,0,193
  110. addl $16,%edx
  111. pxor %xmm2,%xmm0
  112. .byte 102,15,56,0,220
  113. addl $16,%ecx
  114. pxor %xmm0,%xmm3
  115. .byte 102,15,56,0,193
  116. andl $48,%ecx
  117. subl $1,%eax
  118. pxor %xmm3,%xmm0
  119. L000enc_entry:
  120. movdqa %xmm6,%xmm1
  121. movdqa -32(%ebp),%xmm5
  122. pandn %xmm0,%xmm1
  123. psrld $4,%xmm1
  124. pand %xmm6,%xmm0
  125. .byte 102,15,56,0,232
  126. movdqa %xmm7,%xmm3
  127. pxor %xmm1,%xmm0
  128. .byte 102,15,56,0,217
  129. movdqa %xmm7,%xmm4
  130. pxor %xmm5,%xmm3
  131. .byte 102,15,56,0,224
  132. movdqa %xmm7,%xmm2
  133. pxor %xmm5,%xmm4
  134. .byte 102,15,56,0,211
  135. movdqa %xmm7,%xmm3
  136. pxor %xmm0,%xmm2
  137. .byte 102,15,56,0,220
  138. movdqu (%edx),%xmm5
  139. pxor %xmm1,%xmm3
  140. jnz L001enc_loop
  141. movdqa 96(%ebp),%xmm4
  142. movdqa 112(%ebp),%xmm0
  143. .byte 102,15,56,0,226
  144. pxor %xmm5,%xmm4
  145. .byte 102,15,56,0,195
  146. movdqa 64(%ebx,%ecx,1),%xmm1
  147. pxor %xmm4,%xmm0
  148. .byte 102,15,56,0,193
  149. ret
  150. .private_extern __vpaes_decrypt_core
  151. .align 4
  152. __vpaes_decrypt_core:
  153. leal 608(%ebp),%ebx
  154. movl 240(%edx),%eax
  155. movdqa %xmm6,%xmm1
  156. movdqa -64(%ebx),%xmm2
  157. pandn %xmm0,%xmm1
  158. movl %eax,%ecx
  159. psrld $4,%xmm1
  160. movdqu (%edx),%xmm5
  161. shll $4,%ecx
  162. pand %xmm6,%xmm0
  163. .byte 102,15,56,0,208
  164. movdqa -48(%ebx),%xmm0
  165. xorl $48,%ecx
  166. .byte 102,15,56,0,193
  167. andl $48,%ecx
  168. pxor %xmm5,%xmm2
  169. movdqa 176(%ebp),%xmm5
  170. pxor %xmm2,%xmm0
  171. addl $16,%edx
  172. leal -352(%ebx,%ecx,1),%ecx
  173. jmp L002dec_entry
  174. .align 4,0x90
  175. L003dec_loop:
  176. movdqa -32(%ebx),%xmm4
  177. movdqa -16(%ebx),%xmm1
  178. .byte 102,15,56,0,226
  179. .byte 102,15,56,0,203
  180. pxor %xmm4,%xmm0
  181. movdqa (%ebx),%xmm4
  182. pxor %xmm1,%xmm0
  183. movdqa 16(%ebx),%xmm1
  184. .byte 102,15,56,0,226
  185. .byte 102,15,56,0,197
  186. .byte 102,15,56,0,203
  187. pxor %xmm4,%xmm0
  188. movdqa 32(%ebx),%xmm4
  189. pxor %xmm1,%xmm0
  190. movdqa 48(%ebx),%xmm1
  191. .byte 102,15,56,0,226
  192. .byte 102,15,56,0,197
  193. .byte 102,15,56,0,203
  194. pxor %xmm4,%xmm0
  195. movdqa 64(%ebx),%xmm4
  196. pxor %xmm1,%xmm0
  197. movdqa 80(%ebx),%xmm1
  198. .byte 102,15,56,0,226
  199. .byte 102,15,56,0,197
  200. .byte 102,15,56,0,203
  201. pxor %xmm4,%xmm0
  202. addl $16,%edx
  203. .byte 102,15,58,15,237,12
  204. pxor %xmm1,%xmm0
  205. subl $1,%eax
  206. L002dec_entry:
  207. movdqa %xmm6,%xmm1
  208. movdqa -32(%ebp),%xmm2
  209. pandn %xmm0,%xmm1
  210. pand %xmm6,%xmm0
  211. psrld $4,%xmm1
  212. .byte 102,15,56,0,208
  213. movdqa %xmm7,%xmm3
  214. pxor %xmm1,%xmm0
  215. .byte 102,15,56,0,217
  216. movdqa %xmm7,%xmm4
  217. pxor %xmm2,%xmm3
  218. .byte 102,15,56,0,224
  219. pxor %xmm2,%xmm4
  220. movdqa %xmm7,%xmm2
  221. .byte 102,15,56,0,211
  222. movdqa %xmm7,%xmm3
  223. pxor %xmm0,%xmm2
  224. .byte 102,15,56,0,220
  225. movdqu (%edx),%xmm0
  226. pxor %xmm1,%xmm3
  227. jnz L003dec_loop
  228. movdqa 96(%ebx),%xmm4
  229. .byte 102,15,56,0,226
  230. pxor %xmm0,%xmm4
  231. movdqa 112(%ebx),%xmm0
  232. movdqa (%ecx),%xmm2
  233. .byte 102,15,56,0,195
  234. pxor %xmm4,%xmm0
  235. .byte 102,15,56,0,194
  236. ret
  237. .private_extern __vpaes_schedule_core
  238. .align 4
  239. __vpaes_schedule_core:
  240. addl (%esp),%ebp
  241. movdqu (%esi),%xmm0
  242. movdqa 320(%ebp),%xmm2
  243. movdqa %xmm0,%xmm3
  244. leal (%ebp),%ebx
  245. movdqa %xmm2,4(%esp)
  246. call __vpaes_schedule_transform
  247. movdqa %xmm0,%xmm7
  248. testl %edi,%edi
  249. jnz L004schedule_am_decrypting
  250. movdqu %xmm0,(%edx)
  251. jmp L005schedule_go
  252. L004schedule_am_decrypting:
  253. movdqa 256(%ebp,%ecx,1),%xmm1
  254. .byte 102,15,56,0,217
  255. movdqu %xmm3,(%edx)
  256. xorl $48,%ecx
  257. L005schedule_go:
  258. cmpl $192,%eax
  259. ja L006schedule_256
  260. je L007schedule_192
  261. L008schedule_128:
  262. movl $10,%eax
  263. L009loop_schedule_128:
  264. call __vpaes_schedule_round
  265. decl %eax
  266. jz L010schedule_mangle_last
  267. call __vpaes_schedule_mangle
  268. jmp L009loop_schedule_128
  269. .align 4,0x90
  270. L007schedule_192:
  271. movdqu 8(%esi),%xmm0
  272. call __vpaes_schedule_transform
  273. movdqa %xmm0,%xmm6
  274. pxor %xmm4,%xmm4
  275. movhlps %xmm4,%xmm6
  276. movl $4,%eax
  277. L011loop_schedule_192:
  278. call __vpaes_schedule_round
  279. .byte 102,15,58,15,198,8
  280. call __vpaes_schedule_mangle
  281. call __vpaes_schedule_192_smear
  282. call __vpaes_schedule_mangle
  283. call __vpaes_schedule_round
  284. decl %eax
  285. jz L010schedule_mangle_last
  286. call __vpaes_schedule_mangle
  287. call __vpaes_schedule_192_smear
  288. jmp L011loop_schedule_192
  289. .align 4,0x90
  290. L006schedule_256:
  291. movdqu 16(%esi),%xmm0
  292. call __vpaes_schedule_transform
  293. movl $7,%eax
  294. L012loop_schedule_256:
  295. call __vpaes_schedule_mangle
  296. movdqa %xmm0,%xmm6
  297. call __vpaes_schedule_round
  298. decl %eax
  299. jz L010schedule_mangle_last
  300. call __vpaes_schedule_mangle
  301. pshufd $255,%xmm0,%xmm0
  302. movdqa %xmm7,20(%esp)
  303. movdqa %xmm6,%xmm7
  304. call L_vpaes_schedule_low_round
  305. movdqa 20(%esp),%xmm7
  306. jmp L012loop_schedule_256
  307. .align 4,0x90
  308. L010schedule_mangle_last:
  309. leal 384(%ebp),%ebx
  310. testl %edi,%edi
  311. jnz L013schedule_mangle_last_dec
  312. movdqa 256(%ebp,%ecx,1),%xmm1
  313. .byte 102,15,56,0,193
  314. leal 352(%ebp),%ebx
  315. addl $32,%edx
  316. L013schedule_mangle_last_dec:
  317. addl $-16,%edx
  318. pxor 336(%ebp),%xmm0
  319. call __vpaes_schedule_transform
  320. movdqu %xmm0,(%edx)
  321. pxor %xmm0,%xmm0
  322. pxor %xmm1,%xmm1
  323. pxor %xmm2,%xmm2
  324. pxor %xmm3,%xmm3
  325. pxor %xmm4,%xmm4
  326. pxor %xmm5,%xmm5
  327. pxor %xmm6,%xmm6
  328. pxor %xmm7,%xmm7
  329. ret
  330. .private_extern __vpaes_schedule_192_smear
  331. .align 4
  332. __vpaes_schedule_192_smear:
  333. pshufd $128,%xmm6,%xmm1
  334. pshufd $254,%xmm7,%xmm0
  335. pxor %xmm1,%xmm6
  336. pxor %xmm1,%xmm1
  337. pxor %xmm0,%xmm6
  338. movdqa %xmm6,%xmm0
  339. movhlps %xmm1,%xmm6
  340. ret
  341. .private_extern __vpaes_schedule_round
  342. .align 4
  343. __vpaes_schedule_round:
  344. movdqa 8(%esp),%xmm2
  345. pxor %xmm1,%xmm1
  346. .byte 102,15,58,15,202,15
  347. .byte 102,15,58,15,210,15
  348. pxor %xmm1,%xmm7
  349. pshufd $255,%xmm0,%xmm0
  350. .byte 102,15,58,15,192,1
  351. movdqa %xmm2,8(%esp)
  352. L_vpaes_schedule_low_round:
  353. movdqa %xmm7,%xmm1
  354. pslldq $4,%xmm7
  355. pxor %xmm1,%xmm7
  356. movdqa %xmm7,%xmm1
  357. pslldq $8,%xmm7
  358. pxor %xmm1,%xmm7
  359. pxor 336(%ebp),%xmm7
  360. movdqa -16(%ebp),%xmm4
  361. movdqa -48(%ebp),%xmm5
  362. movdqa %xmm4,%xmm1
  363. pandn %xmm0,%xmm1
  364. psrld $4,%xmm1
  365. pand %xmm4,%xmm0
  366. movdqa -32(%ebp),%xmm2
  367. .byte 102,15,56,0,208
  368. pxor %xmm1,%xmm0
  369. movdqa %xmm5,%xmm3
  370. .byte 102,15,56,0,217
  371. pxor %xmm2,%xmm3
  372. movdqa %xmm5,%xmm4
  373. .byte 102,15,56,0,224
  374. pxor %xmm2,%xmm4
  375. movdqa %xmm5,%xmm2
  376. .byte 102,15,56,0,211
  377. pxor %xmm0,%xmm2
  378. movdqa %xmm5,%xmm3
  379. .byte 102,15,56,0,220
  380. pxor %xmm1,%xmm3
  381. movdqa 32(%ebp),%xmm4
  382. .byte 102,15,56,0,226
  383. movdqa 48(%ebp),%xmm0
  384. .byte 102,15,56,0,195
  385. pxor %xmm4,%xmm0
  386. pxor %xmm7,%xmm0
  387. movdqa %xmm0,%xmm7
  388. ret
  389. .private_extern __vpaes_schedule_transform
  390. .align 4
  391. __vpaes_schedule_transform:
  392. movdqa -16(%ebp),%xmm2
  393. movdqa %xmm2,%xmm1
  394. pandn %xmm0,%xmm1
  395. psrld $4,%xmm1
  396. pand %xmm2,%xmm0
  397. movdqa (%ebx),%xmm2
  398. .byte 102,15,56,0,208
  399. movdqa 16(%ebx),%xmm0
  400. .byte 102,15,56,0,193
  401. pxor %xmm2,%xmm0
  402. ret
  403. .private_extern __vpaes_schedule_mangle
  404. .align 4
  405. __vpaes_schedule_mangle:
  406. movdqa %xmm0,%xmm4
  407. movdqa 128(%ebp),%xmm5
  408. testl %edi,%edi
  409. jnz L014schedule_mangle_dec
  410. addl $16,%edx
  411. pxor 336(%ebp),%xmm4
  412. .byte 102,15,56,0,229
  413. movdqa %xmm4,%xmm3
  414. .byte 102,15,56,0,229
  415. pxor %xmm4,%xmm3
  416. .byte 102,15,56,0,229
  417. pxor %xmm4,%xmm3
  418. jmp L015schedule_mangle_both
  419. .align 4,0x90
  420. L014schedule_mangle_dec:
  421. movdqa -16(%ebp),%xmm2
  422. leal 416(%ebp),%esi
  423. movdqa %xmm2,%xmm1
  424. pandn %xmm4,%xmm1
  425. psrld $4,%xmm1
  426. pand %xmm2,%xmm4
  427. movdqa (%esi),%xmm2
  428. .byte 102,15,56,0,212
  429. movdqa 16(%esi),%xmm3
  430. .byte 102,15,56,0,217
  431. pxor %xmm2,%xmm3
  432. .byte 102,15,56,0,221
  433. movdqa 32(%esi),%xmm2
  434. .byte 102,15,56,0,212
  435. pxor %xmm3,%xmm2
  436. movdqa 48(%esi),%xmm3
  437. .byte 102,15,56,0,217
  438. pxor %xmm2,%xmm3
  439. .byte 102,15,56,0,221
  440. movdqa 64(%esi),%xmm2
  441. .byte 102,15,56,0,212
  442. pxor %xmm3,%xmm2
  443. movdqa 80(%esi),%xmm3
  444. .byte 102,15,56,0,217
  445. pxor %xmm2,%xmm3
  446. .byte 102,15,56,0,221
  447. movdqa 96(%esi),%xmm2
  448. .byte 102,15,56,0,212
  449. pxor %xmm3,%xmm2
  450. movdqa 112(%esi),%xmm3
  451. .byte 102,15,56,0,217
  452. pxor %xmm2,%xmm3
  453. addl $-16,%edx
  454. L015schedule_mangle_both:
  455. movdqa 256(%ebp,%ecx,1),%xmm1
  456. .byte 102,15,56,0,217
  457. addl $-16,%ecx
  458. andl $48,%ecx
  459. movdqu %xmm3,(%edx)
  460. ret
  461. .globl _vpaes_set_encrypt_key
  462. .private_extern _vpaes_set_encrypt_key
  463. .align 4
  464. _vpaes_set_encrypt_key:
  465. L_vpaes_set_encrypt_key_begin:
  466. pushl %ebp
  467. pushl %ebx
  468. pushl %esi
  469. pushl %edi
  470. #ifdef BORINGSSL_DISPATCH_TEST
  471. pushl %ebx
  472. pushl %edx
  473. call L016pic
  474. L016pic:
  475. popl %ebx
  476. leal _BORINGSSL_function_hit+5-L016pic(%ebx),%ebx
  477. movl $1,%edx
  478. movb %dl,(%ebx)
  479. popl %edx
  480. popl %ebx
  481. #endif
  482. movl 20(%esp),%esi
  483. leal -56(%esp),%ebx
  484. movl 24(%esp),%eax
  485. andl $-16,%ebx
  486. movl 28(%esp),%edx
  487. xchgl %esp,%ebx
  488. movl %ebx,48(%esp)
  489. movl %eax,%ebx
  490. shrl $5,%ebx
  491. addl $5,%ebx
  492. movl %ebx,240(%edx)
  493. movl $48,%ecx
  494. movl $0,%edi
  495. leal L_vpaes_consts+0x30-L017pic_point,%ebp
  496. call __vpaes_schedule_core
  497. L017pic_point:
  498. movl 48(%esp),%esp
  499. xorl %eax,%eax
  500. popl %edi
  501. popl %esi
  502. popl %ebx
  503. popl %ebp
  504. ret
  505. .globl _vpaes_set_decrypt_key
  506. .private_extern _vpaes_set_decrypt_key
  507. .align 4
  508. _vpaes_set_decrypt_key:
  509. L_vpaes_set_decrypt_key_begin:
  510. pushl %ebp
  511. pushl %ebx
  512. pushl %esi
  513. pushl %edi
  514. movl 20(%esp),%esi
  515. leal -56(%esp),%ebx
  516. movl 24(%esp),%eax
  517. andl $-16,%ebx
  518. movl 28(%esp),%edx
  519. xchgl %esp,%ebx
  520. movl %ebx,48(%esp)
  521. movl %eax,%ebx
  522. shrl $5,%ebx
  523. addl $5,%ebx
  524. movl %ebx,240(%edx)
  525. shll $4,%ebx
  526. leal 16(%edx,%ebx,1),%edx
  527. movl $1,%edi
  528. movl %eax,%ecx
  529. shrl $1,%ecx
  530. andl $32,%ecx
  531. xorl $32,%ecx
  532. leal L_vpaes_consts+0x30-L018pic_point,%ebp
  533. call __vpaes_schedule_core
  534. L018pic_point:
  535. movl 48(%esp),%esp
  536. xorl %eax,%eax
  537. popl %edi
  538. popl %esi
  539. popl %ebx
  540. popl %ebp
  541. ret
  542. .globl _vpaes_encrypt
  543. .private_extern _vpaes_encrypt
  544. .align 4
  545. _vpaes_encrypt:
  546. L_vpaes_encrypt_begin:
  547. pushl %ebp
  548. pushl %ebx
  549. pushl %esi
  550. pushl %edi
  551. #ifdef BORINGSSL_DISPATCH_TEST
  552. pushl %ebx
  553. pushl %edx
  554. call L019pic
  555. L019pic:
  556. popl %ebx
  557. leal _BORINGSSL_function_hit+4-L019pic(%ebx),%ebx
  558. movl $1,%edx
  559. movb %dl,(%ebx)
  560. popl %edx
  561. popl %ebx
  562. #endif
  563. leal L_vpaes_consts+0x30-L020pic_point,%ebp
  564. call __vpaes_preheat
  565. L020pic_point:
  566. movl 20(%esp),%esi
  567. leal -56(%esp),%ebx
  568. movl 24(%esp),%edi
  569. andl $-16,%ebx
  570. movl 28(%esp),%edx
  571. xchgl %esp,%ebx
  572. movl %ebx,48(%esp)
  573. movdqu (%esi),%xmm0
  574. call __vpaes_encrypt_core
  575. movdqu %xmm0,(%edi)
  576. movl 48(%esp),%esp
  577. popl %edi
  578. popl %esi
  579. popl %ebx
  580. popl %ebp
  581. ret
  582. .globl _vpaes_decrypt
  583. .private_extern _vpaes_decrypt
  584. .align 4
  585. _vpaes_decrypt:
  586. L_vpaes_decrypt_begin:
  587. pushl %ebp
  588. pushl %ebx
  589. pushl %esi
  590. pushl %edi
  591. leal L_vpaes_consts+0x30-L021pic_point,%ebp
  592. call __vpaes_preheat
  593. L021pic_point:
  594. movl 20(%esp),%esi
  595. leal -56(%esp),%ebx
  596. movl 24(%esp),%edi
  597. andl $-16,%ebx
  598. movl 28(%esp),%edx
  599. xchgl %esp,%ebx
  600. movl %ebx,48(%esp)
  601. movdqu (%esi),%xmm0
  602. call __vpaes_decrypt_core
  603. movdqu %xmm0,(%edi)
  604. movl 48(%esp),%esp
  605. popl %edi
  606. popl %esi
  607. popl %ebx
  608. popl %ebp
  609. ret
  610. .globl _vpaes_cbc_encrypt
  611. .private_extern _vpaes_cbc_encrypt
  612. .align 4
  613. _vpaes_cbc_encrypt:
  614. L_vpaes_cbc_encrypt_begin:
  615. pushl %ebp
  616. pushl %ebx
  617. pushl %esi
  618. pushl %edi
  619. movl 20(%esp),%esi
  620. movl 24(%esp),%edi
  621. movl 28(%esp),%eax
  622. movl 32(%esp),%edx
  623. subl $16,%eax
  624. jc L022cbc_abort
  625. leal -56(%esp),%ebx
  626. movl 36(%esp),%ebp
  627. andl $-16,%ebx
  628. movl 40(%esp),%ecx
  629. xchgl %esp,%ebx
  630. movdqu (%ebp),%xmm1
  631. subl %esi,%edi
  632. movl %ebx,48(%esp)
  633. movl %edi,(%esp)
  634. movl %edx,4(%esp)
  635. movl %ebp,8(%esp)
  636. movl %eax,%edi
  637. leal L_vpaes_consts+0x30-L023pic_point,%ebp
  638. call __vpaes_preheat
  639. L023pic_point:
  640. cmpl $0,%ecx
  641. je L024cbc_dec_loop
  642. jmp L025cbc_enc_loop
  643. .align 4,0x90
  644. L025cbc_enc_loop:
  645. movdqu (%esi),%xmm0
  646. pxor %xmm1,%xmm0
  647. call __vpaes_encrypt_core
  648. movl (%esp),%ebx
  649. movl 4(%esp),%edx
  650. movdqa %xmm0,%xmm1
  651. movdqu %xmm0,(%ebx,%esi,1)
  652. leal 16(%esi),%esi
  653. subl $16,%edi
  654. jnc L025cbc_enc_loop
  655. jmp L026cbc_done
  656. .align 4,0x90
  657. L024cbc_dec_loop:
  658. movdqu (%esi),%xmm0
  659. movdqa %xmm1,16(%esp)
  660. movdqa %xmm0,32(%esp)
  661. call __vpaes_decrypt_core
  662. movl (%esp),%ebx
  663. movl 4(%esp),%edx
  664. pxor 16(%esp),%xmm0
  665. movdqa 32(%esp),%xmm1
  666. movdqu %xmm0,(%ebx,%esi,1)
  667. leal 16(%esi),%esi
  668. subl $16,%edi
  669. jnc L024cbc_dec_loop
  670. L026cbc_done:
  671. movl 8(%esp),%ebx
  672. movl 48(%esp),%esp
  673. movdqu %xmm1,(%ebx)
  674. L022cbc_abort:
  675. popl %edi
  676. popl %esi
  677. popl %ebx
  678. popl %ebp
  679. ret
  680. #endif