sum_amd64.s

 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