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