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