...

Text file src/crypto/internal/bigmod/nat_amd64.s

Documentation: crypto/internal/bigmod

     1// Code generated by command: go run nat_amd64_asm.go -out ../nat_amd64.s -pkg bigmod. DO NOT EDIT.
     2
     3//go:build !purego
     4
     5// func addMulVVW1024(z *uint, x *uint, y uint) (c uint)
     6// Requires: ADX, BMI2
     7TEXT ·addMulVVW1024(SB), $0-32
     8	CMPB ·supportADX+0(SB), $0x01
     9	JEQ  adx
    10	MOVQ z+0(FP), CX
    11	MOVQ x+8(FP), BX
    12	MOVQ y+16(FP), SI
    13	XORQ DI, DI
    14
    15	// Iteration 0
    16	MOVQ (BX), AX
    17	MULQ SI
    18	ADDQ (CX), AX
    19	ADCQ $0x00, DX
    20	ADDQ DI, AX
    21	ADCQ $0x00, DX
    22	MOVQ DX, DI
    23	MOVQ AX, (CX)
    24
    25	// Iteration 1
    26	MOVQ 8(BX), AX
    27	MULQ SI
    28	ADDQ 8(CX), AX
    29	ADCQ $0x00, DX
    30	ADDQ DI, AX
    31	ADCQ $0x00, DX
    32	MOVQ DX, DI
    33	MOVQ AX, 8(CX)
    34
    35	// Iteration 2
    36	MOVQ 16(BX), AX
    37	MULQ SI
    38	ADDQ 16(CX), AX
    39	ADCQ $0x00, DX
    40	ADDQ DI, AX
    41	ADCQ $0x00, DX
    42	MOVQ DX, DI
    43	MOVQ AX, 16(CX)
    44
    45	// Iteration 3
    46	MOVQ 24(BX), AX
    47	MULQ SI
    48	ADDQ 24(CX), AX
    49	ADCQ $0x00, DX
    50	ADDQ DI, AX
    51	ADCQ $0x00, DX
    52	MOVQ DX, DI
    53	MOVQ AX, 24(CX)
    54
    55	// Iteration 4
    56	MOVQ 32(BX), AX
    57	MULQ SI
    58	ADDQ 32(CX), AX
    59	ADCQ $0x00, DX
    60	ADDQ DI, AX
    61	ADCQ $0x00, DX
    62	MOVQ DX, DI
    63	MOVQ AX, 32(CX)
    64
    65	// Iteration 5
    66	MOVQ 40(BX), AX
    67	MULQ SI
    68	ADDQ 40(CX), AX
    69	ADCQ $0x00, DX
    70	ADDQ DI, AX
    71	ADCQ $0x00, DX
    72	MOVQ DX, DI
    73	MOVQ AX, 40(CX)
    74
    75	// Iteration 6
    76	MOVQ 48(BX), AX
    77	MULQ SI
    78	ADDQ 48(CX), AX
    79	ADCQ $0x00, DX
    80	ADDQ DI, AX
    81	ADCQ $0x00, DX
    82	MOVQ DX, DI
    83	MOVQ AX, 48(CX)
    84
    85	// Iteration 7
    86	MOVQ 56(BX), AX
    87	MULQ SI
    88	ADDQ 56(CX), AX
    89	ADCQ $0x00, DX
    90	ADDQ DI, AX
    91	ADCQ $0x00, DX
    92	MOVQ DX, DI
    93	MOVQ AX, 56(CX)
    94
    95	// Iteration 8
    96	MOVQ 64(BX), AX
    97	MULQ SI
    98	ADDQ 64(CX), AX
    99	ADCQ $0x00, DX
   100	ADDQ DI, AX
   101	ADCQ $0x00, DX
   102	MOVQ DX, DI
   103	MOVQ AX, 64(CX)
   104
   105	// Iteration 9
   106	MOVQ 72(BX), AX
   107	MULQ SI
   108	ADDQ 72(CX), AX
   109	ADCQ $0x00, DX
   110	ADDQ DI, AX
   111	ADCQ $0x00, DX
   112	MOVQ DX, DI
   113	MOVQ AX, 72(CX)
   114
   115	// Iteration 10
   116	MOVQ 80(BX), AX
   117	MULQ SI
   118	ADDQ 80(CX), AX
   119	ADCQ $0x00, DX
   120	ADDQ DI, AX
   121	ADCQ $0x00, DX
   122	MOVQ DX, DI
   123	MOVQ AX, 80(CX)
   124
   125	// Iteration 11
   126	MOVQ 88(BX), AX
   127	MULQ SI
   128	ADDQ 88(CX), AX
   129	ADCQ $0x00, DX
   130	ADDQ DI, AX
   131	ADCQ $0x00, DX
   132	MOVQ DX, DI
   133	MOVQ AX, 88(CX)
   134
   135	// Iteration 12
   136	MOVQ 96(BX), AX
   137	MULQ SI
   138	ADDQ 96(CX), AX
   139	ADCQ $0x00, DX
   140	ADDQ DI, AX
   141	ADCQ $0x00, DX
   142	MOVQ DX, DI
   143	MOVQ AX, 96(CX)
   144
   145	// Iteration 13
   146	MOVQ 104(BX), AX
   147	MULQ SI
   148	ADDQ 104(CX), AX
   149	ADCQ $0x00, DX
   150	ADDQ DI, AX
   151	ADCQ $0x00, DX
   152	MOVQ DX, DI
   153	MOVQ AX, 104(CX)
   154
   155	// Iteration 14
   156	MOVQ 112(BX), AX
   157	MULQ SI
   158	ADDQ 112(CX), AX
   159	ADCQ $0x00, DX
   160	ADDQ DI, AX
   161	ADCQ $0x00, DX
   162	MOVQ DX, DI
   163	MOVQ AX, 112(CX)
   164
   165	// Iteration 15
   166	MOVQ 120(BX), AX
   167	MULQ SI
   168	ADDQ 120(CX), AX
   169	ADCQ $0x00, DX
   170	ADDQ DI, AX
   171	ADCQ $0x00, DX
   172	MOVQ DX, DI
   173	MOVQ AX, 120(CX)
   174	MOVQ DI, c+24(FP)
   175	RET
   176
   177adx:
   178	MOVQ z+0(FP), AX
   179	MOVQ x+8(FP), CX
   180	MOVQ y+16(FP), DX
   181	XORQ BX, BX
   182	XORQ SI, SI
   183
   184	// Iteration 0
   185	MULXQ (CX), R8, DI
   186	ADCXQ BX, R8
   187	ADOXQ (AX), R8
   188	MOVQ  R8, (AX)
   189
   190	// Iteration 1
   191	MULXQ 8(CX), R8, BX
   192	ADCXQ DI, R8
   193	ADOXQ 8(AX), R8
   194	MOVQ  R8, 8(AX)
   195
   196	// Iteration 2
   197	MULXQ 16(CX), R8, DI
   198	ADCXQ BX, R8
   199	ADOXQ 16(AX), R8
   200	MOVQ  R8, 16(AX)
   201
   202	// Iteration 3
   203	MULXQ 24(CX), R8, BX
   204	ADCXQ DI, R8
   205	ADOXQ 24(AX), R8
   206	MOVQ  R8, 24(AX)
   207
   208	// Iteration 4
   209	MULXQ 32(CX), R8, DI
   210	ADCXQ BX, R8
   211	ADOXQ 32(AX), R8
   212	MOVQ  R8, 32(AX)
   213
   214	// Iteration 5
   215	MULXQ 40(CX), R8, BX
   216	ADCXQ DI, R8
   217	ADOXQ 40(AX), R8
   218	MOVQ  R8, 40(AX)
   219
   220	// Iteration 6
   221	MULXQ 48(CX), R8, DI
   222	ADCXQ BX, R8
   223	ADOXQ 48(AX), R8
   224	MOVQ  R8, 48(AX)
   225
   226	// Iteration 7
   227	MULXQ 56(CX), R8, BX
   228	ADCXQ DI, R8
   229	ADOXQ 56(AX), R8
   230	MOVQ  R8, 56(AX)
   231
   232	// Iteration 8
   233	MULXQ 64(CX), R8, DI
   234	ADCXQ BX, R8
   235	ADOXQ 64(AX), R8
   236	MOVQ  R8, 64(AX)
   237
   238	// Iteration 9
   239	MULXQ 72(CX), R8, BX
   240	ADCXQ DI, R8
   241	ADOXQ 72(AX), R8
   242	MOVQ  R8, 72(AX)
   243
   244	// Iteration 10
   245	MULXQ 80(CX), R8, DI
   246	ADCXQ BX, R8
   247	ADOXQ 80(AX), R8
   248	MOVQ  R8, 80(AX)
   249
   250	// Iteration 11
   251	MULXQ 88(CX), R8, BX
   252	ADCXQ DI, R8
   253	ADOXQ 88(AX), R8
   254	MOVQ  R8, 88(AX)
   255
   256	// Iteration 12
   257	MULXQ 96(CX), R8, DI
   258	ADCXQ BX, R8
   259	ADOXQ 96(AX), R8
   260	MOVQ  R8, 96(AX)
   261
   262	// Iteration 13
   263	MULXQ 104(CX), R8, BX
   264	ADCXQ DI, R8
   265	ADOXQ 104(AX), R8
   266	MOVQ  R8, 104(AX)
   267
   268	// Iteration 14
   269	MULXQ 112(CX), R8, DI
   270	ADCXQ BX, R8
   271	ADOXQ 112(AX), R8
   272	MOVQ  R8, 112(AX)
   273
   274	// Iteration 15
   275	MULXQ 120(CX), R8, BX
   276	ADCXQ DI, R8
   277	ADOXQ 120(AX), R8
   278	MOVQ  R8, 120(AX)
   279
   280	// Add back carry flags and return
   281	ADCXQ SI, BX
   282	ADOXQ SI, BX
   283	MOVQ  BX, c+24(FP)
   284	RET
   285
   286// func addMulVVW1536(z *uint, x *uint, y uint) (c uint)
   287// Requires: ADX, BMI2
   288TEXT ·addMulVVW1536(SB), $0-32
   289	CMPB ·supportADX+0(SB), $0x01
   290	JEQ  adx
   291	MOVQ z+0(FP), CX
   292	MOVQ x+8(FP), BX
   293	MOVQ y+16(FP), SI
   294	XORQ DI, DI
   295
   296	// Iteration 0
   297	MOVQ (BX), AX
   298	MULQ SI
   299	ADDQ (CX), AX
   300	ADCQ $0x00, DX
   301	ADDQ DI, AX
   302	ADCQ $0x00, DX
   303	MOVQ DX, DI
   304	MOVQ AX, (CX)
   305
   306	// Iteration 1
   307	MOVQ 8(BX), AX
   308	MULQ SI
   309	ADDQ 8(CX), AX
   310	ADCQ $0x00, DX
   311	ADDQ DI, AX
   312	ADCQ $0x00, DX
   313	MOVQ DX, DI
   314	MOVQ AX, 8(CX)
   315
   316	// Iteration 2
   317	MOVQ 16(BX), AX
   318	MULQ SI
   319	ADDQ 16(CX), AX
   320	ADCQ $0x00, DX
   321	ADDQ DI, AX
   322	ADCQ $0x00, DX
   323	MOVQ DX, DI
   324	MOVQ AX, 16(CX)
   325
   326	// Iteration 3
   327	MOVQ 24(BX), AX
   328	MULQ SI
   329	ADDQ 24(CX), AX
   330	ADCQ $0x00, DX
   331	ADDQ DI, AX
   332	ADCQ $0x00, DX
   333	MOVQ DX, DI
   334	MOVQ AX, 24(CX)
   335
   336	// Iteration 4
   337	MOVQ 32(BX), AX
   338	MULQ SI
   339	ADDQ 32(CX), AX
   340	ADCQ $0x00, DX
   341	ADDQ DI, AX
   342	ADCQ $0x00, DX
   343	MOVQ DX, DI
   344	MOVQ AX, 32(CX)
   345
   346	// Iteration 5
   347	MOVQ 40(BX), AX
   348	MULQ SI
   349	ADDQ 40(CX), AX
   350	ADCQ $0x00, DX
   351	ADDQ DI, AX
   352	ADCQ $0x00, DX
   353	MOVQ DX, DI
   354	MOVQ AX, 40(CX)
   355
   356	// Iteration 6
   357	MOVQ 48(BX), AX
   358	MULQ SI
   359	ADDQ 48(CX), AX
   360	ADCQ $0x00, DX
   361	ADDQ DI, AX
   362	ADCQ $0x00, DX
   363	MOVQ DX, DI
   364	MOVQ AX, 48(CX)
   365
   366	// Iteration 7
   367	MOVQ 56(BX), AX
   368	MULQ SI
   369	ADDQ 56(CX), AX
   370	ADCQ $0x00, DX
   371	ADDQ DI, AX
   372	ADCQ $0x00, DX
   373	MOVQ DX, DI
   374	MOVQ AX, 56(CX)
   375
   376	// Iteration 8
   377	MOVQ 64(BX), AX
   378	MULQ SI
   379	ADDQ 64(CX), AX
   380	ADCQ $0x00, DX
   381	ADDQ DI, AX
   382	ADCQ $0x00, DX
   383	MOVQ DX, DI
   384	MOVQ AX, 64(CX)
   385
   386	// Iteration 9
   387	MOVQ 72(BX), AX
   388	MULQ SI
   389	ADDQ 72(CX), AX
   390	ADCQ $0x00, DX
   391	ADDQ DI, AX
   392	ADCQ $0x00, DX
   393	MOVQ DX, DI
   394	MOVQ AX, 72(CX)
   395
   396	// Iteration 10
   397	MOVQ 80(BX), AX
   398	MULQ SI
   399	ADDQ 80(CX), AX
   400	ADCQ $0x00, DX
   401	ADDQ DI, AX
   402	ADCQ $0x00, DX
   403	MOVQ DX, DI
   404	MOVQ AX, 80(CX)
   405
   406	// Iteration 11
   407	MOVQ 88(BX), AX
   408	MULQ SI
   409	ADDQ 88(CX), AX
   410	ADCQ $0x00, DX
   411	ADDQ DI, AX
   412	ADCQ $0x00, DX
   413	MOVQ DX, DI
   414	MOVQ AX, 88(CX)
   415
   416	// Iteration 12
   417	MOVQ 96(BX), AX
   418	MULQ SI
   419	ADDQ 96(CX), AX
   420	ADCQ $0x00, DX
   421	ADDQ DI, AX
   422	ADCQ $0x00, DX
   423	MOVQ DX, DI
   424	MOVQ AX, 96(CX)
   425
   426	// Iteration 13
   427	MOVQ 104(BX), AX
   428	MULQ SI
   429	ADDQ 104(CX), AX
   430	ADCQ $0x00, DX
   431	ADDQ DI, AX
   432	ADCQ $0x00, DX
   433	MOVQ DX, DI
   434	MOVQ AX, 104(CX)
   435
   436	// Iteration 14
   437	MOVQ 112(BX), AX
   438	MULQ SI
   439	ADDQ 112(CX), AX
   440	ADCQ $0x00, DX
   441	ADDQ DI, AX
   442	ADCQ $0x00, DX
   443	MOVQ DX, DI
   444	MOVQ AX, 112(CX)
   445
   446	// Iteration 15
   447	MOVQ 120(BX), AX
   448	MULQ SI
   449	ADDQ 120(CX), AX
   450	ADCQ $0x00, DX
   451	ADDQ DI, AX
   452	ADCQ $0x00, DX
   453	MOVQ DX, DI
   454	MOVQ AX, 120(CX)
   455
   456	// Iteration 16
   457	MOVQ 128(BX), AX
   458	MULQ SI
   459	ADDQ 128(CX), AX
   460	ADCQ $0x00, DX
   461	ADDQ DI, AX
   462	ADCQ $0x00, DX
   463	MOVQ DX, DI
   464	MOVQ AX, 128(CX)
   465
   466	// Iteration 17
   467	MOVQ 136(BX), AX
   468	MULQ SI
   469	ADDQ 136(CX), AX
   470	ADCQ $0x00, DX
   471	ADDQ DI, AX
   472	ADCQ $0x00, DX
   473	MOVQ DX, DI
   474	MOVQ AX, 136(CX)
   475
   476	// Iteration 18
   477	MOVQ 144(BX), AX
   478	MULQ SI
   479	ADDQ 144(CX), AX
   480	ADCQ $0x00, DX
   481	ADDQ DI, AX
   482	ADCQ $0x00, DX
   483	MOVQ DX, DI
   484	MOVQ AX, 144(CX)
   485
   486	// Iteration 19
   487	MOVQ 152(BX), AX
   488	MULQ SI
   489	ADDQ 152(CX), AX
   490	ADCQ $0x00, DX
   491	ADDQ DI, AX
   492	ADCQ $0x00, DX
   493	MOVQ DX, DI
   494	MOVQ AX, 152(CX)
   495
   496	// Iteration 20
   497	MOVQ 160(BX), AX
   498	MULQ SI
   499	ADDQ 160(CX), AX
   500	ADCQ $0x00, DX
   501	ADDQ DI, AX
   502	ADCQ $0x00, DX
   503	MOVQ DX, DI
   504	MOVQ AX, 160(CX)
   505
   506	// Iteration 21
   507	MOVQ 168(BX), AX
   508	MULQ SI
   509	ADDQ 168(CX), AX
   510	ADCQ $0x00, DX
   511	ADDQ DI, AX
   512	ADCQ $0x00, DX
   513	MOVQ DX, DI
   514	MOVQ AX, 168(CX)
   515
   516	// Iteration 22
   517	MOVQ 176(BX), AX
   518	MULQ SI
   519	ADDQ 176(CX), AX
   520	ADCQ $0x00, DX
   521	ADDQ DI, AX
   522	ADCQ $0x00, DX
   523	MOVQ DX, DI
   524	MOVQ AX, 176(CX)
   525
   526	// Iteration 23
   527	MOVQ 184(BX), AX
   528	MULQ SI
   529	ADDQ 184(CX), AX
   530	ADCQ $0x00, DX
   531	ADDQ DI, AX
   532	ADCQ $0x00, DX
   533	MOVQ DX, DI
   534	MOVQ AX, 184(CX)
   535	MOVQ DI, c+24(FP)
   536	RET
   537
   538adx:
   539	MOVQ z+0(FP), AX
   540	MOVQ x+8(FP), CX
   541	MOVQ y+16(FP), DX
   542	XORQ BX, BX
   543	XORQ SI, SI
   544
   545	// Iteration 0
   546	MULXQ (CX), R8, DI
   547	ADCXQ BX, R8
   548	ADOXQ (AX), R8
   549	MOVQ  R8, (AX)
   550
   551	// Iteration 1
   552	MULXQ 8(CX), R8, BX
   553	ADCXQ DI, R8
   554	ADOXQ 8(AX), R8
   555	MOVQ  R8, 8(AX)
   556
   557	// Iteration 2
   558	MULXQ 16(CX), R8, DI
   559	ADCXQ BX, R8
   560	ADOXQ 16(AX), R8
   561	MOVQ  R8, 16(AX)
   562
   563	// Iteration 3
   564	MULXQ 24(CX), R8, BX
   565	ADCXQ DI, R8
   566	ADOXQ 24(AX), R8
   567	MOVQ  R8, 24(AX)
   568
   569	// Iteration 4
   570	MULXQ 32(CX), R8, DI
   571	ADCXQ BX, R8
   572	ADOXQ 32(AX), R8
   573	MOVQ  R8, 32(AX)
   574
   575	// Iteration 5
   576	MULXQ 40(CX), R8, BX
   577	ADCXQ DI, R8
   578	ADOXQ 40(AX), R8
   579	MOVQ  R8, 40(AX)
   580
   581	// Iteration 6
   582	MULXQ 48(CX), R8, DI
   583	ADCXQ BX, R8
   584	ADOXQ 48(AX), R8
   585	MOVQ  R8, 48(AX)
   586
   587	// Iteration 7
   588	MULXQ 56(CX), R8, BX
   589	ADCXQ DI, R8
   590	ADOXQ 56(AX), R8
   591	MOVQ  R8, 56(AX)
   592
   593	// Iteration 8
   594	MULXQ 64(CX), R8, DI
   595	ADCXQ BX, R8
   596	ADOXQ 64(AX), R8
   597	MOVQ  R8, 64(AX)
   598
   599	// Iteration 9
   600	MULXQ 72(CX), R8, BX
   601	ADCXQ DI, R8
   602	ADOXQ 72(AX), R8
   603	MOVQ  R8, 72(AX)
   604
   605	// Iteration 10
   606	MULXQ 80(CX), R8, DI
   607	ADCXQ BX, R8
   608	ADOXQ 80(AX), R8
   609	MOVQ  R8, 80(AX)
   610
   611	// Iteration 11
   612	MULXQ 88(CX), R8, BX
   613	ADCXQ DI, R8
   614	ADOXQ 88(AX), R8
   615	MOVQ  R8, 88(AX)
   616
   617	// Iteration 12
   618	MULXQ 96(CX), R8, DI
   619	ADCXQ BX, R8
   620	ADOXQ 96(AX), R8
   621	MOVQ  R8, 96(AX)
   622
   623	// Iteration 13
   624	MULXQ 104(CX), R8, BX
   625	ADCXQ DI, R8
   626	ADOXQ 104(AX), R8
   627	MOVQ  R8, 104(AX)
   628
   629	// Iteration 14
   630	MULXQ 112(CX), R8, DI
   631	ADCXQ BX, R8
   632	ADOXQ 112(AX), R8
   633	MOVQ  R8, 112(AX)
   634
   635	// Iteration 15
   636	MULXQ 120(CX), R8, BX
   637	ADCXQ DI, R8
   638	ADOXQ 120(AX), R8
   639	MOVQ  R8, 120(AX)
   640
   641	// Iteration 16
   642	MULXQ 128(CX), R8, DI
   643	ADCXQ BX, R8
   644	ADOXQ 128(AX), R8
   645	MOVQ  R8, 128(AX)
   646
   647	// Iteration 17
   648	MULXQ 136(CX), R8, BX
   649	ADCXQ DI, R8
   650	ADOXQ 136(AX), R8
   651	MOVQ  R8, 136(AX)
   652
   653	// Iteration 18
   654	MULXQ 144(CX), R8, DI
   655	ADCXQ BX, R8
   656	ADOXQ 144(AX), R8
   657	MOVQ  R8, 144(AX)
   658
   659	// Iteration 19
   660	MULXQ 152(CX), R8, BX
   661	ADCXQ DI, R8
   662	ADOXQ 152(AX), R8
   663	MOVQ  R8, 152(AX)
   664
   665	// Iteration 20
   666	MULXQ 160(CX), R8, DI
   667	ADCXQ BX, R8
   668	ADOXQ 160(AX), R8
   669	MOVQ  R8, 160(AX)
   670
   671	// Iteration 21
   672	MULXQ 168(CX), R8, BX
   673	ADCXQ DI, R8
   674	ADOXQ 168(AX), R8
   675	MOVQ  R8, 168(AX)
   676
   677	// Iteration 22
   678	MULXQ 176(CX), R8, DI
   679	ADCXQ BX, R8
   680	ADOXQ 176(AX), R8
   681	MOVQ  R8, 176(AX)
   682
   683	// Iteration 23
   684	MULXQ 184(CX), R8, BX
   685	ADCXQ DI, R8
   686	ADOXQ 184(AX), R8
   687	MOVQ  R8, 184(AX)
   688
   689	// Add back carry flags and return
   690	ADCXQ SI, BX
   691	ADOXQ SI, BX
   692	MOVQ  BX, c+24(FP)
   693	RET
   694
   695// func addMulVVW2048(z *uint, x *uint, y uint) (c uint)
   696// Requires: ADX, BMI2
   697TEXT ·addMulVVW2048(SB), $0-32
   698	CMPB ·supportADX+0(SB), $0x01
   699	JEQ  adx
   700	MOVQ z+0(FP), CX
   701	MOVQ x+8(FP), BX
   702	MOVQ y+16(FP), SI
   703	XORQ DI, DI
   704
   705	// Iteration 0
   706	MOVQ (BX), AX
   707	MULQ SI
   708	ADDQ (CX), AX
   709	ADCQ $0x00, DX
   710	ADDQ DI, AX
   711	ADCQ $0x00, DX
   712	MOVQ DX, DI
   713	MOVQ AX, (CX)
   714
   715	// Iteration 1
   716	MOVQ 8(BX), AX
   717	MULQ SI
   718	ADDQ 8(CX), AX
   719	ADCQ $0x00, DX
   720	ADDQ DI, AX
   721	ADCQ $0x00, DX
   722	MOVQ DX, DI
   723	MOVQ AX, 8(CX)
   724
   725	// Iteration 2
   726	MOVQ 16(BX), AX
   727	MULQ SI
   728	ADDQ 16(CX), AX
   729	ADCQ $0x00, DX
   730	ADDQ DI, AX
   731	ADCQ $0x00, DX
   732	MOVQ DX, DI
   733	MOVQ AX, 16(CX)
   734
   735	// Iteration 3
   736	MOVQ 24(BX), AX
   737	MULQ SI
   738	ADDQ 24(CX), AX
   739	ADCQ $0x00, DX
   740	ADDQ DI, AX
   741	ADCQ $0x00, DX
   742	MOVQ DX, DI
   743	MOVQ AX, 24(CX)
   744
   745	// Iteration 4
   746	MOVQ 32(BX), AX
   747	MULQ SI
   748	ADDQ 32(CX), AX
   749	ADCQ $0x00, DX
   750	ADDQ DI, AX
   751	ADCQ $0x00, DX
   752	MOVQ DX, DI
   753	MOVQ AX, 32(CX)
   754
   755	// Iteration 5
   756	MOVQ 40(BX), AX
   757	MULQ SI
   758	ADDQ 40(CX), AX
   759	ADCQ $0x00, DX
   760	ADDQ DI, AX
   761	ADCQ $0x00, DX
   762	MOVQ DX, DI
   763	MOVQ AX, 40(CX)
   764
   765	// Iteration 6
   766	MOVQ 48(BX), AX
   767	MULQ SI
   768	ADDQ 48(CX), AX
   769	ADCQ $0x00, DX
   770	ADDQ DI, AX
   771	ADCQ $0x00, DX
   772	MOVQ DX, DI
   773	MOVQ AX, 48(CX)
   774
   775	// Iteration 7
   776	MOVQ 56(BX), AX
   777	MULQ SI
   778	ADDQ 56(CX), AX
   779	ADCQ $0x00, DX
   780	ADDQ DI, AX
   781	ADCQ $0x00, DX
   782	MOVQ DX, DI
   783	MOVQ AX, 56(CX)
   784
   785	// Iteration 8
   786	MOVQ 64(BX), AX
   787	MULQ SI
   788	ADDQ 64(CX), AX
   789	ADCQ $0x00, DX
   790	ADDQ DI, AX
   791	ADCQ $0x00, DX
   792	MOVQ DX, DI
   793	MOVQ AX, 64(CX)
   794
   795	// Iteration 9
   796	MOVQ 72(BX), AX
   797	MULQ SI
   798	ADDQ 72(CX), AX
   799	ADCQ $0x00, DX
   800	ADDQ DI, AX
   801	ADCQ $0x00, DX
   802	MOVQ DX, DI
   803	MOVQ AX, 72(CX)
   804
   805	// Iteration 10
   806	MOVQ 80(BX), AX
   807	MULQ SI
   808	ADDQ 80(CX), AX
   809	ADCQ $0x00, DX
   810	ADDQ DI, AX
   811	ADCQ $0x00, DX
   812	MOVQ DX, DI
   813	MOVQ AX, 80(CX)
   814
   815	// Iteration 11
   816	MOVQ 88(BX), AX
   817	MULQ SI
   818	ADDQ 88(CX), AX
   819	ADCQ $0x00, DX
   820	ADDQ DI, AX
   821	ADCQ $0x00, DX
   822	MOVQ DX, DI
   823	MOVQ AX, 88(CX)
   824
   825	// Iteration 12
   826	MOVQ 96(BX), AX
   827	MULQ SI
   828	ADDQ 96(CX), AX
   829	ADCQ $0x00, DX
   830	ADDQ DI, AX
   831	ADCQ $0x00, DX
   832	MOVQ DX, DI
   833	MOVQ AX, 96(CX)
   834
   835	// Iteration 13
   836	MOVQ 104(BX), AX
   837	MULQ SI
   838	ADDQ 104(CX), AX
   839	ADCQ $0x00, DX
   840	ADDQ DI, AX
   841	ADCQ $0x00, DX
   842	MOVQ DX, DI
   843	MOVQ AX, 104(CX)
   844
   845	// Iteration 14
   846	MOVQ 112(BX), AX
   847	MULQ SI
   848	ADDQ 112(CX), AX
   849	ADCQ $0x00, DX
   850	ADDQ DI, AX
   851	ADCQ $0x00, DX
   852	MOVQ DX, DI
   853	MOVQ AX, 112(CX)
   854
   855	// Iteration 15
   856	MOVQ 120(BX), AX
   857	MULQ SI
   858	ADDQ 120(CX), AX
   859	ADCQ $0x00, DX
   860	ADDQ DI, AX
   861	ADCQ $0x00, DX
   862	MOVQ DX, DI
   863	MOVQ AX, 120(CX)
   864
   865	// Iteration 16
   866	MOVQ 128(BX), AX
   867	MULQ SI
   868	ADDQ 128(CX), AX
   869	ADCQ $0x00, DX
   870	ADDQ DI, AX
   871	ADCQ $0x00, DX
   872	MOVQ DX, DI
   873	MOVQ AX, 128(CX)
   874
   875	// Iteration 17
   876	MOVQ 136(BX), AX
   877	MULQ SI
   878	ADDQ 136(CX), AX
   879	ADCQ $0x00, DX
   880	ADDQ DI, AX
   881	ADCQ $0x00, DX
   882	MOVQ DX, DI
   883	MOVQ AX, 136(CX)
   884
   885	// Iteration 18
   886	MOVQ 144(BX), AX
   887	MULQ SI
   888	ADDQ 144(CX), AX
   889	ADCQ $0x00, DX
   890	ADDQ DI, AX
   891	ADCQ $0x00, DX
   892	MOVQ DX, DI
   893	MOVQ AX, 144(CX)
   894
   895	// Iteration 19
   896	MOVQ 152(BX), AX
   897	MULQ SI
   898	ADDQ 152(CX), AX
   899	ADCQ $0x00, DX
   900	ADDQ DI, AX
   901	ADCQ $0x00, DX
   902	MOVQ DX, DI
   903	MOVQ AX, 152(CX)
   904
   905	// Iteration 20
   906	MOVQ 160(BX), AX
   907	MULQ SI
   908	ADDQ 160(CX), AX
   909	ADCQ $0x00, DX
   910	ADDQ DI, AX
   911	ADCQ $0x00, DX
   912	MOVQ DX, DI
   913	MOVQ AX, 160(CX)
   914
   915	// Iteration 21
   916	MOVQ 168(BX), AX
   917	MULQ SI
   918	ADDQ 168(CX), AX
   919	ADCQ $0x00, DX
   920	ADDQ DI, AX
   921	ADCQ $0x00, DX
   922	MOVQ DX, DI
   923	MOVQ AX, 168(CX)
   924
   925	// Iteration 22
   926	MOVQ 176(BX), AX
   927	MULQ SI
   928	ADDQ 176(CX), AX
   929	ADCQ $0x00, DX
   930	ADDQ DI, AX
   931	ADCQ $0x00, DX
   932	MOVQ DX, DI
   933	MOVQ AX, 176(CX)
   934
   935	// Iteration 23
   936	MOVQ 184(BX), AX
   937	MULQ SI
   938	ADDQ 184(CX), AX
   939	ADCQ $0x00, DX
   940	ADDQ DI, AX
   941	ADCQ $0x00, DX
   942	MOVQ DX, DI
   943	MOVQ AX, 184(CX)
   944
   945	// Iteration 24
   946	MOVQ 192(BX), AX
   947	MULQ SI
   948	ADDQ 192(CX), AX
   949	ADCQ $0x00, DX
   950	ADDQ DI, AX
   951	ADCQ $0x00, DX
   952	MOVQ DX, DI
   953	MOVQ AX, 192(CX)
   954
   955	// Iteration 25
   956	MOVQ 200(BX), AX
   957	MULQ SI
   958	ADDQ 200(CX), AX
   959	ADCQ $0x00, DX
   960	ADDQ DI, AX
   961	ADCQ $0x00, DX
   962	MOVQ DX, DI
   963	MOVQ AX, 200(CX)
   964
   965	// Iteration 26
   966	MOVQ 208(BX), AX
   967	MULQ SI
   968	ADDQ 208(CX), AX
   969	ADCQ $0x00, DX
   970	ADDQ DI, AX
   971	ADCQ $0x00, DX
   972	MOVQ DX, DI
   973	MOVQ AX, 208(CX)
   974
   975	// Iteration 27
   976	MOVQ 216(BX), AX
   977	MULQ SI
   978	ADDQ 216(CX), AX
   979	ADCQ $0x00, DX
   980	ADDQ DI, AX
   981	ADCQ $0x00, DX
   982	MOVQ DX, DI
   983	MOVQ AX, 216(CX)
   984
   985	// Iteration 28
   986	MOVQ 224(BX), AX
   987	MULQ SI
   988	ADDQ 224(CX), AX
   989	ADCQ $0x00, DX
   990	ADDQ DI, AX
   991	ADCQ $0x00, DX
   992	MOVQ DX, DI
   993	MOVQ AX, 224(CX)
   994
   995	// Iteration 29
   996	MOVQ 232(BX), AX
   997	MULQ SI
   998	ADDQ 232(CX), AX
   999	ADCQ $0x00, DX
  1000	ADDQ DI, AX
  1001	ADCQ $0x00, DX
  1002	MOVQ DX, DI
  1003	MOVQ AX, 232(CX)
  1004
  1005	// Iteration 30
  1006	MOVQ 240(BX), AX
  1007	MULQ SI
  1008	ADDQ 240(CX), AX
  1009	ADCQ $0x00, DX
  1010	ADDQ DI, AX
  1011	ADCQ $0x00, DX
  1012	MOVQ DX, DI
  1013	MOVQ AX, 240(CX)
  1014
  1015	// Iteration 31
  1016	MOVQ 248(BX), AX
  1017	MULQ SI
  1018	ADDQ 248(CX), AX
  1019	ADCQ $0x00, DX
  1020	ADDQ DI, AX
  1021	ADCQ $0x00, DX
  1022	MOVQ DX, DI
  1023	MOVQ AX, 248(CX)
  1024	MOVQ DI, c+24(FP)
  1025	RET
  1026
  1027adx:
  1028	MOVQ z+0(FP), AX
  1029	MOVQ x+8(FP), CX
  1030	MOVQ y+16(FP), DX
  1031	XORQ BX, BX
  1032	XORQ SI, SI
  1033
  1034	// Iteration 0
  1035	MULXQ (CX), R8, DI
  1036	ADCXQ BX, R8
  1037	ADOXQ (AX), R8
  1038	MOVQ  R8, (AX)
  1039
  1040	// Iteration 1
  1041	MULXQ 8(CX), R8, BX
  1042	ADCXQ DI, R8
  1043	ADOXQ 8(AX), R8
  1044	MOVQ  R8, 8(AX)
  1045
  1046	// Iteration 2
  1047	MULXQ 16(CX), R8, DI
  1048	ADCXQ BX, R8
  1049	ADOXQ 16(AX), R8
  1050	MOVQ  R8, 16(AX)
  1051
  1052	// Iteration 3
  1053	MULXQ 24(CX), R8, BX
  1054	ADCXQ DI, R8
  1055	ADOXQ 24(AX), R8
  1056	MOVQ  R8, 24(AX)
  1057
  1058	// Iteration 4
  1059	MULXQ 32(CX), R8, DI
  1060	ADCXQ BX, R8
  1061	ADOXQ 32(AX), R8
  1062	MOVQ  R8, 32(AX)
  1063
  1064	// Iteration 5
  1065	MULXQ 40(CX), R8, BX
  1066	ADCXQ DI, R8
  1067	ADOXQ 40(AX), R8
  1068	MOVQ  R8, 40(AX)
  1069
  1070	// Iteration 6
  1071	MULXQ 48(CX), R8, DI
  1072	ADCXQ BX, R8
  1073	ADOXQ 48(AX), R8
  1074	MOVQ  R8, 48(AX)
  1075
  1076	// Iteration 7
  1077	MULXQ 56(CX), R8, BX
  1078	ADCXQ DI, R8
  1079	ADOXQ 56(AX), R8
  1080	MOVQ  R8, 56(AX)
  1081
  1082	// Iteration 8
  1083	MULXQ 64(CX), R8, DI
  1084	ADCXQ BX, R8
  1085	ADOXQ 64(AX), R8
  1086	MOVQ  R8, 64(AX)
  1087
  1088	// Iteration 9
  1089	MULXQ 72(CX), R8, BX
  1090	ADCXQ DI, R8
  1091	ADOXQ 72(AX), R8
  1092	MOVQ  R8, 72(AX)
  1093
  1094	// Iteration 10
  1095	MULXQ 80(CX), R8, DI
  1096	ADCXQ BX, R8
  1097	ADOXQ 80(AX), R8
  1098	MOVQ  R8, 80(AX)
  1099
  1100	// Iteration 11
  1101	MULXQ 88(CX), R8, BX
  1102	ADCXQ DI, R8
  1103	ADOXQ 88(AX), R8
  1104	MOVQ  R8, 88(AX)
  1105
  1106	// Iteration 12
  1107	MULXQ 96(CX), R8, DI
  1108	ADCXQ BX, R8
  1109	ADOXQ 96(AX), R8
  1110	MOVQ  R8, 96(AX)
  1111
  1112	// Iteration 13
  1113	MULXQ 104(CX), R8, BX
  1114	ADCXQ DI, R8
  1115	ADOXQ 104(AX), R8
  1116	MOVQ  R8, 104(AX)
  1117
  1118	// Iteration 14
  1119	MULXQ 112(CX), R8, DI
  1120	ADCXQ BX, R8
  1121	ADOXQ 112(AX), R8
  1122	MOVQ  R8, 112(AX)
  1123
  1124	// Iteration 15
  1125	MULXQ 120(CX), R8, BX
  1126	ADCXQ DI, R8
  1127	ADOXQ 120(AX), R8
  1128	MOVQ  R8, 120(AX)
  1129
  1130	// Iteration 16
  1131	MULXQ 128(CX), R8, DI
  1132	ADCXQ BX, R8
  1133	ADOXQ 128(AX), R8
  1134	MOVQ  R8, 128(AX)
  1135
  1136	// Iteration 17
  1137	MULXQ 136(CX), R8, BX
  1138	ADCXQ DI, R8
  1139	ADOXQ 136(AX), R8
  1140	MOVQ  R8, 136(AX)
  1141
  1142	// Iteration 18
  1143	MULXQ 144(CX), R8, DI
  1144	ADCXQ BX, R8
  1145	ADOXQ 144(AX), R8
  1146	MOVQ  R8, 144(AX)
  1147
  1148	// Iteration 19
  1149	MULXQ 152(CX), R8, BX
  1150	ADCXQ DI, R8
  1151	ADOXQ 152(AX), R8
  1152	MOVQ  R8, 152(AX)
  1153
  1154	// Iteration 20
  1155	MULXQ 160(CX), R8, DI
  1156	ADCXQ BX, R8
  1157	ADOXQ 160(AX), R8
  1158	MOVQ  R8, 160(AX)
  1159
  1160	// Iteration 21
  1161	MULXQ 168(CX), R8, BX
  1162	ADCXQ DI, R8
  1163	ADOXQ 168(AX), R8
  1164	MOVQ  R8, 168(AX)
  1165
  1166	// Iteration 22
  1167	MULXQ 176(CX), R8, DI
  1168	ADCXQ BX, R8
  1169	ADOXQ 176(AX), R8
  1170	MOVQ  R8, 176(AX)
  1171
  1172	// Iteration 23
  1173	MULXQ 184(CX), R8, BX
  1174	ADCXQ DI, R8
  1175	ADOXQ 184(AX), R8
  1176	MOVQ  R8, 184(AX)
  1177
  1178	// Iteration 24
  1179	MULXQ 192(CX), R8, DI
  1180	ADCXQ BX, R8
  1181	ADOXQ 192(AX), R8
  1182	MOVQ  R8, 192(AX)
  1183
  1184	// Iteration 25
  1185	MULXQ 200(CX), R8, BX
  1186	ADCXQ DI, R8
  1187	ADOXQ 200(AX), R8
  1188	MOVQ  R8, 200(AX)
  1189
  1190	// Iteration 26
  1191	MULXQ 208(CX), R8, DI
  1192	ADCXQ BX, R8
  1193	ADOXQ 208(AX), R8
  1194	MOVQ  R8, 208(AX)
  1195
  1196	// Iteration 27
  1197	MULXQ 216(CX), R8, BX
  1198	ADCXQ DI, R8
  1199	ADOXQ 216(AX), R8
  1200	MOVQ  R8, 216(AX)
  1201
  1202	// Iteration 28
  1203	MULXQ 224(CX), R8, DI
  1204	ADCXQ BX, R8
  1205	ADOXQ 224(AX), R8
  1206	MOVQ  R8, 224(AX)
  1207
  1208	// Iteration 29
  1209	MULXQ 232(CX), R8, BX
  1210	ADCXQ DI, R8
  1211	ADOXQ 232(AX), R8
  1212	MOVQ  R8, 232(AX)
  1213
  1214	// Iteration 30
  1215	MULXQ 240(CX), R8, DI
  1216	ADCXQ BX, R8
  1217	ADOXQ 240(AX), R8
  1218	MOVQ  R8, 240(AX)
  1219
  1220	// Iteration 31
  1221	MULXQ 248(CX), R8, BX
  1222	ADCXQ DI, R8
  1223	ADOXQ 248(AX), R8
  1224	MOVQ  R8, 248(AX)
  1225
  1226	// Add back carry flags and return
  1227	ADCXQ SI, BX
  1228	ADOXQ SI, BX
  1229	MOVQ  BX, c+24(FP)
  1230	RET

View as plain text