498 lines
8.3 KiB
ArmAsm
498 lines
8.3 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 poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key)
|
|
TEXT ·poly1305(SB),0,$224-32
|
|
MOVQ out+0(FP),DI
|
|
MOVQ m+8(FP),SI
|
|
MOVQ mlen+16(FP),DX
|
|
MOVQ key+24(FP),CX
|
|
|
|
MOVQ SP,R11
|
|
MOVQ $31,R9
|
|
NOTQ R9
|
|
ANDQ R9,SP
|
|
ADDQ $32,SP
|
|
|
|
MOVQ R11,32(SP)
|
|
MOVQ R12,40(SP)
|
|
MOVQ R13,48(SP)
|
|
MOVQ R14,56(SP)
|
|
MOVQ R15,64(SP)
|
|
MOVQ BX,72(SP)
|
|
MOVQ BP,80(SP)
|
|
FLDCW ·ROUNDING(SB)
|
|
MOVL 0(CX),R8
|
|
MOVL 4(CX),R9
|
|
MOVL 8(CX),AX
|
|
MOVL 12(CX),R10
|
|
MOVQ DI,88(SP)
|
|
MOVQ CX,96(SP)
|
|
MOVL $0X43300000,108(SP)
|
|
MOVL $0X45300000,116(SP)
|
|
MOVL $0X47300000,124(SP)
|
|
MOVL $0X49300000,132(SP)
|
|
ANDL $0X0FFFFFFF,R8
|
|
ANDL $0X0FFFFFFC,R9
|
|
ANDL $0X0FFFFFFC,AX
|
|
ANDL $0X0FFFFFFC,R10
|
|
MOVL R8,104(SP)
|
|
MOVL R9,112(SP)
|
|
MOVL AX,120(SP)
|
|
MOVL R10,128(SP)
|
|
FMOVD 104(SP), F0
|
|
FSUBD ·DOFFSET0(SB), F0
|
|
FMOVD 112(SP), F0
|
|
FSUBD ·DOFFSET1(SB), F0
|
|
FMOVD 120(SP), F0
|
|
FSUBD ·DOFFSET2(SB), F0
|
|
FMOVD 128(SP), F0
|
|
FSUBD ·DOFFSET3(SB), F0
|
|
FXCHD F0, F3
|
|
FMOVDP F0, 136(SP)
|
|
FXCHD F0, F1
|
|
FMOVD F0, 144(SP)
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVDP F0, 152(SP)
|
|
FMOVD F0, 160(SP)
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVDP F0, 168(SP)
|
|
FMOVD F0, 176(SP)
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVDP F0, 184(SP)
|
|
FLDZ
|
|
FLDZ
|
|
FLDZ
|
|
FLDZ
|
|
CMPQ DX,$16
|
|
JB ADDATMOST15BYTES
|
|
INITIALATLEAST16BYTES:
|
|
MOVL 12(SI),DI
|
|
MOVL 8(SI),CX
|
|
MOVL 4(SI),R8
|
|
MOVL 0(SI),R9
|
|
MOVL DI,128(SP)
|
|
MOVL CX,120(SP)
|
|
MOVL R8,112(SP)
|
|
MOVL R9,104(SP)
|
|
ADDQ $16,SI
|
|
SUBQ $16,DX
|
|
FXCHD F0, F3
|
|
FADDD 128(SP), F0
|
|
FSUBD ·DOFFSET3MINUSTWO128(SB), F0
|
|
FXCHD F0, F1
|
|
FADDD 112(SP), F0
|
|
FSUBD ·DOFFSET1(SB), F0
|
|
FXCHD F0, F2
|
|
FADDD 120(SP), F0
|
|
FSUBD ·DOFFSET2(SB), F0
|
|
FXCHD F0, F3
|
|
FADDD 104(SP), F0
|
|
FSUBD ·DOFFSET0(SB), F0
|
|
CMPQ DX,$16
|
|
JB MULTIPLYADDATMOST15BYTES
|
|
MULTIPLYADDATLEAST16BYTES:
|
|
MOVL 12(SI),DI
|
|
MOVL 8(SI),CX
|
|
MOVL 4(SI),R8
|
|
MOVL 0(SI),R9
|
|
MOVL DI,128(SP)
|
|
MOVL CX,120(SP)
|
|
MOVL R8,112(SP)
|
|
MOVL R9,104(SP)
|
|
ADDQ $16,SI
|
|
SUBQ $16,DX
|
|
FMOVD ·ALPHA130(SB), F0
|
|
FADDD F2,F0
|
|
FSUBD ·ALPHA130(SB), F0
|
|
FSUBD F0,F2
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVD ·ALPHA32(SB), F0
|
|
FADDD F2,F0
|
|
FSUBD ·ALPHA32(SB), F0
|
|
FSUBD F0,F2
|
|
FXCHD F0, F2
|
|
FADDDP F0,F1
|
|
FMOVD ·ALPHA64(SB), F0
|
|
FADDD F4,F0
|
|
FSUBD ·ALPHA64(SB), F0
|
|
FSUBD F0,F4
|
|
FMOVD ·ALPHA96(SB), F0
|
|
FADDD F6,F0
|
|
FSUBD ·ALPHA96(SB), F0
|
|
FSUBD F0,F6
|
|
FXCHD F0, F6
|
|
FADDDP F0,F1
|
|
FXCHD F0, F3
|
|
FADDDP F0,F5
|
|
FXCHD F0, F3
|
|
FADDDP F0,F1
|
|
FMOVD 176(SP), F0
|
|
FMULD F3,F0
|
|
FMOVD 160(SP), F0
|
|
FMULD F4,F0
|
|
FMOVD 144(SP), F0
|
|
FMULD F5,F0
|
|
FMOVD 136(SP), F0
|
|
FMULDP F0,F6
|
|
FMOVD 160(SP), F0
|
|
FMULD F4,F0
|
|
FADDDP F0,F3
|
|
FMOVD 144(SP), F0
|
|
FMULD F4,F0
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F4,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULDP F0,F4
|
|
FXCHD F0, F3
|
|
FADDDP F0,F5
|
|
FMOVD 144(SP), F0
|
|
FMULD F4,F0
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F4,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULD F4,F0
|
|
FADDDP F0,F3
|
|
FMOVD 168(SP), F0
|
|
FMULDP F0,F4
|
|
FXCHD F0, F3
|
|
FADDDP F0,F4
|
|
FMOVD 136(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F1
|
|
FXCHD F0, F3
|
|
FMOVD 184(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F3
|
|
FXCHD F0, F1
|
|
FMOVD 168(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F1
|
|
FMOVD 152(SP), F0
|
|
FMULDP F0,F5
|
|
FXCHD F0, F4
|
|
FADDDP F0,F1
|
|
CMPQ DX,$16
|
|
FXCHD F0, F2
|
|
FMOVD 128(SP), F0
|
|
FSUBD ·DOFFSET3MINUSTWO128(SB), F0
|
|
FADDDP F0,F1
|
|
FXCHD F0, F1
|
|
FMOVD 120(SP), F0
|
|
FSUBD ·DOFFSET2(SB), F0
|
|
FADDDP F0,F1
|
|
FXCHD F0, F3
|
|
FMOVD 112(SP), F0
|
|
FSUBD ·DOFFSET1(SB), F0
|
|
FADDDP F0,F1
|
|
FXCHD F0, F2
|
|
FMOVD 104(SP), F0
|
|
FSUBD ·DOFFSET0(SB), F0
|
|
FADDDP F0,F1
|
|
JAE MULTIPLYADDATLEAST16BYTES
|
|
MULTIPLYADDATMOST15BYTES:
|
|
FMOVD ·ALPHA130(SB), F0
|
|
FADDD F2,F0
|
|
FSUBD ·ALPHA130(SB), F0
|
|
FSUBD F0,F2
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVD ·ALPHA32(SB), F0
|
|
FADDD F2,F0
|
|
FSUBD ·ALPHA32(SB), F0
|
|
FSUBD F0,F2
|
|
FMOVD ·ALPHA64(SB), F0
|
|
FADDD F5,F0
|
|
FSUBD ·ALPHA64(SB), F0
|
|
FSUBD F0,F5
|
|
FMOVD ·ALPHA96(SB), F0
|
|
FADDD F7,F0
|
|
FSUBD ·ALPHA96(SB), F0
|
|
FSUBD F0,F7
|
|
FXCHD F0, F7
|
|
FADDDP F0,F1
|
|
FXCHD F0, F5
|
|
FADDDP F0,F1
|
|
FXCHD F0, F3
|
|
FADDDP F0,F5
|
|
FADDDP F0,F1
|
|
FMOVD 176(SP), F0
|
|
FMULD F1,F0
|
|
FMOVD 160(SP), F0
|
|
FMULD F2,F0
|
|
FMOVD 144(SP), F0
|
|
FMULD F3,F0
|
|
FMOVD 136(SP), F0
|
|
FMULDP F0,F4
|
|
FMOVD 160(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F3
|
|
FMOVD 144(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULDP F0,F5
|
|
FXCHD F0, F4
|
|
FADDDP F0,F3
|
|
FMOVD 144(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F4
|
|
FMOVD 168(SP), F0
|
|
FMULDP F0,F5
|
|
FXCHD F0, F4
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F4
|
|
FMOVD 168(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F3
|
|
FMOVD 152(SP), F0
|
|
FMULDP F0,F5
|
|
FXCHD F0, F4
|
|
FADDDP F0,F1
|
|
ADDATMOST15BYTES:
|
|
CMPQ DX,$0
|
|
JE NOMOREBYTES
|
|
MOVL $0,0(SP)
|
|
MOVL $0, 4 (SP)
|
|
MOVL $0, 8 (SP)
|
|
MOVL $0, 12 (SP)
|
|
LEAQ 0(SP),DI
|
|
MOVQ DX,CX
|
|
REP; MOVSB
|
|
MOVB $1,0(DI)
|
|
MOVL 12 (SP),DI
|
|
MOVL 8 (SP),SI
|
|
MOVL 4 (SP),DX
|
|
MOVL 0(SP),CX
|
|
MOVL DI,128(SP)
|
|
MOVL SI,120(SP)
|
|
MOVL DX,112(SP)
|
|
MOVL CX,104(SP)
|
|
FXCHD F0, F3
|
|
FADDD 128(SP), F0
|
|
FSUBD ·DOFFSET3(SB), F0
|
|
FXCHD F0, F2
|
|
FADDD 120(SP), F0
|
|
FSUBD ·DOFFSET2(SB), F0
|
|
FXCHD F0, F1
|
|
FADDD 112(SP), F0
|
|
FSUBD ·DOFFSET1(SB), F0
|
|
FXCHD F0, F3
|
|
FADDD 104(SP), F0
|
|
FSUBD ·DOFFSET0(SB), F0
|
|
FMOVD ·ALPHA130(SB), F0
|
|
FADDD F3,F0
|
|
FSUBD ·ALPHA130(SB), F0
|
|
FSUBD F0,F3
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVD ·ALPHA32(SB), F0
|
|
FADDD F2,F0
|
|
FSUBD ·ALPHA32(SB), F0
|
|
FSUBD F0,F2
|
|
FMOVD ·ALPHA64(SB), F0
|
|
FADDD F6,F0
|
|
FSUBD ·ALPHA64(SB), F0
|
|
FSUBD F0,F6
|
|
FMOVD ·ALPHA96(SB), F0
|
|
FADDD F5,F0
|
|
FSUBD ·ALPHA96(SB), F0
|
|
FSUBD F0,F5
|
|
FXCHD F0, F4
|
|
FADDDP F0,F3
|
|
FXCHD F0, F6
|
|
FADDDP F0,F1
|
|
FXCHD F0, F3
|
|
FADDDP F0,F5
|
|
FXCHD F0, F3
|
|
FADDDP F0,F1
|
|
FMOVD 176(SP), F0
|
|
FMULD F3,F0
|
|
FMOVD 160(SP), F0
|
|
FMULD F4,F0
|
|
FMOVD 144(SP), F0
|
|
FMULD F5,F0
|
|
FMOVD 136(SP), F0
|
|
FMULDP F0,F6
|
|
FMOVD 160(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F3
|
|
FMOVD 144(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F5,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULDP F0,F5
|
|
FXCHD F0, F4
|
|
FADDDP F0,F5
|
|
FMOVD 144(SP), F0
|
|
FMULD F6,F0
|
|
FADDDP F0,F2
|
|
FMOVD 136(SP), F0
|
|
FMULD F6,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULD F6,F0
|
|
FADDDP F0,F4
|
|
FMOVD 168(SP), F0
|
|
FMULDP F0,F6
|
|
FXCHD F0, F5
|
|
FADDDP F0,F4
|
|
FMOVD 136(SP), F0
|
|
FMULD F2,F0
|
|
FADDDP F0,F1
|
|
FMOVD 184(SP), F0
|
|
FMULD F2,F0
|
|
FADDDP F0,F5
|
|
FMOVD 168(SP), F0
|
|
FMULD F2,F0
|
|
FADDDP F0,F3
|
|
FMOVD 152(SP), F0
|
|
FMULDP F0,F2
|
|
FXCHD F0, F1
|
|
FADDDP F0,F3
|
|
FXCHD F0, F3
|
|
FXCHD F0, F2
|
|
NOMOREBYTES:
|
|
MOVL $0,R10
|
|
FMOVD ·ALPHA130(SB), F0
|
|
FADDD F4,F0
|
|
FSUBD ·ALPHA130(SB), F0
|
|
FSUBD F0,F4
|
|
FMULD ·SCALE(SB), F0
|
|
FMOVD ·ALPHA32(SB), F0
|
|
FADDD F2,F0
|
|
FSUBD ·ALPHA32(SB), F0
|
|
FSUBD F0,F2
|
|
FMOVD ·ALPHA64(SB), F0
|
|
FADDD F4,F0
|
|
FSUBD ·ALPHA64(SB), F0
|
|
FSUBD F0,F4
|
|
FMOVD ·ALPHA96(SB), F0
|
|
FADDD F6,F0
|
|
FSUBD ·ALPHA96(SB), F0
|
|
FXCHD F0, F6
|
|
FSUBD F6,F0
|
|
FXCHD F0, F4
|
|
FADDDP F0,F3
|
|
FXCHD F0, F4
|
|
FADDDP F0,F1
|
|
FXCHD F0, F2
|
|
FADDDP F0,F3
|
|
FXCHD F0, F4
|
|
FADDDP F0,F3
|
|
FXCHD F0, F3
|
|
FADDD ·HOFFSET0(SB), F0
|
|
FXCHD F0, F3
|
|
FADDD ·HOFFSET1(SB), F0
|
|
FXCHD F0, F1
|
|
FADDD ·HOFFSET2(SB), F0
|
|
FXCHD F0, F2
|
|
FADDD ·HOFFSET3(SB), F0
|
|
FXCHD F0, F3
|
|
FMOVDP F0, 104(SP)
|
|
FMOVDP F0, 112(SP)
|
|
FMOVDP F0, 120(SP)
|
|
FMOVDP F0, 128(SP)
|
|
MOVL 108(SP),DI
|
|
ANDL $63,DI
|
|
MOVL 116(SP),SI
|
|
ANDL $63,SI
|
|
MOVL 124(SP),DX
|
|
ANDL $63,DX
|
|
MOVL 132(SP),CX
|
|
ANDL $63,CX
|
|
MOVL 112(SP),R8
|
|
ADDL DI,R8
|
|
MOVQ R8,112(SP)
|
|
MOVL 120(SP),DI
|
|
ADCL SI,DI
|
|
MOVQ DI,120(SP)
|
|
MOVL 128(SP),DI
|
|
ADCL DX,DI
|
|
MOVQ DI,128(SP)
|
|
MOVL R10,DI
|
|
ADCL CX,DI
|
|
MOVQ DI,136(SP)
|
|
MOVQ $5,DI
|
|
MOVL 104(SP),SI
|
|
ADDL SI,DI
|
|
MOVQ DI,104(SP)
|
|
MOVL R10,DI
|
|
MOVQ 112(SP),DX
|
|
ADCL DX,DI
|
|
MOVQ DI,112(SP)
|
|
MOVL R10,DI
|
|
MOVQ 120(SP),CX
|
|
ADCL CX,DI
|
|
MOVQ DI,120(SP)
|
|
MOVL R10,DI
|
|
MOVQ 128(SP),R8
|
|
ADCL R8,DI
|
|
MOVQ DI,128(SP)
|
|
MOVQ $0XFFFFFFFC,DI
|
|
MOVQ 136(SP),R9
|
|
ADCL R9,DI
|
|
SARL $16,DI
|
|
MOVQ DI,R9
|
|
XORL $0XFFFFFFFF,R9
|
|
ANDQ DI,SI
|
|
MOVQ 104(SP),AX
|
|
ANDQ R9,AX
|
|
ORQ AX,SI
|
|
ANDQ DI,DX
|
|
MOVQ 112(SP),AX
|
|
ANDQ R9,AX
|
|
ORQ AX,DX
|
|
ANDQ DI,CX
|
|
MOVQ 120(SP),AX
|
|
ANDQ R9,AX
|
|
ORQ AX,CX
|
|
ANDQ DI,R8
|
|
MOVQ 128(SP),DI
|
|
ANDQ R9,DI
|
|
ORQ DI,R8
|
|
MOVQ 88(SP),DI
|
|
MOVQ 96(SP),R9
|
|
ADDL 16(R9),SI
|
|
ADCL 20(R9),DX
|
|
ADCL 24(R9),CX
|
|
ADCL 28(R9),R8
|
|
MOVL SI,0(DI)
|
|
MOVL DX,4(DI)
|
|
MOVL CX,8(DI)
|
|
MOVL R8,12(DI)
|
|
MOVQ 32(SP),R11
|
|
MOVQ 40(SP),R12
|
|
MOVQ 48(SP),R13
|
|
MOVQ 56(SP),R14
|
|
MOVQ 64(SP),R15
|
|
MOVQ 72(SP),BX
|
|
MOVQ 80(SP),BP
|
|
MOVQ R11,SP
|
|
RET
|