25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

2261 satır
35 KiB

  1. // +build amd64,!noasm
  2. #include "textflag.h"
  3. // p751 + 1
  4. #define P751P1_5 $0xEEB0000000000000
  5. #define P751P1_6 $0xE3EC968549F878A8
  6. #define P751P1_7 $0xDA959B1A13F7CC76
  7. #define P751P1_8 $0x084E9867D6EBE876
  8. #define P751P1_9 $0x8562B5045CB25748
  9. #define P751P1_10 $0x0E12909F97BADC66
  10. #define P751P1_11 $0x00006FE5D541F71C
  11. #define P751_0 $0xFFFFFFFFFFFFFFFF
  12. #define P751_5 $0xEEAFFFFFFFFFFFFF
  13. #define P751_6 $0xE3EC968549F878A8
  14. #define P751_7 $0xDA959B1A13F7CC76
  15. #define P751_8 $0x084E9867D6EBE876
  16. #define P751_9 $0x8562B5045CB25748
  17. #define P751_10 $0x0E12909F97BADC66
  18. #define P751_11 $0x00006FE5D541F71C
  19. #define P751X2_0 $0xFFFFFFFFFFFFFFFE
  20. #define P751X2_1 $0xFFFFFFFFFFFFFFFF
  21. #define P751X2_5 $0xDD5FFFFFFFFFFFFF
  22. #define P751X2_6 $0xC7D92D0A93F0F151
  23. #define P751X2_7 $0xB52B363427EF98ED
  24. #define P751X2_8 $0x109D30CFADD7D0ED
  25. #define P751X2_9 $0x0AC56A08B964AE90
  26. #define P751X2_10 $0x1C25213F2F75B8CD
  27. #define P751X2_11 $0x0000DFCBAA83EE38
  28. // The MSR code uses these registers for parameter passing. Keep using
  29. // them to avoid significant code changes. This means that when the Go
  30. // assembler does something strange, we can diff the machine code
  31. // against a different assembler to find out what Go did.
  32. #define REG_P1 DI
  33. #define REG_P2 SI
  34. #define REG_P3 DX
  35. TEXT ·fp751StrongReduce(SB), NOSPLIT, $0-8
  36. MOVQ x+0(FP), REG_P1
  37. // Zero AX for later use:
  38. XORQ AX, AX
  39. // Load p into registers:
  40. MOVQ P751_0, R8
  41. // P751_{1,2,3,4} = P751_0, so reuse R8
  42. MOVQ P751_5, R9
  43. MOVQ P751_6, R10
  44. MOVQ P751_7, R11
  45. MOVQ P751_8, R12
  46. MOVQ P751_9, R13
  47. MOVQ P751_10, R14
  48. MOVQ P751_11, R15
  49. // Set x <- x - p
  50. SUBQ R8, (REG_P1)
  51. SBBQ R8, (8)(REG_P1)
  52. SBBQ R8, (16)(REG_P1)
  53. SBBQ R8, (24)(REG_P1)
  54. SBBQ R8, (32)(REG_P1)
  55. SBBQ R9, (40)(REG_P1)
  56. SBBQ R10, (48)(REG_P1)
  57. SBBQ R11, (56)(REG_P1)
  58. SBBQ R12, (64)(REG_P1)
  59. SBBQ R13, (72)(REG_P1)
  60. SBBQ R14, (80)(REG_P1)
  61. SBBQ R15, (88)(REG_P1)
  62. // Save carry flag indicating x-p < 0 as a mask in AX
  63. SBBQ $0, AX
  64. // Conditionally add p to x if x-p < 0
  65. ANDQ AX, R8
  66. ANDQ AX, R9
  67. ANDQ AX, R10
  68. ANDQ AX, R11
  69. ANDQ AX, R12
  70. ANDQ AX, R13
  71. ANDQ AX, R14
  72. ANDQ AX, R15
  73. ADDQ R8, (REG_P1)
  74. ADCQ R8, (8)(REG_P1)
  75. ADCQ R8, (16)(REG_P1)
  76. ADCQ R8, (24)(REG_P1)
  77. ADCQ R8, (32)(REG_P1)
  78. ADCQ R9, (40)(REG_P1)
  79. ADCQ R10, (48)(REG_P1)
  80. ADCQ R11, (56)(REG_P1)
  81. ADCQ R12, (64)(REG_P1)
  82. ADCQ R13, (72)(REG_P1)
  83. ADCQ R14, (80)(REG_P1)
  84. ADCQ R15, (88)(REG_P1)
  85. RET
  86. TEXT ·fp751ConditionalSwap(SB), NOSPLIT, $0-17
  87. MOVQ x+0(FP), REG_P1
  88. MOVQ y+8(FP), REG_P2
  89. MOVB choice+16(FP), AL // AL = 0 or 1
  90. MOVBLZX AL, AX // AX = 0 or 1
  91. NEGQ AX // RAX = 0x00..00 or 0xff..ff
  92. MOVQ (0*8)(REG_P1), BX // BX = x[0]
  93. MOVQ (0*8)(REG_P2), CX // CX = y[0]
  94. MOVQ CX, DX // DX = y[0]
  95. XORQ BX, DX // DX = y[0] ^ x[0]
  96. ANDQ AX, DX // DX = (y[0] ^ x[0]) & mask
  97. XORQ DX, BX // BX = (y[0] ^ x[0]) & mask) ^ x[0] = x[0] or y[0]
  98. XORQ DX, CX // CX = (y[0] ^ x[0]) & mask) ^ y[0] = y[0] or x[0]
  99. MOVQ BX, (0*8)(REG_P1)
  100. MOVQ CX, (0*8)(REG_P2)
  101. MOVQ (1*8)(REG_P1), BX
  102. MOVQ (1*8)(REG_P2), CX
  103. MOVQ CX, DX
  104. XORQ BX, DX
  105. ANDQ AX, DX
  106. XORQ DX, BX
  107. XORQ DX, CX
  108. MOVQ BX, (1*8)(REG_P1)
  109. MOVQ CX, (1*8)(REG_P2)
  110. MOVQ (2*8)(REG_P1), BX
  111. MOVQ (2*8)(REG_P2), CX
  112. MOVQ CX, DX
  113. XORQ BX, DX
  114. ANDQ AX, DX
  115. XORQ DX, BX
  116. XORQ DX, CX
  117. MOVQ BX, (2*8)(REG_P1)
  118. MOVQ CX, (2*8)(REG_P2)
  119. MOVQ (3*8)(REG_P1), BX
  120. MOVQ (3*8)(REG_P2), CX
  121. MOVQ CX, DX
  122. XORQ BX, DX
  123. ANDQ AX, DX
  124. XORQ DX, BX
  125. XORQ DX, CX
  126. MOVQ BX, (3*8)(REG_P1)
  127. MOVQ CX, (3*8)(REG_P2)
  128. MOVQ (4*8)(REG_P1), BX
  129. MOVQ (4*8)(REG_P2), CX
  130. MOVQ CX, DX
  131. XORQ BX, DX
  132. ANDQ AX, DX
  133. XORQ DX, BX
  134. XORQ DX, CX
  135. MOVQ BX, (4*8)(REG_P1)
  136. MOVQ CX, (4*8)(REG_P2)
  137. MOVQ (5*8)(REG_P1), BX
  138. MOVQ (5*8)(REG_P2), CX
  139. MOVQ CX, DX
  140. XORQ BX, DX
  141. ANDQ AX, DX
  142. XORQ DX, BX
  143. XORQ DX, CX
  144. MOVQ BX, (5*8)(REG_P1)
  145. MOVQ CX, (5*8)(REG_P2)
  146. MOVQ (6*8)(REG_P1), BX
  147. MOVQ (6*8)(REG_P2), CX
  148. MOVQ CX, DX
  149. XORQ BX, DX
  150. ANDQ AX, DX
  151. XORQ DX, BX
  152. XORQ DX, CX
  153. MOVQ BX, (6*8)(REG_P1)
  154. MOVQ CX, (6*8)(REG_P2)
  155. MOVQ (7*8)(REG_P1), BX
  156. MOVQ (7*8)(REG_P2), CX
  157. MOVQ CX, DX
  158. XORQ BX, DX
  159. ANDQ AX, DX
  160. XORQ DX, BX
  161. XORQ DX, CX
  162. MOVQ BX, (7*8)(REG_P1)
  163. MOVQ CX, (7*8)(REG_P2)
  164. MOVQ (8*8)(REG_P1), BX
  165. MOVQ (8*8)(REG_P2), CX
  166. MOVQ CX, DX
  167. XORQ BX, DX
  168. ANDQ AX, DX
  169. XORQ DX, BX
  170. XORQ DX, CX
  171. MOVQ BX, (8*8)(REG_P1)
  172. MOVQ CX, (8*8)(REG_P2)
  173. MOVQ (9*8)(REG_P1), BX
  174. MOVQ (9*8)(REG_P2), CX
  175. MOVQ CX, DX
  176. XORQ BX, DX
  177. ANDQ AX, DX
  178. XORQ DX, BX
  179. XORQ DX, CX
  180. MOVQ BX, (9*8)(REG_P1)
  181. MOVQ CX, (9*8)(REG_P2)
  182. MOVQ (10*8)(REG_P1), BX
  183. MOVQ (10*8)(REG_P2), CX
  184. MOVQ CX, DX
  185. XORQ BX, DX
  186. ANDQ AX, DX
  187. XORQ DX, BX
  188. XORQ DX, CX
  189. MOVQ BX, (10*8)(REG_P1)
  190. MOVQ CX, (10*8)(REG_P2)
  191. MOVQ (11*8)(REG_P1), BX
  192. MOVQ (11*8)(REG_P2), CX
  193. MOVQ CX, DX
  194. XORQ BX, DX
  195. ANDQ AX, DX
  196. XORQ DX, BX
  197. XORQ DX, CX
  198. MOVQ BX, (11*8)(REG_P1)
  199. MOVQ CX, (11*8)(REG_P2)
  200. RET
  201. TEXT ·fp751AddReduced(SB), NOSPLIT, $0-24
  202. MOVQ z+0(FP), REG_P3
  203. MOVQ x+8(FP), REG_P1
  204. MOVQ y+16(FP), REG_P2
  205. MOVQ (REG_P1), R8
  206. MOVQ (8)(REG_P1), R9
  207. MOVQ (16)(REG_P1), R10
  208. MOVQ (24)(REG_P1), R11
  209. MOVQ (32)(REG_P1), R12
  210. MOVQ (40)(REG_P1), R13
  211. MOVQ (48)(REG_P1), R14
  212. MOVQ (56)(REG_P1), R15
  213. MOVQ (64)(REG_P1), CX
  214. ADDQ (REG_P2), R8
  215. ADCQ (8)(REG_P2), R9
  216. ADCQ (16)(REG_P2), R10
  217. ADCQ (24)(REG_P2), R11
  218. ADCQ (32)(REG_P2), R12
  219. ADCQ (40)(REG_P2), R13
  220. ADCQ (48)(REG_P2), R14
  221. ADCQ (56)(REG_P2), R15
  222. ADCQ (64)(REG_P2), CX
  223. MOVQ (72)(REG_P1), AX
  224. ADCQ (72)(REG_P2), AX
  225. MOVQ AX, (72)(REG_P3)
  226. MOVQ (80)(REG_P1), AX
  227. ADCQ (80)(REG_P2), AX
  228. MOVQ AX, (80)(REG_P3)
  229. MOVQ (88)(REG_P1), AX
  230. ADCQ (88)(REG_P2), AX
  231. MOVQ AX, (88)(REG_P3)
  232. MOVQ P751X2_0, AX
  233. SUBQ AX, R8
  234. MOVQ P751X2_1, AX
  235. SBBQ AX, R9
  236. SBBQ AX, R10
  237. SBBQ AX, R11
  238. SBBQ AX, R12
  239. MOVQ P751X2_5, AX
  240. SBBQ AX, R13
  241. MOVQ P751X2_6, AX
  242. SBBQ AX, R14
  243. MOVQ P751X2_7, AX
  244. SBBQ AX, R15
  245. MOVQ P751X2_8, AX
  246. SBBQ AX, CX
  247. MOVQ R8, (REG_P3)
  248. MOVQ R9, (8)(REG_P3)
  249. MOVQ R10, (16)(REG_P3)
  250. MOVQ R11, (24)(REG_P3)
  251. MOVQ R12, (32)(REG_P3)
  252. MOVQ R13, (40)(REG_P3)
  253. MOVQ R14, (48)(REG_P3)
  254. MOVQ R15, (56)(REG_P3)
  255. MOVQ CX, (64)(REG_P3)
  256. MOVQ (72)(REG_P3), R8
  257. MOVQ (80)(REG_P3), R9
  258. MOVQ (88)(REG_P3), R10
  259. MOVQ P751X2_9, AX
  260. SBBQ AX, R8
  261. MOVQ P751X2_10, AX
  262. SBBQ AX, R9
  263. MOVQ P751X2_11, AX
  264. SBBQ AX, R10
  265. MOVQ R8, (72)(REG_P3)
  266. MOVQ R9, (80)(REG_P3)
  267. MOVQ R10, (88)(REG_P3)
  268. MOVQ $0, AX
  269. SBBQ $0, AX
  270. MOVQ P751X2_0, SI
  271. ANDQ AX, SI
  272. MOVQ P751X2_1, R8
  273. ANDQ AX, R8
  274. MOVQ P751X2_5, R9
  275. ANDQ AX, R9
  276. MOVQ P751X2_6, R10
  277. ANDQ AX, R10
  278. MOVQ P751X2_7, R11
  279. ANDQ AX, R11
  280. MOVQ P751X2_8, R12
  281. ANDQ AX, R12
  282. MOVQ P751X2_9, R13
  283. ANDQ AX, R13
  284. MOVQ P751X2_10, R14
  285. ANDQ AX, R14
  286. MOVQ P751X2_11, R15
  287. ANDQ AX, R15
  288. MOVQ (REG_P3), AX
  289. ADDQ SI, AX
  290. MOVQ AX, (REG_P3)
  291. MOVQ (8)(REG_P3), AX
  292. ADCQ R8, AX
  293. MOVQ AX, (8)(REG_P3)
  294. MOVQ (16)(REG_P3), AX
  295. ADCQ R8, AX
  296. MOVQ AX, (16)(REG_P3)
  297. MOVQ (24)(REG_P3), AX
  298. ADCQ R8, AX
  299. MOVQ AX, (24)(REG_P3)
  300. MOVQ (32)(REG_P3), AX
  301. ADCQ R8, AX
  302. MOVQ AX, (32)(REG_P3)
  303. MOVQ (40)(REG_P3), AX
  304. ADCQ R9, AX
  305. MOVQ AX, (40)(REG_P3)
  306. MOVQ (48)(REG_P3), AX
  307. ADCQ R10, AX
  308. MOVQ AX, (48)(REG_P3)
  309. MOVQ (56)(REG_P3), AX
  310. ADCQ R11, AX
  311. MOVQ AX, (56)(REG_P3)
  312. MOVQ (64)(REG_P3), AX
  313. ADCQ R12, AX
  314. MOVQ AX, (64)(REG_P3)
  315. MOVQ (72)(REG_P3), AX
  316. ADCQ R13, AX
  317. MOVQ AX, (72)(REG_P3)
  318. MOVQ (80)(REG_P3), AX
  319. ADCQ R14, AX
  320. MOVQ AX, (80)(REG_P3)
  321. MOVQ (88)(REG_P3), AX
  322. ADCQ R15, AX
  323. MOVQ AX, (88)(REG_P3)
  324. RET
  325. TEXT ·fp751SubReduced(SB), NOSPLIT, $0-24
  326. MOVQ z+0(FP), REG_P3
  327. MOVQ x+8(FP), REG_P1
  328. MOVQ y+16(FP), REG_P2
  329. MOVQ (REG_P1), R8
  330. MOVQ (8)(REG_P1), R9
  331. MOVQ (16)(REG_P1), R10
  332. MOVQ (24)(REG_P1), R11
  333. MOVQ (32)(REG_P1), R12
  334. MOVQ (40)(REG_P1), R13
  335. MOVQ (48)(REG_P1), R14
  336. MOVQ (56)(REG_P1), R15
  337. MOVQ (64)(REG_P1), CX
  338. SUBQ (REG_P2), R8
  339. SBBQ (8)(REG_P2), R9
  340. SBBQ (16)(REG_P2), R10
  341. SBBQ (24)(REG_P2), R11
  342. SBBQ (32)(REG_P2), R12
  343. SBBQ (40)(REG_P2), R13
  344. SBBQ (48)(REG_P2), R14
  345. SBBQ (56)(REG_P2), R15
  346. SBBQ (64)(REG_P2), CX
  347. MOVQ R8, (REG_P3)
  348. MOVQ R9, (8)(REG_P3)
  349. MOVQ R10, (16)(REG_P3)
  350. MOVQ R11, (24)(REG_P3)
  351. MOVQ R12, (32)(REG_P3)
  352. MOVQ R13, (40)(REG_P3)
  353. MOVQ R14, (48)(REG_P3)
  354. MOVQ R15, (56)(REG_P3)
  355. MOVQ CX, (64)(REG_P3)
  356. MOVQ (72)(REG_P1), AX
  357. SBBQ (72)(REG_P2), AX
  358. MOVQ AX, (72)(REG_P3)
  359. MOVQ (80)(REG_P1), AX
  360. SBBQ (80)(REG_P2), AX
  361. MOVQ AX, (80)(REG_P3)
  362. MOVQ (88)(REG_P1), AX
  363. SBBQ (88)(REG_P2), AX
  364. MOVQ AX, (88)(REG_P3)
  365. MOVQ $0, AX
  366. SBBQ $0, AX
  367. MOVQ P751X2_0, SI
  368. ANDQ AX, SI
  369. MOVQ P751X2_1, R8
  370. ANDQ AX, R8
  371. MOVQ P751X2_5, R9
  372. ANDQ AX, R9
  373. MOVQ P751X2_6, R10
  374. ANDQ AX, R10
  375. MOVQ P751X2_7, R11
  376. ANDQ AX, R11
  377. MOVQ P751X2_8, R12
  378. ANDQ AX, R12
  379. MOVQ P751X2_9, R13
  380. ANDQ AX, R13
  381. MOVQ P751X2_10, R14
  382. ANDQ AX, R14
  383. MOVQ P751X2_11, R15
  384. ANDQ AX, R15
  385. MOVQ (REG_P3), AX
  386. ADDQ SI, AX
  387. MOVQ AX, (REG_P3)
  388. MOVQ (8)(REG_P3), AX
  389. ADCQ R8, AX
  390. MOVQ AX, (8)(REG_P3)
  391. MOVQ (16)(REG_P3), AX
  392. ADCQ R8, AX
  393. MOVQ AX, (16)(REG_P3)
  394. MOVQ (24)(REG_P3), AX
  395. ADCQ R8, AX
  396. MOVQ AX, (24)(REG_P3)
  397. MOVQ (32)(REG_P3), AX
  398. ADCQ R8, AX
  399. MOVQ AX, (32)(REG_P3)
  400. MOVQ (40)(REG_P3), AX
  401. ADCQ R9, AX
  402. MOVQ AX, (40)(REG_P3)
  403. MOVQ (48)(REG_P3), AX
  404. ADCQ R10, AX
  405. MOVQ AX, (48)(REG_P3)
  406. MOVQ (56)(REG_P3), AX
  407. ADCQ R11, AX
  408. MOVQ AX, (56)(REG_P3)
  409. MOVQ (64)(REG_P3), AX
  410. ADCQ R12, AX
  411. MOVQ AX, (64)(REG_P3)
  412. MOVQ (72)(REG_P3), AX
  413. ADCQ R13, AX
  414. MOVQ AX, (72)(REG_P3)
  415. MOVQ (80)(REG_P3), AX
  416. ADCQ R14, AX
  417. MOVQ AX, (80)(REG_P3)
  418. MOVQ (88)(REG_P3), AX
  419. ADCQ R15, AX
  420. MOVQ AX, (88)(REG_P3)
  421. RET
  422. TEXT ·fp751Mul(SB), $96-24
  423. // Here we store the destination in CX instead of in REG_P3 because the
  424. // multiplication instructions use DX as an implicit destination
  425. // operand: MULQ $REG sets DX:AX <-- AX * $REG.
  426. MOVQ z+0(FP), CX
  427. MOVQ x+8(FP), REG_P1
  428. MOVQ y+16(FP), REG_P2
  429. XORQ AX, AX
  430. MOVQ (48)(REG_P1), R8
  431. MOVQ (56)(REG_P1), R9
  432. MOVQ (64)(REG_P1), R10
  433. MOVQ (72)(REG_P1), R11
  434. MOVQ (80)(REG_P1), R12
  435. MOVQ (88)(REG_P1), R13
  436. ADDQ (REG_P1), R8
  437. ADCQ (8)(REG_P1), R9
  438. ADCQ (16)(REG_P1), R10
  439. ADCQ (24)(REG_P1), R11
  440. ADCQ (32)(REG_P1), R12
  441. ADCQ (40)(REG_P1), R13
  442. MOVQ R8, (CX)
  443. MOVQ R9, (8)(CX)
  444. MOVQ R10, (16)(CX)
  445. MOVQ R11, (24)(CX)
  446. MOVQ R12, (32)(CX)
  447. MOVQ R13, (40)(CX)
  448. SBBQ $0, AX
  449. XORQ DX, DX
  450. MOVQ (48)(REG_P2), R8
  451. MOVQ (56)(REG_P2), R9
  452. MOVQ (64)(REG_P2), R10
  453. MOVQ (72)(REG_P2), R11
  454. MOVQ (80)(REG_P2), R12
  455. MOVQ (88)(REG_P2), R13
  456. ADDQ (REG_P2), R8
  457. ADCQ (8)(REG_P2), R9
  458. ADCQ (16)(REG_P2), R10
  459. ADCQ (24)(REG_P2), R11
  460. ADCQ (32)(REG_P2), R12
  461. ADCQ (40)(REG_P2), R13
  462. MOVQ R8, (48)(CX)
  463. MOVQ R9, (56)(CX)
  464. MOVQ R10, (64)(CX)
  465. MOVQ R11, (72)(CX)
  466. MOVQ R12, (80)(CX)
  467. MOVQ R13, (88)(CX)
  468. SBBQ $0, DX
  469. MOVQ AX, (80)(SP)
  470. MOVQ DX, (88)(SP)
  471. // (SP[0-8],R10,R8,R9) <- (AH+AL)*(BH+BL)
  472. MOVQ (CX), R11
  473. MOVQ R8, AX
  474. MULQ R11
  475. MOVQ AX, (SP) // c0
  476. MOVQ DX, R14
  477. XORQ R15, R15
  478. MOVQ R9, AX
  479. MULQ R11
  480. XORQ R9, R9
  481. ADDQ AX, R14
  482. ADCQ DX, R9
  483. MOVQ (8)(CX), R12
  484. MOVQ R8, AX
  485. MULQ R12
  486. ADDQ AX, R14
  487. MOVQ R14, (8)(SP) // c1
  488. ADCQ DX, R9
  489. ADCQ $0, R15
  490. XORQ R8, R8
  491. MOVQ R10, AX
  492. MULQ R11
  493. ADDQ AX, R9
  494. MOVQ (48)(CX), R13
  495. ADCQ DX, R15
  496. ADCQ $0, R8
  497. MOVQ (16)(CX), AX
  498. MULQ R13
  499. ADDQ AX, R9
  500. ADCQ DX, R15
  501. MOVQ (56)(CX), AX
  502. ADCQ $0, R8
  503. MULQ R12
  504. ADDQ AX, R9
  505. MOVQ R9, (16)(SP) // c2
  506. ADCQ DX, R15
  507. ADCQ $0, R8
  508. XORQ R9, R9
  509. MOVQ (72)(CX), AX
  510. MULQ R11
  511. ADDQ AX, R15
  512. ADCQ DX, R8
  513. ADCQ $0, R9
  514. MOVQ (24)(CX), AX
  515. MULQ R13
  516. ADDQ AX, R15
  517. ADCQ DX, R8
  518. ADCQ $0, R9
  519. MOVQ R10, AX
  520. MULQ R12
  521. ADDQ AX, R15
  522. ADCQ DX, R8
  523. ADCQ $0, R9
  524. MOVQ (16)(CX), R14
  525. MOVQ (56)(CX), AX
  526. MULQ R14
  527. ADDQ AX, R15
  528. MOVQ R15, (24)(SP) // c3
  529. ADCQ DX, R8
  530. ADCQ $0, R9
  531. XORQ R10, R10
  532. MOVQ (80)(CX), AX
  533. MULQ R11
  534. ADDQ AX, R8
  535. ADCQ DX, R9
  536. ADCQ $0, R10
  537. MOVQ (64)(CX), AX
  538. MULQ R14
  539. ADDQ AX, R8
  540. ADCQ DX, R9
  541. ADCQ $0, R10
  542. MOVQ (48)(CX), R15
  543. MOVQ (32)(CX), AX
  544. MULQ R15
  545. ADDQ AX, R8
  546. ADCQ DX, R9
  547. ADCQ $0, R10
  548. MOVQ (72)(CX), AX
  549. MULQ R12
  550. ADDQ AX, R8
  551. ADCQ DX, R9
  552. ADCQ $0, R10
  553. MOVQ (24)(CX), R13
  554. MOVQ (56)(CX), AX
  555. MULQ R13
  556. ADDQ AX, R8
  557. MOVQ R8, (32)(SP) // c4
  558. ADCQ DX, R9
  559. ADCQ $0, R10
  560. XORQ R8, R8
  561. MOVQ (88)(CX), AX
  562. MULQ R11
  563. ADDQ AX, R9
  564. ADCQ DX, R10
  565. ADCQ $0, R8
  566. MOVQ (64)(CX), AX
  567. MULQ R13
  568. ADDQ AX, R9
  569. ADCQ DX, R10
  570. ADCQ $0, R8
  571. MOVQ (72)(CX), AX
  572. MULQ R14
  573. ADDQ AX, R9
  574. ADCQ DX, R10
  575. ADCQ $0, R8
  576. MOVQ (40)(CX), AX
  577. MULQ R15
  578. ADDQ AX, R9
  579. ADCQ DX, R10
  580. ADCQ $0, R8
  581. MOVQ (80)(CX), AX
  582. MULQ R12
  583. ADDQ AX, R9
  584. ADCQ DX, R10
  585. ADCQ $0, R8
  586. MOVQ (32)(CX), R15
  587. MOVQ (56)(CX), AX
  588. MULQ R15
  589. ADDQ AX, R9
  590. MOVQ R9, (40)(SP) // c5
  591. ADCQ DX, R10
  592. ADCQ $0, R8
  593. XORQ R9, R9
  594. MOVQ (64)(CX), AX
  595. MULQ R15
  596. ADDQ AX, R10
  597. ADCQ DX, R8
  598. ADCQ $0, R9
  599. MOVQ (88)(CX), AX
  600. MULQ R12
  601. ADDQ AX, R10
  602. ADCQ DX, R8
  603. ADCQ $0, R9
  604. MOVQ (80)(CX), AX
  605. MULQ R14
  606. ADDQ AX, R10
  607. ADCQ DX, R8
  608. ADCQ $0, R9
  609. MOVQ (40)(CX), R11
  610. MOVQ (56)(CX), AX
  611. MULQ R11
  612. ADDQ AX, R10
  613. ADCQ DX, R8
  614. ADCQ $0, R9
  615. MOVQ (72)(CX), AX
  616. MULQ R13
  617. ADDQ AX, R10
  618. MOVQ R10, (48)(SP) // c6
  619. ADCQ DX, R8
  620. ADCQ $0, R9
  621. XORQ R10, R10
  622. MOVQ (88)(CX), AX
  623. MULQ R14
  624. ADDQ AX, R8
  625. ADCQ DX, R9
  626. ADCQ $0, R10
  627. MOVQ (64)(CX), AX
  628. MULQ R11
  629. ADDQ AX, R8
  630. ADCQ DX, R9
  631. ADCQ $0, R10
  632. MOVQ (80)(CX), AX
  633. MULQ R13
  634. ADDQ AX, R8
  635. ADCQ DX, R9
  636. ADCQ $0, R10
  637. MOVQ (72)(CX), AX
  638. MULQ R15
  639. ADDQ AX, R8
  640. MOVQ R8, (56)(SP) // c7
  641. ADCQ DX, R9
  642. ADCQ $0, R10
  643. XORQ R8, R8
  644. MOVQ (72)(CX), AX
  645. MULQ R11
  646. ADDQ AX, R9
  647. ADCQ DX, R10
  648. ADCQ $0, R8
  649. MOVQ (80)(CX), AX
  650. MULQ R15
  651. ADDQ AX, R9
  652. ADCQ DX, R10
  653. ADCQ $0, R8
  654. MOVQ (88)(CX), AX
  655. MULQ R13
  656. ADDQ AX, R9
  657. MOVQ R9, (64)(SP) // c8
  658. ADCQ DX, R10
  659. ADCQ $0, R8
  660. XORQ R9, R9
  661. MOVQ (88)(CX), AX
  662. MULQ R15
  663. ADDQ AX, R10
  664. ADCQ DX, R8
  665. ADCQ $0, R9
  666. MOVQ (80)(CX), AX
  667. MULQ R11
  668. ADDQ AX, R10 // c9
  669. ADCQ DX, R8
  670. ADCQ $0, R9
  671. MOVQ (88)(CX), AX
  672. MULQ R11
  673. ADDQ AX, R8 // c10
  674. ADCQ DX, R9 // c11
  675. MOVQ (88)(SP), AX
  676. MOVQ (CX), DX
  677. ANDQ AX, R12
  678. ANDQ AX, R14
  679. ANDQ AX, DX
  680. ANDQ AX, R13
  681. ANDQ AX, R15
  682. ANDQ AX, R11
  683. MOVQ (48)(SP), AX
  684. ADDQ AX, DX
  685. MOVQ (56)(SP), AX
  686. ADCQ AX, R12
  687. MOVQ (64)(SP), AX
  688. ADCQ AX, R14
  689. ADCQ R10, R13
  690. ADCQ R8, R15
  691. ADCQ R9, R11
  692. MOVQ (80)(SP), AX
  693. MOVQ DX, (48)(SP)
  694. MOVQ R12, (56)(SP)
  695. MOVQ R14, (64)(SP)
  696. MOVQ R13, (72)(SP)
  697. MOVQ R15, (80)(SP)
  698. MOVQ R11, (88)(SP)
  699. MOVQ (48)(CX), R8
  700. MOVQ (56)(CX), R9
  701. MOVQ (64)(CX), R10
  702. MOVQ (72)(CX), R11
  703. MOVQ (80)(CX), R12
  704. MOVQ (88)(CX), R13
  705. ANDQ AX, R8
  706. ANDQ AX, R9
  707. ANDQ AX, R10
  708. ANDQ AX, R11
  709. ANDQ AX, R12
  710. ANDQ AX, R13
  711. MOVQ (48)(SP), AX
  712. ADDQ AX, R8
  713. MOVQ (56)(SP), AX
  714. ADCQ AX, R9
  715. MOVQ (64)(SP), AX
  716. ADCQ AX, R10
  717. MOVQ (72)(SP), AX
  718. ADCQ AX, R11
  719. MOVQ (80)(SP), AX
  720. ADCQ AX, R12
  721. MOVQ (88)(SP), AX
  722. ADCQ AX, R13
  723. MOVQ R8, (48)(SP)
  724. MOVQ R9, (56)(SP)
  725. MOVQ R11, (72)(SP)
  726. // CX[0-11] <- AL*BL
  727. MOVQ (REG_P1), R11
  728. MOVQ (REG_P2), AX
  729. MULQ R11
  730. XORQ R9, R9
  731. MOVQ AX, (CX) // c0
  732. MOVQ R10, (64)(SP)
  733. MOVQ DX, R8
  734. MOVQ (8)(REG_P2), AX
  735. MULQ R11
  736. XORQ R10, R10
  737. ADDQ AX, R8
  738. MOVQ R12, (80)(SP)
  739. ADCQ DX, R9
  740. MOVQ (8)(REG_P1), R12
  741. MOVQ (REG_P2), AX
  742. MULQ R12
  743. ADDQ AX, R8
  744. MOVQ R8, (8)(CX) // c1
  745. ADCQ DX, R9
  746. MOVQ R13, (88)(SP)
  747. ADCQ $0, R10
  748. XORQ R8, R8
  749. MOVQ (16)(REG_P2), AX
  750. MULQ R11
  751. ADDQ AX, R9
  752. ADCQ DX, R10
  753. ADCQ $0, R8
  754. MOVQ (REG_P2), R13
  755. MOVQ (16)(REG_P1), AX
  756. MULQ R13
  757. ADDQ AX, R9
  758. ADCQ DX, R10
  759. ADCQ $0, R8
  760. MOVQ (8)(REG_P2), AX
  761. MULQ R12
  762. ADDQ AX, R9
  763. MOVQ R9, (16)(CX) // c2
  764. ADCQ DX, R10
  765. ADCQ $0, R8
  766. XORQ R9, R9
  767. MOVQ (24)(REG_P2), AX
  768. MULQ R11
  769. ADDQ AX, R10
  770. ADCQ DX, R8
  771. ADCQ $0, R9
  772. MOVQ (24)(REG_P1), AX
  773. MULQ R13
  774. ADDQ AX, R10
  775. ADCQ DX, R8
  776. ADCQ $0, R9
  777. MOVQ (16)(REG_P2), AX
  778. MULQ R12
  779. ADDQ AX, R10
  780. ADCQ DX, R8
  781. ADCQ $0, R9
  782. MOVQ (16)(REG_P1), R14
  783. MOVQ (8)(REG_P2), AX
  784. MULQ R14
  785. ADDQ AX, R10
  786. MOVQ R10, (24)(CX) // c3
  787. ADCQ DX, R8
  788. ADCQ $0, R9
  789. XORQ R10, R10
  790. MOVQ (32)(REG_P2), AX
  791. MULQ R11
  792. ADDQ AX, R8
  793. ADCQ DX, R9
  794. ADCQ $0, R10
  795. MOVQ (16)(REG_P2), AX
  796. MULQ R14
  797. ADDQ AX, R8
  798. ADCQ DX, R9
  799. ADCQ $0, R10
  800. MOVQ (32)(REG_P1), AX
  801. MULQ R13
  802. ADDQ AX, R8
  803. ADCQ DX, R9
  804. ADCQ $0, R10
  805. MOVQ (24)(REG_P2), AX
  806. MULQ R12
  807. ADDQ AX, R8
  808. ADCQ DX, R9
  809. ADCQ $0, R10
  810. MOVQ (24)(REG_P1), R13
  811. MOVQ (8)(REG_P2), AX
  812. MULQ R13
  813. ADDQ AX, R8
  814. MOVQ R8, (32)(CX) // c4
  815. ADCQ DX, R9
  816. ADCQ $0, R10
  817. XORQ R8, R8
  818. MOVQ (40)(REG_P2), AX
  819. MULQ R11
  820. ADDQ AX, R9
  821. ADCQ DX, R10
  822. ADCQ $0, R8
  823. MOVQ (16)(REG_P2), AX
  824. MULQ R13
  825. ADDQ AX, R9
  826. ADCQ DX, R10
  827. ADCQ $0, R8
  828. MOVQ (24)(REG_P2), AX
  829. MULQ R14
  830. ADDQ AX, R9
  831. ADCQ DX, R10
  832. ADCQ $0, R8
  833. MOVQ (40)(REG_P1), R11
  834. MOVQ (REG_P2), AX
  835. MULQ R11
  836. ADDQ AX, R9
  837. ADCQ DX, R10
  838. ADCQ $0, R8
  839. MOVQ (32)(REG_P2), AX
  840. MULQ R12
  841. ADDQ AX, R9
  842. ADCQ DX, R10
  843. ADCQ $0, R8
  844. MOVQ (32)(REG_P1), R15
  845. MOVQ (8)(REG_P2), AX
  846. MULQ R15
  847. ADDQ AX, R9
  848. MOVQ R9, (40)(CX) //c5
  849. ADCQ DX, R10
  850. ADCQ $0, R8
  851. XORQ R9, R9
  852. MOVQ (16)(REG_P2), AX
  853. MULQ R15
  854. ADDQ AX, R10
  855. ADCQ DX, R8
  856. ADCQ $0, R9
  857. MOVQ (40)(REG_P2), AX
  858. MULQ R12
  859. ADDQ AX, R10
  860. ADCQ DX, R8
  861. ADCQ $0, R9
  862. MOVQ (32)(REG_P2), AX
  863. MULQ R14
  864. ADDQ AX, R10
  865. ADCQ DX, R8
  866. ADCQ $0, R9
  867. MOVQ (8)(REG_P2), AX
  868. MULQ R11
  869. ADDQ AX, R10
  870. ADCQ DX, R8
  871. ADCQ $0, R9
  872. MOVQ (24)(REG_P2), AX
  873. MULQ R13
  874. ADDQ AX, R10
  875. MOVQ R10, (48)(CX) // c6
  876. ADCQ DX, R8
  877. ADCQ $0, R9
  878. XORQ R10, R10
  879. MOVQ (40)(REG_P2), AX
  880. MULQ R14
  881. ADDQ AX, R8
  882. ADCQ DX, R9
  883. ADCQ $0, R10
  884. MOVQ (16)(REG_P2), AX
  885. MULQ R11
  886. ADDQ AX, R8
  887. ADCQ DX, R9
  888. ADCQ $0, R10
  889. MOVQ (32)(REG_P2), AX
  890. MULQ R13
  891. ADDQ AX, R8
  892. ADCQ DX, R9
  893. ADCQ $0, R10
  894. MOVQ (24)(REG_P2), AX
  895. MULQ R15
  896. ADDQ AX, R8
  897. MOVQ R8, (56)(CX) // c7
  898. ADCQ DX, R9
  899. ADCQ $0, R10
  900. XORQ R8, R8
  901. MOVQ (24)(REG_P2), AX
  902. MULQ R11
  903. ADDQ AX, R9
  904. ADCQ DX, R10
  905. ADCQ $0, R8
  906. MOVQ (32)(REG_P2), AX
  907. MULQ R15
  908. ADDQ AX, R9
  909. ADCQ DX, R10
  910. ADCQ $0, R8
  911. MOVQ (40)(REG_P2), AX
  912. MULQ R13
  913. ADDQ AX, R9
  914. MOVQ R9, (64)(CX) // c8
  915. ADCQ DX, R10
  916. ADCQ $0, R8
  917. XORQ R9, R9
  918. MOVQ (40)(REG_P2), AX
  919. MULQ R15
  920. ADDQ AX, R10
  921. ADCQ DX, R8
  922. ADCQ $0, R9
  923. MOVQ (32)(REG_P2), AX
  924. MULQ R11
  925. ADDQ AX, R10
  926. MOVQ R10, (72)(CX) // c9
  927. ADCQ DX, R8
  928. ADCQ $0, R9
  929. MOVQ (40)(REG_P2), AX
  930. MULQ R11
  931. ADDQ AX, R8
  932. MOVQ R8, (80)(CX) // c10
  933. ADCQ DX, R9
  934. MOVQ R9, (88)(CX) // c11
  935. // CX[12-23] <- AH*BH
  936. MOVQ (48)(REG_P1), R11
  937. MOVQ (48)(REG_P2), AX
  938. MULQ R11
  939. XORQ R9, R9
  940. MOVQ AX, (96)(CX) // c0
  941. MOVQ DX, R8
  942. MOVQ (56)(REG_P2), AX
  943. MULQ R11
  944. XORQ R10, R10
  945. ADDQ AX, R8
  946. ADCQ DX, R9
  947. MOVQ (56)(REG_P1), R12
  948. MOVQ (48)(REG_P2), AX
  949. MULQ R12
  950. ADDQ AX, R8
  951. MOVQ R8, (104)(CX) // c1
  952. ADCQ DX, R9
  953. ADCQ $0, R10
  954. XORQ R8, R8
  955. MOVQ (64)(REG_P2), AX
  956. MULQ R11
  957. ADDQ AX, R9
  958. ADCQ DX, R10
  959. ADCQ $0, R8
  960. MOVQ (48)(REG_P2), R13
  961. MOVQ (64)(REG_P1), AX
  962. MULQ R13
  963. ADDQ AX, R9
  964. ADCQ DX, R10
  965. ADCQ $0, R8
  966. MOVQ (56)(REG_P2), AX
  967. MULQ R12
  968. ADDQ AX, R9
  969. MOVQ R9, (112)(CX) // c2
  970. ADCQ DX, R10
  971. ADCQ $0, R8
  972. XORQ R9, R9
  973. MOVQ (72)(REG_P2), AX
  974. MULQ R11
  975. ADDQ AX, R10
  976. ADCQ DX, R8
  977. ADCQ $0, R9
  978. MOVQ (72)(REG_P1), AX
  979. MULQ R13
  980. ADDQ AX, R10
  981. ADCQ DX, R8
  982. ADCQ $0, R9
  983. MOVQ (64)(REG_P2), AX
  984. MULQ R12
  985. ADDQ AX, R10
  986. ADCQ DX, R8
  987. ADCQ $0, R9
  988. MOVQ (64)(REG_P1), R14
  989. MOVQ (56)(REG_P2), AX
  990. MULQ R14
  991. ADDQ AX, R10
  992. MOVQ R10, (120)(CX) // c3
  993. ADCQ DX, R8
  994. ADCQ $0, R9
  995. XORQ R10, R10
  996. MOVQ (80)(REG_P2), AX
  997. MULQ R11
  998. ADDQ AX, R8
  999. ADCQ DX, R9
  1000. ADCQ $0, R10
  1001. MOVQ (64)(REG_P2), AX
  1002. MULQ R14
  1003. ADDQ AX, R8
  1004. ADCQ DX, R9
  1005. ADCQ $0, R10
  1006. MOVQ (80)(REG_P1), R15
  1007. MOVQ R13, AX
  1008. MULQ R15
  1009. ADDQ AX, R8
  1010. ADCQ DX, R9
  1011. ADCQ $0, R10
  1012. MOVQ (72)(REG_P2), AX
  1013. MULQ R12
  1014. ADDQ AX, R8
  1015. ADCQ DX, R9
  1016. ADCQ $0, R10
  1017. MOVQ (72)(REG_P1), R13
  1018. MOVQ (56)(REG_P2), AX
  1019. MULQ R13
  1020. ADDQ AX, R8
  1021. MOVQ R8, (128)(CX) // c4
  1022. ADCQ DX, R9
  1023. ADCQ $0, R10
  1024. XORQ R8, R8
  1025. MOVQ (88)(REG_P2), AX
  1026. MULQ R11
  1027. ADDQ AX, R9
  1028. ADCQ DX, R10
  1029. ADCQ $0, R8
  1030. MOVQ (64)(REG_P2), AX
  1031. MULQ R13
  1032. ADDQ AX, R9
  1033. ADCQ DX, R10
  1034. ADCQ $0, R8
  1035. MOVQ (72)(REG_P2), AX
  1036. MULQ R14
  1037. ADDQ AX, R9
  1038. ADCQ DX, R10
  1039. ADCQ $0, R8
  1040. MOVQ (88)(REG_P1), R11
  1041. MOVQ (48)(REG_P2), AX
  1042. MULQ R11
  1043. ADDQ AX, R9
  1044. ADCQ DX, R10
  1045. ADCQ $0, R8
  1046. MOVQ (80)(REG_P2), AX
  1047. MULQ R12
  1048. ADDQ AX, R9
  1049. ADCQ DX, R10
  1050. ADCQ $0, R8
  1051. MOVQ (56)(REG_P2), AX
  1052. MULQ R15
  1053. ADDQ AX, R9
  1054. MOVQ R9, (136)(CX) // c5
  1055. ADCQ DX, R10
  1056. ADCQ $0, R8
  1057. XORQ R9, R9
  1058. MOVQ (64)(REG_P2), AX
  1059. MULQ R15
  1060. ADDQ AX, R10
  1061. ADCQ DX, R8
  1062. ADCQ $0, R9
  1063. MOVQ (88)(REG_P2), AX
  1064. MULQ R12
  1065. ADDQ AX, R10
  1066. ADCQ DX, R8
  1067. ADCQ $0, R9
  1068. MOVQ (80)(REG_P2), AX
  1069. MULQ R14
  1070. ADDQ AX, R10
  1071. ADCQ DX, R8
  1072. ADCQ $0, R9
  1073. MOVQ (56)(REG_P2), AX
  1074. MULQ R11
  1075. ADDQ AX, R10
  1076. ADCQ DX, R8
  1077. ADCQ $0, R9
  1078. MOVQ (72)(REG_P2), AX
  1079. MULQ R13
  1080. ADDQ AX, R10
  1081. MOVQ R10, (144)(CX) // c6
  1082. ADCQ DX, R8
  1083. ADCQ $0, R9
  1084. XORQ R10, R10
  1085. MOVQ (88)(REG_P2), AX
  1086. MULQ R14
  1087. ADDQ AX, R8
  1088. ADCQ DX, R9
  1089. ADCQ $0, R10
  1090. MOVQ (64)(REG_P2), AX
  1091. MULQ R11
  1092. ADDQ AX, R8
  1093. ADCQ DX, R9
  1094. ADCQ $0, R10
  1095. MOVQ (80)(REG_P2), AX
  1096. MULQ R13
  1097. ADDQ AX, R8
  1098. ADCQ DX, R9
  1099. ADCQ $0, R10
  1100. MOVQ (72)(REG_P2), AX
  1101. MULQ R15
  1102. ADDQ AX, R8
  1103. MOVQ R8, (152)(CX) // c7
  1104. ADCQ DX, R9
  1105. ADCQ $0, R10
  1106. XORQ R8, R8
  1107. MOVQ (72)(REG_P2), AX
  1108. MULQ R11
  1109. ADDQ AX, R9
  1110. ADCQ DX, R10
  1111. ADCQ $0, R8
  1112. MOVQ (80)(REG_P2), AX
  1113. MULQ R15
  1114. ADDQ AX, R9
  1115. ADCQ DX, R10
  1116. ADCQ $0, R8
  1117. MOVQ (88)(REG_P2), AX
  1118. MULQ R13
  1119. ADDQ AX, R9
  1120. MOVQ R9, (160)(CX) // c8
  1121. ADCQ DX, R10
  1122. ADCQ $0, R8
  1123. MOVQ (88)(REG_P2), AX
  1124. MULQ R15
  1125. ADDQ AX, R10
  1126. ADCQ DX, R8
  1127. MOVQ (80)(REG_P2), AX
  1128. MULQ R11
  1129. ADDQ AX, R10
  1130. MOVQ R10, (168)(CX) // c9
  1131. ADCQ DX, R8
  1132. MOVQ (88)(REG_P2), AX
  1133. MULQ R11
  1134. ADDQ AX, R8
  1135. MOVQ R8, (176)(CX) // c10
  1136. ADCQ $0, DX
  1137. MOVQ DX, (184)(CX) // c11
  1138. // [R8-R15,AX,DX,DI,(SP)] <- (AH+AL)*(BH+BL)-AL*BL
  1139. MOVQ (SP), R8
  1140. SUBQ (CX), R8
  1141. MOVQ (8)(SP), R9
  1142. SBBQ (8)(CX), R9
  1143. MOVQ (16)(SP), R10
  1144. SBBQ (16)(CX), R10
  1145. MOVQ (24)(SP), R11
  1146. SBBQ (24)(CX), R11
  1147. MOVQ (32)(SP), R12
  1148. SBBQ (32)(CX), R12
  1149. MOVQ (40)(SP), R13
  1150. SBBQ (40)(CX), R13
  1151. MOVQ (48)(SP), R14
  1152. SBBQ (48)(CX), R14
  1153. MOVQ (56)(SP), R15
  1154. SBBQ (56)(CX), R15
  1155. MOVQ (64)(SP), AX
  1156. SBBQ (64)(CX), AX
  1157. MOVQ (72)(SP), DX
  1158. SBBQ (72)(CX), DX
  1159. MOVQ (80)(SP), DI
  1160. SBBQ (80)(CX), DI
  1161. MOVQ (88)(SP), SI
  1162. SBBQ (88)(CX), SI
  1163. MOVQ SI, (SP)
  1164. // [R8-R15,AX,DX,DI,(SP)] <- (AH+AL)*(BH+BL) - AL*BL - AH*BH
  1165. MOVQ (96)(CX), SI
  1166. SUBQ SI, R8
  1167. MOVQ (104)(CX), SI
  1168. SBBQ SI, R9
  1169. MOVQ (112)(CX), SI
  1170. SBBQ SI, R10
  1171. MOVQ (120)(CX), SI
  1172. SBBQ SI, R11
  1173. MOVQ (128)(CX), SI
  1174. SBBQ SI, R12
  1175. MOVQ (136)(CX), SI
  1176. SBBQ SI, R13
  1177. MOVQ (144)(CX), SI
  1178. SBBQ SI, R14
  1179. MOVQ (152)(CX), SI
  1180. SBBQ SI, R15
  1181. MOVQ (160)(CX), SI
  1182. SBBQ SI, AX
  1183. MOVQ (168)(CX), SI
  1184. SBBQ SI, DX
  1185. MOVQ (176)(CX), SI
  1186. SBBQ SI, DI
  1187. MOVQ (SP), SI
  1188. SBBQ (184)(CX), SI
  1189. // FINAL RESULT
  1190. ADDQ (48)(CX), R8
  1191. MOVQ R8, (48)(CX)
  1192. ADCQ (56)(CX), R9
  1193. MOVQ R9, (56)(CX)
  1194. ADCQ (64)(CX), R10
  1195. MOVQ R10, (64)(CX)
  1196. ADCQ (72)(CX), R11
  1197. MOVQ R11, (72)(CX)
  1198. ADCQ (80)(CX), R12
  1199. MOVQ R12, (80)(CX)
  1200. ADCQ (88)(CX), R13
  1201. MOVQ R13, (88)(CX)
  1202. ADCQ (96)(CX), R14
  1203. MOVQ R14, (96)(CX)
  1204. ADCQ (104)(CX), R15
  1205. MOVQ R15, (104)(CX)
  1206. ADCQ (112)(CX), AX
  1207. MOVQ AX, (112)(CX)
  1208. ADCQ (120)(CX), DX
  1209. MOVQ DX, (120)(CX)
  1210. ADCQ (128)(CX), DI
  1211. MOVQ DI, (128)(CX)
  1212. ADCQ (136)(CX), SI
  1213. MOVQ SI, (136)(CX)
  1214. MOVQ (144)(CX), AX
  1215. ADCQ $0, AX
  1216. MOVQ AX, (144)(CX)
  1217. MOVQ (152)(CX), AX
  1218. ADCQ $0, AX
  1219. MOVQ AX, (152)(CX)
  1220. MOVQ (160)(CX), AX
  1221. ADCQ $0, AX
  1222. MOVQ AX, (160)(CX)
  1223. MOVQ (168)(CX), AX
  1224. ADCQ $0, AX
  1225. MOVQ AX, (168)(CX)
  1226. MOVQ (176)(CX), AX
  1227. ADCQ $0, AX
  1228. MOVQ AX, (176)(CX)
  1229. MOVQ (184)(CX), AX
  1230. ADCQ $0, AX
  1231. MOVQ AX, (184)(CX)
  1232. RET
  1233. TEXT ·fp751MontgomeryReduce(SB), $0-16
  1234. MOVQ z+0(FP), REG_P2
  1235. MOVQ x+8(FP), REG_P1
  1236. MOVQ (REG_P1), R11
  1237. MOVQ P751P1_5, AX
  1238. MULQ R11
  1239. XORQ R8, R8
  1240. ADDQ (40)(REG_P1), AX
  1241. MOVQ AX, (40)(REG_P2) // Z5
  1242. ADCQ DX, R8
  1243. XORQ R9, R9
  1244. MOVQ P751P1_6, AX
  1245. MULQ R11
  1246. XORQ R10, R10
  1247. ADDQ AX, R8
  1248. ADCQ DX, R9
  1249. MOVQ (8)(REG_P1), R12
  1250. MOVQ P751P1_5, AX
  1251. MULQ R12
  1252. ADDQ AX, R8
  1253. ADCQ DX, R9
  1254. ADCQ $0, R10
  1255. ADDQ (48)(REG_P1), R8
  1256. MOVQ R8, (48)(REG_P2) // Z6
  1257. ADCQ $0, R9
  1258. ADCQ $0, R10
  1259. XORQ R8, R8
  1260. MOVQ P751P1_7, AX
  1261. MULQ R11
  1262. ADDQ AX, R9
  1263. ADCQ DX, R10
  1264. ADCQ $0, R8
  1265. MOVQ P751P1_6, AX
  1266. MULQ R12
  1267. ADDQ AX, R9
  1268. ADCQ DX, R10
  1269. ADCQ $0, R8
  1270. MOVQ (16)(REG_P1), R13
  1271. MOVQ P751P1_5, AX
  1272. MULQ R13
  1273. ADDQ AX, R9
  1274. ADCQ DX, R10
  1275. ADCQ $0, R8
  1276. ADDQ (56)(REG_P1), R9
  1277. MOVQ R9, (56)(REG_P2) // Z7
  1278. ADCQ $0, R10
  1279. ADCQ $0, R8
  1280. XORQ R9, R9
  1281. MOVQ P751P1_8, AX
  1282. MULQ R11
  1283. ADDQ AX, R10
  1284. ADCQ DX, R8
  1285. ADCQ $0, R9
  1286. MOVQ P751P1_7, AX
  1287. MULQ R12
  1288. ADDQ AX, R10
  1289. ADCQ DX, R8
  1290. ADCQ $0, R9
  1291. MOVQ P751P1_6, AX
  1292. MULQ R13
  1293. ADDQ AX, R10
  1294. ADCQ DX, R8
  1295. ADCQ $0, R9
  1296. MOVQ (24)(REG_P1), R14
  1297. MOVQ P751P1_5, AX
  1298. MULQ R14
  1299. ADDQ AX, R10
  1300. ADCQ DX, R8
  1301. ADCQ $0, R9
  1302. ADDQ (64)(REG_P1), R10
  1303. MOVQ R10, (64)(REG_P2) // Z8
  1304. ADCQ $0, R8
  1305. ADCQ $0, R9
  1306. XORQ R10, R10
  1307. MOVQ P751P1_9, AX
  1308. MULQ R11
  1309. ADDQ AX, R8
  1310. ADCQ DX, R9
  1311. ADCQ $0, R10
  1312. MOVQ P751P1_8, AX
  1313. MULQ R12
  1314. ADDQ AX, R8
  1315. ADCQ DX, R9
  1316. ADCQ $0, R10
  1317. MOVQ P751P1_7, AX
  1318. MULQ R13
  1319. ADDQ AX, R8
  1320. ADCQ DX, R9
  1321. ADCQ $0, R10
  1322. MOVQ P751P1_6, AX
  1323. MULQ R14
  1324. ADDQ AX, R8
  1325. ADCQ DX, R9
  1326. ADCQ $0, R10
  1327. MOVQ (32)(REG_P1), R15
  1328. MOVQ P751P1_5, AX
  1329. MULQ R15
  1330. ADDQ AX, R8
  1331. ADCQ DX, R9
  1332. ADCQ $0, R10
  1333. ADDQ (72)(REG_P1), R8
  1334. MOVQ R8, (72)(REG_P2) // Z9
  1335. ADCQ $0, R9
  1336. ADCQ $0, R10
  1337. XORQ R8, R8
  1338. MOVQ P751P1_10, AX
  1339. MULQ R11
  1340. ADDQ AX, R9
  1341. ADCQ DX, R10
  1342. ADCQ $0, R8
  1343. MOVQ P751P1_9, AX
  1344. MULQ R12
  1345. ADDQ AX, R9
  1346. ADCQ DX, R10
  1347. ADCQ $0, R8
  1348. MOVQ P751P1_8, AX
  1349. MULQ R13
  1350. ADDQ AX, R9
  1351. ADCQ DX, R10
  1352. ADCQ $0, R8
  1353. MOVQ P751P1_7, AX
  1354. MULQ R14
  1355. ADDQ AX, R9
  1356. ADCQ DX, R10
  1357. ADCQ $0, R8
  1358. MOVQ P751P1_6, AX
  1359. MULQ R15
  1360. ADDQ AX, R9
  1361. ADCQ DX, R10
  1362. ADCQ $0, R8
  1363. MOVQ (40)(REG_P2), CX
  1364. MOVQ P751P1_5, AX
  1365. MULQ CX
  1366. ADDQ AX, R9
  1367. ADCQ DX, R10
  1368. ADCQ $0, R8
  1369. ADDQ (80)(REG_P1), R9
  1370. MOVQ R9, (80)(REG_P2) // Z10
  1371. ADCQ $0, R10
  1372. ADCQ $0, R8
  1373. XORQ R9, R9
  1374. MOVQ P751P1_11, AX
  1375. MULQ R11
  1376. ADDQ AX, R10
  1377. ADCQ DX, R8
  1378. ADCQ $0, R9
  1379. MOVQ P751P1_10, AX
  1380. MULQ R12
  1381. ADDQ AX, R10
  1382. ADCQ DX, R8
  1383. ADCQ $0, R9
  1384. MOVQ P751P1_9, AX
  1385. MULQ R13
  1386. ADDQ AX, R10
  1387. ADCQ DX, R8
  1388. ADCQ $0, R9
  1389. MOVQ P751P1_8, AX
  1390. MULQ R14
  1391. ADDQ AX, R10
  1392. ADCQ DX, R8
  1393. ADCQ $0, R9
  1394. MOVQ P751P1_7, AX
  1395. MULQ R15
  1396. ADDQ AX, R10
  1397. ADCQ DX, R8
  1398. ADCQ $0, R9
  1399. MOVQ P751P1_6, AX
  1400. MULQ CX
  1401. ADDQ AX, R10
  1402. ADCQ DX, R8
  1403. ADCQ $0, R9
  1404. MOVQ (48)(REG_P2), R11
  1405. MOVQ P751P1_5, AX
  1406. MULQ R11
  1407. ADDQ AX, R10
  1408. ADCQ DX, R8
  1409. ADCQ $0, R9
  1410. ADDQ (88)(REG_P1), R10
  1411. MOVQ R10, (88)(REG_P2) // Z11
  1412. ADCQ $0, R8
  1413. ADCQ $0, R9
  1414. XORQ R10, R10
  1415. MOVQ P751P1_11, AX
  1416. MULQ R12
  1417. ADDQ AX, R8
  1418. ADCQ DX, R9
  1419. ADCQ $0, R10
  1420. MOVQ P751P1_10, AX
  1421. MULQ R13
  1422. ADDQ AX, R8
  1423. ADCQ DX, R9
  1424. ADCQ $0, R10
  1425. MOVQ P751P1_9, AX
  1426. MULQ R14
  1427. ADDQ AX, R8
  1428. ADCQ DX, R9
  1429. ADCQ $0, R10
  1430. MOVQ P751P1_8, AX
  1431. MULQ R15
  1432. ADDQ AX, R8
  1433. ADCQ DX, R9
  1434. ADCQ $0, R10
  1435. MOVQ P751P1_7, AX
  1436. MULQ CX
  1437. ADDQ AX, R8
  1438. ADCQ DX, R9
  1439. ADCQ $0, R10
  1440. MOVQ P751P1_6, AX
  1441. MULQ R11
  1442. ADDQ AX, R8
  1443. ADCQ DX, R9
  1444. ADCQ $0, R10
  1445. MOVQ (56)(REG_P2), R12
  1446. MOVQ P751P1_5, AX
  1447. MULQ R12
  1448. ADDQ AX, R8
  1449. ADCQ DX, R9
  1450. ADCQ $0, R10
  1451. ADDQ (96)(REG_P1), R8
  1452. MOVQ R8, (REG_P2) // Z0
  1453. ADCQ $0, R9
  1454. ADCQ $0, R10
  1455. XORQ R8, R8
  1456. MOVQ P751P1_11, AX
  1457. MULQ R13
  1458. ADDQ AX, R9
  1459. ADCQ DX, R10
  1460. ADCQ $0, R8
  1461. MOVQ P751P1_10, AX
  1462. MULQ R14
  1463. ADDQ AX, R9
  1464. ADCQ DX, R10
  1465. ADCQ $0, R8
  1466. MOVQ P751P1_9, AX
  1467. MULQ R15
  1468. ADDQ AX, R9
  1469. ADCQ DX, R10
  1470. ADCQ $0, R8
  1471. MOVQ P751P1_8, AX
  1472. MULQ CX
  1473. ADDQ AX, R9
  1474. ADCQ DX, R10
  1475. ADCQ $0, R8
  1476. MOVQ P751P1_7, AX
  1477. MULQ R11
  1478. ADDQ AX, R9
  1479. ADCQ DX, R10
  1480. ADCQ $0, R8
  1481. MOVQ P751P1_6, AX
  1482. MULQ R12
  1483. ADDQ AX, R9
  1484. ADCQ DX, R10
  1485. ADCQ $0, R8
  1486. MOVQ (64)(REG_P2), R13
  1487. MOVQ P751P1_5, AX
  1488. MULQ R13
  1489. ADDQ AX, R9
  1490. ADCQ DX, R10
  1491. ADCQ $0, R8
  1492. ADDQ (104)(REG_P1), R9
  1493. MOVQ R9, (8)(REG_P2) // Z1
  1494. ADCQ $0, R10
  1495. ADCQ $0, R8
  1496. XORQ R9, R9
  1497. MOVQ P751P1_11, AX
  1498. MULQ R14
  1499. ADDQ AX, R10
  1500. ADCQ DX, R8
  1501. ADCQ $0, R9
  1502. MOVQ P751P1_10, AX
  1503. MULQ R15
  1504. ADDQ AX, R10
  1505. ADCQ DX, R8
  1506. ADCQ $0, R9
  1507. MOVQ P751P1_9, AX
  1508. MULQ CX
  1509. ADDQ AX, R10
  1510. ADCQ DX, R8
  1511. ADCQ $0, R9
  1512. MOVQ P751P1_8, AX
  1513. MULQ R11
  1514. ADDQ AX, R10
  1515. ADCQ DX, R8
  1516. ADCQ $0, R9
  1517. MOVQ P751P1_7, AX
  1518. MULQ R12
  1519. ADDQ AX, R10
  1520. ADCQ DX, R8
  1521. ADCQ $0, R9
  1522. MOVQ P751P1_6, AX
  1523. MULQ R13
  1524. ADDQ AX, R10
  1525. ADCQ DX, R8
  1526. ADCQ $0, R9
  1527. MOVQ (72)(REG_P2), R14
  1528. MOVQ P751P1_5, AX
  1529. MULQ R14
  1530. ADDQ AX, R10
  1531. ADCQ DX, R8
  1532. ADCQ $0, R9
  1533. ADDQ (112)(REG_P1), R10
  1534. MOVQ R10, (16)(REG_P2) // Z2
  1535. ADCQ $0, R8
  1536. ADCQ $0, R9
  1537. XORQ R10, R10
  1538. MOVQ P751P1_11, AX
  1539. MULQ R15
  1540. ADDQ AX, R8
  1541. ADCQ DX, R9
  1542. ADCQ $0, R10
  1543. MOVQ P751P1_10, AX
  1544. MULQ CX
  1545. ADDQ AX, R8
  1546. ADCQ DX, R9
  1547. ADCQ $0, R10
  1548. MOVQ P751P1_9, AX
  1549. MULQ R11
  1550. ADDQ AX, R8
  1551. ADCQ DX, R9
  1552. ADCQ $0, R10
  1553. MOVQ P751P1_8, AX
  1554. MULQ R12
  1555. ADDQ AX, R8
  1556. ADCQ DX, R9
  1557. ADCQ $0, R10
  1558. MOVQ P751P1_7, AX
  1559. MULQ R13
  1560. ADDQ AX, R8
  1561. ADCQ DX, R9
  1562. ADCQ $0, R10
  1563. MOVQ P751P1_6, AX
  1564. MULQ R14
  1565. ADDQ AX, R8
  1566. ADCQ DX, R9
  1567. ADCQ $0, R10
  1568. MOVQ (80)(REG_P2), R15
  1569. MOVQ P751P1_5, AX
  1570. MULQ R15
  1571. ADDQ AX, R8
  1572. ADCQ DX, R9
  1573. ADCQ $0, R10
  1574. ADDQ (120)(REG_P1), R8
  1575. MOVQ R8, (24)(REG_P2) // Z3
  1576. ADCQ $0, R9
  1577. ADCQ $0, R10
  1578. XORQ R8, R8
  1579. MOVQ P751P1_11, AX
  1580. MULQ CX
  1581. ADDQ AX, R9
  1582. ADCQ DX, R10
  1583. ADCQ $0, R8
  1584. MOVQ P751P1_10, AX
  1585. MULQ R11
  1586. ADDQ AX, R9
  1587. ADCQ DX, R10
  1588. ADCQ $0, R8
  1589. MOVQ P751P1_9, AX
  1590. MULQ R12
  1591. ADDQ AX, R9
  1592. ADCQ DX, R10
  1593. ADCQ $0, R8
  1594. MOVQ P751P1_8, AX
  1595. MULQ R13
  1596. ADDQ AX, R9
  1597. ADCQ DX, R10
  1598. ADCQ $0, R8
  1599. MOVQ P751P1_7, AX
  1600. MULQ R14
  1601. ADDQ AX, R9
  1602. ADCQ DX, R10
  1603. ADCQ $0, R8
  1604. MOVQ P751P1_6, AX
  1605. MULQ R15
  1606. ADDQ AX, R9
  1607. ADCQ DX, R10
  1608. ADCQ $0, R8
  1609. MOVQ (88)(REG_P2), CX
  1610. MOVQ P751P1_5, AX
  1611. MULQ CX
  1612. ADDQ AX, R9
  1613. ADCQ DX, R10
  1614. ADCQ $0, R8
  1615. ADDQ (128)(REG_P1), R9
  1616. MOVQ R9, (32)(REG_P2) // Z4
  1617. ADCQ $0, R10
  1618. ADCQ $0, R8
  1619. XORQ R9, R9
  1620. MOVQ P751P1_11, AX
  1621. MULQ R11
  1622. ADDQ AX, R10
  1623. ADCQ DX, R8
  1624. ADCQ $0, R9
  1625. MOVQ P751P1_10, AX
  1626. MULQ R12
  1627. ADDQ AX, R10
  1628. ADCQ DX, R8
  1629. ADCQ $0, R9
  1630. MOVQ P751P1_9, AX
  1631. MULQ R13
  1632. ADDQ AX, R10
  1633. ADCQ DX, R8
  1634. ADCQ $0, R9
  1635. MOVQ P751P1_8, AX
  1636. MULQ R14
  1637. ADDQ AX, R10
  1638. ADCQ DX, R8
  1639. ADCQ $0, R9
  1640. MOVQ P751P1_7, AX
  1641. MULQ R15
  1642. ADDQ AX, R10
  1643. ADCQ DX, R8
  1644. ADCQ $0, R9
  1645. MOVQ P751P1_6, AX
  1646. MULQ CX
  1647. ADDQ AX, R10
  1648. ADCQ DX, R8
  1649. ADCQ $0, R9
  1650. ADDQ (136)(REG_P1), R10
  1651. MOVQ R10, (40)(REG_P2) // Z5
  1652. ADCQ $0, R8
  1653. ADCQ $0, R9
  1654. XORQ R10, R10
  1655. MOVQ P751P1_11, AX
  1656. MULQ R12
  1657. ADDQ AX, R8
  1658. ADCQ DX, R9
  1659. ADCQ $0, R10
  1660. MOVQ P751P1_10, AX
  1661. MULQ R13
  1662. ADDQ AX, R8
  1663. ADCQ DX, R9
  1664. ADCQ $0, R10
  1665. MOVQ P751P1_9, AX
  1666. MULQ R14
  1667. ADDQ AX, R8
  1668. ADCQ DX, R9
  1669. ADCQ $0, R10
  1670. MOVQ P751P1_8, AX
  1671. MULQ R15
  1672. ADDQ AX, R8
  1673. ADCQ DX, R9
  1674. ADCQ $0, R10
  1675. MOVQ P751P1_7, AX
  1676. MULQ CX
  1677. ADDQ AX, R8
  1678. ADCQ DX, R9
  1679. ADCQ $0, R10
  1680. ADDQ (144)(REG_P1), R8
  1681. MOVQ R8, (48)(REG_P2) // Z6
  1682. ADCQ $0, R9
  1683. ADCQ $0, R10
  1684. XORQ R8, R8
  1685. MOVQ P751P1_11, AX
  1686. MULQ R13
  1687. ADDQ AX, R9
  1688. ADCQ DX, R10
  1689. ADCQ $0, R8
  1690. MOVQ P751P1_10, AX
  1691. MULQ R14
  1692. ADDQ AX, R9
  1693. ADCQ DX, R10
  1694. ADCQ $0, R8
  1695. MOVQ P751P1_9, AX
  1696. MULQ R15
  1697. ADDQ AX, R9
  1698. ADCQ DX, R10
  1699. ADCQ $0, R8
  1700. MOVQ P751P1_8, AX
  1701. MULQ CX
  1702. ADDQ AX, R9
  1703. ADCQ DX, R10
  1704. ADCQ $0, R8
  1705. ADDQ (152)(REG_P1), R9
  1706. MOVQ R9, (56)(REG_P2) // Z7
  1707. ADCQ $0, R10
  1708. ADCQ $0, R8
  1709. XORQ R9, R9
  1710. MOVQ P751P1_11, AX
  1711. MULQ R14
  1712. ADDQ AX, R10
  1713. ADCQ DX, R8
  1714. ADCQ $0, R9
  1715. MOVQ P751P1_10, AX
  1716. MULQ R15
  1717. ADDQ AX, R10
  1718. ADCQ DX, R8
  1719. ADCQ $0, R9
  1720. MOVQ P751P1_9, AX
  1721. MULQ CX
  1722. ADDQ AX, R10
  1723. ADCQ DX, R8
  1724. ADCQ $0, R9
  1725. ADDQ (160)(REG_P1), R10
  1726. MOVQ R10, (64)(REG_P2) // Z8
  1727. ADCQ $0, R8
  1728. ADCQ $0, R9
  1729. XORQ R10, R10
  1730. MOVQ P751P1_11, AX
  1731. MULQ R15
  1732. ADDQ AX, R8
  1733. ADCQ DX, R9
  1734. ADCQ $0, R10
  1735. MOVQ P751P1_10, AX
  1736. MULQ CX
  1737. ADDQ AX, R8
  1738. ADCQ DX, R9
  1739. ADCQ $0, R10
  1740. ADDQ (168)(REG_P1), R8 // Z9
  1741. MOVQ R8, (72)(REG_P2) // Z9
  1742. ADCQ $0, R9
  1743. ADCQ $0, R10
  1744. MOVQ P751P1_11, AX
  1745. MULQ CX
  1746. ADDQ AX, R9
  1747. ADCQ DX, R10
  1748. ADDQ (176)(REG_P1), R9 // Z10
  1749. MOVQ R9, (80)(REG_P2) // Z10
  1750. ADCQ $0, R10
  1751. ADDQ (184)(REG_P1), R10 // Z11
  1752. MOVQ R10, (88)(REG_P2) // Z11
  1753. RET
  1754. TEXT ·fp751AddLazy(SB), NOSPLIT, $0-24
  1755. MOVQ z+0(FP), REG_P3
  1756. MOVQ x+8(FP), REG_P1
  1757. MOVQ y+16(FP), REG_P2
  1758. MOVQ (REG_P1), R8
  1759. MOVQ (8)(REG_P1), R9
  1760. MOVQ (16)(REG_P1), R10
  1761. MOVQ (24)(REG_P1), R11
  1762. MOVQ (32)(REG_P1), R12
  1763. MOVQ (40)(REG_P1), R13
  1764. MOVQ (48)(REG_P1), R14
  1765. MOVQ (56)(REG_P1), R15
  1766. MOVQ (64)(REG_P1), AX
  1767. MOVQ (72)(REG_P1), BX
  1768. MOVQ (80)(REG_P1), CX
  1769. MOVQ (88)(REG_P1), DI
  1770. ADDQ (REG_P2), R8
  1771. ADCQ (8)(REG_P2), R9
  1772. ADCQ (16)(REG_P2), R10
  1773. ADCQ (24)(REG_P2), R11
  1774. ADCQ (32)(REG_P2), R12
  1775. ADCQ (40)(REG_P2), R13
  1776. ADCQ (48)(REG_P2), R14
  1777. ADCQ (56)(REG_P2), R15
  1778. ADCQ (64)(REG_P2), AX
  1779. ADCQ (72)(REG_P2), BX
  1780. ADCQ (80)(REG_P2), CX
  1781. ADCQ (88)(REG_P2), DI
  1782. MOVQ R8, (REG_P3)
  1783. MOVQ R9, (8)(REG_P3)
  1784. MOVQ R10, (16)(REG_P3)
  1785. MOVQ R11, (24)(REG_P3)
  1786. MOVQ R12, (32)(REG_P3)
  1787. MOVQ R13, (40)(REG_P3)
  1788. MOVQ R14, (48)(REG_P3)
  1789. MOVQ R15, (56)(REG_P3)
  1790. MOVQ AX, (64)(REG_P3)
  1791. MOVQ BX, (72)(REG_P3)
  1792. MOVQ CX, (80)(REG_P3)
  1793. MOVQ DI, (88)(REG_P3)
  1794. RET
  1795. TEXT ·fp751X2AddLazy(SB), NOSPLIT, $0-24
  1796. MOVQ z+0(FP), REG_P3
  1797. MOVQ x+8(FP), REG_P1
  1798. MOVQ y+16(FP), REG_P2
  1799. MOVQ (REG_P1), R8
  1800. MOVQ (8)(REG_P1), R9
  1801. MOVQ (16)(REG_P1), R10
  1802. MOVQ (24)(REG_P1), R11
  1803. MOVQ (32)(REG_P1), R12
  1804. MOVQ (40)(REG_P1), R13
  1805. MOVQ (48)(REG_P1), R14
  1806. MOVQ (56)(REG_P1), R15
  1807. MOVQ (64)(REG_P1), AX
  1808. MOVQ (72)(REG_P1), BX
  1809. MOVQ (80)(REG_P1), CX
  1810. ADDQ (REG_P2), R8
  1811. ADCQ (8)(REG_P2), R9
  1812. ADCQ (16)(REG_P2), R10
  1813. ADCQ (24)(REG_P2), R11
  1814. ADCQ (32)(REG_P2), R12
  1815. ADCQ (40)(REG_P2), R13
  1816. ADCQ (48)(REG_P2), R14
  1817. ADCQ (56)(REG_P2), R15
  1818. ADCQ (64)(REG_P2), AX
  1819. ADCQ (72)(REG_P2), BX
  1820. ADCQ (80)(REG_P2), CX
  1821. MOVQ R8, (REG_P3)
  1822. MOVQ R9, (8)(REG_P3)
  1823. MOVQ R10, (16)(REG_P3)
  1824. MOVQ R11, (24)(REG_P3)
  1825. MOVQ R12, (32)(REG_P3)
  1826. MOVQ R13, (40)(REG_P3)
  1827. MOVQ R14, (48)(REG_P3)
  1828. MOVQ R15, (56)(REG_P3)
  1829. MOVQ AX, (64)(REG_P3)
  1830. MOVQ BX, (72)(REG_P3)
  1831. MOVQ CX, (80)(REG_P3)
  1832. MOVQ (88)(REG_P1), AX
  1833. ADCQ (88)(REG_P2), AX
  1834. MOVQ AX, (88)(REG_P3)
  1835. MOVQ (96)(REG_P1), R8
  1836. MOVQ (104)(REG_P1), R9
  1837. MOVQ (112)(REG_P1), R10
  1838. MOVQ (120)(REG_P1), R11
  1839. MOVQ (128)(REG_P1), R12
  1840. MOVQ (136)(REG_P1), R13
  1841. MOVQ (144)(REG_P1), R14
  1842. MOVQ (152)(REG_P1), R15
  1843. MOVQ (160)(REG_P1), AX
  1844. MOVQ (168)(REG_P1), BX
  1845. MOVQ (176)(REG_P1), CX
  1846. MOVQ (184)(REG_P1), DI
  1847. ADCQ (96)(REG_P2), R8
  1848. ADCQ (104)(REG_P2), R9
  1849. ADCQ (112)(REG_P2), R10
  1850. ADCQ (120)(REG_P2), R11
  1851. ADCQ (128)(REG_P2), R12
  1852. ADCQ (136)(REG_P2), R13
  1853. ADCQ (144)(REG_P2), R14
  1854. ADCQ (152)(REG_P2), R15
  1855. ADCQ (160)(REG_P2), AX
  1856. ADCQ (168)(REG_P2), BX
  1857. ADCQ (176)(REG_P2), CX
  1858. ADCQ (184)(REG_P2), DI
  1859. MOVQ R8, (96)(REG_P3)
  1860. MOVQ R9, (104)(REG_P3)
  1861. MOVQ R10, (112)(REG_P3)
  1862. MOVQ R11, (120)(REG_P3)
  1863. MOVQ R12, (128)(REG_P3)
  1864. MOVQ R13, (136)(REG_P3)
  1865. MOVQ R14, (144)(REG_P3)
  1866. MOVQ R15, (152)(REG_P3)
  1867. MOVQ AX, (160)(REG_P3)
  1868. MOVQ BX, (168)(REG_P3)
  1869. MOVQ CX, (176)(REG_P3)
  1870. MOVQ DI, (184)(REG_P3)
  1871. RET
  1872. TEXT ·fp751X2SubLazy(SB), NOSPLIT, $0-24
  1873. MOVQ z+0(FP), REG_P3
  1874. MOVQ x+8(FP), REG_P1
  1875. MOVQ y+16(FP), REG_P2
  1876. MOVQ (REG_P1), R8
  1877. MOVQ (8)(REG_P1), R9
  1878. MOVQ (16)(REG_P1), R10
  1879. MOVQ (24)(REG_P1), R11
  1880. MOVQ (32)(REG_P1), R12
  1881. MOVQ (40)(REG_P1), R13
  1882. MOVQ (48)(REG_P1), R14
  1883. MOVQ (56)(REG_P1), R15
  1884. MOVQ (64)(REG_P1), AX
  1885. MOVQ (72)(REG_P1), BX
  1886. MOVQ (80)(REG_P1), CX
  1887. SUBQ (REG_P2), R8
  1888. SBBQ (8)(REG_P2), R9
  1889. SBBQ (16)(REG_P2), R10
  1890. SBBQ (24)(REG_P2), R11
  1891. SBBQ (32)(REG_P2), R12
  1892. SBBQ (40)(REG_P2), R13
  1893. SBBQ (48)(REG_P2), R14
  1894. SBBQ (56)(REG_P2), R15
  1895. SBBQ (64)(REG_P2), AX
  1896. SBBQ (72)(REG_P2), BX
  1897. SBBQ (80)(REG_P2), CX
  1898. MOVQ R8, (REG_P3)
  1899. MOVQ R9, (8)(REG_P3)
  1900. MOVQ R10, (16)(REG_P3)
  1901. MOVQ R11, (24)(REG_P3)
  1902. MOVQ R12, (32)(REG_P3)
  1903. MOVQ R13, (40)(REG_P3)
  1904. MOVQ R14, (48)(REG_P3)
  1905. MOVQ R15, (56)(REG_P3)
  1906. MOVQ AX, (64)(REG_P3)
  1907. MOVQ BX, (72)(REG_P3)
  1908. MOVQ CX, (80)(REG_P3)
  1909. MOVQ (88)(REG_P1), AX
  1910. SBBQ (88)(REG_P2), AX
  1911. MOVQ AX, (88)(REG_P3)
  1912. MOVQ (96)(REG_P1), R8
  1913. MOVQ (104)(REG_P1), R9
  1914. MOVQ (112)(REG_P1), R10
  1915. MOVQ (120)(REG_P1), R11
  1916. MOVQ (128)(REG_P1), R12
  1917. MOVQ (136)(REG_P1), R13
  1918. MOVQ (144)(REG_P1), R14
  1919. MOVQ (152)(REG_P1), R15
  1920. MOVQ (160)(REG_P1), AX
  1921. MOVQ (168)(REG_P1), BX
  1922. MOVQ (176)(REG_P1), CX
  1923. MOVQ (184)(REG_P1), DI
  1924. SBBQ (96)(REG_P2), R8
  1925. SBBQ (104)(REG_P2), R9
  1926. SBBQ (112)(REG_P2), R10
  1927. SBBQ (120)(REG_P2), R11
  1928. SBBQ (128)(REG_P2), R12
  1929. SBBQ (136)(REG_P2), R13
  1930. SBBQ (144)(REG_P2), R14
  1931. SBBQ (152)(REG_P2), R15
  1932. SBBQ (160)(REG_P2), AX
  1933. SBBQ (168)(REG_P2), BX
  1934. SBBQ (176)(REG_P2), CX
  1935. SBBQ (184)(REG_P2), DI
  1936. MOVQ R8, (96)(REG_P3)
  1937. MOVQ R9, (104)(REG_P3)
  1938. MOVQ R10, (112)(REG_P3)
  1939. MOVQ R11, (120)(REG_P3)
  1940. MOVQ R12, (128)(REG_P3)
  1941. MOVQ R13, (136)(REG_P3)
  1942. MOVQ R14, (144)(REG_P3)
  1943. MOVQ R15, (152)(REG_P3)
  1944. MOVQ AX, (160)(REG_P3)
  1945. MOVQ BX, (168)(REG_P3)
  1946. MOVQ CX, (176)(REG_P3)
  1947. MOVQ DI, (184)(REG_P3)
  1948. // Now the carry flag is 1 if x-y < 0. If so, add p*2^768.
  1949. MOVQ $0, AX
  1950. SBBQ $0, AX
  1951. // Load p into registers:
  1952. MOVQ P751_0, R8
  1953. // P751_{1,2,3,4} = P751_0, so reuse R8
  1954. MOVQ P751_5, R9
  1955. MOVQ P751_6, R10
  1956. MOVQ P751_7, R11
  1957. MOVQ P751_8, R12
  1958. MOVQ P751_9, R13
  1959. MOVQ P751_10, R14
  1960. MOVQ P751_11, R15
  1961. ANDQ AX, R8
  1962. ANDQ AX, R9
  1963. ANDQ AX, R10
  1964. ANDQ AX, R11
  1965. ANDQ AX, R12
  1966. ANDQ AX, R13
  1967. ANDQ AX, R14
  1968. ANDQ AX, R15
  1969. ADDQ R8, (96 )(REG_P3)
  1970. ADCQ R8, (96+ 8)(REG_P3)
  1971. ADCQ R8, (96+16)(REG_P3)
  1972. ADCQ R8, (96+24)(REG_P3)
  1973. ADCQ R8, (96+32)(REG_P3)
  1974. ADCQ R9, (96+40)(REG_P3)
  1975. ADCQ R10, (96+48)(REG_P3)
  1976. ADCQ R11, (96+56)(REG_P3)
  1977. ADCQ R12, (96+64)(REG_P3)
  1978. ADCQ R13, (96+72)(REG_P3)
  1979. ADCQ R14, (96+80)(REG_P3)
  1980. ADCQ R15, (96+88)(REG_P3)
  1981. RET