rsaz-avx2.S 37 KB

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