Home | History | Annotate | Download | only in curve25519
      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
    192