vpaes-x86-macosx.S 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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. .align 6,0x90
  9. L_vpaes_consts:
  10. .long 218628480,235210255,168496130,67568393
  11. .long 252381056,17041926,33884169,51187212
  12. .long 252645135,252645135,252645135,252645135
  13. .long 1512730624,3266504856,1377990664,3401244816
  14. .long 830229760,1275146365,2969422977,3447763452
  15. .long 3411033600,2979783055,338359620,2782886510
  16. .long 4209124096,907596821,221174255,1006095553
  17. .long 191964160,3799684038,3164090317,1589111125
  18. .long 182528256,1777043520,2877432650,3265356744
  19. .long 1874708224,3503451415,3305285752,363511674
  20. .long 1606117888,3487855781,1093350906,2384367825
  21. .long 197121,67569157,134941193,202313229
  22. .long 67569157,134941193,202313229,197121
  23. .long 134941193,202313229,197121,67569157
  24. .long 202313229,197121,67569157,134941193
  25. .long 33619971,100992007,168364043,235736079
  26. .long 235736079,33619971,100992007,168364043
  27. .long 168364043,235736079,33619971,100992007
  28. .long 100992007,168364043,235736079,33619971
  29. .long 50462976,117835012,185207048,252579084
  30. .long 252314880,51251460,117574920,184942860
  31. .long 184682752,252054788,50987272,118359308
  32. .long 118099200,185467140,251790600,50727180
  33. .long 2946363062,528716217,1300004225,1881839624
  34. .long 1532713819,1532713819,1532713819,1532713819
  35. .long 3602276352,4288629033,3737020424,4153884961
  36. .long 1354558464,32357713,2958822624,3775749553
  37. .long 1201988352,132424512,1572796698,503232858
  38. .long 2213177600,1597421020,4103937655,675398315
  39. .byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
  40. .byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
  41. .byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
  42. .byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
  43. .byte 118,101,114,115,105,116,121,41,0
  44. .align 6,0x90
  45. .private_extern __vpaes_preheat
  46. .align 4
  47. __vpaes_preheat:
  48. addl (%esp),%ebp
  49. movdqa -48(%ebp),%xmm7
  50. movdqa -16(%ebp),%xmm6
  51. ret
  52. .private_extern __vpaes_encrypt_core
  53. .align 4
  54. __vpaes_encrypt_core:
  55. movl $16,%ecx
  56. movl 240(%edx),%eax
  57. movdqa %xmm6,%xmm1
  58. movdqa (%ebp),%xmm2
  59. pandn %xmm0,%xmm1
  60. pand %xmm6,%xmm0
  61. movdqu (%edx),%xmm5
  62. .byte 102,15,56,0,208
  63. movdqa 16(%ebp),%xmm0
  64. pxor %xmm5,%xmm2
  65. psrld $4,%xmm1
  66. addl $16,%edx
  67. .byte 102,15,56,0,193
  68. leal 192(%ebp),%ebx
  69. pxor %xmm2,%xmm0
  70. jmp L000enc_entry
  71. .align 4,0x90
  72. L001enc_loop:
  73. movdqa 32(%ebp),%xmm4
  74. movdqa 48(%ebp),%xmm0
  75. .byte 102,15,56,0,226
  76. .byte 102,15,56,0,195
  77. pxor %xmm5,%xmm4
  78. movdqa 64(%ebp),%xmm5
  79. pxor %xmm4,%xmm0
  80. movdqa -64(%ebx,%ecx,1),%xmm1
  81. .byte 102,15,56,0,234
  82. movdqa 80(%ebp),%xmm2
  83. movdqa (%ebx,%ecx,1),%xmm4
  84. .byte 102,15,56,0,211
  85. movdqa %xmm0,%xmm3
  86. pxor %xmm5,%xmm2
  87. .byte 102,15,56,0,193
  88. addl $16,%edx
  89. pxor %xmm2,%xmm0
  90. .byte 102,15,56,0,220
  91. addl $16,%ecx
  92. pxor %xmm0,%xmm3
  93. .byte 102,15,56,0,193
  94. andl $48,%ecx
  95. subl $1,%eax
  96. pxor %xmm3,%xmm0
  97. L000enc_entry:
  98. movdqa %xmm6,%xmm1
  99. movdqa -32(%ebp),%xmm5
  100. pandn %xmm0,%xmm1
  101. psrld $4,%xmm1
  102. pand %xmm6,%xmm0
  103. .byte 102,15,56,0,232
  104. movdqa %xmm7,%xmm3
  105. pxor %xmm1,%xmm0
  106. .byte 102,15,56,0,217
  107. movdqa %xmm7,%xmm4
  108. pxor %xmm5,%xmm3
  109. .byte 102,15,56,0,224
  110. movdqa %xmm7,%xmm2
  111. pxor %xmm5,%xmm4
  112. .byte 102,15,56,0,211
  113. movdqa %xmm7,%xmm3
  114. pxor %xmm0,%xmm2
  115. .byte 102,15,56,0,220
  116. movdqu (%edx),%xmm5
  117. pxor %xmm1,%xmm3
  118. jnz L001enc_loop
  119. movdqa 96(%ebp),%xmm4
  120. movdqa 112(%ebp),%xmm0
  121. .byte 102,15,56,0,226
  122. pxor %xmm5,%xmm4
  123. .byte 102,15,56,0,195
  124. movdqa 64(%ebx,%ecx,1),%xmm1
  125. pxor %xmm4,%xmm0
  126. .byte 102,15,56,0,193
  127. ret
  128. .private_extern __vpaes_schedule_core
  129. .align 4
  130. __vpaes_schedule_core:
  131. addl (%esp),%ebp
  132. movdqu (%esi),%xmm0
  133. movdqa 320(%ebp),%xmm2
  134. movdqa %xmm0,%xmm3
  135. leal (%ebp),%ebx
  136. movdqa %xmm2,4(%esp)
  137. call __vpaes_schedule_transform
  138. movdqa %xmm0,%xmm7
  139. testl %edi,%edi
  140. jnz L002schedule_am_decrypting
  141. movdqu %xmm0,(%edx)
  142. jmp L003schedule_go
  143. L002schedule_am_decrypting:
  144. movdqa 256(%ebp,%ecx,1),%xmm1
  145. .byte 102,15,56,0,217
  146. movdqu %xmm3,(%edx)
  147. xorl $48,%ecx
  148. L003schedule_go:
  149. cmpl $192,%eax
  150. ja L004schedule_256
  151. L005schedule_128:
  152. movl $10,%eax
  153. L006loop_schedule_128:
  154. call __vpaes_schedule_round
  155. decl %eax
  156. jz L007schedule_mangle_last
  157. call __vpaes_schedule_mangle
  158. jmp L006loop_schedule_128
  159. .align 4,0x90
  160. L004schedule_256:
  161. movdqu 16(%esi),%xmm0
  162. call __vpaes_schedule_transform
  163. movl $7,%eax
  164. L008loop_schedule_256:
  165. call __vpaes_schedule_mangle
  166. movdqa %xmm0,%xmm6
  167. call __vpaes_schedule_round
  168. decl %eax
  169. jz L007schedule_mangle_last
  170. call __vpaes_schedule_mangle
  171. pshufd $255,%xmm0,%xmm0
  172. movdqa %xmm7,20(%esp)
  173. movdqa %xmm6,%xmm7
  174. call L_vpaes_schedule_low_round
  175. movdqa 20(%esp),%xmm7
  176. jmp L008loop_schedule_256
  177. .align 4,0x90
  178. L007schedule_mangle_last:
  179. leal 384(%ebp),%ebx
  180. testl %edi,%edi
  181. jnz L009schedule_mangle_last_dec
  182. movdqa 256(%ebp,%ecx,1),%xmm1
  183. .byte 102,15,56,0,193
  184. leal 352(%ebp),%ebx
  185. addl $32,%edx
  186. L009schedule_mangle_last_dec:
  187. addl $-16,%edx
  188. pxor 336(%ebp),%xmm0
  189. call __vpaes_schedule_transform
  190. movdqu %xmm0,(%edx)
  191. pxor %xmm0,%xmm0
  192. pxor %xmm1,%xmm1
  193. pxor %xmm2,%xmm2
  194. pxor %xmm3,%xmm3
  195. pxor %xmm4,%xmm4
  196. pxor %xmm5,%xmm5
  197. pxor %xmm6,%xmm6
  198. pxor %xmm7,%xmm7
  199. ret
  200. .private_extern __vpaes_schedule_round
  201. .align 4
  202. __vpaes_schedule_round:
  203. movdqa 8(%esp),%xmm2
  204. pxor %xmm1,%xmm1
  205. .byte 102,15,58,15,202,15
  206. .byte 102,15,58,15,210,15
  207. pxor %xmm1,%xmm7
  208. pshufd $255,%xmm0,%xmm0
  209. .byte 102,15,58,15,192,1
  210. movdqa %xmm2,8(%esp)
  211. L_vpaes_schedule_low_round:
  212. movdqa %xmm7,%xmm1
  213. pslldq $4,%xmm7
  214. pxor %xmm1,%xmm7
  215. movdqa %xmm7,%xmm1
  216. pslldq $8,%xmm7
  217. pxor %xmm1,%xmm7
  218. pxor 336(%ebp),%xmm7
  219. movdqa -16(%ebp),%xmm4
  220. movdqa -48(%ebp),%xmm5
  221. movdqa %xmm4,%xmm1
  222. pandn %xmm0,%xmm1
  223. psrld $4,%xmm1
  224. pand %xmm4,%xmm0
  225. movdqa -32(%ebp),%xmm2
  226. .byte 102,15,56,0,208
  227. pxor %xmm1,%xmm0
  228. movdqa %xmm5,%xmm3
  229. .byte 102,15,56,0,217
  230. pxor %xmm2,%xmm3
  231. movdqa %xmm5,%xmm4
  232. .byte 102,15,56,0,224
  233. pxor %xmm2,%xmm4
  234. movdqa %xmm5,%xmm2
  235. .byte 102,15,56,0,211
  236. pxor %xmm0,%xmm2
  237. movdqa %xmm5,%xmm3
  238. .byte 102,15,56,0,220
  239. pxor %xmm1,%xmm3
  240. movdqa 32(%ebp),%xmm4
  241. .byte 102,15,56,0,226
  242. movdqa 48(%ebp),%xmm0
  243. .byte 102,15,56,0,195
  244. pxor %xmm4,%xmm0
  245. pxor %xmm7,%xmm0
  246. movdqa %xmm0,%xmm7
  247. ret
  248. .private_extern __vpaes_schedule_transform
  249. .align 4
  250. __vpaes_schedule_transform:
  251. movdqa -16(%ebp),%xmm2
  252. movdqa %xmm2,%xmm1
  253. pandn %xmm0,%xmm1
  254. psrld $4,%xmm1
  255. pand %xmm2,%xmm0
  256. movdqa (%ebx),%xmm2
  257. .byte 102,15,56,0,208
  258. movdqa 16(%ebx),%xmm0
  259. .byte 102,15,56,0,193
  260. pxor %xmm2,%xmm0
  261. ret
  262. .private_extern __vpaes_schedule_mangle
  263. .align 4
  264. __vpaes_schedule_mangle:
  265. movdqa %xmm0,%xmm4
  266. movdqa 128(%ebp),%xmm5
  267. testl %edi,%edi
  268. jnz L010schedule_mangle_dec
  269. addl $16,%edx
  270. pxor 336(%ebp),%xmm4
  271. .byte 102,15,56,0,229
  272. movdqa %xmm4,%xmm3
  273. .byte 102,15,56,0,229
  274. pxor %xmm4,%xmm3
  275. .byte 102,15,56,0,229
  276. pxor %xmm4,%xmm3
  277. jmp L011schedule_mangle_both
  278. .align 4,0x90
  279. L010schedule_mangle_dec:
  280. movdqa -16(%ebp),%xmm2
  281. leal (%ebp),%esi
  282. movdqa %xmm2,%xmm1
  283. pandn %xmm4,%xmm1
  284. psrld $4,%xmm1
  285. pand %xmm2,%xmm4
  286. movdqa (%esi),%xmm2
  287. .byte 102,15,56,0,212
  288. movdqa 16(%esi),%xmm3
  289. .byte 102,15,56,0,217
  290. pxor %xmm2,%xmm3
  291. .byte 102,15,56,0,221
  292. movdqa 32(%esi),%xmm2
  293. .byte 102,15,56,0,212
  294. pxor %xmm3,%xmm2
  295. movdqa 48(%esi),%xmm3
  296. .byte 102,15,56,0,217
  297. pxor %xmm2,%xmm3
  298. .byte 102,15,56,0,221
  299. movdqa 64(%esi),%xmm2
  300. .byte 102,15,56,0,212
  301. pxor %xmm3,%xmm2
  302. movdqa 80(%esi),%xmm3
  303. .byte 102,15,56,0,217
  304. pxor %xmm2,%xmm3
  305. .byte 102,15,56,0,221
  306. movdqa 96(%esi),%xmm2
  307. .byte 102,15,56,0,212
  308. pxor %xmm3,%xmm2
  309. movdqa 112(%esi),%xmm3
  310. .byte 102,15,56,0,217
  311. pxor %xmm2,%xmm3
  312. addl $-16,%edx
  313. L011schedule_mangle_both:
  314. movdqa 256(%ebp,%ecx,1),%xmm1
  315. .byte 102,15,56,0,217
  316. addl $-16,%ecx
  317. andl $48,%ecx
  318. movdqu %xmm3,(%edx)
  319. ret
  320. .globl _GFp_vpaes_set_encrypt_key
  321. .private_extern _GFp_vpaes_set_encrypt_key
  322. .align 4
  323. _GFp_vpaes_set_encrypt_key:
  324. L_GFp_vpaes_set_encrypt_key_begin:
  325. pushl %ebp
  326. pushl %ebx
  327. pushl %esi
  328. pushl %edi
  329. movl 20(%esp),%esi
  330. leal -56(%esp),%ebx
  331. movl 24(%esp),%eax
  332. andl $-16,%ebx
  333. movl 28(%esp),%edx
  334. xchgl %esp,%ebx
  335. movl %ebx,48(%esp)
  336. movl %eax,%ebx
  337. shrl $5,%ebx
  338. addl $5,%ebx
  339. movl %ebx,240(%edx)
  340. movl $48,%ecx
  341. movl $0,%edi
  342. leal L_vpaes_consts+0x30-L012pic_point,%ebp
  343. call __vpaes_schedule_core
  344. L012pic_point:
  345. movl 48(%esp),%esp
  346. xorl %eax,%eax
  347. popl %edi
  348. popl %esi
  349. popl %ebx
  350. popl %ebp
  351. ret
  352. .globl _GFp_vpaes_encrypt
  353. .private_extern _GFp_vpaes_encrypt
  354. .align 4
  355. _GFp_vpaes_encrypt:
  356. L_GFp_vpaes_encrypt_begin:
  357. pushl %ebp
  358. pushl %ebx
  359. pushl %esi
  360. pushl %edi
  361. leal L_vpaes_consts+0x30-L013pic_point,%ebp
  362. call __vpaes_preheat
  363. L013pic_point:
  364. movl 20(%esp),%esi
  365. leal -56(%esp),%ebx
  366. movl 24(%esp),%edi
  367. andl $-16,%ebx
  368. movl 28(%esp),%edx
  369. xchgl %esp,%ebx
  370. movl %ebx,48(%esp)
  371. movdqu (%esi),%xmm0
  372. call __vpaes_encrypt_core
  373. movdqu %xmm0,(%edi)
  374. movl 48(%esp),%esp
  375. popl %edi
  376. popl %esi
  377. popl %ebx
  378. popl %ebp
  379. ret
  380. #endif