| //+build !noasm !appengine |
| // AUTO-GENERATED BY C2GOASM -- DO NOT EDIT |
| |
| TEXT ยท_sum_uint64_avx2(SB), $0-24 |
| |
| MOVQ buf+0(FP), DI |
| MOVQ len+8(FP), SI |
| MOVQ res+16(FP), DX |
| |
| WORD $0x8548; BYTE $0xf6 // test rsi, rsi |
| JE LBB0_1 |
| LONG $0x1ffe8348 // cmp rsi, 31 |
| JBE LBB0_3 |
| WORD $0x8949; BYTE $0xf1 // mov r9, rsi |
| LONG $0xe0e18349 // and r9, -32 |
| JE LBB0_3 |
| LONG $0xe0418d4d // lea r8, [r9 - 32] |
| WORD $0x8944; BYTE $0xc0 // mov eax, r8d |
| WORD $0xe8c1; BYTE $0x05 // shr eax, 5 |
| WORD $0xc0ff // inc eax |
| LONG $0x07e08348 // and rax, 7 |
| JE LBB0_8 |
| WORD $0xf748; BYTE $0xd8 // neg rax |
| LONG $0xc0effdc5 // vpxor ymm0, ymm0, ymm0 |
| WORD $0xc931 // xor ecx, ecx |
| LONG $0xc9eff5c5 // vpxor ymm1, ymm1, ymm1 |
| LONG $0xd2efedc5 // vpxor ymm2, ymm2, ymm2 |
| LONG $0xdbefe5c5 // vpxor ymm3, ymm3, ymm3 |
| LONG $0xe4efddc5 // vpxor ymm4, ymm4, ymm4 |
| LONG $0xedefd5c5 // vpxor ymm5, ymm5, ymm5 |
| LONG $0xf6efcdc5 // vpxor ymm6, ymm6, ymm6 |
| LONG $0xffefc5c5 // vpxor ymm7, ymm7, ymm7 |
| |
| LBB0_10: |
| LONG $0x04d4fdc5; BYTE $0xcf // vpaddq ymm0, ymm0, yword [rdi + 8*rcx] |
| LONG $0x4cd4f5c5; WORD $0x20cf // vpaddq ymm1, ymm1, yword [rdi + 8*rcx + 32] |
| LONG $0x54d4edc5; WORD $0x40cf // vpaddq ymm2, ymm2, yword [rdi + 8*rcx + 64] |
| LONG $0x5cd4e5c5; WORD $0x60cf // vpaddq ymm3, ymm3, yword [rdi + 8*rcx + 96] |
| QUAD $0x000080cfa4d4ddc5; BYTE $0x00 // vpaddq ymm4, ymm4, yword [rdi + 8*rcx + 128] |
| QUAD $0x0000a0cfacd4d5c5; BYTE $0x00 // vpaddq ymm5, ymm5, yword [rdi + 8*rcx + 160] |
| QUAD $0x0000c0cfb4d4cdc5; BYTE $0x00 // vpaddq ymm6, ymm6, yword [rdi + 8*rcx + 192] |
| QUAD $0x0000e0cfbcd4c5c5; BYTE $0x00 // vpaddq ymm7, ymm7, yword [rdi + 8*rcx + 224] |
| LONG $0x20c18348 // add rcx, 32 |
| WORD $0xff48; BYTE $0xc0 // inc rax |
| JNE LBB0_10 |
| JMP LBB0_11 |
| |
| LBB0_3: |
| WORD $0x3145; BYTE $0xc9 // xor r9d, r9d |
| WORD $0xc031 // xor eax, eax |
| |
| LBB0_4: |
| LONG $0xcf0c8d4a // lea rcx, [rdi + 8*r9] |
| WORD $0x294c; BYTE $0xce // sub rsi, r9 |
| |
| LBB0_5: |
| WORD $0x0348; BYTE $0x01 // add rax, qword [rcx] |
| LONG $0x08c18348 // add rcx, 8 |
| WORD $0xff48; BYTE $0xce // dec rsi |
| JNE LBB0_5 |
| JMP LBB0_15 |
| |
| LBB0_1: |
| WORD $0xc031 // xor eax, eax |
| |
| LBB0_15: |
| WORD $0x8948; BYTE $0x02 // mov qword [rdx], rax |
| VZEROUPPER |
| RET |
| |
| LBB0_8: |
| WORD $0xc931 // xor ecx, ecx |
| LONG $0xc0effdc5 // vpxor ymm0, ymm0, ymm0 |
| LONG $0xc9eff5c5 // vpxor ymm1, ymm1, ymm1 |
| LONG $0xd2efedc5 // vpxor ymm2, ymm2, ymm2 |
| LONG $0xdbefe5c5 // vpxor ymm3, ymm3, ymm3 |
| LONG $0xe4efddc5 // vpxor ymm4, ymm4, ymm4 |
| LONG $0xedefd5c5 // vpxor ymm5, ymm5, ymm5 |
| LONG $0xf6efcdc5 // vpxor ymm6, ymm6, ymm6 |
| LONG $0xffefc5c5 // vpxor ymm7, ymm7, ymm7 |
| |
| LBB0_11: |
| LONG $0xe0f88149; WORD $0x0000; BYTE $0x00 // cmp r8, 224 |
| JB LBB0_14 |
| WORD $0x894c; BYTE $0xc8 // mov rax, r9 |
| WORD $0x2948; BYTE $0xc8 // sub rax, rcx |
| QUAD $0x00000700cf8c8d48 // lea rcx, [rdi + 8*rcx + 1792] |
| |
| LBB0_13: |
| QUAD $0xfffff9e0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 1568] |
| QUAD $0xfffff9c0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 1600] |
| QUAD $0xfffff9a0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 1632] |
| QUAD $0xfffff980a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 1664] |
| QUAD $0xfffff96099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 1696] |
| QUAD $0xfffff94091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 1728] |
| QUAD $0xfffff92089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 1760] |
| QUAD $0xfffff90081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1792] |
| QUAD $0xfffffa0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1536] |
| QUAD $0xfffffa2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 1504] |
| QUAD $0xfffffa4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 1472] |
| QUAD $0xfffffa6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 1440] |
| QUAD $0xfffffa80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 1408] |
| QUAD $0xfffffaa0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 1376] |
| QUAD $0xfffffac0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 1344] |
| QUAD $0xfffffae0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 1312] |
| QUAD $0xfffffbe0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 1056] |
| QUAD $0xfffffbc0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 1088] |
| QUAD $0xfffffba0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 1120] |
| QUAD $0xfffffb80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 1152] |
| QUAD $0xfffffb6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 1184] |
| QUAD $0xfffffb4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 1216] |
| QUAD $0xfffffb2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 1248] |
| QUAD $0xfffffb0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1280] |
| QUAD $0xfffffc0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1024] |
| QUAD $0xfffffc2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 992] |
| QUAD $0xfffffc4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 960] |
| QUAD $0xfffffc6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 928] |
| QUAD $0xfffffc80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 896] |
| QUAD $0xfffffca0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 864] |
| QUAD $0xfffffcc0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 832] |
| QUAD $0xfffffce0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 800] |
| QUAD $0xfffffde0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 544] |
| QUAD $0xfffffdc0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 576] |
| QUAD $0xfffffda0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 608] |
| QUAD $0xfffffd80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 640] |
| QUAD $0xfffffd6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 672] |
| QUAD $0xfffffd4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 704] |
| QUAD $0xfffffd2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 736] |
| QUAD $0xfffffd0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 768] |
| QUAD $0xfffffe0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 512] |
| QUAD $0xfffffe2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 480] |
| QUAD $0xfffffe4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 448] |
| QUAD $0xfffffe6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 416] |
| QUAD $0xfffffe80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 384] |
| QUAD $0xfffffea0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 352] |
| QUAD $0xfffffec0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 320] |
| QUAD $0xfffffee0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 288] |
| LONG $0x79d4c5c5; BYTE $0xe0 // vpaddq ymm7, ymm7, yword [rcx - 32] |
| LONG $0x71d4cdc5; BYTE $0xc0 // vpaddq ymm6, ymm6, yword [rcx - 64] |
| LONG $0x69d4d5c5; BYTE $0xa0 // vpaddq ymm5, ymm5, yword [rcx - 96] |
| LONG $0x61d4ddc5; BYTE $0x80 // vpaddq ymm4, ymm4, yword [rcx - 128] |
| QUAD $0xffffff6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 160] |
| QUAD $0xffffff4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 192] |
| QUAD $0xffffff2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 224] |
| QUAD $0xffffff0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 256] |
| LONG $0x01d4fdc5 // vpaddq ymm0, ymm0, yword [rcx] |
| LONG $0x49d4f5c5; BYTE $0x20 // vpaddq ymm1, ymm1, yword [rcx + 32] |
| LONG $0x51d4edc5; BYTE $0x40 // vpaddq ymm2, ymm2, yword [rcx + 64] |
| LONG $0x59d4e5c5; BYTE $0x60 // vpaddq ymm3, ymm3, yword [rcx + 96] |
| QUAD $0x00000080a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx + 128] |
| QUAD $0x000000a0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx + 160] |
| QUAD $0x000000c0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx + 192] |
| QUAD $0x000000e0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx + 224] |
| LONG $0x00c18148; WORD $0x0008; BYTE $0x00 // add rcx, 2048 |
| LONG $0xff000548; WORD $0xffff // add rax, -256 |
| JNE LBB0_13 |
| |
| LBB0_14: |
| LONG $0xcdd4f5c5 // vpaddq ymm1, ymm1, ymm5 |
| LONG $0xdfd4e5c5 // vpaddq ymm3, ymm3, ymm7 |
| LONG $0xc4d4fdc5 // vpaddq ymm0, ymm0, ymm4 |
| LONG $0xd6d4edc5 // vpaddq ymm2, ymm2, ymm6 |
| LONG $0xc2d4fdc5 // vpaddq ymm0, ymm0, ymm2 |
| LONG $0xcbd4f5c5 // vpaddq ymm1, ymm1, ymm3 |
| LONG $0xc1d4fdc5 // vpaddq ymm0, ymm0, ymm1 |
| LONG $0x397de3c4; WORD $0x01c1 // vextracti128 xmm1, ymm0, 1 |
| LONG $0xc1d4fdc5 // vpaddq ymm0, ymm0, ymm1 |
| LONG $0xc870f9c5; BYTE $0x4e // vpshufd xmm1, xmm0, 78 |
| LONG $0xc1d4fdc5 // vpaddq ymm0, ymm0, ymm1 |
| LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq rax, xmm0 |
| WORD $0x3949; BYTE $0xf1 // cmp r9, rsi |
| JNE LBB0_4 |
| JMP LBB0_15 |