github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/src/golang.org/x/crypto/curve25519/freeze_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 freeze(inout *[5]uint64)
    11  TEXT ·freeze(SB),7,$96-8
    12  	MOVQ inout+0(FP), DI
    13  
    14  	MOVQ SP,R11
    15  	MOVQ $31,CX
    16  	NOTQ CX
    17  	ANDQ CX,SP
    18  	ADDQ $32,SP
    19  
    20  	MOVQ R11,0(SP)
    21  	MOVQ R12,8(SP)
    22  	MOVQ R13,16(SP)
    23  	MOVQ R14,24(SP)
    24  	MOVQ R15,32(SP)
    25  	MOVQ BX,40(SP)
    26  	MOVQ BP,48(SP)
    27  	MOVQ 0(DI),SI
    28  	MOVQ 8(DI),DX
    29  	MOVQ 16(DI),CX
    30  	MOVQ 24(DI),R8
    31  	MOVQ 32(DI),R9
    32  	MOVQ ·REDMASK51(SB),AX
    33  	MOVQ AX,R10
    34  	SUBQ $18,R10
    35  	MOVQ $3,R11
    36  REDUCELOOP:
    37  	MOVQ SI,R12
    38  	SHRQ $51,R12
    39  	ANDQ AX,SI
    40  	ADDQ R12,DX
    41  	MOVQ DX,R12
    42  	SHRQ $51,R12
    43  	ANDQ AX,DX
    44  	ADDQ R12,CX
    45  	MOVQ CX,R12
    46  	SHRQ $51,R12
    47  	ANDQ AX,CX
    48  	ADDQ R12,R8
    49  	MOVQ R8,R12
    50  	SHRQ $51,R12
    51  	ANDQ AX,R8
    52  	ADDQ R12,R9
    53  	MOVQ R9,R12
    54  	SHRQ $51,R12
    55  	ANDQ AX,R9
    56  	IMUL3Q $19,R12,R12
    57  	ADDQ R12,SI
    58  	SUBQ $1,R11
    59  	JA REDUCELOOP
    60  	MOVQ $1,R12
    61  	CMPQ R10,SI
    62  	CMOVQLT R11,R12
    63  	CMPQ AX,DX
    64  	CMOVQNE R11,R12
    65  	CMPQ AX,CX
    66  	CMOVQNE R11,R12
    67  	CMPQ AX,R8
    68  	CMOVQNE R11,R12
    69  	CMPQ AX,R9
    70  	CMOVQNE R11,R12
    71  	NEGQ R12
    72  	ANDQ R12,AX
    73  	ANDQ R12,R10
    74  	SUBQ R10,SI
    75  	SUBQ AX,DX
    76  	SUBQ AX,CX
    77  	SUBQ AX,R8
    78  	SUBQ AX,R9
    79  	MOVQ SI,0(DI)
    80  	MOVQ DX,8(DI)
    81  	MOVQ CX,16(DI)
    82  	MOVQ R8,24(DI)
    83  	MOVQ R9,32(DI)
    84  	MOVQ 0(SP),R11
    85  	MOVQ 8(SP),R12
    86  	MOVQ 16(SP),R13
    87  	MOVQ 24(SP),R14
    88  	MOVQ 32(SP),R15
    89  	MOVQ 40(SP),BX
    90  	MOVQ 48(SP),BP
    91  	MOVQ R11,SP
    92  	MOVQ DI,AX
    93  	MOVQ SI,DX
    94  	RET