ab14563022
Hopefully this can be replaced with a standard library version later. BUG=571231 Change-Id: I61ae1d9d057c6d9e1b92128042109758beccc7ff Reviewed-on: https://boringssl-review.googlesource.com/6776 Reviewed-by: Adam Langley <agl@google.com>
95 lines
1.5 KiB
ArmAsm
95 lines
1.5 KiB
ArmAsm
// Copyright 2012 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// This code was translated into a form compatible with 6a from the public
|
|
// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
|
|
|
|
// +build amd64,!gccgo,!appengine
|
|
|
|
// func freeze(inout *[5]uint64)
|
|
TEXT ·freeze(SB),7,$96-8
|
|
MOVQ inout+0(FP), DI
|
|
|
|
MOVQ SP,R11
|
|
MOVQ $31,CX
|
|
NOTQ CX
|
|
ANDQ CX,SP
|
|
ADDQ $32,SP
|
|
|
|
MOVQ R11,0(SP)
|
|
MOVQ R12,8(SP)
|
|
MOVQ R13,16(SP)
|
|
MOVQ R14,24(SP)
|
|
MOVQ R15,32(SP)
|
|
MOVQ BX,40(SP)
|
|
MOVQ BP,48(SP)
|
|
MOVQ 0(DI),SI
|
|
MOVQ 8(DI),DX
|
|
MOVQ 16(DI),CX
|
|
MOVQ 24(DI),R8
|
|
MOVQ 32(DI),R9
|
|
MOVQ ·REDMASK51(SB),AX
|
|
MOVQ AX,R10
|
|
SUBQ $18,R10
|
|
MOVQ $3,R11
|
|
REDUCELOOP:
|
|
MOVQ SI,R12
|
|
SHRQ $51,R12
|
|
ANDQ AX,SI
|
|
ADDQ R12,DX
|
|
MOVQ DX,R12
|
|
SHRQ $51,R12
|
|
ANDQ AX,DX
|
|
ADDQ R12,CX
|
|
MOVQ CX,R12
|
|
SHRQ $51,R12
|
|
ANDQ AX,CX
|
|
ADDQ R12,R8
|
|
MOVQ R8,R12
|
|
SHRQ $51,R12
|
|
ANDQ AX,R8
|
|
ADDQ R12,R9
|
|
MOVQ R9,R12
|
|
SHRQ $51,R12
|
|
ANDQ AX,R9
|
|
IMUL3Q $19,R12,R12
|
|
ADDQ R12,SI
|
|
SUBQ $1,R11
|
|
JA REDUCELOOP
|
|
MOVQ $1,R12
|
|
CMPQ R10,SI
|
|
CMOVQLT R11,R12
|
|
CMPQ AX,DX
|
|
CMOVQNE R11,R12
|
|
CMPQ AX,CX
|
|
CMOVQNE R11,R12
|
|
CMPQ AX,R8
|
|
CMOVQNE R11,R12
|
|
CMPQ AX,R9
|
|
CMOVQNE R11,R12
|
|
NEGQ R12
|
|
ANDQ R12,AX
|
|
ANDQ R12,R10
|
|
SUBQ R10,SI
|
|
SUBQ AX,DX
|
|
SUBQ AX,CX
|
|
SUBQ AX,R8
|
|
SUBQ AX,R9
|
|
MOVQ SI,0(DI)
|
|
MOVQ DX,8(DI)
|
|
MOVQ CX,16(DI)
|
|
MOVQ R8,24(DI)
|
|
MOVQ R9,32(DI)
|
|
MOVQ 0(SP),R11
|
|
MOVQ 8(SP),R12
|
|
MOVQ 16(SP),R13
|
|
MOVQ 24(SP),R14
|
|
MOVQ 32(SP),R15
|
|
MOVQ 40(SP),BX
|
|
MOVQ 48(SP),BP
|
|
MOVQ R11,SP
|
|
MOVQ DI,AX
|
|
MOVQ SI,DX
|
|
RET
|