1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
//+build !noasm !appengine
// AUTO-GENERATED BY C2GOASM -- DO NOT EDIT
TEXT ยท_sum_int64_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
|