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 square(out, in *[5]uint64)
     11 TEXT square(SB),7,$96-16
     12 	MOVQ out+0(FP), DI
     13 	MOVQ in+8(FP), SI
     14 
     15 	MOVQ SP,R11
     16 	MOVQ $31,CX
     17 	NOTQ CX
     18 	ANDQ CX,SP
     19 	ADDQ $32, SP
     20 
     21 	MOVQ R11,0(SP)
     22 	MOVQ R12,8(SP)
     23 	MOVQ R13,16(SP)
     24 	MOVQ R14,24(SP)
     25 	MOVQ R15,32(SP)
     26 	MOVQ BX,40(SP)
     27 	MOVQ BP,48(SP)
     28 	MOVQ 0(SI),AX
     29 	MULQ 0(SI)
     30 	MOVQ AX,CX
     31 	MOVQ DX,R8
     32 	MOVQ 0(SI),AX
     33 	SHLQ $1,AX
     34 	MULQ 8(SI)
     35 	MOVQ AX,R9
     36 	MOVQ DX,R10
     37 	MOVQ 0(SI),AX
     38 	SHLQ $1,AX
     39 	MULQ 16(SI)
     40 	MOVQ AX,R11
     41 	MOVQ DX,R12
     42 	MOVQ 0(SI),AX
     43 	SHLQ $1,AX
     44 	MULQ 24(SI)
     45 	MOVQ AX,R13
     46 	MOVQ DX,R14
     47 	MOVQ 0(SI),AX
     48 	SHLQ $1,AX
     49 	MULQ 32(SI)
     50 	MOVQ AX,R15
     51 	MOVQ DX,BX
     52 	MOVQ 8(SI),AX
     53 	MULQ 8(SI)
     54 	ADDQ AX,R11
     55 	ADCQ DX,R12
     56 	MOVQ 8(SI),AX
     57 	SHLQ $1,AX
     58 	MULQ 16(SI)
     59 	ADDQ AX,R13
     60 	ADCQ DX,R14
     61 	MOVQ 8(SI),AX
     62 	SHLQ $1,AX
     63 	MULQ 24(SI)
     64 	ADDQ AX,R15
     65 	ADCQ DX,BX
     66 	MOVQ 8(SI),DX
     67 	IMUL3Q $38,DX,AX
     68 	MULQ 32(SI)
     69 	ADDQ AX,CX
     70 	ADCQ DX,R8
     71 	MOVQ 16(SI),AX
     72 	MULQ 16(SI)
     73 	ADDQ AX,R15
     74 	ADCQ DX,BX
     75 	MOVQ 16(SI),DX
     76 	IMUL3Q $38,DX,AX
     77 	MULQ 24(SI)
     78 	ADDQ AX,CX
     79 	ADCQ DX,R8
     80 	MOVQ 16(SI),DX
     81 	IMUL3Q $38,DX,AX
     82 	MULQ 32(SI)
     83 	ADDQ AX,R9
     84 	ADCQ DX,R10
     85 	MOVQ 24(SI),DX
     86 	IMUL3Q $19,DX,AX
     87 	MULQ 24(SI)
     88 	ADDQ AX,R9
     89 	ADCQ DX,R10
     90 	MOVQ 24(SI),DX
     91 	IMUL3Q $38,DX,AX
     92 	MULQ 32(SI)
     93 	ADDQ AX,R11
     94 	ADCQ DX,R12
     95 	MOVQ 32(SI),DX
     96 	IMUL3Q $19,DX,AX
     97 	MULQ 32(SI)
     98 	ADDQ AX,R13
     99 	ADCQ DX,R14
    100 	MOVQ REDMASK51(SB),SI
    101 	SHLQ $13,R8:CX
    102 	ANDQ SI,CX
    103 	SHLQ $13,R10:R9
    104 	ANDQ SI,R9
    105 	ADDQ R8,R9
    106 	SHLQ $13,R12:R11
    107 	ANDQ SI,R11
    108 	ADDQ R10,R11
    109 	SHLQ $13,R14:R13
    110 	ANDQ SI,R13
    111 	ADDQ R12,R13
    112 	SHLQ $13,BX:R15
    113 	ANDQ SI,R15
    114 	ADDQ R14,R15
    115 	IMUL3Q $19,BX,DX
    116 	ADDQ DX,CX
    117 	MOVQ CX,DX
    118 	SHRQ $51,DX
    119 	ADDQ R9,DX
    120 	ANDQ SI,CX
    121 	MOVQ DX,R8
    122 	SHRQ $51,DX
    123 	ADDQ R11,DX
    124 	ANDQ SI,R8
    125 	MOVQ DX,R9
    126 	SHRQ $51,DX
    127 	ADDQ R13,DX
    128 	ANDQ SI,R9
    129 	MOVQ DX,AX
    130 	SHRQ $51,DX
    131 	ADDQ R15,DX
    132 	ANDQ SI,AX
    133 	MOVQ DX,R10
    134 	SHRQ $51,DX
    135 	IMUL3Q $19,DX,DX
    136 	ADDQ DX,CX
    137 	ANDQ SI,R10
    138 	MOVQ CX,0(DI)
    139 	MOVQ R8,8(DI)
    140 	MOVQ R9,16(DI)
    141 	MOVQ AX,24(DI)
    142 	MOVQ R10,32(DI)
    143 	MOVQ 0(SP),R11
    144 	MOVQ 8(SP),R12
    145 	MOVQ 16(SP),R13
    146 	MOVQ 24(SP),R14
    147 	MOVQ 32(SP),R15
    148 	MOVQ 40(SP),BX
    149 	MOVQ 48(SP),BP
    150 	MOVQ R11,SP
    151 	MOVQ DI,AX
    152 	MOVQ SI,DX
    153 	RET
    154