curve25519_amd64.s 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794
  1. // Copyright 2012 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // This code was translated into a form compatible with 6a from the public
  5. // domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html
  6. // +build amd64,!gccgo,!appengine,!purego
  7. #define REDMASK51 0x0007FFFFFFFFFFFF
  8. // These constants cannot be encoded in non-MOVQ immediates.
  9. // We access them directly from memory instead.
  10. DATA ·_121666_213(SB)/8, $996687872
  11. GLOBL ·_121666_213(SB), 8, $8
  12. DATA ·_2P0(SB)/8, $0xFFFFFFFFFFFDA
  13. GLOBL ·_2P0(SB), 8, $8
  14. DATA ·_2P1234(SB)/8, $0xFFFFFFFFFFFFE
  15. GLOBL ·_2P1234(SB), 8, $8
  16. // func freeze(inout *[5]uint64)
  17. TEXT ·freeze(SB),7,$0-8
  18. MOVQ inout+0(FP), DI
  19. MOVQ 0(DI),SI
  20. MOVQ 8(DI),DX
  21. MOVQ 16(DI),CX
  22. MOVQ 24(DI),R8
  23. MOVQ 32(DI),R9
  24. MOVQ $REDMASK51,AX
  25. MOVQ AX,R10
  26. SUBQ $18,R10
  27. MOVQ $3,R11
  28. REDUCELOOP:
  29. MOVQ SI,R12
  30. SHRQ $51,R12
  31. ANDQ AX,SI
  32. ADDQ R12,DX
  33. MOVQ DX,R12
  34. SHRQ $51,R12
  35. ANDQ AX,DX
  36. ADDQ R12,CX
  37. MOVQ CX,R12
  38. SHRQ $51,R12
  39. ANDQ AX,CX
  40. ADDQ R12,R8
  41. MOVQ R8,R12
  42. SHRQ $51,R12
  43. ANDQ AX,R8
  44. ADDQ R12,R9
  45. MOVQ R9,R12
  46. SHRQ $51,R12
  47. ANDQ AX,R9
  48. IMUL3Q $19,R12,R12
  49. ADDQ R12,SI
  50. SUBQ $1,R11
  51. JA REDUCELOOP
  52. MOVQ $1,R12
  53. CMPQ R10,SI
  54. CMOVQLT R11,R12
  55. CMPQ AX,DX
  56. CMOVQNE R11,R12
  57. CMPQ AX,CX
  58. CMOVQNE R11,R12
  59. CMPQ AX,R8
  60. CMOVQNE R11,R12
  61. CMPQ AX,R9
  62. CMOVQNE R11,R12
  63. NEGQ R12
  64. ANDQ R12,AX
  65. ANDQ R12,R10
  66. SUBQ R10,SI
  67. SUBQ AX,DX
  68. SUBQ AX,CX
  69. SUBQ AX,R8
  70. SUBQ AX,R9
  71. MOVQ SI,0(DI)
  72. MOVQ DX,8(DI)
  73. MOVQ CX,16(DI)
  74. MOVQ R8,24(DI)
  75. MOVQ R9,32(DI)
  76. RET
  77. // func ladderstep(inout *[5][5]uint64)
  78. TEXT ·ladderstep(SB),0,$296-8
  79. MOVQ inout+0(FP),DI
  80. MOVQ 40(DI),SI
  81. MOVQ 48(DI),DX
  82. MOVQ 56(DI),CX
  83. MOVQ 64(DI),R8
  84. MOVQ 72(DI),R9
  85. MOVQ SI,AX
  86. MOVQ DX,R10
  87. MOVQ CX,R11
  88. MOVQ R8,R12
  89. MOVQ R9,R13
  90. ADDQ ·_2P0(SB),AX
  91. ADDQ ·_2P1234(SB),R10
  92. ADDQ ·_2P1234(SB),R11
  93. ADDQ ·_2P1234(SB),R12
  94. ADDQ ·_2P1234(SB),R13
  95. ADDQ 80(DI),SI
  96. ADDQ 88(DI),DX
  97. ADDQ 96(DI),CX
  98. ADDQ 104(DI),R8
  99. ADDQ 112(DI),R9
  100. SUBQ 80(DI),AX
  101. SUBQ 88(DI),R10
  102. SUBQ 96(DI),R11
  103. SUBQ 104(DI),R12
  104. SUBQ 112(DI),R13
  105. MOVQ SI,0(SP)
  106. MOVQ DX,8(SP)
  107. MOVQ CX,16(SP)
  108. MOVQ R8,24(SP)
  109. MOVQ R9,32(SP)
  110. MOVQ AX,40(SP)
  111. MOVQ R10,48(SP)
  112. MOVQ R11,56(SP)
  113. MOVQ R12,64(SP)
  114. MOVQ R13,72(SP)
  115. MOVQ 40(SP),AX
  116. MULQ 40(SP)
  117. MOVQ AX,SI
  118. MOVQ DX,CX
  119. MOVQ 40(SP),AX
  120. SHLQ $1,AX
  121. MULQ 48(SP)
  122. MOVQ AX,R8
  123. MOVQ DX,R9
  124. MOVQ 40(SP),AX
  125. SHLQ $1,AX
  126. MULQ 56(SP)
  127. MOVQ AX,R10
  128. MOVQ DX,R11
  129. MOVQ 40(SP),AX
  130. SHLQ $1,AX
  131. MULQ 64(SP)
  132. MOVQ AX,R12
  133. MOVQ DX,R13
  134. MOVQ 40(SP),AX
  135. SHLQ $1,AX
  136. MULQ 72(SP)
  137. MOVQ AX,R14
  138. MOVQ DX,R15
  139. MOVQ 48(SP),AX
  140. MULQ 48(SP)
  141. ADDQ AX,R10
  142. ADCQ DX,R11
  143. MOVQ 48(SP),AX
  144. SHLQ $1,AX
  145. MULQ 56(SP)
  146. ADDQ AX,R12
  147. ADCQ DX,R13
  148. MOVQ 48(SP),AX
  149. SHLQ $1,AX
  150. MULQ 64(SP)
  151. ADDQ AX,R14
  152. ADCQ DX,R15
  153. MOVQ 48(SP),DX
  154. IMUL3Q $38,DX,AX
  155. MULQ 72(SP)
  156. ADDQ AX,SI
  157. ADCQ DX,CX
  158. MOVQ 56(SP),AX
  159. MULQ 56(SP)
  160. ADDQ AX,R14
  161. ADCQ DX,R15
  162. MOVQ 56(SP),DX
  163. IMUL3Q $38,DX,AX
  164. MULQ 64(SP)
  165. ADDQ AX,SI
  166. ADCQ DX,CX
  167. MOVQ 56(SP),DX
  168. IMUL3Q $38,DX,AX
  169. MULQ 72(SP)
  170. ADDQ AX,R8
  171. ADCQ DX,R9
  172. MOVQ 64(SP),DX
  173. IMUL3Q $19,DX,AX
  174. MULQ 64(SP)
  175. ADDQ AX,R8
  176. ADCQ DX,R9
  177. MOVQ 64(SP),DX
  178. IMUL3Q $38,DX,AX
  179. MULQ 72(SP)
  180. ADDQ AX,R10
  181. ADCQ DX,R11
  182. MOVQ 72(SP),DX
  183. IMUL3Q $19,DX,AX
  184. MULQ 72(SP)
  185. ADDQ AX,R12
  186. ADCQ DX,R13
  187. MOVQ $REDMASK51,DX
  188. SHLQ $13,SI,CX
  189. ANDQ DX,SI
  190. SHLQ $13,R8,R9
  191. ANDQ DX,R8
  192. ADDQ CX,R8
  193. SHLQ $13,R10,R11
  194. ANDQ DX,R10
  195. ADDQ R9,R10
  196. SHLQ $13,R12,R13
  197. ANDQ DX,R12
  198. ADDQ R11,R12
  199. SHLQ $13,R14,R15
  200. ANDQ DX,R14
  201. ADDQ R13,R14
  202. IMUL3Q $19,R15,CX
  203. ADDQ CX,SI
  204. MOVQ SI,CX
  205. SHRQ $51,CX
  206. ADDQ R8,CX
  207. ANDQ DX,SI
  208. MOVQ CX,R8
  209. SHRQ $51,CX
  210. ADDQ R10,CX
  211. ANDQ DX,R8
  212. MOVQ CX,R9
  213. SHRQ $51,CX
  214. ADDQ R12,CX
  215. ANDQ DX,R9
  216. MOVQ CX,AX
  217. SHRQ $51,CX
  218. ADDQ R14,CX
  219. ANDQ DX,AX
  220. MOVQ CX,R10
  221. SHRQ $51,CX
  222. IMUL3Q $19,CX,CX
  223. ADDQ CX,SI
  224. ANDQ DX,R10
  225. MOVQ SI,80(SP)
  226. MOVQ R8,88(SP)
  227. MOVQ R9,96(SP)
  228. MOVQ AX,104(SP)
  229. MOVQ R10,112(SP)
  230. MOVQ 0(SP),AX
  231. MULQ 0(SP)
  232. MOVQ AX,SI
  233. MOVQ DX,CX
  234. MOVQ 0(SP),AX
  235. SHLQ $1,AX
  236. MULQ 8(SP)
  237. MOVQ AX,R8
  238. MOVQ DX,R9
  239. MOVQ 0(SP),AX
  240. SHLQ $1,AX
  241. MULQ 16(SP)
  242. MOVQ AX,R10
  243. MOVQ DX,R11
  244. MOVQ 0(SP),AX
  245. SHLQ $1,AX
  246. MULQ 24(SP)
  247. MOVQ AX,R12
  248. MOVQ DX,R13
  249. MOVQ 0(SP),AX
  250. SHLQ $1,AX
  251. MULQ 32(SP)
  252. MOVQ AX,R14
  253. MOVQ DX,R15
  254. MOVQ 8(SP),AX
  255. MULQ 8(SP)
  256. ADDQ AX,R10
  257. ADCQ DX,R11
  258. MOVQ 8(SP),AX
  259. SHLQ $1,AX
  260. MULQ 16(SP)
  261. ADDQ AX,R12
  262. ADCQ DX,R13
  263. MOVQ 8(SP),AX
  264. SHLQ $1,AX
  265. MULQ 24(SP)
  266. ADDQ AX,R14
  267. ADCQ DX,R15
  268. MOVQ 8(SP),DX
  269. IMUL3Q $38,DX,AX
  270. MULQ 32(SP)
  271. ADDQ AX,SI
  272. ADCQ DX,CX
  273. MOVQ 16(SP),AX
  274. MULQ 16(SP)
  275. ADDQ AX,R14
  276. ADCQ DX,R15
  277. MOVQ 16(SP),DX
  278. IMUL3Q $38,DX,AX
  279. MULQ 24(SP)
  280. ADDQ AX,SI
  281. ADCQ DX,CX
  282. MOVQ 16(SP),DX
  283. IMUL3Q $38,DX,AX
  284. MULQ 32(SP)
  285. ADDQ AX,R8
  286. ADCQ DX,R9
  287. MOVQ 24(SP),DX
  288. IMUL3Q $19,DX,AX
  289. MULQ 24(SP)
  290. ADDQ AX,R8
  291. ADCQ DX,R9
  292. MOVQ 24(SP),DX
  293. IMUL3Q $38,DX,AX
  294. MULQ 32(SP)
  295. ADDQ AX,R10
  296. ADCQ DX,R11
  297. MOVQ 32(SP),DX
  298. IMUL3Q $19,DX,AX
  299. MULQ 32(SP)
  300. ADDQ AX,R12
  301. ADCQ DX,R13
  302. MOVQ $REDMASK51,DX
  303. SHLQ $13,SI,CX
  304. ANDQ DX,SI
  305. SHLQ $13,R8,R9
  306. ANDQ DX,R8
  307. ADDQ CX,R8
  308. SHLQ $13,R10,R11
  309. ANDQ DX,R10
  310. ADDQ R9,R10
  311. SHLQ $13,R12,R13
  312. ANDQ DX,R12
  313. ADDQ R11,R12
  314. SHLQ $13,R14,R15
  315. ANDQ DX,R14
  316. ADDQ R13,R14
  317. IMUL3Q $19,R15,CX
  318. ADDQ CX,SI
  319. MOVQ SI,CX
  320. SHRQ $51,CX
  321. ADDQ R8,CX
  322. ANDQ DX,SI
  323. MOVQ CX,R8
  324. SHRQ $51,CX
  325. ADDQ R10,CX
  326. ANDQ DX,R8
  327. MOVQ CX,R9
  328. SHRQ $51,CX
  329. ADDQ R12,CX
  330. ANDQ DX,R9
  331. MOVQ CX,AX
  332. SHRQ $51,CX
  333. ADDQ R14,CX
  334. ANDQ DX,AX
  335. MOVQ CX,R10
  336. SHRQ $51,CX
  337. IMUL3Q $19,CX,CX
  338. ADDQ CX,SI
  339. ANDQ DX,R10
  340. MOVQ SI,120(SP)
  341. MOVQ R8,128(SP)
  342. MOVQ R9,136(SP)
  343. MOVQ AX,144(SP)
  344. MOVQ R10,152(SP)
  345. MOVQ SI,SI
  346. MOVQ R8,DX
  347. MOVQ R9,CX
  348. MOVQ AX,R8
  349. MOVQ R10,R9
  350. ADDQ ·_2P0(SB),SI
  351. ADDQ ·_2P1234(SB),DX
  352. ADDQ ·_2P1234(SB),CX
  353. ADDQ ·_2P1234(SB),R8
  354. ADDQ ·_2P1234(SB),R9
  355. SUBQ 80(SP),SI
  356. SUBQ 88(SP),DX
  357. SUBQ 96(SP),CX
  358. SUBQ 104(SP),R8
  359. SUBQ 112(SP),R9
  360. MOVQ SI,160(SP)
  361. MOVQ DX,168(SP)
  362. MOVQ CX,176(SP)
  363. MOVQ R8,184(SP)
  364. MOVQ R9,192(SP)
  365. MOVQ 120(DI),SI
  366. MOVQ 128(DI),DX
  367. MOVQ 136(DI),CX
  368. MOVQ 144(DI),R8
  369. MOVQ 152(DI),R9
  370. MOVQ SI,AX
  371. MOVQ DX,R10
  372. MOVQ CX,R11
  373. MOVQ R8,R12
  374. MOVQ R9,R13
  375. ADDQ ·_2P0(SB),AX
  376. ADDQ ·_2P1234(SB),R10
  377. ADDQ ·_2P1234(SB),R11
  378. ADDQ ·_2P1234(SB),R12
  379. ADDQ ·_2P1234(SB),R13
  380. ADDQ 160(DI),SI
  381. ADDQ 168(DI),DX
  382. ADDQ 176(DI),CX
  383. ADDQ 184(DI),R8
  384. ADDQ 192(DI),R9
  385. SUBQ 160(DI),AX
  386. SUBQ 168(DI),R10
  387. SUBQ 176(DI),R11
  388. SUBQ 184(DI),R12
  389. SUBQ 192(DI),R13
  390. MOVQ SI,200(SP)
  391. MOVQ DX,208(SP)
  392. MOVQ CX,216(SP)
  393. MOVQ R8,224(SP)
  394. MOVQ R9,232(SP)
  395. MOVQ AX,240(SP)
  396. MOVQ R10,248(SP)
  397. MOVQ R11,256(SP)
  398. MOVQ R12,264(SP)
  399. MOVQ R13,272(SP)
  400. MOVQ 224(SP),SI
  401. IMUL3Q $19,SI,AX
  402. MOVQ AX,280(SP)
  403. MULQ 56(SP)
  404. MOVQ AX,SI
  405. MOVQ DX,CX
  406. MOVQ 232(SP),DX
  407. IMUL3Q $19,DX,AX
  408. MOVQ AX,288(SP)
  409. MULQ 48(SP)
  410. ADDQ AX,SI
  411. ADCQ DX,CX
  412. MOVQ 200(SP),AX
  413. MULQ 40(SP)
  414. ADDQ AX,SI
  415. ADCQ DX,CX
  416. MOVQ 200(SP),AX
  417. MULQ 48(SP)
  418. MOVQ AX,R8
  419. MOVQ DX,R9
  420. MOVQ 200(SP),AX
  421. MULQ 56(SP)
  422. MOVQ AX,R10
  423. MOVQ DX,R11
  424. MOVQ 200(SP),AX
  425. MULQ 64(SP)
  426. MOVQ AX,R12
  427. MOVQ DX,R13
  428. MOVQ 200(SP),AX
  429. MULQ 72(SP)
  430. MOVQ AX,R14
  431. MOVQ DX,R15
  432. MOVQ 208(SP),AX
  433. MULQ 40(SP)
  434. ADDQ AX,R8
  435. ADCQ DX,R9
  436. MOVQ 208(SP),AX
  437. MULQ 48(SP)
  438. ADDQ AX,R10
  439. ADCQ DX,R11
  440. MOVQ 208(SP),AX
  441. MULQ 56(SP)
  442. ADDQ AX,R12
  443. ADCQ DX,R13
  444. MOVQ 208(SP),AX
  445. MULQ 64(SP)
  446. ADDQ AX,R14
  447. ADCQ DX,R15
  448. MOVQ 208(SP),DX
  449. IMUL3Q $19,DX,AX
  450. MULQ 72(SP)
  451. ADDQ AX,SI
  452. ADCQ DX,CX
  453. MOVQ 216(SP),AX
  454. MULQ 40(SP)
  455. ADDQ AX,R10
  456. ADCQ DX,R11
  457. MOVQ 216(SP),AX
  458. MULQ 48(SP)
  459. ADDQ AX,R12
  460. ADCQ DX,R13
  461. MOVQ 216(SP),AX
  462. MULQ 56(SP)
  463. ADDQ AX,R14
  464. ADCQ DX,R15
  465. MOVQ 216(SP),DX
  466. IMUL3Q $19,DX,AX
  467. MULQ 64(SP)
  468. ADDQ AX,SI
  469. ADCQ DX,CX
  470. MOVQ 216(SP),DX
  471. IMUL3Q $19,DX,AX
  472. MULQ 72(SP)
  473. ADDQ AX,R8
  474. ADCQ DX,R9
  475. MOVQ 224(SP),AX
  476. MULQ 40(SP)
  477. ADDQ AX,R12
  478. ADCQ DX,R13
  479. MOVQ 224(SP),AX
  480. MULQ 48(SP)
  481. ADDQ AX,R14
  482. ADCQ DX,R15
  483. MOVQ 280(SP),AX
  484. MULQ 64(SP)
  485. ADDQ AX,R8
  486. ADCQ DX,R9
  487. MOVQ 280(SP),AX
  488. MULQ 72(SP)
  489. ADDQ AX,R10
  490. ADCQ DX,R11
  491. MOVQ 232(SP),AX
  492. MULQ 40(SP)
  493. ADDQ AX,R14
  494. ADCQ DX,R15
  495. MOVQ 288(SP),AX
  496. MULQ 56(SP)
  497. ADDQ AX,R8
  498. ADCQ DX,R9
  499. MOVQ 288(SP),AX
  500. MULQ 64(SP)
  501. ADDQ AX,R10
  502. ADCQ DX,R11
  503. MOVQ 288(SP),AX
  504. MULQ 72(SP)
  505. ADDQ AX,R12
  506. ADCQ DX,R13
  507. MOVQ $REDMASK51,DX
  508. SHLQ $13,SI,CX
  509. ANDQ DX,SI
  510. SHLQ $13,R8,R9
  511. ANDQ DX,R8
  512. ADDQ CX,R8
  513. SHLQ $13,R10,R11
  514. ANDQ DX,R10
  515. ADDQ R9,R10
  516. SHLQ $13,R12,R13
  517. ANDQ DX,R12
  518. ADDQ R11,R12
  519. SHLQ $13,R14,R15
  520. ANDQ DX,R14
  521. ADDQ R13,R14
  522. IMUL3Q $19,R15,CX
  523. ADDQ CX,SI
  524. MOVQ SI,CX
  525. SHRQ $51,CX
  526. ADDQ R8,CX
  527. MOVQ CX,R8
  528. SHRQ $51,CX
  529. ANDQ DX,SI
  530. ADDQ R10,CX
  531. MOVQ CX,R9
  532. SHRQ $51,CX
  533. ANDQ DX,R8
  534. ADDQ R12,CX
  535. MOVQ CX,AX
  536. SHRQ $51,CX
  537. ANDQ DX,R9
  538. ADDQ R14,CX
  539. MOVQ CX,R10
  540. SHRQ $51,CX
  541. ANDQ DX,AX
  542. IMUL3Q $19,CX,CX
  543. ADDQ CX,SI
  544. ANDQ DX,R10
  545. MOVQ SI,40(SP)
  546. MOVQ R8,48(SP)
  547. MOVQ R9,56(SP)
  548. MOVQ AX,64(SP)
  549. MOVQ R10,72(SP)
  550. MOVQ 264(SP),SI
  551. IMUL3Q $19,SI,AX
  552. MOVQ AX,200(SP)
  553. MULQ 16(SP)
  554. MOVQ AX,SI
  555. MOVQ DX,CX
  556. MOVQ 272(SP),DX
  557. IMUL3Q $19,DX,AX
  558. MOVQ AX,208(SP)
  559. MULQ 8(SP)
  560. ADDQ AX,SI
  561. ADCQ DX,CX
  562. MOVQ 240(SP),AX
  563. MULQ 0(SP)
  564. ADDQ AX,SI
  565. ADCQ DX,CX
  566. MOVQ 240(SP),AX
  567. MULQ 8(SP)
  568. MOVQ AX,R8
  569. MOVQ DX,R9
  570. MOVQ 240(SP),AX
  571. MULQ 16(SP)
  572. MOVQ AX,R10
  573. MOVQ DX,R11
  574. MOVQ 240(SP),AX
  575. MULQ 24(SP)
  576. MOVQ AX,R12
  577. MOVQ DX,R13
  578. MOVQ 240(SP),AX
  579. MULQ 32(SP)
  580. MOVQ AX,R14
  581. MOVQ DX,R15
  582. MOVQ 248(SP),AX
  583. MULQ 0(SP)
  584. ADDQ AX,R8
  585. ADCQ DX,R9
  586. MOVQ 248(SP),AX
  587. MULQ 8(SP)
  588. ADDQ AX,R10
  589. ADCQ DX,R11
  590. MOVQ 248(SP),AX
  591. MULQ 16(SP)
  592. ADDQ AX,R12
  593. ADCQ DX,R13
  594. MOVQ 248(SP),AX
  595. MULQ 24(SP)
  596. ADDQ AX,R14
  597. ADCQ DX,R15
  598. MOVQ 248(SP),DX
  599. IMUL3Q $19,DX,AX
  600. MULQ 32(SP)
  601. ADDQ AX,SI
  602. ADCQ DX,CX
  603. MOVQ 256(SP),AX
  604. MULQ 0(SP)
  605. ADDQ AX,R10
  606. ADCQ DX,R11
  607. MOVQ 256(SP),AX
  608. MULQ 8(SP)
  609. ADDQ AX,R12
  610. ADCQ DX,R13
  611. MOVQ 256(SP),AX
  612. MULQ 16(SP)
  613. ADDQ AX,R14
  614. ADCQ DX,R15
  615. MOVQ 256(SP),DX
  616. IMUL3Q $19,DX,AX
  617. MULQ 24(SP)
  618. ADDQ AX,SI
  619. ADCQ DX,CX
  620. MOVQ 256(SP),DX
  621. IMUL3Q $19,DX,AX
  622. MULQ 32(SP)
  623. ADDQ AX,R8
  624. ADCQ DX,R9
  625. MOVQ 264(SP),AX
  626. MULQ 0(SP)
  627. ADDQ AX,R12
  628. ADCQ DX,R13
  629. MOVQ 264(SP),AX
  630. MULQ 8(SP)
  631. ADDQ AX,R14
  632. ADCQ DX,R15
  633. MOVQ 200(SP),AX
  634. MULQ 24(SP)
  635. ADDQ AX,R8
  636. ADCQ DX,R9
  637. MOVQ 200(SP),AX
  638. MULQ 32(SP)
  639. ADDQ AX,R10
  640. ADCQ DX,R11
  641. MOVQ 272(SP),AX
  642. MULQ 0(SP)
  643. ADDQ AX,R14
  644. ADCQ DX,R15
  645. MOVQ 208(SP),AX
  646. MULQ 16(SP)
  647. ADDQ AX,R8
  648. ADCQ DX,R9
  649. MOVQ 208(SP),AX
  650. MULQ 24(SP)
  651. ADDQ AX,R10
  652. ADCQ DX,R11
  653. MOVQ 208(SP),AX
  654. MULQ 32(SP)
  655. ADDQ AX,R12
  656. ADCQ DX,R13
  657. MOVQ $REDMASK51,DX
  658. SHLQ $13,SI,CX
  659. ANDQ DX,SI
  660. SHLQ $13,R8,R9
  661. ANDQ DX,R8
  662. ADDQ CX,R8
  663. SHLQ $13,R10,R11
  664. ANDQ DX,R10
  665. ADDQ R9,R10
  666. SHLQ $13,R12,R13
  667. ANDQ DX,R12
  668. ADDQ R11,R12
  669. SHLQ $13,R14,R15
  670. ANDQ DX,R14
  671. ADDQ R13,R14
  672. IMUL3Q $19,R15,CX
  673. ADDQ CX,SI
  674. MOVQ SI,CX
  675. SHRQ $51,CX
  676. ADDQ R8,CX
  677. MOVQ CX,R8
  678. SHRQ $51,CX
  679. ANDQ DX,SI
  680. ADDQ R10,CX
  681. MOVQ CX,R9
  682. SHRQ $51,CX
  683. ANDQ DX,R8
  684. ADDQ R12,CX
  685. MOVQ CX,AX
  686. SHRQ $51,CX
  687. ANDQ DX,R9
  688. ADDQ R14,CX
  689. MOVQ CX,R10
  690. SHRQ $51,CX
  691. ANDQ DX,AX
  692. IMUL3Q $19,CX,CX
  693. ADDQ CX,SI
  694. ANDQ DX,R10
  695. MOVQ SI,DX
  696. MOVQ R8,CX
  697. MOVQ R9,R11
  698. MOVQ AX,R12
  699. MOVQ R10,R13
  700. ADDQ ·_2P0(SB),DX
  701. ADDQ ·_2P1234(SB),CX
  702. ADDQ ·_2P1234(SB),R11
  703. ADDQ ·_2P1234(SB),R12
  704. ADDQ ·_2P1234(SB),R13
  705. ADDQ 40(SP),SI
  706. ADDQ 48(SP),R8
  707. ADDQ 56(SP),R9
  708. ADDQ 64(SP),AX
  709. ADDQ 72(SP),R10
  710. SUBQ 40(SP),DX
  711. SUBQ 48(SP),CX
  712. SUBQ 56(SP),R11
  713. SUBQ 64(SP),R12
  714. SUBQ 72(SP),R13
  715. MOVQ SI,120(DI)
  716. MOVQ R8,128(DI)
  717. MOVQ R9,136(DI)
  718. MOVQ AX,144(DI)
  719. MOVQ R10,152(DI)
  720. MOVQ DX,160(DI)
  721. MOVQ CX,168(DI)
  722. MOVQ R11,176(DI)
  723. MOVQ R12,184(DI)
  724. MOVQ R13,192(DI)
  725. MOVQ 120(DI),AX
  726. MULQ 120(DI)
  727. MOVQ AX,SI
  728. MOVQ DX,CX
  729. MOVQ 120(DI),AX
  730. SHLQ $1,AX
  731. MULQ 128(DI)
  732. MOVQ AX,R8
  733. MOVQ DX,R9
  734. MOVQ 120(DI),AX
  735. SHLQ $1,AX
  736. MULQ 136(DI)
  737. MOVQ AX,R10
  738. MOVQ DX,R11
  739. MOVQ 120(DI),AX
  740. SHLQ $1,AX
  741. MULQ 144(DI)
  742. MOVQ AX,R12
  743. MOVQ DX,R13
  744. MOVQ 120(DI),AX
  745. SHLQ $1,AX
  746. MULQ 152(DI)
  747. MOVQ AX,R14
  748. MOVQ DX,R15
  749. MOVQ 128(DI),AX
  750. MULQ 128(DI)
  751. ADDQ AX,R10
  752. ADCQ DX,R11
  753. MOVQ 128(DI),AX
  754. SHLQ $1,AX
  755. MULQ 136(DI)
  756. ADDQ AX,R12
  757. ADCQ DX,R13
  758. MOVQ 128(DI),AX
  759. SHLQ $1,AX
  760. MULQ 144(DI)
  761. ADDQ AX,R14
  762. ADCQ DX,R15
  763. MOVQ 128(DI),DX
  764. IMUL3Q $38,DX,AX
  765. MULQ 152(DI)
  766. ADDQ AX,SI
  767. ADCQ DX,CX
  768. MOVQ 136(DI),AX
  769. MULQ 136(DI)
  770. ADDQ AX,R14
  771. ADCQ DX,R15
  772. MOVQ 136(DI),DX
  773. IMUL3Q $38,DX,AX
  774. MULQ 144(DI)
  775. ADDQ AX,SI
  776. ADCQ DX,CX
  777. MOVQ 136(DI),DX
  778. IMUL3Q $38,DX,AX
  779. MULQ 152(DI)
  780. ADDQ AX,R8
  781. ADCQ DX,R9
  782. MOVQ 144(DI),DX
  783. IMUL3Q $19,DX,AX
  784. MULQ 144(DI)
  785. ADDQ AX,R8
  786. ADCQ DX,R9
  787. MOVQ 144(DI),DX
  788. IMUL3Q $38,DX,AX
  789. MULQ 152(DI)
  790. ADDQ AX,R10
  791. ADCQ DX,R11
  792. MOVQ 152(DI),DX
  793. IMUL3Q $19,DX,AX
  794. MULQ 152(DI)
  795. ADDQ AX,R12
  796. ADCQ DX,R13
  797. MOVQ $REDMASK51,DX
  798. SHLQ $13,SI,CX
  799. ANDQ DX,SI
  800. SHLQ $13,R8,R9
  801. ANDQ DX,R8
  802. ADDQ CX,R8
  803. SHLQ $13,R10,R11
  804. ANDQ DX,R10
  805. ADDQ R9,R10
  806. SHLQ $13,R12,R13
  807. ANDQ DX,R12
  808. ADDQ R11,R12
  809. SHLQ $13,R14,R15
  810. ANDQ DX,R14
  811. ADDQ R13,R14
  812. IMUL3Q $19,R15,CX
  813. ADDQ CX,SI
  814. MOVQ SI,CX
  815. SHRQ $51,CX
  816. ADDQ R8,CX
  817. ANDQ DX,SI
  818. MOVQ CX,R8
  819. SHRQ $51,CX
  820. ADDQ R10,CX
  821. ANDQ DX,R8
  822. MOVQ CX,R9
  823. SHRQ $51,CX
  824. ADDQ R12,CX
  825. ANDQ DX,R9
  826. MOVQ CX,AX
  827. SHRQ $51,CX
  828. ADDQ R14,CX
  829. ANDQ DX,AX
  830. MOVQ CX,R10
  831. SHRQ $51,CX
  832. IMUL3Q $19,CX,CX
  833. ADDQ CX,SI
  834. ANDQ DX,R10
  835. MOVQ SI,120(DI)
  836. MOVQ R8,128(DI)
  837. MOVQ R9,136(DI)
  838. MOVQ AX,144(DI)
  839. MOVQ R10,152(DI)
  840. MOVQ 160(DI),AX
  841. MULQ 160(DI)
  842. MOVQ AX,SI
  843. MOVQ DX,CX
  844. MOVQ 160(DI),AX
  845. SHLQ $1,AX
  846. MULQ 168(DI)
  847. MOVQ AX,R8
  848. MOVQ DX,R9
  849. MOVQ 160(DI),AX
  850. SHLQ $1,AX
  851. MULQ 176(DI)
  852. MOVQ AX,R10
  853. MOVQ DX,R11
  854. MOVQ 160(DI),AX
  855. SHLQ $1,AX
  856. MULQ 184(DI)
  857. MOVQ AX,R12
  858. MOVQ DX,R13
  859. MOVQ 160(DI),AX
  860. SHLQ $1,AX
  861. MULQ 192(DI)
  862. MOVQ AX,R14
  863. MOVQ DX,R15
  864. MOVQ 168(DI),AX
  865. MULQ 168(DI)
  866. ADDQ AX,R10
  867. ADCQ DX,R11
  868. MOVQ 168(DI),AX
  869. SHLQ $1,AX
  870. MULQ 176(DI)
  871. ADDQ AX,R12
  872. ADCQ DX,R13
  873. MOVQ 168(DI),AX
  874. SHLQ $1,AX
  875. MULQ 184(DI)
  876. ADDQ AX,R14
  877. ADCQ DX,R15
  878. MOVQ 168(DI),DX
  879. IMUL3Q $38,DX,AX
  880. MULQ 192(DI)
  881. ADDQ AX,SI
  882. ADCQ DX,CX
  883. MOVQ 176(DI),AX
  884. MULQ 176(DI)
  885. ADDQ AX,R14
  886. ADCQ DX,R15
  887. MOVQ 176(DI),DX
  888. IMUL3Q $38,DX,AX
  889. MULQ 184(DI)
  890. ADDQ AX,SI
  891. ADCQ DX,CX
  892. MOVQ 176(DI),DX
  893. IMUL3Q $38,DX,AX
  894. MULQ 192(DI)
  895. ADDQ AX,R8
  896. ADCQ DX,R9
  897. MOVQ 184(DI),DX
  898. IMUL3Q $19,DX,AX
  899. MULQ 184(DI)
  900. ADDQ AX,R8
  901. ADCQ DX,R9
  902. MOVQ 184(DI),DX
  903. IMUL3Q $38,DX,AX
  904. MULQ 192(DI)
  905. ADDQ AX,R10
  906. ADCQ DX,R11
  907. MOVQ 192(DI),DX
  908. IMUL3Q $19,DX,AX
  909. MULQ 192(DI)
  910. ADDQ AX,R12
  911. ADCQ DX,R13
  912. MOVQ $REDMASK51,DX
  913. SHLQ $13,SI,CX
  914. ANDQ DX,SI
  915. SHLQ $13,R8,R9
  916. ANDQ DX,R8
  917. ADDQ CX,R8
  918. SHLQ $13,R10,R11
  919. ANDQ DX,R10
  920. ADDQ R9,R10
  921. SHLQ $13,R12,R13
  922. ANDQ DX,R12
  923. ADDQ R11,R12
  924. SHLQ $13,R14,R15
  925. ANDQ DX,R14
  926. ADDQ R13,R14
  927. IMUL3Q $19,R15,CX
  928. ADDQ CX,SI
  929. MOVQ SI,CX
  930. SHRQ $51,CX
  931. ADDQ R8,CX
  932. ANDQ DX,SI
  933. MOVQ CX,R8
  934. SHRQ $51,CX
  935. ADDQ R10,CX
  936. ANDQ DX,R8
  937. MOVQ CX,R9
  938. SHRQ $51,CX
  939. ADDQ R12,CX
  940. ANDQ DX,R9
  941. MOVQ CX,AX
  942. SHRQ $51,CX
  943. ADDQ R14,CX
  944. ANDQ DX,AX
  945. MOVQ CX,R10
  946. SHRQ $51,CX
  947. IMUL3Q $19,CX,CX
  948. ADDQ CX,SI
  949. ANDQ DX,R10
  950. MOVQ SI,160(DI)
  951. MOVQ R8,168(DI)
  952. MOVQ R9,176(DI)
  953. MOVQ AX,184(DI)
  954. MOVQ R10,192(DI)
  955. MOVQ 184(DI),SI
  956. IMUL3Q $19,SI,AX
  957. MOVQ AX,0(SP)
  958. MULQ 16(DI)
  959. MOVQ AX,SI
  960. MOVQ DX,CX
  961. MOVQ 192(DI),DX
  962. IMUL3Q $19,DX,AX
  963. MOVQ AX,8(SP)
  964. MULQ 8(DI)
  965. ADDQ AX,SI
  966. ADCQ DX,CX
  967. MOVQ 160(DI),AX
  968. MULQ 0(DI)
  969. ADDQ AX,SI
  970. ADCQ DX,CX
  971. MOVQ 160(DI),AX
  972. MULQ 8(DI)
  973. MOVQ AX,R8
  974. MOVQ DX,R9
  975. MOVQ 160(DI),AX
  976. MULQ 16(DI)
  977. MOVQ AX,R10
  978. MOVQ DX,R11
  979. MOVQ 160(DI),AX
  980. MULQ 24(DI)
  981. MOVQ AX,R12
  982. MOVQ DX,R13
  983. MOVQ 160(DI),AX
  984. MULQ 32(DI)
  985. MOVQ AX,R14
  986. MOVQ DX,R15
  987. MOVQ 168(DI),AX
  988. MULQ 0(DI)
  989. ADDQ AX,R8
  990. ADCQ DX,R9
  991. MOVQ 168(DI),AX
  992. MULQ 8(DI)
  993. ADDQ AX,R10
  994. ADCQ DX,R11
  995. MOVQ 168(DI),AX
  996. MULQ 16(DI)
  997. ADDQ AX,R12
  998. ADCQ DX,R13
  999. MOVQ 168(DI),AX
  1000. MULQ 24(DI)
  1001. ADDQ AX,R14
  1002. ADCQ DX,R15
  1003. MOVQ 168(DI),DX
  1004. IMUL3Q $19,DX,AX
  1005. MULQ 32(DI)
  1006. ADDQ AX,SI
  1007. ADCQ DX,CX
  1008. MOVQ 176(DI),AX
  1009. MULQ 0(DI)
  1010. ADDQ AX,R10
  1011. ADCQ DX,R11
  1012. MOVQ 176(DI),AX
  1013. MULQ 8(DI)
  1014. ADDQ AX,R12
  1015. ADCQ DX,R13
  1016. MOVQ 176(DI),AX
  1017. MULQ 16(DI)
  1018. ADDQ AX,R14
  1019. ADCQ DX,R15
  1020. MOVQ 176(DI),DX
  1021. IMUL3Q $19,DX,AX
  1022. MULQ 24(DI)
  1023. ADDQ AX,SI
  1024. ADCQ DX,CX
  1025. MOVQ 176(DI),DX
  1026. IMUL3Q $19,DX,AX
  1027. MULQ 32(DI)
  1028. ADDQ AX,R8
  1029. ADCQ DX,R9
  1030. MOVQ 184(DI),AX
  1031. MULQ 0(DI)
  1032. ADDQ AX,R12
  1033. ADCQ DX,R13
  1034. MOVQ 184(DI),AX
  1035. MULQ 8(DI)
  1036. ADDQ AX,R14
  1037. ADCQ DX,R15
  1038. MOVQ 0(SP),AX
  1039. MULQ 24(DI)
  1040. ADDQ AX,R8
  1041. ADCQ DX,R9
  1042. MOVQ 0(SP),AX
  1043. MULQ 32(DI)
  1044. ADDQ AX,R10
  1045. ADCQ DX,R11
  1046. MOVQ 192(DI),AX
  1047. MULQ 0(DI)
  1048. ADDQ AX,R14
  1049. ADCQ DX,R15
  1050. MOVQ 8(SP),AX
  1051. MULQ 16(DI)
  1052. ADDQ AX,R8
  1053. ADCQ DX,R9
  1054. MOVQ 8(SP),AX
  1055. MULQ 24(DI)
  1056. ADDQ AX,R10
  1057. ADCQ DX,R11
  1058. MOVQ 8(SP),AX
  1059. MULQ 32(DI)
  1060. ADDQ AX,R12
  1061. ADCQ DX,R13
  1062. MOVQ $REDMASK51,DX
  1063. SHLQ $13,SI,CX
  1064. ANDQ DX,SI
  1065. SHLQ $13,R8,R9
  1066. ANDQ DX,R8
  1067. ADDQ CX,R8
  1068. SHLQ $13,R10,R11
  1069. ANDQ DX,R10
  1070. ADDQ R9,R10
  1071. SHLQ $13,R12,R13
  1072. ANDQ DX,R12
  1073. ADDQ R11,R12
  1074. SHLQ $13,R14,R15
  1075. ANDQ DX,R14
  1076. ADDQ R13,R14
  1077. IMUL3Q $19,R15,CX
  1078. ADDQ CX,SI
  1079. MOVQ SI,CX
  1080. SHRQ $51,CX
  1081. ADDQ R8,CX
  1082. MOVQ CX,R8
  1083. SHRQ $51,CX
  1084. ANDQ DX,SI
  1085. ADDQ R10,CX
  1086. MOVQ CX,R9
  1087. SHRQ $51,CX
  1088. ANDQ DX,R8
  1089. ADDQ R12,CX
  1090. MOVQ CX,AX
  1091. SHRQ $51,CX
  1092. ANDQ DX,R9
  1093. ADDQ R14,CX
  1094. MOVQ CX,R10
  1095. SHRQ $51,CX
  1096. ANDQ DX,AX
  1097. IMUL3Q $19,CX,CX
  1098. ADDQ CX,SI
  1099. ANDQ DX,R10
  1100. MOVQ SI,160(DI)
  1101. MOVQ R8,168(DI)
  1102. MOVQ R9,176(DI)
  1103. MOVQ AX,184(DI)
  1104. MOVQ R10,192(DI)
  1105. MOVQ 144(SP),SI
  1106. IMUL3Q $19,SI,AX
  1107. MOVQ AX,0(SP)
  1108. MULQ 96(SP)
  1109. MOVQ AX,SI
  1110. MOVQ DX,CX
  1111. MOVQ 152(SP),DX
  1112. IMUL3Q $19,DX,AX
  1113. MOVQ AX,8(SP)
  1114. MULQ 88(SP)
  1115. ADDQ AX,SI
  1116. ADCQ DX,CX
  1117. MOVQ 120(SP),AX
  1118. MULQ 80(SP)
  1119. ADDQ AX,SI
  1120. ADCQ DX,CX
  1121. MOVQ 120(SP),AX
  1122. MULQ 88(SP)
  1123. MOVQ AX,R8
  1124. MOVQ DX,R9
  1125. MOVQ 120(SP),AX
  1126. MULQ 96(SP)
  1127. MOVQ AX,R10
  1128. MOVQ DX,R11
  1129. MOVQ 120(SP),AX
  1130. MULQ 104(SP)
  1131. MOVQ AX,R12
  1132. MOVQ DX,R13
  1133. MOVQ 120(SP),AX
  1134. MULQ 112(SP)
  1135. MOVQ AX,R14
  1136. MOVQ DX,R15
  1137. MOVQ 128(SP),AX
  1138. MULQ 80(SP)
  1139. ADDQ AX,R8
  1140. ADCQ DX,R9
  1141. MOVQ 128(SP),AX
  1142. MULQ 88(SP)
  1143. ADDQ AX,R10
  1144. ADCQ DX,R11
  1145. MOVQ 128(SP),AX
  1146. MULQ 96(SP)
  1147. ADDQ AX,R12
  1148. ADCQ DX,R13
  1149. MOVQ 128(SP),AX
  1150. MULQ 104(SP)
  1151. ADDQ AX,R14
  1152. ADCQ DX,R15
  1153. MOVQ 128(SP),DX
  1154. IMUL3Q $19,DX,AX
  1155. MULQ 112(SP)
  1156. ADDQ AX,SI
  1157. ADCQ DX,CX
  1158. MOVQ 136(SP),AX
  1159. MULQ 80(SP)
  1160. ADDQ AX,R10
  1161. ADCQ DX,R11
  1162. MOVQ 136(SP),AX
  1163. MULQ 88(SP)
  1164. ADDQ AX,R12
  1165. ADCQ DX,R13
  1166. MOVQ 136(SP),AX
  1167. MULQ 96(SP)
  1168. ADDQ AX,R14
  1169. ADCQ DX,R15
  1170. MOVQ 136(SP),DX
  1171. IMUL3Q $19,DX,AX
  1172. MULQ 104(SP)
  1173. ADDQ AX,SI
  1174. ADCQ DX,CX
  1175. MOVQ 136(SP),DX
  1176. IMUL3Q $19,DX,AX
  1177. MULQ 112(SP)
  1178. ADDQ AX,R8
  1179. ADCQ DX,R9
  1180. MOVQ 144(SP),AX
  1181. MULQ 80(SP)
  1182. ADDQ AX,R12
  1183. ADCQ DX,R13
  1184. MOVQ 144(SP),AX
  1185. MULQ 88(SP)
  1186. ADDQ AX,R14
  1187. ADCQ DX,R15
  1188. MOVQ 0(SP),AX
  1189. MULQ 104(SP)
  1190. ADDQ AX,R8
  1191. ADCQ DX,R9
  1192. MOVQ 0(SP),AX
  1193. MULQ 112(SP)
  1194. ADDQ AX,R10
  1195. ADCQ DX,R11
  1196. MOVQ 152(SP),AX
  1197. MULQ 80(SP)
  1198. ADDQ AX,R14
  1199. ADCQ DX,R15
  1200. MOVQ 8(SP),AX
  1201. MULQ 96(SP)
  1202. ADDQ AX,R8
  1203. ADCQ DX,R9
  1204. MOVQ 8(SP),AX
  1205. MULQ 104(SP)
  1206. ADDQ AX,R10
  1207. ADCQ DX,R11
  1208. MOVQ 8(SP),AX
  1209. MULQ 112(SP)
  1210. ADDQ AX,R12
  1211. ADCQ DX,R13
  1212. MOVQ $REDMASK51,DX
  1213. SHLQ $13,SI,CX
  1214. ANDQ DX,SI
  1215. SHLQ $13,R8,R9
  1216. ANDQ DX,R8
  1217. ADDQ CX,R8
  1218. SHLQ $13,R10,R11
  1219. ANDQ DX,R10
  1220. ADDQ R9,R10
  1221. SHLQ $13,R12,R13
  1222. ANDQ DX,R12
  1223. ADDQ R11,R12
  1224. SHLQ $13,R14,R15
  1225. ANDQ DX,R14
  1226. ADDQ R13,R14
  1227. IMUL3Q $19,R15,CX
  1228. ADDQ CX,SI
  1229. MOVQ SI,CX
  1230. SHRQ $51,CX
  1231. ADDQ R8,CX
  1232. MOVQ CX,R8
  1233. SHRQ $51,CX
  1234. ANDQ DX,SI
  1235. ADDQ R10,CX
  1236. MOVQ CX,R9
  1237. SHRQ $51,CX
  1238. ANDQ DX,R8
  1239. ADDQ R12,CX
  1240. MOVQ CX,AX
  1241. SHRQ $51,CX
  1242. ANDQ DX,R9
  1243. ADDQ R14,CX
  1244. MOVQ CX,R10
  1245. SHRQ $51,CX
  1246. ANDQ DX,AX
  1247. IMUL3Q $19,CX,CX
  1248. ADDQ CX,SI
  1249. ANDQ DX,R10
  1250. MOVQ SI,40(DI)
  1251. MOVQ R8,48(DI)
  1252. MOVQ R9,56(DI)
  1253. MOVQ AX,64(DI)
  1254. MOVQ R10,72(DI)
  1255. MOVQ 160(SP),AX
  1256. MULQ ·_121666_213(SB)
  1257. SHRQ $13,AX
  1258. MOVQ AX,SI
  1259. MOVQ DX,CX
  1260. MOVQ 168(SP),AX
  1261. MULQ ·_121666_213(SB)
  1262. SHRQ $13,AX
  1263. ADDQ AX,CX
  1264. MOVQ DX,R8
  1265. MOVQ 176(SP),AX
  1266. MULQ ·_121666_213(SB)
  1267. SHRQ $13,AX
  1268. ADDQ AX,R8
  1269. MOVQ DX,R9
  1270. MOVQ 184(SP),AX
  1271. MULQ ·_121666_213(SB)
  1272. SHRQ $13,AX
  1273. ADDQ AX,R9
  1274. MOVQ DX,R10
  1275. MOVQ 192(SP),AX
  1276. MULQ ·_121666_213(SB)
  1277. SHRQ $13,AX
  1278. ADDQ AX,R10
  1279. IMUL3Q $19,DX,DX
  1280. ADDQ DX,SI
  1281. ADDQ 80(SP),SI
  1282. ADDQ 88(SP),CX
  1283. ADDQ 96(SP),R8
  1284. ADDQ 104(SP),R9
  1285. ADDQ 112(SP),R10
  1286. MOVQ SI,80(DI)
  1287. MOVQ CX,88(DI)
  1288. MOVQ R8,96(DI)
  1289. MOVQ R9,104(DI)
  1290. MOVQ R10,112(DI)
  1291. MOVQ 104(DI),SI
  1292. IMUL3Q $19,SI,AX
  1293. MOVQ AX,0(SP)
  1294. MULQ 176(SP)
  1295. MOVQ AX,SI
  1296. MOVQ DX,CX
  1297. MOVQ 112(DI),DX
  1298. IMUL3Q $19,DX,AX
  1299. MOVQ AX,8(SP)
  1300. MULQ 168(SP)
  1301. ADDQ AX,SI
  1302. ADCQ DX,CX
  1303. MOVQ 80(DI),AX
  1304. MULQ 160(SP)
  1305. ADDQ AX,SI
  1306. ADCQ DX,CX
  1307. MOVQ 80(DI),AX
  1308. MULQ 168(SP)
  1309. MOVQ AX,R8
  1310. MOVQ DX,R9
  1311. MOVQ 80(DI),AX
  1312. MULQ 176(SP)
  1313. MOVQ AX,R10
  1314. MOVQ DX,R11
  1315. MOVQ 80(DI),AX
  1316. MULQ 184(SP)
  1317. MOVQ AX,R12
  1318. MOVQ DX,R13
  1319. MOVQ 80(DI),AX
  1320. MULQ 192(SP)
  1321. MOVQ AX,R14
  1322. MOVQ DX,R15
  1323. MOVQ 88(DI),AX
  1324. MULQ 160(SP)
  1325. ADDQ AX,R8
  1326. ADCQ DX,R9
  1327. MOVQ 88(DI),AX
  1328. MULQ 168(SP)
  1329. ADDQ AX,R10
  1330. ADCQ DX,R11
  1331. MOVQ 88(DI),AX
  1332. MULQ 176(SP)
  1333. ADDQ AX,R12
  1334. ADCQ DX,R13
  1335. MOVQ 88(DI),AX
  1336. MULQ 184(SP)
  1337. ADDQ AX,R14
  1338. ADCQ DX,R15
  1339. MOVQ 88(DI),DX
  1340. IMUL3Q $19,DX,AX
  1341. MULQ 192(SP)
  1342. ADDQ AX,SI
  1343. ADCQ DX,CX
  1344. MOVQ 96(DI),AX
  1345. MULQ 160(SP)
  1346. ADDQ AX,R10
  1347. ADCQ DX,R11
  1348. MOVQ 96(DI),AX
  1349. MULQ 168(SP)
  1350. ADDQ AX,R12
  1351. ADCQ DX,R13
  1352. MOVQ 96(DI),AX
  1353. MULQ 176(SP)
  1354. ADDQ AX,R14
  1355. ADCQ DX,R15
  1356. MOVQ 96(DI),DX
  1357. IMUL3Q $19,DX,AX
  1358. MULQ 184(SP)
  1359. ADDQ AX,SI
  1360. ADCQ DX,CX
  1361. MOVQ 96(DI),DX
  1362. IMUL3Q $19,DX,AX
  1363. MULQ 192(SP)
  1364. ADDQ AX,R8
  1365. ADCQ DX,R9
  1366. MOVQ 104(DI),AX
  1367. MULQ 160(SP)
  1368. ADDQ AX,R12
  1369. ADCQ DX,R13
  1370. MOVQ 104(DI),AX
  1371. MULQ 168(SP)
  1372. ADDQ AX,R14
  1373. ADCQ DX,R15
  1374. MOVQ 0(SP),AX
  1375. MULQ 184(SP)
  1376. ADDQ AX,R8
  1377. ADCQ DX,R9
  1378. MOVQ 0(SP),AX
  1379. MULQ 192(SP)
  1380. ADDQ AX,R10
  1381. ADCQ DX,R11
  1382. MOVQ 112(DI),AX
  1383. MULQ 160(SP)
  1384. ADDQ AX,R14
  1385. ADCQ DX,R15
  1386. MOVQ 8(SP),AX
  1387. MULQ 176(SP)
  1388. ADDQ AX,R8
  1389. ADCQ DX,R9
  1390. MOVQ 8(SP),AX
  1391. MULQ 184(SP)
  1392. ADDQ AX,R10
  1393. ADCQ DX,R11
  1394. MOVQ 8(SP),AX
  1395. MULQ 192(SP)
  1396. ADDQ AX,R12
  1397. ADCQ DX,R13
  1398. MOVQ $REDMASK51,DX
  1399. SHLQ $13,SI,CX
  1400. ANDQ DX,SI
  1401. SHLQ $13,R8,R9
  1402. ANDQ DX,R8
  1403. ADDQ CX,R8
  1404. SHLQ $13,R10,R11
  1405. ANDQ DX,R10
  1406. ADDQ R9,R10
  1407. SHLQ $13,R12,R13
  1408. ANDQ DX,R12
  1409. ADDQ R11,R12
  1410. SHLQ $13,R14,R15
  1411. ANDQ DX,R14
  1412. ADDQ R13,R14
  1413. IMUL3Q $19,R15,CX
  1414. ADDQ CX,SI
  1415. MOVQ SI,CX
  1416. SHRQ $51,CX
  1417. ADDQ R8,CX
  1418. MOVQ CX,R8
  1419. SHRQ $51,CX
  1420. ANDQ DX,SI
  1421. ADDQ R10,CX
  1422. MOVQ CX,R9
  1423. SHRQ $51,CX
  1424. ANDQ DX,R8
  1425. ADDQ R12,CX
  1426. MOVQ CX,AX
  1427. SHRQ $51,CX
  1428. ANDQ DX,R9
  1429. ADDQ R14,CX
  1430. MOVQ CX,R10
  1431. SHRQ $51,CX
  1432. ANDQ DX,AX
  1433. IMUL3Q $19,CX,CX
  1434. ADDQ CX,SI
  1435. ANDQ DX,R10
  1436. MOVQ SI,80(DI)
  1437. MOVQ R8,88(DI)
  1438. MOVQ R9,96(DI)
  1439. MOVQ AX,104(DI)
  1440. MOVQ R10,112(DI)
  1441. RET
  1442. // func cswap(inout *[4][5]uint64, v uint64)
  1443. TEXT ·cswap(SB),7,$0
  1444. MOVQ inout+0(FP),DI
  1445. MOVQ v+8(FP),SI
  1446. SUBQ $1, SI
  1447. NOTQ SI
  1448. MOVQ SI, X15
  1449. PSHUFD $0x44, X15, X15
  1450. MOVOU 0(DI), X0
  1451. MOVOU 16(DI), X2
  1452. MOVOU 32(DI), X4
  1453. MOVOU 48(DI), X6
  1454. MOVOU 64(DI), X8
  1455. MOVOU 80(DI), X1
  1456. MOVOU 96(DI), X3
  1457. MOVOU 112(DI), X5
  1458. MOVOU 128(DI), X7
  1459. MOVOU 144(DI), X9
  1460. MOVO X1, X10
  1461. MOVO X3, X11
  1462. MOVO X5, X12
  1463. MOVO X7, X13
  1464. MOVO X9, X14
  1465. PXOR X0, X10
  1466. PXOR X2, X11
  1467. PXOR X4, X12
  1468. PXOR X6, X13
  1469. PXOR X8, X14
  1470. PAND X15, X10
  1471. PAND X15, X11
  1472. PAND X15, X12
  1473. PAND X15, X13
  1474. PAND X15, X14
  1475. PXOR X10, X0
  1476. PXOR X10, X1
  1477. PXOR X11, X2
  1478. PXOR X11, X3
  1479. PXOR X12, X4
  1480. PXOR X12, X5
  1481. PXOR X13, X6
  1482. PXOR X13, X7
  1483. PXOR X14, X8
  1484. PXOR X14, X9
  1485. MOVOU X0, 0(DI)
  1486. MOVOU X2, 16(DI)
  1487. MOVOU X4, 32(DI)
  1488. MOVOU X6, 48(DI)
  1489. MOVOU X8, 64(DI)
  1490. MOVOU X1, 80(DI)
  1491. MOVOU X3, 96(DI)
  1492. MOVOU X5, 112(DI)
  1493. MOVOU X7, 128(DI)
  1494. MOVOU X9, 144(DI)
  1495. RET
  1496. // func mul(dest, a, b *[5]uint64)
  1497. TEXT ·mul(SB),0,$16-24
  1498. MOVQ dest+0(FP), DI
  1499. MOVQ a+8(FP), SI
  1500. MOVQ b+16(FP), DX
  1501. MOVQ DX,CX
  1502. MOVQ 24(SI),DX
  1503. IMUL3Q $19,DX,AX
  1504. MOVQ AX,0(SP)
  1505. MULQ 16(CX)
  1506. MOVQ AX,R8
  1507. MOVQ DX,R9
  1508. MOVQ 32(SI),DX
  1509. IMUL3Q $19,DX,AX
  1510. MOVQ AX,8(SP)
  1511. MULQ 8(CX)
  1512. ADDQ AX,R8
  1513. ADCQ DX,R9
  1514. MOVQ 0(SI),AX
  1515. MULQ 0(CX)
  1516. ADDQ AX,R8
  1517. ADCQ DX,R9
  1518. MOVQ 0(SI),AX
  1519. MULQ 8(CX)
  1520. MOVQ AX,R10
  1521. MOVQ DX,R11
  1522. MOVQ 0(SI),AX
  1523. MULQ 16(CX)
  1524. MOVQ AX,R12
  1525. MOVQ DX,R13
  1526. MOVQ 0(SI),AX
  1527. MULQ 24(CX)
  1528. MOVQ AX,R14
  1529. MOVQ DX,R15
  1530. MOVQ 0(SI),AX
  1531. MULQ 32(CX)
  1532. MOVQ AX,BX
  1533. MOVQ DX,BP
  1534. MOVQ 8(SI),AX
  1535. MULQ 0(CX)
  1536. ADDQ AX,R10
  1537. ADCQ DX,R11
  1538. MOVQ 8(SI),AX
  1539. MULQ 8(CX)
  1540. ADDQ AX,R12
  1541. ADCQ DX,R13
  1542. MOVQ 8(SI),AX
  1543. MULQ 16(CX)
  1544. ADDQ AX,R14
  1545. ADCQ DX,R15
  1546. MOVQ 8(SI),AX
  1547. MULQ 24(CX)
  1548. ADDQ AX,BX
  1549. ADCQ DX,BP
  1550. MOVQ 8(SI),DX
  1551. IMUL3Q $19,DX,AX
  1552. MULQ 32(CX)
  1553. ADDQ AX,R8
  1554. ADCQ DX,R9
  1555. MOVQ 16(SI),AX
  1556. MULQ 0(CX)
  1557. ADDQ AX,R12
  1558. ADCQ DX,R13
  1559. MOVQ 16(SI),AX
  1560. MULQ 8(CX)
  1561. ADDQ AX,R14
  1562. ADCQ DX,R15
  1563. MOVQ 16(SI),AX
  1564. MULQ 16(CX)
  1565. ADDQ AX,BX
  1566. ADCQ DX,BP
  1567. MOVQ 16(SI),DX
  1568. IMUL3Q $19,DX,AX
  1569. MULQ 24(CX)
  1570. ADDQ AX,R8
  1571. ADCQ DX,R9
  1572. MOVQ 16(SI),DX
  1573. IMUL3Q $19,DX,AX
  1574. MULQ 32(CX)
  1575. ADDQ AX,R10
  1576. ADCQ DX,R11
  1577. MOVQ 24(SI),AX
  1578. MULQ 0(CX)
  1579. ADDQ AX,R14
  1580. ADCQ DX,R15
  1581. MOVQ 24(SI),AX
  1582. MULQ 8(CX)
  1583. ADDQ AX,BX
  1584. ADCQ DX,BP
  1585. MOVQ 0(SP),AX
  1586. MULQ 24(CX)
  1587. ADDQ AX,R10
  1588. ADCQ DX,R11
  1589. MOVQ 0(SP),AX
  1590. MULQ 32(CX)
  1591. ADDQ AX,R12
  1592. ADCQ DX,R13
  1593. MOVQ 32(SI),AX
  1594. MULQ 0(CX)
  1595. ADDQ AX,BX
  1596. ADCQ DX,BP
  1597. MOVQ 8(SP),AX
  1598. MULQ 16(CX)
  1599. ADDQ AX,R10
  1600. ADCQ DX,R11
  1601. MOVQ 8(SP),AX
  1602. MULQ 24(CX)
  1603. ADDQ AX,R12
  1604. ADCQ DX,R13
  1605. MOVQ 8(SP),AX
  1606. MULQ 32(CX)
  1607. ADDQ AX,R14
  1608. ADCQ DX,R15
  1609. MOVQ $REDMASK51,SI
  1610. SHLQ $13,R8,R9
  1611. ANDQ SI,R8
  1612. SHLQ $13,R10,R11
  1613. ANDQ SI,R10
  1614. ADDQ R9,R10
  1615. SHLQ $13,R12,R13
  1616. ANDQ SI,R12
  1617. ADDQ R11,R12
  1618. SHLQ $13,R14,R15
  1619. ANDQ SI,R14
  1620. ADDQ R13,R14
  1621. SHLQ $13,BX,BP
  1622. ANDQ SI,BX
  1623. ADDQ R15,BX
  1624. IMUL3Q $19,BP,DX
  1625. ADDQ DX,R8
  1626. MOVQ R8,DX
  1627. SHRQ $51,DX
  1628. ADDQ R10,DX
  1629. MOVQ DX,CX
  1630. SHRQ $51,DX
  1631. ANDQ SI,R8
  1632. ADDQ R12,DX
  1633. MOVQ DX,R9
  1634. SHRQ $51,DX
  1635. ANDQ SI,CX
  1636. ADDQ R14,DX
  1637. MOVQ DX,AX
  1638. SHRQ $51,DX
  1639. ANDQ SI,R9
  1640. ADDQ BX,DX
  1641. MOVQ DX,R10
  1642. SHRQ $51,DX
  1643. ANDQ SI,AX
  1644. IMUL3Q $19,DX,DX
  1645. ADDQ DX,R8
  1646. ANDQ SI,R10
  1647. MOVQ R8,0(DI)
  1648. MOVQ CX,8(DI)
  1649. MOVQ R9,16(DI)
  1650. MOVQ AX,24(DI)
  1651. MOVQ R10,32(DI)
  1652. RET
  1653. // func square(out, in *[5]uint64)
  1654. TEXT ·square(SB),7,$0-16
  1655. MOVQ out+0(FP), DI
  1656. MOVQ in+8(FP), SI
  1657. MOVQ 0(SI),AX
  1658. MULQ 0(SI)
  1659. MOVQ AX,CX
  1660. MOVQ DX,R8
  1661. MOVQ 0(SI),AX
  1662. SHLQ $1,AX
  1663. MULQ 8(SI)
  1664. MOVQ AX,R9
  1665. MOVQ DX,R10
  1666. MOVQ 0(SI),AX
  1667. SHLQ $1,AX
  1668. MULQ 16(SI)
  1669. MOVQ AX,R11
  1670. MOVQ DX,R12
  1671. MOVQ 0(SI),AX
  1672. SHLQ $1,AX
  1673. MULQ 24(SI)
  1674. MOVQ AX,R13
  1675. MOVQ DX,R14
  1676. MOVQ 0(SI),AX
  1677. SHLQ $1,AX
  1678. MULQ 32(SI)
  1679. MOVQ AX,R15
  1680. MOVQ DX,BX
  1681. MOVQ 8(SI),AX
  1682. MULQ 8(SI)
  1683. ADDQ AX,R11
  1684. ADCQ DX,R12
  1685. MOVQ 8(SI),AX
  1686. SHLQ $1,AX
  1687. MULQ 16(SI)
  1688. ADDQ AX,R13
  1689. ADCQ DX,R14
  1690. MOVQ 8(SI),AX
  1691. SHLQ $1,AX
  1692. MULQ 24(SI)
  1693. ADDQ AX,R15
  1694. ADCQ DX,BX
  1695. MOVQ 8(SI),DX
  1696. IMUL3Q $38,DX,AX
  1697. MULQ 32(SI)
  1698. ADDQ AX,CX
  1699. ADCQ DX,R8
  1700. MOVQ 16(SI),AX
  1701. MULQ 16(SI)
  1702. ADDQ AX,R15
  1703. ADCQ DX,BX
  1704. MOVQ 16(SI),DX
  1705. IMUL3Q $38,DX,AX
  1706. MULQ 24(SI)
  1707. ADDQ AX,CX
  1708. ADCQ DX,R8
  1709. MOVQ 16(SI),DX
  1710. IMUL3Q $38,DX,AX
  1711. MULQ 32(SI)
  1712. ADDQ AX,R9
  1713. ADCQ DX,R10
  1714. MOVQ 24(SI),DX
  1715. IMUL3Q $19,DX,AX
  1716. MULQ 24(SI)
  1717. ADDQ AX,R9
  1718. ADCQ DX,R10
  1719. MOVQ 24(SI),DX
  1720. IMUL3Q $38,DX,AX
  1721. MULQ 32(SI)
  1722. ADDQ AX,R11
  1723. ADCQ DX,R12
  1724. MOVQ 32(SI),DX
  1725. IMUL3Q $19,DX,AX
  1726. MULQ 32(SI)
  1727. ADDQ AX,R13
  1728. ADCQ DX,R14
  1729. MOVQ $REDMASK51,SI
  1730. SHLQ $13,CX,R8
  1731. ANDQ SI,CX
  1732. SHLQ $13,R9,R10
  1733. ANDQ SI,R9
  1734. ADDQ R8,R9
  1735. SHLQ $13,R11,R12
  1736. ANDQ SI,R11
  1737. ADDQ R10,R11
  1738. SHLQ $13,R13,R14
  1739. ANDQ SI,R13
  1740. ADDQ R12,R13
  1741. SHLQ $13,R15,BX
  1742. ANDQ SI,R15
  1743. ADDQ R14,R15
  1744. IMUL3Q $19,BX,DX
  1745. ADDQ DX,CX
  1746. MOVQ CX,DX
  1747. SHRQ $51,DX
  1748. ADDQ R9,DX
  1749. ANDQ SI,CX
  1750. MOVQ DX,R8
  1751. SHRQ $51,DX
  1752. ADDQ R11,DX
  1753. ANDQ SI,R8
  1754. MOVQ DX,R9
  1755. SHRQ $51,DX
  1756. ADDQ R13,DX
  1757. ANDQ SI,R9
  1758. MOVQ DX,AX
  1759. SHRQ $51,DX
  1760. ADDQ R15,DX
  1761. ANDQ SI,AX
  1762. MOVQ DX,R10
  1763. SHRQ $51,DX
  1764. IMUL3Q $19,DX,DX
  1765. ADDQ DX,CX
  1766. ANDQ SI,R10
  1767. MOVQ CX,0(DI)
  1768. MOVQ R8,8(DI)
  1769. MOVQ R9,16(DI)
  1770. MOVQ AX,24(DI)
  1771. MOVQ R10,32(DI)
  1772. RET