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 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
     95