github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/src/golang.org/x/crypto/curve25519/mul_amd64.s (about)

     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  
     5  // This code was translated into a form compatible with 6a from the public
     6  // domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
     7  
     8  // +build amd64,!gccgo,!appengine
     9  
    10  // func mul(dest, a, b *[5]uint64)
    11  TEXT ·mul(SB),0,$128-24
    12  	MOVQ dest+0(FP), DI
    13  	MOVQ a+8(FP), SI
    14  	MOVQ b+16(FP), DX
    15  
    16  	MOVQ SP,R11
    17  	MOVQ $31,CX
    18  	NOTQ CX
    19  	ANDQ CX,SP
    20  	ADDQ $32,SP
    21  
    22  	MOVQ R11,0(SP)
    23  	MOVQ R12,8(SP)
    24  	MOVQ R13,16(SP)
    25  	MOVQ R14,24(SP)
    26  	MOVQ R15,32(SP)
    27  	MOVQ BX,40(SP)
    28  	MOVQ BP,48(SP)
    29  	MOVQ DI,56(SP)
    30  	MOVQ DX,CX
    31  	MOVQ 24(SI),DX
    32  	IMUL3Q $19,DX,AX
    33  	MOVQ AX,64(SP)
    34  	MULQ 16(CX)
    35  	MOVQ AX,R8
    36  	MOVQ DX,R9
    37  	MOVQ 32(SI),DX
    38  	IMUL3Q $19,DX,AX
    39  	MOVQ AX,72(SP)
    40  	MULQ 8(CX)
    41  	ADDQ AX,R8
    42  	ADCQ DX,R9
    43  	MOVQ 0(SI),AX
    44  	MULQ 0(CX)
    45  	ADDQ AX,R8
    46  	ADCQ DX,R9
    47  	MOVQ 0(SI),AX
    48  	MULQ 8(CX)
    49  	MOVQ AX,R10
    50  	MOVQ DX,R11
    51  	MOVQ 0(SI),AX
    52  	MULQ 16(CX)
    53  	MOVQ AX,R12
    54  	MOVQ DX,R13
    55  	MOVQ 0(SI),AX
    56  	MULQ 24(CX)
    57  	MOVQ AX,R14
    58  	MOVQ DX,R15
    59  	MOVQ 0(SI),AX
    60  	MULQ 32(CX)
    61  	MOVQ AX,BX
    62  	MOVQ DX,BP
    63  	MOVQ 8(SI),AX
    64  	MULQ 0(CX)
    65  	ADDQ AX,R10
    66  	ADCQ DX,R11
    67  	MOVQ 8(SI),AX
    68  	MULQ 8(CX)
    69  	ADDQ AX,R12
    70  	ADCQ DX,R13
    71  	MOVQ 8(SI),AX
    72  	MULQ 16(CX)
    73  	ADDQ AX,R14
    74  	ADCQ DX,R15
    75  	MOVQ 8(SI),AX
    76  	MULQ 24(CX)
    77  	ADDQ AX,BX
    78  	ADCQ DX,BP
    79  	MOVQ 8(SI),DX
    80  	IMUL3Q $19,DX,AX
    81  	MULQ 32(CX)
    82  	ADDQ AX,R8
    83  	ADCQ DX,R9
    84  	MOVQ 16(SI),AX
    85  	MULQ 0(CX)
    86  	ADDQ AX,R12
    87  	ADCQ DX,R13
    88  	MOVQ 16(SI),AX
    89  	MULQ 8(CX)
    90  	ADDQ AX,R14
    91  	ADCQ DX,R15
    92  	MOVQ 16(SI),AX
    93  	MULQ 16(CX)
    94  	ADDQ AX,BX
    95  	ADCQ DX,BP
    96  	MOVQ 16(SI),DX
    97  	IMUL3Q $19,DX,AX
    98  	MULQ 24(CX)
    99  	ADDQ AX,R8
   100  	ADCQ DX,R9
   101  	MOVQ 16(SI),DX
   102  	IMUL3Q $19,DX,AX
   103  	MULQ 32(CX)
   104  	ADDQ AX,R10
   105  	ADCQ DX,R11
   106  	MOVQ 24(SI),AX
   107  	MULQ 0(CX)
   108  	ADDQ AX,R14
   109  	ADCQ DX,R15
   110  	MOVQ 24(SI),AX
   111  	MULQ 8(CX)
   112  	ADDQ AX,BX
   113  	ADCQ DX,BP
   114  	MOVQ 64(SP),AX
   115  	MULQ 24(CX)
   116  	ADDQ AX,R10
   117  	ADCQ DX,R11
   118  	MOVQ 64(SP),AX
   119  	MULQ 32(CX)
   120  	ADDQ AX,R12
   121  	ADCQ DX,R13
   122  	MOVQ 32(SI),AX
   123  	MULQ 0(CX)
   124  	ADDQ AX,BX
   125  	ADCQ DX,BP
   126  	MOVQ 72(SP),AX
   127  	MULQ 16(CX)
   128  	ADDQ AX,R10
   129  	ADCQ DX,R11
   130  	MOVQ 72(SP),AX
   131  	MULQ 24(CX)
   132  	ADDQ AX,R12
   133  	ADCQ DX,R13
   134  	MOVQ 72(SP),AX
   135  	MULQ 32(CX)
   136  	ADDQ AX,R14
   137  	ADCQ DX,R15
   138  	MOVQ ·REDMASK51(SB),SI
   139  	SHLQ $13,R9:R8
   140  	ANDQ SI,R8
   141  	SHLQ $13,R11:R10
   142  	ANDQ SI,R10
   143  	ADDQ R9,R10
   144  	SHLQ $13,R13:R12
   145  	ANDQ SI,R12
   146  	ADDQ R11,R12
   147  	SHLQ $13,R15:R14
   148  	ANDQ SI,R14
   149  	ADDQ R13,R14
   150  	SHLQ $13,BP:BX
   151  	ANDQ SI,BX
   152  	ADDQ R15,BX
   153  	IMUL3Q $19,BP,DX
   154  	ADDQ DX,R8
   155  	MOVQ R8,DX
   156  	SHRQ $51,DX
   157  	ADDQ R10,DX
   158  	MOVQ DX,CX
   159  	SHRQ $51,DX
   160  	ANDQ SI,R8
   161  	ADDQ R12,DX
   162  	MOVQ DX,R9
   163  	SHRQ $51,DX
   164  	ANDQ SI,CX
   165  	ADDQ R14,DX
   166  	MOVQ DX,AX
   167  	SHRQ $51,DX
   168  	ANDQ SI,R9
   169  	ADDQ BX,DX
   170  	MOVQ DX,R10
   171  	SHRQ $51,DX
   172  	ANDQ SI,AX
   173  	IMUL3Q $19,DX,DX
   174  	ADDQ DX,R8
   175  	ANDQ SI,R10
   176  	MOVQ R8,0(DI)
   177  	MOVQ CX,8(DI)
   178  	MOVQ R9,16(DI)
   179  	MOVQ AX,24(DI)
   180  	MOVQ R10,32(DI)
   181  	MOVQ 0(SP),R11
   182  	MOVQ 8(SP),R12
   183  	MOVQ 16(SP),R13
   184  	MOVQ 24(SP),R14
   185  	MOVQ 32(SP),R15
   186  	MOVQ 40(SP),BX
   187  	MOVQ 48(SP),BP
   188  	MOVQ R11,SP
   189  	MOVQ DI,AX
   190  	MOVQ SI,DX
   191  	RET