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.
5 // +build amd64,!gccgo,!appengine
9 #define POLY1305_ADD(msg, h0, h1, h2) \
15 #define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \
47 ANDQ $0xFFFFFFFFFFFFFFFC, t0; \
57 DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF
58 DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC
59 GLOBL ·poly1305Mask<>(SB), RODATA, $16
61 // func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key)
62 TEXT ·poly1305(SB), $0-32
70 ANDQ ·poly1305Mask<>(SB), R11 // r0
71 ANDQ ·poly1305Mask<>+8(SB), R12 // r1
77 JB bytes_between_0_and_15
80 POLY1305_ADD(SI, R8, R9, R10)
83 POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14)
88 bytes_between_0_and_15:
114 SUBQ $0xFFFFFFFFFFFFFFFB, AX
115 SBBQ $0xFFFFFFFFFFFFFFFF, BX