gitee.com/quant1x/gox@v1.7.6/num/asm/_avx2/aggregates.s (about) 1 Sum_F64_D(double*, unsigned long): # @Sum_F64_D(double*, unsigned long) 2 testq %rsi, %rsi 3 je .LBB0_1 4 cmpq $16, %rsi 5 jae .LBB0_4 6 vxorpd %xmm0, %xmm0, %xmm0 7 xorl %eax, %eax 8 jmp .LBB0_11 9 .LBB0_1: 10 vxorps %xmm0, %xmm0, %xmm0 11 retq 12 .LBB0_4: 13 movq %rsi, %rax 14 andq $-16, %rax 15 leaq -16(%rax), %rcx 16 movq %rcx, %r8 17 shrq $4, %r8 18 addq $1, %r8 19 testq %rcx, %rcx 20 je .LBB0_5 21 movq %r8, %rcx 22 andq $-2, %rcx 23 vxorpd %xmm0, %xmm0, %xmm0 24 xorl %edx, %edx 25 vxorpd %xmm1, %xmm1, %xmm1 26 vxorpd %xmm2, %xmm2, %xmm2 27 vxorpd %xmm3, %xmm3, %xmm3 28 .LBB0_7: # =>This Inner Loop Header: Depth=1 29 vaddpd (%rdi,%rdx,8), %ymm0, %ymm0 30 vaddpd 32(%rdi,%rdx,8), %ymm1, %ymm1 31 vaddpd 64(%rdi,%rdx,8), %ymm2, %ymm2 32 vaddpd 96(%rdi,%rdx,8), %ymm3, %ymm3 33 vaddpd 128(%rdi,%rdx,8), %ymm0, %ymm0 34 vaddpd 160(%rdi,%rdx,8), %ymm1, %ymm1 35 vaddpd 192(%rdi,%rdx,8), %ymm2, %ymm2 36 vaddpd 224(%rdi,%rdx,8), %ymm3, %ymm3 37 addq $32, %rdx 38 addq $-2, %rcx 39 jne .LBB0_7 40 testb $1, %r8b 41 je .LBB0_10 42 .LBB0_9: 43 vaddpd (%rdi,%rdx,8), %ymm0, %ymm0 44 vaddpd 32(%rdi,%rdx,8), %ymm1, %ymm1 45 vaddpd 64(%rdi,%rdx,8), %ymm2, %ymm2 46 vaddpd 96(%rdi,%rdx,8), %ymm3, %ymm3 47 .LBB0_10: 48 vaddpd %ymm3, %ymm1, %ymm1 49 vaddpd %ymm2, %ymm0, %ymm0 50 vaddpd %ymm1, %ymm0, %ymm0 51 vextractf128 $1, %ymm0, %xmm1 52 vaddpd %xmm1, %xmm0, %xmm0 53 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 54 vaddsd %xmm1, %xmm0, %xmm0 55 cmpq %rsi, %rax 56 je .LBB0_12 57 .LBB0_11: # =>This Inner Loop Header: Depth=1 58 vaddsd (%rdi,%rax,8), %xmm0, %xmm0 59 addq $1, %rax 60 cmpq %rax, %rsi 61 jne .LBB0_11 62 .LBB0_12: 63 vzeroupper 64 retq 65 .LBB0_5: 66 vxorpd %xmm0, %xmm0, %xmm0 67 xorl %edx, %edx 68 vxorpd %xmm1, %xmm1, %xmm1 69 vxorpd %xmm2, %xmm2, %xmm2 70 vxorpd %xmm3, %xmm3, %xmm3 71 testb $1, %r8b 72 jne .LBB0_9 73 jmp .LBB0_10 74 Sum_F32_F(float*, unsigned long): # @Sum_F32_F(float*, unsigned long) 75 testq %rsi, %rsi 76 je .LBB1_1 77 cmpq $32, %rsi 78 jae .LBB1_4 79 vxorps %xmm0, %xmm0, %xmm0 80 xorl %eax, %eax 81 jmp .LBB1_11 82 .LBB1_1: 83 vxorps %xmm0, %xmm0, %xmm0 84 retq 85 .LBB1_4: 86 movq %rsi, %rax 87 andq $-32, %rax 88 leaq -32(%rax), %rcx 89 movq %rcx, %r8 90 shrq $5, %r8 91 addq $1, %r8 92 testq %rcx, %rcx 93 je .LBB1_5 94 movq %r8, %rcx 95 andq $-2, %rcx 96 vxorps %xmm0, %xmm0, %xmm0 97 xorl %edx, %edx 98 vxorps %xmm1, %xmm1, %xmm1 99 vxorps %xmm2, %xmm2, %xmm2 100 vxorps %xmm3, %xmm3, %xmm3 101 .LBB1_7: # =>This Inner Loop Header: Depth=1 102 vaddps (%rdi,%rdx,4), %ymm0, %ymm0 103 vaddps 32(%rdi,%rdx,4), %ymm1, %ymm1 104 vaddps 64(%rdi,%rdx,4), %ymm2, %ymm2 105 vaddps 96(%rdi,%rdx,4), %ymm3, %ymm3 106 vaddps 128(%rdi,%rdx,4), %ymm0, %ymm0 107 vaddps 160(%rdi,%rdx,4), %ymm1, %ymm1 108 vaddps 192(%rdi,%rdx,4), %ymm2, %ymm2 109 vaddps 224(%rdi,%rdx,4), %ymm3, %ymm3 110 addq $64, %rdx 111 addq $-2, %rcx 112 jne .LBB1_7 113 testb $1, %r8b 114 je .LBB1_10 115 .LBB1_9: 116 vaddps (%rdi,%rdx,4), %ymm0, %ymm0 117 vaddps 32(%rdi,%rdx,4), %ymm1, %ymm1 118 vaddps 64(%rdi,%rdx,4), %ymm2, %ymm2 119 vaddps 96(%rdi,%rdx,4), %ymm3, %ymm3 120 .LBB1_10: 121 vaddps %ymm3, %ymm1, %ymm1 122 vaddps %ymm2, %ymm0, %ymm0 123 vaddps %ymm1, %ymm0, %ymm0 124 vextractf128 $1, %ymm0, %xmm1 125 vaddps %xmm1, %xmm0, %xmm0 126 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 127 vaddps %xmm1, %xmm0, %xmm0 128 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 129 vaddss %xmm1, %xmm0, %xmm0 130 cmpq %rsi, %rax 131 je .LBB1_12 132 .LBB1_11: # =>This Inner Loop Header: Depth=1 133 vaddss (%rdi,%rax,4), %xmm0, %xmm0 134 addq $1, %rax 135 cmpq %rax, %rsi 136 jne .LBB1_11 137 .LBB1_12: 138 vzeroupper 139 retq 140 .LBB1_5: 141 vxorps %xmm0, %xmm0, %xmm0 142 xorl %edx, %edx 143 vxorps %xmm1, %xmm1, %xmm1 144 vxorps %xmm2, %xmm2, %xmm2 145 vxorps %xmm3, %xmm3, %xmm3 146 testb $1, %r8b 147 jne .LBB1_9 148 jmp .LBB1_10 149 CumSum_F64_V(double*, unsigned long): # @CumSum_F64_V(double*, unsigned long) 150 testq %rsi, %rsi 151 je .LBB2_8 152 leaq -1(%rsi), %rcx 153 movl %esi, %eax 154 andl $3, %eax 155 cmpq $3, %rcx 156 jae .LBB2_3 157 vxorpd %xmm0, %xmm0, %xmm0 158 xorl %ecx, %ecx 159 jmp .LBB2_5 160 .LBB2_3: 161 andq $-4, %rsi 162 vxorpd %xmm0, %xmm0, %xmm0 163 xorl %ecx, %ecx 164 .LBB2_4: # =>This Inner Loop Header: Depth=1 165 vaddsd (%rdi,%rcx,8), %xmm0, %xmm0 166 vmovsd %xmm0, (%rdi,%rcx,8) 167 vaddsd 8(%rdi,%rcx,8), %xmm0, %xmm0 168 vmovsd %xmm0, 8(%rdi,%rcx,8) 169 vaddsd 16(%rdi,%rcx,8), %xmm0, %xmm0 170 vmovsd %xmm0, 16(%rdi,%rcx,8) 171 vaddsd 24(%rdi,%rcx,8), %xmm0, %xmm0 172 vmovsd %xmm0, 24(%rdi,%rcx,8) 173 addq $4, %rcx 174 cmpq %rcx, %rsi 175 jne .LBB2_4 176 .LBB2_5: 177 testq %rax, %rax 178 je .LBB2_8 179 leaq (%rdi,%rcx,8), %rcx 180 xorl %edx, %edx 181 .LBB2_7: # =>This Inner Loop Header: Depth=1 182 vaddsd (%rcx,%rdx,8), %xmm0, %xmm0 183 vmovsd %xmm0, (%rcx,%rdx,8) 184 addq $1, %rdx 185 cmpq %rdx, %rax 186 jne .LBB2_7 187 .LBB2_8: 188 retq 189 CumSum_F32_V(float*, unsigned long): # @CumSum_F32_V(float*, unsigned long) 190 testq %rsi, %rsi 191 je .LBB3_8 192 leaq -1(%rsi), %rcx 193 movl %esi, %eax 194 andl $3, %eax 195 cmpq $3, %rcx 196 jae .LBB3_3 197 vxorps %xmm0, %xmm0, %xmm0 198 xorl %ecx, %ecx 199 jmp .LBB3_5 200 .LBB3_3: 201 andq $-4, %rsi 202 vxorps %xmm0, %xmm0, %xmm0 203 xorl %ecx, %ecx 204 .LBB3_4: # =>This Inner Loop Header: Depth=1 205 vaddss (%rdi,%rcx,4), %xmm0, %xmm0 206 vmovss %xmm0, (%rdi,%rcx,4) 207 vaddss 4(%rdi,%rcx,4), %xmm0, %xmm0 208 vmovss %xmm0, 4(%rdi,%rcx,4) 209 vaddss 8(%rdi,%rcx,4), %xmm0, %xmm0 210 vmovss %xmm0, 8(%rdi,%rcx,4) 211 vaddss 12(%rdi,%rcx,4), %xmm0, %xmm0 212 vmovss %xmm0, 12(%rdi,%rcx,4) 213 addq $4, %rcx 214 cmpq %rcx, %rsi 215 jne .LBB3_4 216 .LBB3_5: 217 testq %rax, %rax 218 je .LBB3_8 219 leaq (%rdi,%rcx,4), %rcx 220 xorl %edx, %edx 221 .LBB3_7: # =>This Inner Loop Header: Depth=1 222 vaddss (%rcx,%rdx,4), %xmm0, %xmm0 223 vmovss %xmm0, (%rcx,%rdx,4) 224 addq $1, %rdx 225 cmpq %rdx, %rax 226 jne .LBB3_7 227 .LBB3_8: 228 retq 229 .LCPI4_0: 230 .quad 0x3ff0000000000000 # double 1 231 Prod_F64_D(double*, unsigned long): # @Prod_F64_D(double*, unsigned long) 232 testq %rsi, %rsi 233 je .LBB4_1 234 cmpq $16, %rsi 235 jae .LBB4_4 236 vmovsd .LCPI4_0(%rip), %xmm0 # xmm0 = mem[0],zero 237 xorl %eax, %eax 238 jmp .LBB4_11 239 .LBB4_1: 240 vmovsd .LCPI4_0(%rip), %xmm0 # xmm0 = mem[0],zero 241 retq 242 .LBB4_4: 243 movq %rsi, %rax 244 andq $-16, %rax 245 leaq -16(%rax), %rcx 246 movq %rcx, %r8 247 shrq $4, %r8 248 addq $1, %r8 249 testq %rcx, %rcx 250 je .LBB4_5 251 movq %r8, %rcx 252 andq $-2, %rcx 253 vbroadcastsd .LCPI4_0(%rip), %ymm0 # ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0] 254 xorl %edx, %edx 255 vmovapd %ymm0, %ymm1 256 vmovapd %ymm0, %ymm2 257 vmovapd %ymm0, %ymm3 258 .LBB4_7: # =>This Inner Loop Header: Depth=1 259 vmulpd (%rdi,%rdx,8), %ymm0, %ymm0 260 vmulpd 32(%rdi,%rdx,8), %ymm1, %ymm1 261 vmulpd 64(%rdi,%rdx,8), %ymm2, %ymm2 262 vmulpd 96(%rdi,%rdx,8), %ymm3, %ymm3 263 vmulpd 128(%rdi,%rdx,8), %ymm0, %ymm0 264 vmulpd 160(%rdi,%rdx,8), %ymm1, %ymm1 265 vmulpd 192(%rdi,%rdx,8), %ymm2, %ymm2 266 vmulpd 224(%rdi,%rdx,8), %ymm3, %ymm3 267 addq $32, %rdx 268 addq $-2, %rcx 269 jne .LBB4_7 270 testb $1, %r8b 271 je .LBB4_10 272 .LBB4_9: 273 vmulpd (%rdi,%rdx,8), %ymm0, %ymm0 274 vmulpd 32(%rdi,%rdx,8), %ymm1, %ymm1 275 vmulpd 64(%rdi,%rdx,8), %ymm2, %ymm2 276 vmulpd 96(%rdi,%rdx,8), %ymm3, %ymm3 277 .LBB4_10: 278 vmulpd %ymm3, %ymm1, %ymm1 279 vmulpd %ymm2, %ymm0, %ymm0 280 vmulpd %ymm1, %ymm0, %ymm0 281 vextractf128 $1, %ymm0, %xmm1 282 vmulpd %xmm1, %xmm0, %xmm0 283 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 284 vmulsd %xmm1, %xmm0, %xmm0 285 cmpq %rsi, %rax 286 je .LBB4_12 287 .LBB4_11: # =>This Inner Loop Header: Depth=1 288 vmulsd (%rdi,%rax,8), %xmm0, %xmm0 289 addq $1, %rax 290 cmpq %rax, %rsi 291 jne .LBB4_11 292 .LBB4_12: 293 vzeroupper 294 retq 295 .LBB4_5: 296 vbroadcastsd .LCPI4_0(%rip), %ymm0 # ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0] 297 xorl %edx, %edx 298 vmovapd %ymm0, %ymm1 299 vmovapd %ymm0, %ymm2 300 vmovapd %ymm0, %ymm3 301 testb $1, %r8b 302 jne .LBB4_9 303 jmp .LBB4_10 304 .LCPI5_0: 305 .long 0x3f800000 # float 1 306 Prod_F32_F(float*, unsigned long): # @Prod_F32_F(float*, unsigned long) 307 testq %rsi, %rsi 308 je .LBB5_1 309 cmpq $32, %rsi 310 jae .LBB5_4 311 vmovss .LCPI5_0(%rip), %xmm0 # xmm0 = mem[0],zero,zero,zero 312 xorl %eax, %eax 313 jmp .LBB5_11 314 .LBB5_1: 315 vmovss .LCPI5_0(%rip), %xmm0 # xmm0 = mem[0],zero,zero,zero 316 retq 317 .LBB5_4: 318 movq %rsi, %rax 319 andq $-32, %rax 320 leaq -32(%rax), %rcx 321 movq %rcx, %r8 322 shrq $5, %r8 323 addq $1, %r8 324 testq %rcx, %rcx 325 je .LBB5_5 326 movq %r8, %rcx 327 andq $-2, %rcx 328 vbroadcastss .LCPI5_0(%rip), %ymm0 # ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0] 329 xorl %edx, %edx 330 vmovaps %ymm0, %ymm1 331 vmovaps %ymm0, %ymm2 332 vmovaps %ymm0, %ymm3 333 .LBB5_7: # =>This Inner Loop Header: Depth=1 334 vmulps (%rdi,%rdx,4), %ymm0, %ymm0 335 vmulps 32(%rdi,%rdx,4), %ymm1, %ymm1 336 vmulps 64(%rdi,%rdx,4), %ymm2, %ymm2 337 vmulps 96(%rdi,%rdx,4), %ymm3, %ymm3 338 vmulps 128(%rdi,%rdx,4), %ymm0, %ymm0 339 vmulps 160(%rdi,%rdx,4), %ymm1, %ymm1 340 vmulps 192(%rdi,%rdx,4), %ymm2, %ymm2 341 vmulps 224(%rdi,%rdx,4), %ymm3, %ymm3 342 addq $64, %rdx 343 addq $-2, %rcx 344 jne .LBB5_7 345 testb $1, %r8b 346 je .LBB5_10 347 .LBB5_9: 348 vmulps (%rdi,%rdx,4), %ymm0, %ymm0 349 vmulps 32(%rdi,%rdx,4), %ymm1, %ymm1 350 vmulps 64(%rdi,%rdx,4), %ymm2, %ymm2 351 vmulps 96(%rdi,%rdx,4), %ymm3, %ymm3 352 .LBB5_10: 353 vmulps %ymm3, %ymm1, %ymm1 354 vmulps %ymm2, %ymm0, %ymm0 355 vmulps %ymm1, %ymm0, %ymm0 356 vextractf128 $1, %ymm0, %xmm1 357 vmulps %xmm1, %xmm0, %xmm0 358 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 359 vmulps %xmm1, %xmm0, %xmm0 360 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 361 vmulss %xmm1, %xmm0, %xmm0 362 cmpq %rsi, %rax 363 je .LBB5_12 364 .LBB5_11: # =>This Inner Loop Header: Depth=1 365 vmulss (%rdi,%rax,4), %xmm0, %xmm0 366 addq $1, %rax 367 cmpq %rax, %rsi 368 jne .LBB5_11 369 .LBB5_12: 370 vzeroupper 371 retq 372 .LBB5_5: 373 vbroadcastss .LCPI5_0(%rip), %ymm0 # ymm0 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0] 374 xorl %edx, %edx 375 vmovaps %ymm0, %ymm1 376 vmovaps %ymm0, %ymm2 377 vmovaps %ymm0, %ymm3 378 testb $1, %r8b 379 jne .LBB5_9 380 jmp .LBB5_10 381 .LCPI6_0: 382 .quad 0x3ff0000000000000 # double 1 383 CumProd_F64_V(double*, unsigned long): # @CumProd_F64_V(double*, unsigned long) 384 testq %rsi, %rsi 385 je .LBB6_8 386 leaq -1(%rsi), %rcx 387 movl %esi, %eax 388 andl $3, %eax 389 cmpq $3, %rcx 390 jae .LBB6_3 391 vmovsd .LCPI6_0(%rip), %xmm0 # xmm0 = mem[0],zero 392 xorl %ecx, %ecx 393 jmp .LBB6_5 394 .LBB6_3: 395 andq $-4, %rsi 396 vmovsd .LCPI6_0(%rip), %xmm0 # xmm0 = mem[0],zero 397 xorl %ecx, %ecx 398 .LBB6_4: # =>This Inner Loop Header: Depth=1 399 vmulsd (%rdi,%rcx,8), %xmm0, %xmm0 400 vmovsd %xmm0, (%rdi,%rcx,8) 401 vmulsd 8(%rdi,%rcx,8), %xmm0, %xmm0 402 vmovsd %xmm0, 8(%rdi,%rcx,8) 403 vmulsd 16(%rdi,%rcx,8), %xmm0, %xmm0 404 vmovsd %xmm0, 16(%rdi,%rcx,8) 405 vmulsd 24(%rdi,%rcx,8), %xmm0, %xmm0 406 vmovsd %xmm0, 24(%rdi,%rcx,8) 407 addq $4, %rcx 408 cmpq %rcx, %rsi 409 jne .LBB6_4 410 .LBB6_5: 411 testq %rax, %rax 412 je .LBB6_8 413 leaq (%rdi,%rcx,8), %rcx 414 xorl %edx, %edx 415 .LBB6_7: # =>This Inner Loop Header: Depth=1 416 vmulsd (%rcx,%rdx,8), %xmm0, %xmm0 417 vmovsd %xmm0, (%rcx,%rdx,8) 418 addq $1, %rdx 419 cmpq %rdx, %rax 420 jne .LBB6_7 421 .LBB6_8: 422 retq 423 .LCPI7_0: 424 .long 0x3f800000 # float 1 425 CumProd_F32_V(float*, unsigned long): # @CumProd_F32_V(float*, unsigned long) 426 testq %rsi, %rsi 427 je .LBB7_8 428 leaq -1(%rsi), %rcx 429 movl %esi, %eax 430 andl $3, %eax 431 cmpq $3, %rcx 432 jae .LBB7_3 433 vmovss .LCPI7_0(%rip), %xmm0 # xmm0 = mem[0],zero,zero,zero 434 xorl %ecx, %ecx 435 jmp .LBB7_5 436 .LBB7_3: 437 andq $-4, %rsi 438 vmovss .LCPI7_0(%rip), %xmm0 # xmm0 = mem[0],zero,zero,zero 439 xorl %ecx, %ecx 440 .LBB7_4: # =>This Inner Loop Header: Depth=1 441 vmulss (%rdi,%rcx,4), %xmm0, %xmm0 442 vmovss %xmm0, (%rdi,%rcx,4) 443 vmulss 4(%rdi,%rcx,4), %xmm0, %xmm0 444 vmovss %xmm0, 4(%rdi,%rcx,4) 445 vmulss 8(%rdi,%rcx,4), %xmm0, %xmm0 446 vmovss %xmm0, 8(%rdi,%rcx,4) 447 vmulss 12(%rdi,%rcx,4), %xmm0, %xmm0 448 vmovss %xmm0, 12(%rdi,%rcx,4) 449 addq $4, %rcx 450 cmpq %rcx, %rsi 451 jne .LBB7_4 452 .LBB7_5: 453 testq %rax, %rax 454 je .LBB7_8 455 leaq (%rdi,%rcx,4), %rcx 456 xorl %edx, %edx 457 .LBB7_7: # =>This Inner Loop Header: Depth=1 458 vmulss (%rcx,%rdx,4), %xmm0, %xmm0 459 vmovss %xmm0, (%rcx,%rdx,4) 460 addq $1, %rdx 461 cmpq %rdx, %rax 462 jne .LBB7_7 463 .LBB7_8: 464 retq