1// Code generated by command: go run sum_amd64_asm.go -out ../sum_amd64.s -pkg poly1305. DO NOT EDIT.
2
3//go:build gc && !purego
4
5// func update(state *macState, msg []byte)
6TEXT ·update(SB), $0-32
7 MOVQ state+0(FP), DI
8 MOVQ msg_base+8(FP), SI
9 MOVQ msg_len+16(FP), R15
10 MOVQ (DI), R8
11 MOVQ 8(DI), R9
12 MOVQ 16(DI), R10
13 MOVQ 24(DI), R11
14 MOVQ 32(DI), R12
15 CMPQ R15, $0x10
16 JB bytes_between_0_and_15
17
18loop:
19 ADDQ (SI), R8
20 ADCQ 8(SI), R9
21 ADCQ $0x01, R10
22 LEAQ 16(SI), SI
23
24multiply:
25 MOVQ R11, AX
26 MULQ R8
27 MOVQ AX, BX
28 MOVQ DX, CX
29 MOVQ R11, AX
30 MULQ R9
31 ADDQ AX, CX
32 ADCQ $0x00, DX
33 MOVQ R11, R13
34 IMULQ R10, R13
35 ADDQ DX, R13
36 MOVQ R12, AX
37 MULQ R8
38 ADDQ AX, CX
39 ADCQ $0x00, DX
40 MOVQ DX, R8
41 MOVQ R12, R14
42 IMULQ R10, R14
43 MOVQ R12, AX
44 MULQ R9
45 ADDQ AX, R13
46 ADCQ DX, R14
47 ADDQ R8, R13
48 ADCQ $0x00, R14
49 MOVQ BX, R8
50 MOVQ CX, R9
51 MOVQ R13, R10
52 ANDQ $0x03, R10
53 MOVQ R13, BX
54 ANDQ $-4, BX
55 ADDQ BX, R8
56 ADCQ R14, R9
57 ADCQ $0x00, R10
58 SHRQ $0x02, R14, R13
59 SHRQ $0x02, R14
60 ADDQ R13, R8
61 ADCQ R14, R9
62 ADCQ $0x00, R10
63 SUBQ $0x10, R15
64 CMPQ R15, $0x10
65 JAE loop
66
67bytes_between_0_and_15:
68 TESTQ R15, R15
69 JZ done
70 MOVQ $0x00000001, BX
71 XORQ CX, CX
72 XORQ R13, R13
73 ADDQ R15, SI
74
75flush_buffer:
76 SHLQ $0x08, BX, CX
77 SHLQ $0x08, BX
78 MOVB -1(SI), R13
79 XORQ R13, BX
80 DECQ SI
81 DECQ R15
82 JNZ flush_buffer
83 ADDQ BX, R8
84 ADCQ CX, R9
85 ADCQ $0x00, R10
86 MOVQ $0x00000010, R15
87 JMP multiply
88
89done:
90 MOVQ R8, (DI)
91 MOVQ R9, 8(DI)
92 MOVQ R10, 16(DI)
93 RET
View as plain text