OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / crypto / curve25519 / freeze_amd64.s
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: https://bench.cr.yp.to/supercop.html
7
8 // +build amd64,!gccgo,!appengine
9
10 #include "const_amd64.h"
11
12 // func freeze(inout *[5]uint64)
13 TEXT ·freeze(SB),7,$0-8
14         MOVQ inout+0(FP), DI
15
16         MOVQ 0(DI),SI
17         MOVQ 8(DI),DX
18         MOVQ 16(DI),CX
19         MOVQ 24(DI),R8
20         MOVQ 32(DI),R9
21         MOVQ $REDMASK51,AX
22         MOVQ AX,R10
23         SUBQ $18,R10
24         MOVQ $3,R11
25 REDUCELOOP:
26         MOVQ SI,R12
27         SHRQ $51,R12
28         ANDQ AX,SI
29         ADDQ R12,DX
30         MOVQ DX,R12
31         SHRQ $51,R12
32         ANDQ AX,DX
33         ADDQ R12,CX
34         MOVQ CX,R12
35         SHRQ $51,R12
36         ANDQ AX,CX
37         ADDQ R12,R8
38         MOVQ R8,R12
39         SHRQ $51,R12
40         ANDQ AX,R8
41         ADDQ R12,R9
42         MOVQ R9,R12
43         SHRQ $51,R12
44         ANDQ AX,R9
45         IMUL3Q $19,R12,R12
46         ADDQ R12,SI
47         SUBQ $1,R11
48         JA REDUCELOOP
49         MOVQ $1,R12
50         CMPQ R10,SI
51         CMOVQLT R11,R12
52         CMPQ AX,DX
53         CMOVQNE R11,R12
54         CMPQ AX,CX
55         CMOVQNE R11,R12
56         CMPQ AX,R8
57         CMOVQNE R11,R12
58         CMPQ AX,R9
59         CMOVQNE R11,R12
60         NEGQ R12
61         ANDQ R12,AX
62         ANDQ R12,R10
63         SUBQ R10,SI
64         SUBQ AX,DX
65         SUBQ AX,CX
66         SUBQ AX,R8
67         SUBQ AX,R9
68         MOVQ SI,0(DI)
69         MOVQ DX,8(DI)
70         MOVQ CX,16(DI)
71         MOVQ R8,24(DI)
72         MOVQ R9,32(DI)
73         RET