rsaz-avx2.S 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749
  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(__has_feature)
  4. #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
  5. #define OPENSSL_NO_ASM
  6. #endif
  7. #endif
  8. #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
  9. #if defined(BORINGSSL_PREFIX)
  10. #include <boringssl_prefix_symbols_asm.h>
  11. #endif
  12. .text
  13. .globl rsaz_1024_sqr_avx2
  14. .hidden rsaz_1024_sqr_avx2
  15. .type rsaz_1024_sqr_avx2,@function
  16. .align 64
  17. rsaz_1024_sqr_avx2:
  18. .cfi_startproc
  19. leaq (%rsp),%rax
  20. .cfi_def_cfa_register %rax
  21. pushq %rbx
  22. .cfi_offset %rbx,-16
  23. pushq %rbp
  24. .cfi_offset %rbp,-24
  25. pushq %r12
  26. .cfi_offset %r12,-32
  27. pushq %r13
  28. .cfi_offset %r13,-40
  29. pushq %r14
  30. .cfi_offset %r14,-48
  31. pushq %r15
  32. .cfi_offset %r15,-56
  33. vzeroupper
  34. movq %rax,%rbp
  35. .cfi_def_cfa_register %rbp
  36. movq %rdx,%r13
  37. subq $832,%rsp
  38. movq %r13,%r15
  39. subq $-128,%rdi
  40. subq $-128,%rsi
  41. subq $-128,%r13
  42. andq $4095,%r15
  43. addq $320,%r15
  44. shrq $12,%r15
  45. vpxor %ymm9,%ymm9,%ymm9
  46. jz .Lsqr_1024_no_n_copy
  47. subq $320,%rsp
  48. vmovdqu 0-128(%r13),%ymm0
  49. andq $-2048,%rsp
  50. vmovdqu 32-128(%r13),%ymm1
  51. vmovdqu 64-128(%r13),%ymm2
  52. vmovdqu 96-128(%r13),%ymm3
  53. vmovdqu 128-128(%r13),%ymm4
  54. vmovdqu 160-128(%r13),%ymm5
  55. vmovdqu 192-128(%r13),%ymm6
  56. vmovdqu 224-128(%r13),%ymm7
  57. vmovdqu 256-128(%r13),%ymm8
  58. leaq 832+128(%rsp),%r13
  59. vmovdqu %ymm0,0-128(%r13)
  60. vmovdqu %ymm1,32-128(%r13)
  61. vmovdqu %ymm2,64-128(%r13)
  62. vmovdqu %ymm3,96-128(%r13)
  63. vmovdqu %ymm4,128-128(%r13)
  64. vmovdqu %ymm5,160-128(%r13)
  65. vmovdqu %ymm6,192-128(%r13)
  66. vmovdqu %ymm7,224-128(%r13)
  67. vmovdqu %ymm8,256-128(%r13)
  68. vmovdqu %ymm9,288-128(%r13)
  69. .Lsqr_1024_no_n_copy:
  70. andq $-1024,%rsp
  71. vmovdqu 32-128(%rsi),%ymm1
  72. vmovdqu 64-128(%rsi),%ymm2
  73. vmovdqu 96-128(%rsi),%ymm3
  74. vmovdqu 128-128(%rsi),%ymm4
  75. vmovdqu 160-128(%rsi),%ymm5
  76. vmovdqu 192-128(%rsi),%ymm6
  77. vmovdqu 224-128(%rsi),%ymm7
  78. vmovdqu 256-128(%rsi),%ymm8
  79. leaq 192(%rsp),%rbx
  80. vmovdqu .Land_mask(%rip),%ymm15
  81. jmp .LOOP_GRANDE_SQR_1024
  82. .align 32
  83. .LOOP_GRANDE_SQR_1024:
  84. leaq 576+128(%rsp),%r9
  85. leaq 448(%rsp),%r12
  86. vpaddq %ymm1,%ymm1,%ymm1
  87. vpbroadcastq 0-128(%rsi),%ymm10
  88. vpaddq %ymm2,%ymm2,%ymm2
  89. vmovdqa %ymm1,0-128(%r9)
  90. vpaddq %ymm3,%ymm3,%ymm3
  91. vmovdqa %ymm2,32-128(%r9)
  92. vpaddq %ymm4,%ymm4,%ymm4
  93. vmovdqa %ymm3,64-128(%r9)
  94. vpaddq %ymm5,%ymm5,%ymm5
  95. vmovdqa %ymm4,96-128(%r9)
  96. vpaddq %ymm6,%ymm6,%ymm6
  97. vmovdqa %ymm5,128-128(%r9)
  98. vpaddq %ymm7,%ymm7,%ymm7
  99. vmovdqa %ymm6,160-128(%r9)
  100. vpaddq %ymm8,%ymm8,%ymm8
  101. vmovdqa %ymm7,192-128(%r9)
  102. vpxor %ymm9,%ymm9,%ymm9
  103. vmovdqa %ymm8,224-128(%r9)
  104. vpmuludq 0-128(%rsi),%ymm10,%ymm0
  105. vpbroadcastq 32-128(%rsi),%ymm11
  106. vmovdqu %ymm9,288-192(%rbx)
  107. vpmuludq %ymm10,%ymm1,%ymm1
  108. vmovdqu %ymm9,320-448(%r12)
  109. vpmuludq %ymm10,%ymm2,%ymm2
  110. vmovdqu %ymm9,352-448(%r12)
  111. vpmuludq %ymm10,%ymm3,%ymm3
  112. vmovdqu %ymm9,384-448(%r12)
  113. vpmuludq %ymm10,%ymm4,%ymm4
  114. vmovdqu %ymm9,416-448(%r12)
  115. vpmuludq %ymm10,%ymm5,%ymm5
  116. vmovdqu %ymm9,448-448(%r12)
  117. vpmuludq %ymm10,%ymm6,%ymm6
  118. vmovdqu %ymm9,480-448(%r12)
  119. vpmuludq %ymm10,%ymm7,%ymm7
  120. vmovdqu %ymm9,512-448(%r12)
  121. vpmuludq %ymm10,%ymm8,%ymm8
  122. vpbroadcastq 64-128(%rsi),%ymm10
  123. vmovdqu %ymm9,544-448(%r12)
  124. movq %rsi,%r15
  125. movl $4,%r14d
  126. jmp .Lsqr_entry_1024
  127. .align 32
  128. .LOOP_SQR_1024:
  129. vpbroadcastq 32-128(%r15),%ymm11
  130. vpmuludq 0-128(%rsi),%ymm10,%ymm0
  131. vpaddq 0-192(%rbx),%ymm0,%ymm0
  132. vpmuludq 0-128(%r9),%ymm10,%ymm1
  133. vpaddq 32-192(%rbx),%ymm1,%ymm1
  134. vpmuludq 32-128(%r9),%ymm10,%ymm2
  135. vpaddq 64-192(%rbx),%ymm2,%ymm2
  136. vpmuludq 64-128(%r9),%ymm10,%ymm3
  137. vpaddq 96-192(%rbx),%ymm3,%ymm3
  138. vpmuludq 96-128(%r9),%ymm10,%ymm4
  139. vpaddq 128-192(%rbx),%ymm4,%ymm4
  140. vpmuludq 128-128(%r9),%ymm10,%ymm5
  141. vpaddq 160-192(%rbx),%ymm5,%ymm5
  142. vpmuludq 160-128(%r9),%ymm10,%ymm6
  143. vpaddq 192-192(%rbx),%ymm6,%ymm6
  144. vpmuludq 192-128(%r9),%ymm10,%ymm7
  145. vpaddq 224-192(%rbx),%ymm7,%ymm7
  146. vpmuludq 224-128(%r9),%ymm10,%ymm8
  147. vpbroadcastq 64-128(%r15),%ymm10
  148. vpaddq 256-192(%rbx),%ymm8,%ymm8
  149. .Lsqr_entry_1024:
  150. vmovdqu %ymm0,0-192(%rbx)
  151. vmovdqu %ymm1,32-192(%rbx)
  152. vpmuludq 32-128(%rsi),%ymm11,%ymm12
  153. vpaddq %ymm12,%ymm2,%ymm2
  154. vpmuludq 32-128(%r9),%ymm11,%ymm14
  155. vpaddq %ymm14,%ymm3,%ymm3
  156. vpmuludq 64-128(%r9),%ymm11,%ymm13
  157. vpaddq %ymm13,%ymm4,%ymm4
  158. vpmuludq 96-128(%r9),%ymm11,%ymm12
  159. vpaddq %ymm12,%ymm5,%ymm5
  160. vpmuludq 128-128(%r9),%ymm11,%ymm14
  161. vpaddq %ymm14,%ymm6,%ymm6
  162. vpmuludq 160-128(%r9),%ymm11,%ymm13
  163. vpaddq %ymm13,%ymm7,%ymm7
  164. vpmuludq 192-128(%r9),%ymm11,%ymm12
  165. vpaddq %ymm12,%ymm8,%ymm8
  166. vpmuludq 224-128(%r9),%ymm11,%ymm0
  167. vpbroadcastq 96-128(%r15),%ymm11
  168. vpaddq 288-192(%rbx),%ymm0,%ymm0
  169. vmovdqu %ymm2,64-192(%rbx)
  170. vmovdqu %ymm3,96-192(%rbx)
  171. vpmuludq 64-128(%rsi),%ymm10,%ymm13
  172. vpaddq %ymm13,%ymm4,%ymm4
  173. vpmuludq 64-128(%r9),%ymm10,%ymm12
  174. vpaddq %ymm12,%ymm5,%ymm5
  175. vpmuludq 96-128(%r9),%ymm10,%ymm14
  176. vpaddq %ymm14,%ymm6,%ymm6
  177. vpmuludq 128-128(%r9),%ymm10,%ymm13
  178. vpaddq %ymm13,%ymm7,%ymm7
  179. vpmuludq 160-128(%r9),%ymm10,%ymm12
  180. vpaddq %ymm12,%ymm8,%ymm8
  181. vpmuludq 192-128(%r9),%ymm10,%ymm14
  182. vpaddq %ymm14,%ymm0,%ymm0
  183. vpmuludq 224-128(%r9),%ymm10,%ymm1
  184. vpbroadcastq 128-128(%r15),%ymm10
  185. vpaddq 320-448(%r12),%ymm1,%ymm1
  186. vmovdqu %ymm4,128-192(%rbx)
  187. vmovdqu %ymm5,160-192(%rbx)
  188. vpmuludq 96-128(%rsi),%ymm11,%ymm12
  189. vpaddq %ymm12,%ymm6,%ymm6
  190. vpmuludq 96-128(%r9),%ymm11,%ymm14
  191. vpaddq %ymm14,%ymm7,%ymm7
  192. vpmuludq 128-128(%r9),%ymm11,%ymm13
  193. vpaddq %ymm13,%ymm8,%ymm8
  194. vpmuludq 160-128(%r9),%ymm11,%ymm12
  195. vpaddq %ymm12,%ymm0,%ymm0
  196. vpmuludq 192-128(%r9),%ymm11,%ymm14
  197. vpaddq %ymm14,%ymm1,%ymm1
  198. vpmuludq 224-128(%r9),%ymm11,%ymm2
  199. vpbroadcastq 160-128(%r15),%ymm11
  200. vpaddq 352-448(%r12),%ymm2,%ymm2
  201. vmovdqu %ymm6,192-192(%rbx)
  202. vmovdqu %ymm7,224-192(%rbx)
  203. vpmuludq 128-128(%rsi),%ymm10,%ymm12
  204. vpaddq %ymm12,%ymm8,%ymm8
  205. vpmuludq 128-128(%r9),%ymm10,%ymm14
  206. vpaddq %ymm14,%ymm0,%ymm0
  207. vpmuludq 160-128(%r9),%ymm10,%ymm13
  208. vpaddq %ymm13,%ymm1,%ymm1
  209. vpmuludq 192-128(%r9),%ymm10,%ymm12
  210. vpaddq %ymm12,%ymm2,%ymm2
  211. vpmuludq 224-128(%r9),%ymm10,%ymm3
  212. vpbroadcastq 192-128(%r15),%ymm10
  213. vpaddq 384-448(%r12),%ymm3,%ymm3
  214. vmovdqu %ymm8,256-192(%rbx)
  215. vmovdqu %ymm0,288-192(%rbx)
  216. leaq 8(%rbx),%rbx
  217. vpmuludq 160-128(%rsi),%ymm11,%ymm13
  218. vpaddq %ymm13,%ymm1,%ymm1
  219. vpmuludq 160-128(%r9),%ymm11,%ymm12
  220. vpaddq %ymm12,%ymm2,%ymm2
  221. vpmuludq 192-128(%r9),%ymm11,%ymm14
  222. vpaddq %ymm14,%ymm3,%ymm3
  223. vpmuludq 224-128(%r9),%ymm11,%ymm4
  224. vpbroadcastq 224-128(%r15),%ymm11
  225. vpaddq 416-448(%r12),%ymm4,%ymm4
  226. vmovdqu %ymm1,320-448(%r12)
  227. vmovdqu %ymm2,352-448(%r12)
  228. vpmuludq 192-128(%rsi),%ymm10,%ymm12
  229. vpaddq %ymm12,%ymm3,%ymm3
  230. vpmuludq 192-128(%r9),%ymm10,%ymm14
  231. vpbroadcastq 256-128(%r15),%ymm0
  232. vpaddq %ymm14,%ymm4,%ymm4
  233. vpmuludq 224-128(%r9),%ymm10,%ymm5
  234. vpbroadcastq 0+8-128(%r15),%ymm10
  235. vpaddq 448-448(%r12),%ymm5,%ymm5
  236. vmovdqu %ymm3,384-448(%r12)
  237. vmovdqu %ymm4,416-448(%r12)
  238. leaq 8(%r15),%r15
  239. vpmuludq 224-128(%rsi),%ymm11,%ymm12
  240. vpaddq %ymm12,%ymm5,%ymm5
  241. vpmuludq 224-128(%r9),%ymm11,%ymm6
  242. vpaddq 480-448(%r12),%ymm6,%ymm6
  243. vpmuludq 256-128(%rsi),%ymm0,%ymm7
  244. vmovdqu %ymm5,448-448(%r12)
  245. vpaddq 512-448(%r12),%ymm7,%ymm7
  246. vmovdqu %ymm6,480-448(%r12)
  247. vmovdqu %ymm7,512-448(%r12)
  248. leaq 8(%r12),%r12
  249. decl %r14d
  250. jnz .LOOP_SQR_1024
  251. vmovdqu 256(%rsp),%ymm8
  252. vmovdqu 288(%rsp),%ymm1
  253. vmovdqu 320(%rsp),%ymm2
  254. leaq 192(%rsp),%rbx
  255. vpsrlq $29,%ymm8,%ymm14
  256. vpand %ymm15,%ymm8,%ymm8
  257. vpsrlq $29,%ymm1,%ymm11
  258. vpand %ymm15,%ymm1,%ymm1
  259. vpermq $0x93,%ymm14,%ymm14
  260. vpxor %ymm9,%ymm9,%ymm9
  261. vpermq $0x93,%ymm11,%ymm11
  262. vpblendd $3,%ymm9,%ymm14,%ymm10
  263. vpblendd $3,%ymm14,%ymm11,%ymm14
  264. vpaddq %ymm10,%ymm8,%ymm8
  265. vpblendd $3,%ymm11,%ymm9,%ymm11
  266. vpaddq %ymm14,%ymm1,%ymm1
  267. vpaddq %ymm11,%ymm2,%ymm2
  268. vmovdqu %ymm1,288-192(%rbx)
  269. vmovdqu %ymm2,320-192(%rbx)
  270. movq (%rsp),%rax
  271. movq 8(%rsp),%r10
  272. movq 16(%rsp),%r11
  273. movq 24(%rsp),%r12
  274. vmovdqu 32(%rsp),%ymm1
  275. vmovdqu 64-192(%rbx),%ymm2
  276. vmovdqu 96-192(%rbx),%ymm3
  277. vmovdqu 128-192(%rbx),%ymm4
  278. vmovdqu 160-192(%rbx),%ymm5
  279. vmovdqu 192-192(%rbx),%ymm6
  280. vmovdqu 224-192(%rbx),%ymm7
  281. movq %rax,%r9
  282. imull %ecx,%eax
  283. andl $0x1fffffff,%eax
  284. vmovd %eax,%xmm12
  285. movq %rax,%rdx
  286. imulq -128(%r13),%rax
  287. vpbroadcastq %xmm12,%ymm12
  288. addq %rax,%r9
  289. movq %rdx,%rax
  290. imulq 8-128(%r13),%rax
  291. shrq $29,%r9
  292. addq %rax,%r10
  293. movq %rdx,%rax
  294. imulq 16-128(%r13),%rax
  295. addq %r9,%r10
  296. addq %rax,%r11
  297. imulq 24-128(%r13),%rdx
  298. addq %rdx,%r12
  299. movq %r10,%rax
  300. imull %ecx,%eax
  301. andl $0x1fffffff,%eax
  302. movl $9,%r14d
  303. jmp .LOOP_REDUCE_1024
  304. .align 32
  305. .LOOP_REDUCE_1024:
  306. vmovd %eax,%xmm13
  307. vpbroadcastq %xmm13,%ymm13
  308. vpmuludq 32-128(%r13),%ymm12,%ymm10
  309. movq %rax,%rdx
  310. imulq -128(%r13),%rax
  311. vpaddq %ymm10,%ymm1,%ymm1
  312. addq %rax,%r10
  313. vpmuludq 64-128(%r13),%ymm12,%ymm14
  314. movq %rdx,%rax
  315. imulq 8-128(%r13),%rax
  316. vpaddq %ymm14,%ymm2,%ymm2
  317. vpmuludq 96-128(%r13),%ymm12,%ymm11
  318. .byte 0x67
  319. addq %rax,%r11
  320. .byte 0x67
  321. movq %rdx,%rax
  322. imulq 16-128(%r13),%rax
  323. shrq $29,%r10
  324. vpaddq %ymm11,%ymm3,%ymm3
  325. vpmuludq 128-128(%r13),%ymm12,%ymm10
  326. addq %rax,%r12
  327. addq %r10,%r11
  328. vpaddq %ymm10,%ymm4,%ymm4
  329. vpmuludq 160-128(%r13),%ymm12,%ymm14
  330. movq %r11,%rax
  331. imull %ecx,%eax
  332. vpaddq %ymm14,%ymm5,%ymm5
  333. vpmuludq 192-128(%r13),%ymm12,%ymm11
  334. andl $0x1fffffff,%eax
  335. vpaddq %ymm11,%ymm6,%ymm6
  336. vpmuludq 224-128(%r13),%ymm12,%ymm10
  337. vpaddq %ymm10,%ymm7,%ymm7
  338. vpmuludq 256-128(%r13),%ymm12,%ymm14
  339. vmovd %eax,%xmm12
  340. vpaddq %ymm14,%ymm8,%ymm8
  341. vpbroadcastq %xmm12,%ymm12
  342. vpmuludq 32-8-128(%r13),%ymm13,%ymm11
  343. vmovdqu 96-8-128(%r13),%ymm14
  344. movq %rax,%rdx
  345. imulq -128(%r13),%rax
  346. vpaddq %ymm11,%ymm1,%ymm1
  347. vpmuludq 64-8-128(%r13),%ymm13,%ymm10
  348. vmovdqu 128-8-128(%r13),%ymm11
  349. addq %rax,%r11
  350. movq %rdx,%rax
  351. imulq 8-128(%r13),%rax
  352. vpaddq %ymm10,%ymm2,%ymm2
  353. addq %r12,%rax
  354. shrq $29,%r11
  355. vpmuludq %ymm13,%ymm14,%ymm14
  356. vmovdqu 160-8-128(%r13),%ymm10
  357. addq %r11,%rax
  358. vpaddq %ymm14,%ymm3,%ymm3
  359. vpmuludq %ymm13,%ymm11,%ymm11
  360. vmovdqu 192-8-128(%r13),%ymm14
  361. .byte 0x67
  362. movq %rax,%r12
  363. imull %ecx,%eax
  364. vpaddq %ymm11,%ymm4,%ymm4
  365. vpmuludq %ymm13,%ymm10,%ymm10
  366. .byte 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
  367. andl $0x1fffffff,%eax
  368. vpaddq %ymm10,%ymm5,%ymm5
  369. vpmuludq %ymm13,%ymm14,%ymm14
  370. vmovdqu 256-8-128(%r13),%ymm10
  371. vpaddq %ymm14,%ymm6,%ymm6
  372. vpmuludq %ymm13,%ymm11,%ymm11
  373. vmovdqu 288-8-128(%r13),%ymm9
  374. vmovd %eax,%xmm0
  375. imulq -128(%r13),%rax
  376. vpaddq %ymm11,%ymm7,%ymm7
  377. vpmuludq %ymm13,%ymm10,%ymm10
  378. vmovdqu 32-16-128(%r13),%ymm14
  379. vpbroadcastq %xmm0,%ymm0
  380. vpaddq %ymm10,%ymm8,%ymm8
  381. vpmuludq %ymm13,%ymm9,%ymm9
  382. vmovdqu 64-16-128(%r13),%ymm11
  383. addq %rax,%r12
  384. vmovdqu 32-24-128(%r13),%ymm13
  385. vpmuludq %ymm12,%ymm14,%ymm14
  386. vmovdqu 96-16-128(%r13),%ymm10
  387. vpaddq %ymm14,%ymm1,%ymm1
  388. vpmuludq %ymm0,%ymm13,%ymm13
  389. vpmuludq %ymm12,%ymm11,%ymm11
  390. .byte 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
  391. vpaddq %ymm1,%ymm13,%ymm13
  392. vpaddq %ymm11,%ymm2,%ymm2
  393. vpmuludq %ymm12,%ymm10,%ymm10
  394. vmovdqu 160-16-128(%r13),%ymm11
  395. .byte 0x67
  396. vmovq %xmm13,%rax
  397. vmovdqu %ymm13,(%rsp)
  398. vpaddq %ymm10,%ymm3,%ymm3
  399. vpmuludq %ymm12,%ymm14,%ymm14
  400. vmovdqu 192-16-128(%r13),%ymm10
  401. vpaddq %ymm14,%ymm4,%ymm4
  402. vpmuludq %ymm12,%ymm11,%ymm11
  403. vmovdqu 224-16-128(%r13),%ymm14
  404. vpaddq %ymm11,%ymm5,%ymm5
  405. vpmuludq %ymm12,%ymm10,%ymm10
  406. vmovdqu 256-16-128(%r13),%ymm11
  407. vpaddq %ymm10,%ymm6,%ymm6
  408. vpmuludq %ymm12,%ymm14,%ymm14
  409. shrq $29,%r12
  410. vmovdqu 288-16-128(%r13),%ymm10
  411. addq %r12,%rax
  412. vpaddq %ymm14,%ymm7,%ymm7
  413. vpmuludq %ymm12,%ymm11,%ymm11
  414. movq %rax,%r9
  415. imull %ecx,%eax
  416. vpaddq %ymm11,%ymm8,%ymm8
  417. vpmuludq %ymm12,%ymm10,%ymm10
  418. andl $0x1fffffff,%eax
  419. vmovd %eax,%xmm12
  420. vmovdqu 96-24-128(%r13),%ymm11
  421. .byte 0x67
  422. vpaddq %ymm10,%ymm9,%ymm9
  423. vpbroadcastq %xmm12,%ymm12
  424. vpmuludq 64-24-128(%r13),%ymm0,%ymm14
  425. vmovdqu 128-24-128(%r13),%ymm10
  426. movq %rax,%rdx
  427. imulq -128(%r13),%rax
  428. movq 8(%rsp),%r10
  429. vpaddq %ymm14,%ymm2,%ymm1
  430. vpmuludq %ymm0,%ymm11,%ymm11
  431. vmovdqu 160-24-128(%r13),%ymm14
  432. addq %rax,%r9
  433. movq %rdx,%rax
  434. imulq 8-128(%r13),%rax
  435. .byte 0x67
  436. shrq $29,%r9
  437. movq 16(%rsp),%r11
  438. vpaddq %ymm11,%ymm3,%ymm2
  439. vpmuludq %ymm0,%ymm10,%ymm10
  440. vmovdqu 192-24-128(%r13),%ymm11
  441. addq %rax,%r10
  442. movq %rdx,%rax
  443. imulq 16-128(%r13),%rax
  444. vpaddq %ymm10,%ymm4,%ymm3
  445. vpmuludq %ymm0,%ymm14,%ymm14
  446. vmovdqu 224-24-128(%r13),%ymm10
  447. imulq 24-128(%r13),%rdx
  448. addq %rax,%r11
  449. leaq (%r9,%r10,1),%rax
  450. vpaddq %ymm14,%ymm5,%ymm4
  451. vpmuludq %ymm0,%ymm11,%ymm11
  452. vmovdqu 256-24-128(%r13),%ymm14
  453. movq %rax,%r10
  454. imull %ecx,%eax
  455. vpmuludq %ymm0,%ymm10,%ymm10
  456. vpaddq %ymm11,%ymm6,%ymm5
  457. vmovdqu 288-24-128(%r13),%ymm11
  458. andl $0x1fffffff,%eax
  459. vpaddq %ymm10,%ymm7,%ymm6
  460. vpmuludq %ymm0,%ymm14,%ymm14
  461. addq 24(%rsp),%rdx
  462. vpaddq %ymm14,%ymm8,%ymm7
  463. vpmuludq %ymm0,%ymm11,%ymm11
  464. vpaddq %ymm11,%ymm9,%ymm8
  465. vmovq %r12,%xmm9
  466. movq %rdx,%r12
  467. decl %r14d
  468. jnz .LOOP_REDUCE_1024
  469. leaq 448(%rsp),%r12
  470. vpaddq %ymm9,%ymm13,%ymm0
  471. vpxor %ymm9,%ymm9,%ymm9
  472. vpaddq 288-192(%rbx),%ymm0,%ymm0
  473. vpaddq 320-448(%r12),%ymm1,%ymm1
  474. vpaddq 352-448(%r12),%ymm2,%ymm2
  475. vpaddq 384-448(%r12),%ymm3,%ymm3
  476. vpaddq 416-448(%r12),%ymm4,%ymm4
  477. vpaddq 448-448(%r12),%ymm5,%ymm5
  478. vpaddq 480-448(%r12),%ymm6,%ymm6
  479. vpaddq 512-448(%r12),%ymm7,%ymm7
  480. vpaddq 544-448(%r12),%ymm8,%ymm8
  481. vpsrlq $29,%ymm0,%ymm14
  482. vpand %ymm15,%ymm0,%ymm0
  483. vpsrlq $29,%ymm1,%ymm11
  484. vpand %ymm15,%ymm1,%ymm1
  485. vpsrlq $29,%ymm2,%ymm12
  486. vpermq $0x93,%ymm14,%ymm14
  487. vpand %ymm15,%ymm2,%ymm2
  488. vpsrlq $29,%ymm3,%ymm13
  489. vpermq $0x93,%ymm11,%ymm11
  490. vpand %ymm15,%ymm3,%ymm3
  491. vpermq $0x93,%ymm12,%ymm12
  492. vpblendd $3,%ymm9,%ymm14,%ymm10
  493. vpermq $0x93,%ymm13,%ymm13
  494. vpblendd $3,%ymm14,%ymm11,%ymm14
  495. vpaddq %ymm10,%ymm0,%ymm0
  496. vpblendd $3,%ymm11,%ymm12,%ymm11
  497. vpaddq %ymm14,%ymm1,%ymm1
  498. vpblendd $3,%ymm12,%ymm13,%ymm12
  499. vpaddq %ymm11,%ymm2,%ymm2
  500. vpblendd $3,%ymm13,%ymm9,%ymm13
  501. vpaddq %ymm12,%ymm3,%ymm3
  502. vpaddq %ymm13,%ymm4,%ymm4
  503. vpsrlq $29,%ymm0,%ymm14
  504. vpand %ymm15,%ymm0,%ymm0
  505. vpsrlq $29,%ymm1,%ymm11
  506. vpand %ymm15,%ymm1,%ymm1
  507. vpsrlq $29,%ymm2,%ymm12
  508. vpermq $0x93,%ymm14,%ymm14
  509. vpand %ymm15,%ymm2,%ymm2
  510. vpsrlq $29,%ymm3,%ymm13
  511. vpermq $0x93,%ymm11,%ymm11
  512. vpand %ymm15,%ymm3,%ymm3
  513. vpermq $0x93,%ymm12,%ymm12
  514. vpblendd $3,%ymm9,%ymm14,%ymm10
  515. vpermq $0x93,%ymm13,%ymm13
  516. vpblendd $3,%ymm14,%ymm11,%ymm14
  517. vpaddq %ymm10,%ymm0,%ymm0
  518. vpblendd $3,%ymm11,%ymm12,%ymm11
  519. vpaddq %ymm14,%ymm1,%ymm1
  520. vmovdqu %ymm0,0-128(%rdi)
  521. vpblendd $3,%ymm12,%ymm13,%ymm12
  522. vpaddq %ymm11,%ymm2,%ymm2
  523. vmovdqu %ymm1,32-128(%rdi)
  524. vpblendd $3,%ymm13,%ymm9,%ymm13
  525. vpaddq %ymm12,%ymm3,%ymm3
  526. vmovdqu %ymm2,64-128(%rdi)
  527. vpaddq %ymm13,%ymm4,%ymm4
  528. vmovdqu %ymm3,96-128(%rdi)
  529. vpsrlq $29,%ymm4,%ymm14
  530. vpand %ymm15,%ymm4,%ymm4
  531. vpsrlq $29,%ymm5,%ymm11
  532. vpand %ymm15,%ymm5,%ymm5
  533. vpsrlq $29,%ymm6,%ymm12
  534. vpermq $0x93,%ymm14,%ymm14
  535. vpand %ymm15,%ymm6,%ymm6
  536. vpsrlq $29,%ymm7,%ymm13
  537. vpermq $0x93,%ymm11,%ymm11
  538. vpand %ymm15,%ymm7,%ymm7
  539. vpsrlq $29,%ymm8,%ymm0
  540. vpermq $0x93,%ymm12,%ymm12
  541. vpand %ymm15,%ymm8,%ymm8
  542. vpermq $0x93,%ymm13,%ymm13
  543. vpblendd $3,%ymm9,%ymm14,%ymm10
  544. vpermq $0x93,%ymm0,%ymm0
  545. vpblendd $3,%ymm14,%ymm11,%ymm14
  546. vpaddq %ymm10,%ymm4,%ymm4
  547. vpblendd $3,%ymm11,%ymm12,%ymm11
  548. vpaddq %ymm14,%ymm5,%ymm5
  549. vpblendd $3,%ymm12,%ymm13,%ymm12
  550. vpaddq %ymm11,%ymm6,%ymm6
  551. vpblendd $3,%ymm13,%ymm0,%ymm13
  552. vpaddq %ymm12,%ymm7,%ymm7
  553. vpaddq %ymm13,%ymm8,%ymm8
  554. vpsrlq $29,%ymm4,%ymm14
  555. vpand %ymm15,%ymm4,%ymm4
  556. vpsrlq $29,%ymm5,%ymm11
  557. vpand %ymm15,%ymm5,%ymm5
  558. vpsrlq $29,%ymm6,%ymm12
  559. vpermq $0x93,%ymm14,%ymm14
  560. vpand %ymm15,%ymm6,%ymm6
  561. vpsrlq $29,%ymm7,%ymm13
  562. vpermq $0x93,%ymm11,%ymm11
  563. vpand %ymm15,%ymm7,%ymm7
  564. vpsrlq $29,%ymm8,%ymm0
  565. vpermq $0x93,%ymm12,%ymm12
  566. vpand %ymm15,%ymm8,%ymm8
  567. vpermq $0x93,%ymm13,%ymm13
  568. vpblendd $3,%ymm9,%ymm14,%ymm10
  569. vpermq $0x93,%ymm0,%ymm0
  570. vpblendd $3,%ymm14,%ymm11,%ymm14
  571. vpaddq %ymm10,%ymm4,%ymm4
  572. vpblendd $3,%ymm11,%ymm12,%ymm11
  573. vpaddq %ymm14,%ymm5,%ymm5
  574. vmovdqu %ymm4,128-128(%rdi)
  575. vpblendd $3,%ymm12,%ymm13,%ymm12
  576. vpaddq %ymm11,%ymm6,%ymm6
  577. vmovdqu %ymm5,160-128(%rdi)
  578. vpblendd $3,%ymm13,%ymm0,%ymm13
  579. vpaddq %ymm12,%ymm7,%ymm7
  580. vmovdqu %ymm6,192-128(%rdi)
  581. vpaddq %ymm13,%ymm8,%ymm8
  582. vmovdqu %ymm7,224-128(%rdi)
  583. vmovdqu %ymm8,256-128(%rdi)
  584. movq %rdi,%rsi
  585. decl %r8d
  586. jne .LOOP_GRANDE_SQR_1024
  587. vzeroall
  588. movq %rbp,%rax
  589. .cfi_def_cfa_register %rax
  590. movq -48(%rax),%r15
  591. .cfi_restore %r15
  592. movq -40(%rax),%r14
  593. .cfi_restore %r14
  594. movq -32(%rax),%r13
  595. .cfi_restore %r13
  596. movq -24(%rax),%r12
  597. .cfi_restore %r12
  598. movq -16(%rax),%rbp
  599. .cfi_restore %rbp
  600. movq -8(%rax),%rbx
  601. .cfi_restore %rbx
  602. leaq (%rax),%rsp
  603. .cfi_def_cfa_register %rsp
  604. .Lsqr_1024_epilogue:
  605. .byte 0xf3,0xc3
  606. .cfi_endproc
  607. .size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
  608. .globl rsaz_1024_mul_avx2
  609. .hidden rsaz_1024_mul_avx2
  610. .type rsaz_1024_mul_avx2,@function
  611. .align 64
  612. rsaz_1024_mul_avx2:
  613. .cfi_startproc
  614. leaq (%rsp),%rax
  615. .cfi_def_cfa_register %rax
  616. pushq %rbx
  617. .cfi_offset %rbx,-16
  618. pushq %rbp
  619. .cfi_offset %rbp,-24
  620. pushq %r12
  621. .cfi_offset %r12,-32
  622. pushq %r13
  623. .cfi_offset %r13,-40
  624. pushq %r14
  625. .cfi_offset %r14,-48
  626. pushq %r15
  627. .cfi_offset %r15,-56
  628. movq %rax,%rbp
  629. .cfi_def_cfa_register %rbp
  630. vzeroall
  631. movq %rdx,%r13
  632. subq $64,%rsp
  633. .byte 0x67,0x67
  634. movq %rsi,%r15
  635. andq $4095,%r15
  636. addq $320,%r15
  637. shrq $12,%r15
  638. movq %rsi,%r15
  639. cmovnzq %r13,%rsi
  640. cmovnzq %r15,%r13
  641. movq %rcx,%r15
  642. subq $-128,%rsi
  643. subq $-128,%rcx
  644. subq $-128,%rdi
  645. andq $4095,%r15
  646. addq $320,%r15
  647. .byte 0x67,0x67
  648. shrq $12,%r15
  649. jz .Lmul_1024_no_n_copy
  650. subq $320,%rsp
  651. vmovdqu 0-128(%rcx),%ymm0
  652. andq $-512,%rsp
  653. vmovdqu 32-128(%rcx),%ymm1
  654. vmovdqu 64-128(%rcx),%ymm2
  655. vmovdqu 96-128(%rcx),%ymm3
  656. vmovdqu 128-128(%rcx),%ymm4
  657. vmovdqu 160-128(%rcx),%ymm5
  658. vmovdqu 192-128(%rcx),%ymm6
  659. vmovdqu 224-128(%rcx),%ymm7
  660. vmovdqu 256-128(%rcx),%ymm8
  661. leaq 64+128(%rsp),%rcx
  662. vmovdqu %ymm0,0-128(%rcx)
  663. vpxor %ymm0,%ymm0,%ymm0
  664. vmovdqu %ymm1,32-128(%rcx)
  665. vpxor %ymm1,%ymm1,%ymm1
  666. vmovdqu %ymm2,64-128(%rcx)
  667. vpxor %ymm2,%ymm2,%ymm2
  668. vmovdqu %ymm3,96-128(%rcx)
  669. vpxor %ymm3,%ymm3,%ymm3
  670. vmovdqu %ymm4,128-128(%rcx)
  671. vpxor %ymm4,%ymm4,%ymm4
  672. vmovdqu %ymm5,160-128(%rcx)
  673. vpxor %ymm5,%ymm5,%ymm5
  674. vmovdqu %ymm6,192-128(%rcx)
  675. vpxor %ymm6,%ymm6,%ymm6
  676. vmovdqu %ymm7,224-128(%rcx)
  677. vpxor %ymm7,%ymm7,%ymm7
  678. vmovdqu %ymm8,256-128(%rcx)
  679. vmovdqa %ymm0,%ymm8
  680. vmovdqu %ymm9,288-128(%rcx)
  681. .Lmul_1024_no_n_copy:
  682. andq $-64,%rsp
  683. movq (%r13),%rbx
  684. vpbroadcastq (%r13),%ymm10
  685. vmovdqu %ymm0,(%rsp)
  686. xorq %r9,%r9
  687. .byte 0x67
  688. xorq %r10,%r10
  689. xorq %r11,%r11
  690. xorq %r12,%r12
  691. vmovdqu .Land_mask(%rip),%ymm15
  692. movl $9,%r14d
  693. vmovdqu %ymm9,288-128(%rdi)
  694. jmp .Loop_mul_1024
  695. .align 32
  696. .Loop_mul_1024:
  697. vpsrlq $29,%ymm3,%ymm9
  698. movq %rbx,%rax
  699. imulq -128(%rsi),%rax
  700. addq %r9,%rax
  701. movq %rbx,%r10
  702. imulq 8-128(%rsi),%r10
  703. addq 8(%rsp),%r10
  704. movq %rax,%r9
  705. imull %r8d,%eax
  706. andl $0x1fffffff,%eax
  707. movq %rbx,%r11
  708. imulq 16-128(%rsi),%r11
  709. addq 16(%rsp),%r11
  710. movq %rbx,%r12
  711. imulq 24-128(%rsi),%r12
  712. addq 24(%rsp),%r12
  713. vpmuludq 32-128(%rsi),%ymm10,%ymm0
  714. vmovd %eax,%xmm11
  715. vpaddq %ymm0,%ymm1,%ymm1
  716. vpmuludq 64-128(%rsi),%ymm10,%ymm12
  717. vpbroadcastq %xmm11,%ymm11
  718. vpaddq %ymm12,%ymm2,%ymm2
  719. vpmuludq 96-128(%rsi),%ymm10,%ymm13
  720. vpand %ymm15,%ymm3,%ymm3
  721. vpaddq %ymm13,%ymm3,%ymm3
  722. vpmuludq 128-128(%rsi),%ymm10,%ymm0
  723. vpaddq %ymm0,%ymm4,%ymm4
  724. vpmuludq 160-128(%rsi),%ymm10,%ymm12
  725. vpaddq %ymm12,%ymm5,%ymm5
  726. vpmuludq 192-128(%rsi),%ymm10,%ymm13
  727. vpaddq %ymm13,%ymm6,%ymm6
  728. vpmuludq 224-128(%rsi),%ymm10,%ymm0
  729. vpermq $0x93,%ymm9,%ymm9
  730. vpaddq %ymm0,%ymm7,%ymm7
  731. vpmuludq 256-128(%rsi),%ymm10,%ymm12
  732. vpbroadcastq 8(%r13),%ymm10
  733. vpaddq %ymm12,%ymm8,%ymm8
  734. movq %rax,%rdx
  735. imulq -128(%rcx),%rax
  736. addq %rax,%r9
  737. movq %rdx,%rax
  738. imulq 8-128(%rcx),%rax
  739. addq %rax,%r10
  740. movq %rdx,%rax
  741. imulq 16-128(%rcx),%rax
  742. addq %rax,%r11
  743. shrq $29,%r9
  744. imulq 24-128(%rcx),%rdx
  745. addq %rdx,%r12
  746. addq %r9,%r10
  747. vpmuludq 32-128(%rcx),%ymm11,%ymm13
  748. vmovq %xmm10,%rbx
  749. vpaddq %ymm13,%ymm1,%ymm1
  750. vpmuludq 64-128(%rcx),%ymm11,%ymm0
  751. vpaddq %ymm0,%ymm2,%ymm2
  752. vpmuludq 96-128(%rcx),%ymm11,%ymm12
  753. vpaddq %ymm12,%ymm3,%ymm3
  754. vpmuludq 128-128(%rcx),%ymm11,%ymm13
  755. vpaddq %ymm13,%ymm4,%ymm4
  756. vpmuludq 160-128(%rcx),%ymm11,%ymm0
  757. vpaddq %ymm0,%ymm5,%ymm5
  758. vpmuludq 192-128(%rcx),%ymm11,%ymm12
  759. vpaddq %ymm12,%ymm6,%ymm6
  760. vpmuludq 224-128(%rcx),%ymm11,%ymm13
  761. vpblendd $3,%ymm14,%ymm9,%ymm12
  762. vpaddq %ymm13,%ymm7,%ymm7
  763. vpmuludq 256-128(%rcx),%ymm11,%ymm0
  764. vpaddq %ymm12,%ymm3,%ymm3
  765. vpaddq %ymm0,%ymm8,%ymm8
  766. movq %rbx,%rax
  767. imulq -128(%rsi),%rax
  768. addq %rax,%r10
  769. vmovdqu -8+32-128(%rsi),%ymm12
  770. movq %rbx,%rax
  771. imulq 8-128(%rsi),%rax
  772. addq %rax,%r11
  773. vmovdqu -8+64-128(%rsi),%ymm13
  774. movq %r10,%rax
  775. vpblendd $0xfc,%ymm14,%ymm9,%ymm9
  776. imull %r8d,%eax
  777. vpaddq %ymm9,%ymm4,%ymm4
  778. andl $0x1fffffff,%eax
  779. imulq 16-128(%rsi),%rbx
  780. addq %rbx,%r12
  781. vpmuludq %ymm10,%ymm12,%ymm12
  782. vmovd %eax,%xmm11
  783. vmovdqu -8+96-128(%rsi),%ymm0
  784. vpaddq %ymm12,%ymm1,%ymm1
  785. vpmuludq %ymm10,%ymm13,%ymm13
  786. vpbroadcastq %xmm11,%ymm11
  787. vmovdqu -8+128-128(%rsi),%ymm12
  788. vpaddq %ymm13,%ymm2,%ymm2
  789. vpmuludq %ymm10,%ymm0,%ymm0
  790. vmovdqu -8+160-128(%rsi),%ymm13
  791. vpaddq %ymm0,%ymm3,%ymm3
  792. vpmuludq %ymm10,%ymm12,%ymm12
  793. vmovdqu -8+192-128(%rsi),%ymm0
  794. vpaddq %ymm12,%ymm4,%ymm4
  795. vpmuludq %ymm10,%ymm13,%ymm13
  796. vmovdqu -8+224-128(%rsi),%ymm12
  797. vpaddq %ymm13,%ymm5,%ymm5
  798. vpmuludq %ymm10,%ymm0,%ymm0
  799. vmovdqu -8+256-128(%rsi),%ymm13
  800. vpaddq %ymm0,%ymm6,%ymm6
  801. vpmuludq %ymm10,%ymm12,%ymm12
  802. vmovdqu -8+288-128(%rsi),%ymm9
  803. vpaddq %ymm12,%ymm7,%ymm7
  804. vpmuludq %ymm10,%ymm13,%ymm13
  805. vpaddq %ymm13,%ymm8,%ymm8
  806. vpmuludq %ymm10,%ymm9,%ymm9
  807. vpbroadcastq 16(%r13),%ymm10
  808. movq %rax,%rdx
  809. imulq -128(%rcx),%rax
  810. addq %rax,%r10
  811. vmovdqu -8+32-128(%rcx),%ymm0
  812. movq %rdx,%rax
  813. imulq 8-128(%rcx),%rax
  814. addq %rax,%r11
  815. vmovdqu -8+64-128(%rcx),%ymm12
  816. shrq $29,%r10
  817. imulq 16-128(%rcx),%rdx
  818. addq %rdx,%r12
  819. addq %r10,%r11
  820. vpmuludq %ymm11,%ymm0,%ymm0
  821. vmovq %xmm10,%rbx
  822. vmovdqu -8+96-128(%rcx),%ymm13
  823. vpaddq %ymm0,%ymm1,%ymm1
  824. vpmuludq %ymm11,%ymm12,%ymm12
  825. vmovdqu -8+128-128(%rcx),%ymm0
  826. vpaddq %ymm12,%ymm2,%ymm2
  827. vpmuludq %ymm11,%ymm13,%ymm13
  828. vmovdqu -8+160-128(%rcx),%ymm12
  829. vpaddq %ymm13,%ymm3,%ymm3
  830. vpmuludq %ymm11,%ymm0,%ymm0
  831. vmovdqu -8+192-128(%rcx),%ymm13
  832. vpaddq %ymm0,%ymm4,%ymm4
  833. vpmuludq %ymm11,%ymm12,%ymm12
  834. vmovdqu -8+224-128(%rcx),%ymm0
  835. vpaddq %ymm12,%ymm5,%ymm5
  836. vpmuludq %ymm11,%ymm13,%ymm13
  837. vmovdqu -8+256-128(%rcx),%ymm12
  838. vpaddq %ymm13,%ymm6,%ymm6
  839. vpmuludq %ymm11,%ymm0,%ymm0
  840. vmovdqu -8+288-128(%rcx),%ymm13
  841. vpaddq %ymm0,%ymm7,%ymm7
  842. vpmuludq %ymm11,%ymm12,%ymm12
  843. vpaddq %ymm12,%ymm8,%ymm8
  844. vpmuludq %ymm11,%ymm13,%ymm13
  845. vpaddq %ymm13,%ymm9,%ymm9
  846. vmovdqu -16+32-128(%rsi),%ymm0
  847. movq %rbx,%rax
  848. imulq -128(%rsi),%rax
  849. addq %r11,%rax
  850. vmovdqu -16+64-128(%rsi),%ymm12
  851. movq %rax,%r11
  852. imull %r8d,%eax
  853. andl $0x1fffffff,%eax
  854. imulq 8-128(%rsi),%rbx
  855. addq %rbx,%r12
  856. vpmuludq %ymm10,%ymm0,%ymm0
  857. vmovd %eax,%xmm11
  858. vmovdqu -16+96-128(%rsi),%ymm13
  859. vpaddq %ymm0,%ymm1,%ymm1
  860. vpmuludq %ymm10,%ymm12,%ymm12
  861. vpbroadcastq %xmm11,%ymm11
  862. vmovdqu -16+128-128(%rsi),%ymm0
  863. vpaddq %ymm12,%ymm2,%ymm2
  864. vpmuludq %ymm10,%ymm13,%ymm13
  865. vmovdqu -16+160-128(%rsi),%ymm12
  866. vpaddq %ymm13,%ymm3,%ymm3
  867. vpmuludq %ymm10,%ymm0,%ymm0
  868. vmovdqu -16+192-128(%rsi),%ymm13
  869. vpaddq %ymm0,%ymm4,%ymm4
  870. vpmuludq %ymm10,%ymm12,%ymm12
  871. vmovdqu -16+224-128(%rsi),%ymm0
  872. vpaddq %ymm12,%ymm5,%ymm5
  873. vpmuludq %ymm10,%ymm13,%ymm13
  874. vmovdqu -16+256-128(%rsi),%ymm12
  875. vpaddq %ymm13,%ymm6,%ymm6
  876. vpmuludq %ymm10,%ymm0,%ymm0
  877. vmovdqu -16+288-128(%rsi),%ymm13
  878. vpaddq %ymm0,%ymm7,%ymm7
  879. vpmuludq %ymm10,%ymm12,%ymm12
  880. vpaddq %ymm12,%ymm8,%ymm8
  881. vpmuludq %ymm10,%ymm13,%ymm13
  882. vpbroadcastq 24(%r13),%ymm10
  883. vpaddq %ymm13,%ymm9,%ymm9
  884. vmovdqu -16+32-128(%rcx),%ymm0
  885. movq %rax,%rdx
  886. imulq -128(%rcx),%rax
  887. addq %rax,%r11
  888. vmovdqu -16+64-128(%rcx),%ymm12
  889. imulq 8-128(%rcx),%rdx
  890. addq %rdx,%r12
  891. shrq $29,%r11
  892. vpmuludq %ymm11,%ymm0,%ymm0
  893. vmovq %xmm10,%rbx
  894. vmovdqu -16+96-128(%rcx),%ymm13
  895. vpaddq %ymm0,%ymm1,%ymm1
  896. vpmuludq %ymm11,%ymm12,%ymm12
  897. vmovdqu -16+128-128(%rcx),%ymm0
  898. vpaddq %ymm12,%ymm2,%ymm2
  899. vpmuludq %ymm11,%ymm13,%ymm13
  900. vmovdqu -16+160-128(%rcx),%ymm12
  901. vpaddq %ymm13,%ymm3,%ymm3
  902. vpmuludq %ymm11,%ymm0,%ymm0
  903. vmovdqu -16+192-128(%rcx),%ymm13
  904. vpaddq %ymm0,%ymm4,%ymm4
  905. vpmuludq %ymm11,%ymm12,%ymm12
  906. vmovdqu -16+224-128(%rcx),%ymm0
  907. vpaddq %ymm12,%ymm5,%ymm5
  908. vpmuludq %ymm11,%ymm13,%ymm13
  909. vmovdqu -16+256-128(%rcx),%ymm12
  910. vpaddq %ymm13,%ymm6,%ymm6
  911. vpmuludq %ymm11,%ymm0,%ymm0
  912. vmovdqu -16+288-128(%rcx),%ymm13
  913. vpaddq %ymm0,%ymm7,%ymm7
  914. vpmuludq %ymm11,%ymm12,%ymm12
  915. vmovdqu -24+32-128(%rsi),%ymm0
  916. vpaddq %ymm12,%ymm8,%ymm8
  917. vpmuludq %ymm11,%ymm13,%ymm13
  918. vmovdqu -24+64-128(%rsi),%ymm12
  919. vpaddq %ymm13,%ymm9,%ymm9
  920. addq %r11,%r12
  921. imulq -128(%rsi),%rbx
  922. addq %rbx,%r12
  923. movq %r12,%rax
  924. imull %r8d,%eax
  925. andl $0x1fffffff,%eax
  926. vpmuludq %ymm10,%ymm0,%ymm0
  927. vmovd %eax,%xmm11
  928. vmovdqu -24+96-128(%rsi),%ymm13
  929. vpaddq %ymm0,%ymm1,%ymm1
  930. vpmuludq %ymm10,%ymm12,%ymm12
  931. vpbroadcastq %xmm11,%ymm11
  932. vmovdqu -24+128-128(%rsi),%ymm0
  933. vpaddq %ymm12,%ymm2,%ymm2
  934. vpmuludq %ymm10,%ymm13,%ymm13
  935. vmovdqu -24+160-128(%rsi),%ymm12
  936. vpaddq %ymm13,%ymm3,%ymm3
  937. vpmuludq %ymm10,%ymm0,%ymm0
  938. vmovdqu -24+192-128(%rsi),%ymm13
  939. vpaddq %ymm0,%ymm4,%ymm4
  940. vpmuludq %ymm10,%ymm12,%ymm12
  941. vmovdqu -24+224-128(%rsi),%ymm0
  942. vpaddq %ymm12,%ymm5,%ymm5
  943. vpmuludq %ymm10,%ymm13,%ymm13
  944. vmovdqu -24+256-128(%rsi),%ymm12
  945. vpaddq %ymm13,%ymm6,%ymm6
  946. vpmuludq %ymm10,%ymm0,%ymm0
  947. vmovdqu -24+288-128(%rsi),%ymm13
  948. vpaddq %ymm0,%ymm7,%ymm7
  949. vpmuludq %ymm10,%ymm12,%ymm12
  950. vpaddq %ymm12,%ymm8,%ymm8
  951. vpmuludq %ymm10,%ymm13,%ymm13
  952. vpbroadcastq 32(%r13),%ymm10
  953. vpaddq %ymm13,%ymm9,%ymm9
  954. addq $32,%r13
  955. vmovdqu -24+32-128(%rcx),%ymm0
  956. imulq -128(%rcx),%rax
  957. addq %rax,%r12
  958. shrq $29,%r12
  959. vmovdqu -24+64-128(%rcx),%ymm12
  960. vpmuludq %ymm11,%ymm0,%ymm0
  961. vmovq %xmm10,%rbx
  962. vmovdqu -24+96-128(%rcx),%ymm13
  963. vpaddq %ymm0,%ymm1,%ymm0
  964. vpmuludq %ymm11,%ymm12,%ymm12
  965. vmovdqu %ymm0,(%rsp)
  966. vpaddq %ymm12,%ymm2,%ymm1
  967. vmovdqu -24+128-128(%rcx),%ymm0
  968. vpmuludq %ymm11,%ymm13,%ymm13
  969. vmovdqu -24+160-128(%rcx),%ymm12
  970. vpaddq %ymm13,%ymm3,%ymm2
  971. vpmuludq %ymm11,%ymm0,%ymm0
  972. vmovdqu -24+192-128(%rcx),%ymm13
  973. vpaddq %ymm0,%ymm4,%ymm3
  974. vpmuludq %ymm11,%ymm12,%ymm12
  975. vmovdqu -24+224-128(%rcx),%ymm0
  976. vpaddq %ymm12,%ymm5,%ymm4
  977. vpmuludq %ymm11,%ymm13,%ymm13
  978. vmovdqu -24+256-128(%rcx),%ymm12
  979. vpaddq %ymm13,%ymm6,%ymm5
  980. vpmuludq %ymm11,%ymm0,%ymm0
  981. vmovdqu -24+288-128(%rcx),%ymm13
  982. movq %r12,%r9
  983. vpaddq %ymm0,%ymm7,%ymm6
  984. vpmuludq %ymm11,%ymm12,%ymm12
  985. addq (%rsp),%r9
  986. vpaddq %ymm12,%ymm8,%ymm7
  987. vpmuludq %ymm11,%ymm13,%ymm13
  988. vmovq %r12,%xmm12
  989. vpaddq %ymm13,%ymm9,%ymm8
  990. decl %r14d
  991. jnz .Loop_mul_1024
  992. vpaddq (%rsp),%ymm12,%ymm0
  993. vpsrlq $29,%ymm0,%ymm12
  994. vpand %ymm15,%ymm0,%ymm0
  995. vpsrlq $29,%ymm1,%ymm13
  996. vpand %ymm15,%ymm1,%ymm1
  997. vpsrlq $29,%ymm2,%ymm10
  998. vpermq $0x93,%ymm12,%ymm12
  999. vpand %ymm15,%ymm2,%ymm2
  1000. vpsrlq $29,%ymm3,%ymm11
  1001. vpermq $0x93,%ymm13,%ymm13
  1002. vpand %ymm15,%ymm3,%ymm3
  1003. vpblendd $3,%ymm14,%ymm12,%ymm9
  1004. vpermq $0x93,%ymm10,%ymm10
  1005. vpblendd $3,%ymm12,%ymm13,%ymm12
  1006. vpermq $0x93,%ymm11,%ymm11
  1007. vpaddq %ymm9,%ymm0,%ymm0
  1008. vpblendd $3,%ymm13,%ymm10,%ymm13
  1009. vpaddq %ymm12,%ymm1,%ymm1
  1010. vpblendd $3,%ymm10,%ymm11,%ymm10
  1011. vpaddq %ymm13,%ymm2,%ymm2
  1012. vpblendd $3,%ymm11,%ymm14,%ymm11
  1013. vpaddq %ymm10,%ymm3,%ymm3
  1014. vpaddq %ymm11,%ymm4,%ymm4
  1015. vpsrlq $29,%ymm0,%ymm12
  1016. vpand %ymm15,%ymm0,%ymm0
  1017. vpsrlq $29,%ymm1,%ymm13
  1018. vpand %ymm15,%ymm1,%ymm1
  1019. vpsrlq $29,%ymm2,%ymm10
  1020. vpermq $0x93,%ymm12,%ymm12
  1021. vpand %ymm15,%ymm2,%ymm2
  1022. vpsrlq $29,%ymm3,%ymm11
  1023. vpermq $0x93,%ymm13,%ymm13
  1024. vpand %ymm15,%ymm3,%ymm3
  1025. vpermq $0x93,%ymm10,%ymm10
  1026. vpblendd $3,%ymm14,%ymm12,%ymm9
  1027. vpermq $0x93,%ymm11,%ymm11
  1028. vpblendd $3,%ymm12,%ymm13,%ymm12
  1029. vpaddq %ymm9,%ymm0,%ymm0
  1030. vpblendd $3,%ymm13,%ymm10,%ymm13
  1031. vpaddq %ymm12,%ymm1,%ymm1
  1032. vpblendd $3,%ymm10,%ymm11,%ymm10
  1033. vpaddq %ymm13,%ymm2,%ymm2
  1034. vpblendd $3,%ymm11,%ymm14,%ymm11
  1035. vpaddq %ymm10,%ymm3,%ymm3
  1036. vpaddq %ymm11,%ymm4,%ymm4
  1037. vmovdqu %ymm0,0-128(%rdi)
  1038. vmovdqu %ymm1,32-128(%rdi)
  1039. vmovdqu %ymm2,64-128(%rdi)
  1040. vmovdqu %ymm3,96-128(%rdi)
  1041. vpsrlq $29,%ymm4,%ymm12
  1042. vpand %ymm15,%ymm4,%ymm4
  1043. vpsrlq $29,%ymm5,%ymm13
  1044. vpand %ymm15,%ymm5,%ymm5
  1045. vpsrlq $29,%ymm6,%ymm10
  1046. vpermq $0x93,%ymm12,%ymm12
  1047. vpand %ymm15,%ymm6,%ymm6
  1048. vpsrlq $29,%ymm7,%ymm11
  1049. vpermq $0x93,%ymm13,%ymm13
  1050. vpand %ymm15,%ymm7,%ymm7
  1051. vpsrlq $29,%ymm8,%ymm0
  1052. vpermq $0x93,%ymm10,%ymm10
  1053. vpand %ymm15,%ymm8,%ymm8
  1054. vpermq $0x93,%ymm11,%ymm11
  1055. vpblendd $3,%ymm14,%ymm12,%ymm9
  1056. vpermq $0x93,%ymm0,%ymm0
  1057. vpblendd $3,%ymm12,%ymm13,%ymm12
  1058. vpaddq %ymm9,%ymm4,%ymm4
  1059. vpblendd $3,%ymm13,%ymm10,%ymm13
  1060. vpaddq %ymm12,%ymm5,%ymm5
  1061. vpblendd $3,%ymm10,%ymm11,%ymm10
  1062. vpaddq %ymm13,%ymm6,%ymm6
  1063. vpblendd $3,%ymm11,%ymm0,%ymm11
  1064. vpaddq %ymm10,%ymm7,%ymm7
  1065. vpaddq %ymm11,%ymm8,%ymm8
  1066. vpsrlq $29,%ymm4,%ymm12
  1067. vpand %ymm15,%ymm4,%ymm4
  1068. vpsrlq $29,%ymm5,%ymm13
  1069. vpand %ymm15,%ymm5,%ymm5
  1070. vpsrlq $29,%ymm6,%ymm10
  1071. vpermq $0x93,%ymm12,%ymm12
  1072. vpand %ymm15,%ymm6,%ymm6
  1073. vpsrlq $29,%ymm7,%ymm11
  1074. vpermq $0x93,%ymm13,%ymm13
  1075. vpand %ymm15,%ymm7,%ymm7
  1076. vpsrlq $29,%ymm8,%ymm0
  1077. vpermq $0x93,%ymm10,%ymm10
  1078. vpand %ymm15,%ymm8,%ymm8
  1079. vpermq $0x93,%ymm11,%ymm11
  1080. vpblendd $3,%ymm14,%ymm12,%ymm9
  1081. vpermq $0x93,%ymm0,%ymm0
  1082. vpblendd $3,%ymm12,%ymm13,%ymm12
  1083. vpaddq %ymm9,%ymm4,%ymm4
  1084. vpblendd $3,%ymm13,%ymm10,%ymm13
  1085. vpaddq %ymm12,%ymm5,%ymm5
  1086. vpblendd $3,%ymm10,%ymm11,%ymm10
  1087. vpaddq %ymm13,%ymm6,%ymm6
  1088. vpblendd $3,%ymm11,%ymm0,%ymm11
  1089. vpaddq %ymm10,%ymm7,%ymm7
  1090. vpaddq %ymm11,%ymm8,%ymm8
  1091. vmovdqu %ymm4,128-128(%rdi)
  1092. vmovdqu %ymm5,160-128(%rdi)
  1093. vmovdqu %ymm6,192-128(%rdi)
  1094. vmovdqu %ymm7,224-128(%rdi)
  1095. vmovdqu %ymm8,256-128(%rdi)
  1096. vzeroupper
  1097. movq %rbp,%rax
  1098. .cfi_def_cfa_register %rax
  1099. movq -48(%rax),%r15
  1100. .cfi_restore %r15
  1101. movq -40(%rax),%r14
  1102. .cfi_restore %r14
  1103. movq -32(%rax),%r13
  1104. .cfi_restore %r13
  1105. movq -24(%rax),%r12
  1106. .cfi_restore %r12
  1107. movq -16(%rax),%rbp
  1108. .cfi_restore %rbp
  1109. movq -8(%rax),%rbx
  1110. .cfi_restore %rbx
  1111. leaq (%rax),%rsp
  1112. .cfi_def_cfa_register %rsp
  1113. .Lmul_1024_epilogue:
  1114. .byte 0xf3,0xc3
  1115. .cfi_endproc
  1116. .size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
  1117. .globl rsaz_1024_red2norm_avx2
  1118. .hidden rsaz_1024_red2norm_avx2
  1119. .type rsaz_1024_red2norm_avx2,@function
  1120. .align 32
  1121. rsaz_1024_red2norm_avx2:
  1122. .cfi_startproc
  1123. subq $-128,%rsi
  1124. xorq %rax,%rax
  1125. movq -128(%rsi),%r8
  1126. movq -120(%rsi),%r9
  1127. movq -112(%rsi),%r10
  1128. shlq $0,%r8
  1129. shlq $29,%r9
  1130. movq %r10,%r11
  1131. shlq $58,%r10
  1132. shrq $6,%r11
  1133. addq %r8,%rax
  1134. addq %r9,%rax
  1135. addq %r10,%rax
  1136. adcq $0,%r11
  1137. movq %rax,0(%rdi)
  1138. movq %r11,%rax
  1139. movq -104(%rsi),%r8
  1140. movq -96(%rsi),%r9
  1141. shlq $23,%r8
  1142. movq %r9,%r10
  1143. shlq $52,%r9
  1144. shrq $12,%r10
  1145. addq %r8,%rax
  1146. addq %r9,%rax
  1147. adcq $0,%r10
  1148. movq %rax,8(%rdi)
  1149. movq %r10,%rax
  1150. movq -88(%rsi),%r11
  1151. movq -80(%rsi),%r8
  1152. shlq $17,%r11
  1153. movq %r8,%r9
  1154. shlq $46,%r8
  1155. shrq $18,%r9
  1156. addq %r11,%rax
  1157. addq %r8,%rax
  1158. adcq $0,%r9
  1159. movq %rax,16(%rdi)
  1160. movq %r9,%rax
  1161. movq -72(%rsi),%r10
  1162. movq -64(%rsi),%r11
  1163. shlq $11,%r10
  1164. movq %r11,%r8
  1165. shlq $40,%r11
  1166. shrq $24,%r8
  1167. addq %r10,%rax
  1168. addq %r11,%rax
  1169. adcq $0,%r8
  1170. movq %rax,24(%rdi)
  1171. movq %r8,%rax
  1172. movq -56(%rsi),%r9
  1173. movq -48(%rsi),%r10
  1174. movq -40(%rsi),%r11
  1175. shlq $5,%r9
  1176. shlq $34,%r10
  1177. movq %r11,%r8
  1178. shlq $63,%r11
  1179. shrq $1,%r8
  1180. addq %r9,%rax
  1181. addq %r10,%rax
  1182. addq %r11,%rax
  1183. adcq $0,%r8
  1184. movq %rax,32(%rdi)
  1185. movq %r8,%rax
  1186. movq -32(%rsi),%r9
  1187. movq -24(%rsi),%r10
  1188. shlq $28,%r9
  1189. movq %r10,%r11
  1190. shlq $57,%r10
  1191. shrq $7,%r11
  1192. addq %r9,%rax
  1193. addq %r10,%rax
  1194. adcq $0,%r11
  1195. movq %rax,40(%rdi)
  1196. movq %r11,%rax
  1197. movq -16(%rsi),%r8
  1198. movq -8(%rsi),%r9
  1199. shlq $22,%r8
  1200. movq %r9,%r10
  1201. shlq $51,%r9
  1202. shrq $13,%r10
  1203. addq %r8,%rax
  1204. addq %r9,%rax
  1205. adcq $0,%r10
  1206. movq %rax,48(%rdi)
  1207. movq %r10,%rax
  1208. movq 0(%rsi),%r11
  1209. movq 8(%rsi),%r8
  1210. shlq $16,%r11
  1211. movq %r8,%r9
  1212. shlq $45,%r8
  1213. shrq $19,%r9
  1214. addq %r11,%rax
  1215. addq %r8,%rax
  1216. adcq $0,%r9
  1217. movq %rax,56(%rdi)
  1218. movq %r9,%rax
  1219. movq 16(%rsi),%r10
  1220. movq 24(%rsi),%r11
  1221. shlq $10,%r10
  1222. movq %r11,%r8
  1223. shlq $39,%r11
  1224. shrq $25,%r8
  1225. addq %r10,%rax
  1226. addq %r11,%rax
  1227. adcq $0,%r8
  1228. movq %rax,64(%rdi)
  1229. movq %r8,%rax
  1230. movq 32(%rsi),%r9
  1231. movq 40(%rsi),%r10
  1232. movq 48(%rsi),%r11
  1233. shlq $4,%r9
  1234. shlq $33,%r10
  1235. movq %r11,%r8
  1236. shlq $62,%r11
  1237. shrq $2,%r8
  1238. addq %r9,%rax
  1239. addq %r10,%rax
  1240. addq %r11,%rax
  1241. adcq $0,%r8
  1242. movq %rax,72(%rdi)
  1243. movq %r8,%rax
  1244. movq 56(%rsi),%r9
  1245. movq 64(%rsi),%r10
  1246. shlq $27,%r9
  1247. movq %r10,%r11
  1248. shlq $56,%r10
  1249. shrq $8,%r11
  1250. addq %r9,%rax
  1251. addq %r10,%rax
  1252. adcq $0,%r11
  1253. movq %rax,80(%rdi)
  1254. movq %r11,%rax
  1255. movq 72(%rsi),%r8
  1256. movq 80(%rsi),%r9
  1257. shlq $21,%r8
  1258. movq %r9,%r10
  1259. shlq $50,%r9
  1260. shrq $14,%r10
  1261. addq %r8,%rax
  1262. addq %r9,%rax
  1263. adcq $0,%r10
  1264. movq %rax,88(%rdi)
  1265. movq %r10,%rax
  1266. movq 88(%rsi),%r11
  1267. movq 96(%rsi),%r8
  1268. shlq $15,%r11
  1269. movq %r8,%r9
  1270. shlq $44,%r8
  1271. shrq $20,%r9
  1272. addq %r11,%rax
  1273. addq %r8,%rax
  1274. adcq $0,%r9
  1275. movq %rax,96(%rdi)
  1276. movq %r9,%rax
  1277. movq 104(%rsi),%r10
  1278. movq 112(%rsi),%r11
  1279. shlq $9,%r10
  1280. movq %r11,%r8
  1281. shlq $38,%r11
  1282. shrq $26,%r8
  1283. addq %r10,%rax
  1284. addq %r11,%rax
  1285. adcq $0,%r8
  1286. movq %rax,104(%rdi)
  1287. movq %r8,%rax
  1288. movq 120(%rsi),%r9
  1289. movq 128(%rsi),%r10
  1290. movq 136(%rsi),%r11
  1291. shlq $3,%r9
  1292. shlq $32,%r10
  1293. movq %r11,%r8
  1294. shlq $61,%r11
  1295. shrq $3,%r8
  1296. addq %r9,%rax
  1297. addq %r10,%rax
  1298. addq %r11,%rax
  1299. adcq $0,%r8
  1300. movq %rax,112(%rdi)
  1301. movq %r8,%rax
  1302. movq 144(%rsi),%r9
  1303. movq 152(%rsi),%r10
  1304. shlq $26,%r9
  1305. movq %r10,%r11
  1306. shlq $55,%r10
  1307. shrq $9,%r11
  1308. addq %r9,%rax
  1309. addq %r10,%rax
  1310. adcq $0,%r11
  1311. movq %rax,120(%rdi)
  1312. movq %r11,%rax
  1313. .byte 0xf3,0xc3
  1314. .cfi_endproc
  1315. .size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
  1316. .globl rsaz_1024_norm2red_avx2
  1317. .hidden rsaz_1024_norm2red_avx2
  1318. .type rsaz_1024_norm2red_avx2,@function
  1319. .align 32
  1320. rsaz_1024_norm2red_avx2:
  1321. .cfi_startproc
  1322. subq $-128,%rdi
  1323. movq (%rsi),%r8
  1324. movl $0x1fffffff,%eax
  1325. movq 8(%rsi),%r9
  1326. movq %r8,%r11
  1327. shrq $0,%r11
  1328. andq %rax,%r11
  1329. movq %r11,-128(%rdi)
  1330. movq %r8,%r10
  1331. shrq $29,%r10
  1332. andq %rax,%r10
  1333. movq %r10,-120(%rdi)
  1334. shrdq $58,%r9,%r8
  1335. andq %rax,%r8
  1336. movq %r8,-112(%rdi)
  1337. movq 16(%rsi),%r10
  1338. movq %r9,%r8
  1339. shrq $23,%r8
  1340. andq %rax,%r8
  1341. movq %r8,-104(%rdi)
  1342. shrdq $52,%r10,%r9
  1343. andq %rax,%r9
  1344. movq %r9,-96(%rdi)
  1345. movq 24(%rsi),%r11
  1346. movq %r10,%r9
  1347. shrq $17,%r9
  1348. andq %rax,%r9
  1349. movq %r9,-88(%rdi)
  1350. shrdq $46,%r11,%r10
  1351. andq %rax,%r10
  1352. movq %r10,-80(%rdi)
  1353. movq 32(%rsi),%r8
  1354. movq %r11,%r10
  1355. shrq $11,%r10
  1356. andq %rax,%r10
  1357. movq %r10,-72(%rdi)
  1358. shrdq $40,%r8,%r11
  1359. andq %rax,%r11
  1360. movq %r11,-64(%rdi)
  1361. movq 40(%rsi),%r9
  1362. movq %r8,%r11
  1363. shrq $5,%r11
  1364. andq %rax,%r11
  1365. movq %r11,-56(%rdi)
  1366. movq %r8,%r10
  1367. shrq $34,%r10
  1368. andq %rax,%r10
  1369. movq %r10,-48(%rdi)
  1370. shrdq $63,%r9,%r8
  1371. andq %rax,%r8
  1372. movq %r8,-40(%rdi)
  1373. movq 48(%rsi),%r10
  1374. movq %r9,%r8
  1375. shrq $28,%r8
  1376. andq %rax,%r8
  1377. movq %r8,-32(%rdi)
  1378. shrdq $57,%r10,%r9
  1379. andq %rax,%r9
  1380. movq %r9,-24(%rdi)
  1381. movq 56(%rsi),%r11
  1382. movq %r10,%r9
  1383. shrq $22,%r9
  1384. andq %rax,%r9
  1385. movq %r9,-16(%rdi)
  1386. shrdq $51,%r11,%r10
  1387. andq %rax,%r10
  1388. movq %r10,-8(%rdi)
  1389. movq 64(%rsi),%r8
  1390. movq %r11,%r10
  1391. shrq $16,%r10
  1392. andq %rax,%r10
  1393. movq %r10,0(%rdi)
  1394. shrdq $45,%r8,%r11
  1395. andq %rax,%r11
  1396. movq %r11,8(%rdi)
  1397. movq 72(%rsi),%r9
  1398. movq %r8,%r11
  1399. shrq $10,%r11
  1400. andq %rax,%r11
  1401. movq %r11,16(%rdi)
  1402. shrdq $39,%r9,%r8
  1403. andq %rax,%r8
  1404. movq %r8,24(%rdi)
  1405. movq 80(%rsi),%r10
  1406. movq %r9,%r8
  1407. shrq $4,%r8
  1408. andq %rax,%r8
  1409. movq %r8,32(%rdi)
  1410. movq %r9,%r11
  1411. shrq $33,%r11
  1412. andq %rax,%r11
  1413. movq %r11,40(%rdi)
  1414. shrdq $62,%r10,%r9
  1415. andq %rax,%r9
  1416. movq %r9,48(%rdi)
  1417. movq 88(%rsi),%r11
  1418. movq %r10,%r9
  1419. shrq $27,%r9
  1420. andq %rax,%r9
  1421. movq %r9,56(%rdi)
  1422. shrdq $56,%r11,%r10
  1423. andq %rax,%r10
  1424. movq %r10,64(%rdi)
  1425. movq 96(%rsi),%r8
  1426. movq %r11,%r10
  1427. shrq $21,%r10
  1428. andq %rax,%r10
  1429. movq %r10,72(%rdi)
  1430. shrdq $50,%r8,%r11
  1431. andq %rax,%r11
  1432. movq %r11,80(%rdi)
  1433. movq 104(%rsi),%r9
  1434. movq %r8,%r11
  1435. shrq $15,%r11
  1436. andq %rax,%r11
  1437. movq %r11,88(%rdi)
  1438. shrdq $44,%r9,%r8
  1439. andq %rax,%r8
  1440. movq %r8,96(%rdi)
  1441. movq 112(%rsi),%r10
  1442. movq %r9,%r8
  1443. shrq $9,%r8
  1444. andq %rax,%r8
  1445. movq %r8,104(%rdi)
  1446. shrdq $38,%r10,%r9
  1447. andq %rax,%r9
  1448. movq %r9,112(%rdi)
  1449. movq 120(%rsi),%r11
  1450. movq %r10,%r9
  1451. shrq $3,%r9
  1452. andq %rax,%r9
  1453. movq %r9,120(%rdi)
  1454. movq %r10,%r8
  1455. shrq $32,%r8
  1456. andq %rax,%r8
  1457. movq %r8,128(%rdi)
  1458. shrdq $61,%r11,%r10
  1459. andq %rax,%r10
  1460. movq %r10,136(%rdi)
  1461. xorq %r8,%r8
  1462. movq %r11,%r10
  1463. shrq $26,%r10
  1464. andq %rax,%r10
  1465. movq %r10,144(%rdi)
  1466. shrdq $55,%r8,%r11
  1467. andq %rax,%r11
  1468. movq %r11,152(%rdi)
  1469. movq %r8,160(%rdi)
  1470. movq %r8,168(%rdi)
  1471. movq %r8,176(%rdi)
  1472. movq %r8,184(%rdi)
  1473. .byte 0xf3,0xc3
  1474. .cfi_endproc
  1475. .size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
  1476. .globl rsaz_1024_scatter5_avx2
  1477. .hidden rsaz_1024_scatter5_avx2
  1478. .type rsaz_1024_scatter5_avx2,@function
  1479. .align 32
  1480. rsaz_1024_scatter5_avx2:
  1481. .cfi_startproc
  1482. vzeroupper
  1483. vmovdqu .Lscatter_permd(%rip),%ymm5
  1484. shll $4,%edx
  1485. leaq (%rdi,%rdx,1),%rdi
  1486. movl $9,%eax
  1487. jmp .Loop_scatter_1024
  1488. .align 32
  1489. .Loop_scatter_1024:
  1490. vmovdqu (%rsi),%ymm0
  1491. leaq 32(%rsi),%rsi
  1492. vpermd %ymm0,%ymm5,%ymm0
  1493. vmovdqu %xmm0,(%rdi)
  1494. leaq 512(%rdi),%rdi
  1495. decl %eax
  1496. jnz .Loop_scatter_1024
  1497. vzeroupper
  1498. .byte 0xf3,0xc3
  1499. .cfi_endproc
  1500. .size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
  1501. .globl rsaz_1024_gather5_avx2
  1502. .hidden rsaz_1024_gather5_avx2
  1503. .type rsaz_1024_gather5_avx2,@function
  1504. .align 32
  1505. rsaz_1024_gather5_avx2:
  1506. .cfi_startproc
  1507. vzeroupper
  1508. movq %rsp,%r11
  1509. .cfi_def_cfa_register %r11
  1510. leaq -256(%rsp),%rsp
  1511. andq $-32,%rsp
  1512. leaq .Linc(%rip),%r10
  1513. leaq -128(%rsp),%rax
  1514. vmovd %edx,%xmm4
  1515. vmovdqa (%r10),%ymm0
  1516. vmovdqa 32(%r10),%ymm1
  1517. vmovdqa 64(%r10),%ymm5
  1518. vpbroadcastd %xmm4,%ymm4
  1519. vpaddd %ymm5,%ymm0,%ymm2
  1520. vpcmpeqd %ymm4,%ymm0,%ymm0
  1521. vpaddd %ymm5,%ymm1,%ymm3
  1522. vpcmpeqd %ymm4,%ymm1,%ymm1
  1523. vmovdqa %ymm0,0+128(%rax)
  1524. vpaddd %ymm5,%ymm2,%ymm0
  1525. vpcmpeqd %ymm4,%ymm2,%ymm2
  1526. vmovdqa %ymm1,32+128(%rax)
  1527. vpaddd %ymm5,%ymm3,%ymm1
  1528. vpcmpeqd %ymm4,%ymm3,%ymm3
  1529. vmovdqa %ymm2,64+128(%rax)
  1530. vpaddd %ymm5,%ymm0,%ymm2
  1531. vpcmpeqd %ymm4,%ymm0,%ymm0
  1532. vmovdqa %ymm3,96+128(%rax)
  1533. vpaddd %ymm5,%ymm1,%ymm3
  1534. vpcmpeqd %ymm4,%ymm1,%ymm1
  1535. vmovdqa %ymm0,128+128(%rax)
  1536. vpaddd %ymm5,%ymm2,%ymm8
  1537. vpcmpeqd %ymm4,%ymm2,%ymm2
  1538. vmovdqa %ymm1,160+128(%rax)
  1539. vpaddd %ymm5,%ymm3,%ymm9
  1540. vpcmpeqd %ymm4,%ymm3,%ymm3
  1541. vmovdqa %ymm2,192+128(%rax)
  1542. vpaddd %ymm5,%ymm8,%ymm10
  1543. vpcmpeqd %ymm4,%ymm8,%ymm8
  1544. vmovdqa %ymm3,224+128(%rax)
  1545. vpaddd %ymm5,%ymm9,%ymm11
  1546. vpcmpeqd %ymm4,%ymm9,%ymm9
  1547. vpaddd %ymm5,%ymm10,%ymm12
  1548. vpcmpeqd %ymm4,%ymm10,%ymm10
  1549. vpaddd %ymm5,%ymm11,%ymm13
  1550. vpcmpeqd %ymm4,%ymm11,%ymm11
  1551. vpaddd %ymm5,%ymm12,%ymm14
  1552. vpcmpeqd %ymm4,%ymm12,%ymm12
  1553. vpaddd %ymm5,%ymm13,%ymm15
  1554. vpcmpeqd %ymm4,%ymm13,%ymm13
  1555. vpcmpeqd %ymm4,%ymm14,%ymm14
  1556. vpcmpeqd %ymm4,%ymm15,%ymm15
  1557. vmovdqa -32(%r10),%ymm7
  1558. leaq 128(%rsi),%rsi
  1559. movl $9,%edx
  1560. .Loop_gather_1024:
  1561. vmovdqa 0-128(%rsi),%ymm0
  1562. vmovdqa 32-128(%rsi),%ymm1
  1563. vmovdqa 64-128(%rsi),%ymm2
  1564. vmovdqa 96-128(%rsi),%ymm3
  1565. vpand 0+128(%rax),%ymm0,%ymm0
  1566. vpand 32+128(%rax),%ymm1,%ymm1
  1567. vpand 64+128(%rax),%ymm2,%ymm2
  1568. vpor %ymm0,%ymm1,%ymm4
  1569. vpand 96+128(%rax),%ymm3,%ymm3
  1570. vmovdqa 128-128(%rsi),%ymm0
  1571. vmovdqa 160-128(%rsi),%ymm1
  1572. vpor %ymm2,%ymm3,%ymm5
  1573. vmovdqa 192-128(%rsi),%ymm2
  1574. vmovdqa 224-128(%rsi),%ymm3
  1575. vpand 128+128(%rax),%ymm0,%ymm0
  1576. vpand 160+128(%rax),%ymm1,%ymm1
  1577. vpand 192+128(%rax),%ymm2,%ymm2
  1578. vpor %ymm0,%ymm4,%ymm4
  1579. vpand 224+128(%rax),%ymm3,%ymm3
  1580. vpand 256-128(%rsi),%ymm8,%ymm0
  1581. vpor %ymm1,%ymm5,%ymm5
  1582. vpand 288-128(%rsi),%ymm9,%ymm1
  1583. vpor %ymm2,%ymm4,%ymm4
  1584. vpand 320-128(%rsi),%ymm10,%ymm2
  1585. vpor %ymm3,%ymm5,%ymm5
  1586. vpand 352-128(%rsi),%ymm11,%ymm3
  1587. vpor %ymm0,%ymm4,%ymm4
  1588. vpand 384-128(%rsi),%ymm12,%ymm0
  1589. vpor %ymm1,%ymm5,%ymm5
  1590. vpand 416-128(%rsi),%ymm13,%ymm1
  1591. vpor %ymm2,%ymm4,%ymm4
  1592. vpand 448-128(%rsi),%ymm14,%ymm2
  1593. vpor %ymm3,%ymm5,%ymm5
  1594. vpand 480-128(%rsi),%ymm15,%ymm3
  1595. leaq 512(%rsi),%rsi
  1596. vpor %ymm0,%ymm4,%ymm4
  1597. vpor %ymm1,%ymm5,%ymm5
  1598. vpor %ymm2,%ymm4,%ymm4
  1599. vpor %ymm3,%ymm5,%ymm5
  1600. vpor %ymm5,%ymm4,%ymm4
  1601. vextracti128 $1,%ymm4,%xmm5
  1602. vpor %xmm4,%xmm5,%xmm5
  1603. vpermd %ymm5,%ymm7,%ymm5
  1604. vmovdqu %ymm5,(%rdi)
  1605. leaq 32(%rdi),%rdi
  1606. decl %edx
  1607. jnz .Loop_gather_1024
  1608. vpxor %ymm0,%ymm0,%ymm0
  1609. vmovdqu %ymm0,(%rdi)
  1610. vzeroupper
  1611. leaq (%r11),%rsp
  1612. .cfi_def_cfa_register %rsp
  1613. .byte 0xf3,0xc3
  1614. .cfi_endproc
  1615. .LSEH_end_rsaz_1024_gather5:
  1616. .size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
  1617. .align 64
  1618. .Land_mask:
  1619. .quad 0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
  1620. .Lscatter_permd:
  1621. .long 0,2,4,6,7,7,7,7
  1622. .Lgather_permd:
  1623. .long 0,7,1,7,2,7,3,7
  1624. .Linc:
  1625. .long 0,0,0,0, 1,1,1,1
  1626. .long 2,2,2,2, 3,3,3,3
  1627. .long 4,4,4,4, 4,4,4,4
  1628. .align 64
  1629. #endif
  1630. .section .note.GNU-stack,"",@progbits