gitee.com/quant1x/gox@v1.7.6/num/asm/_avx2/distance.s (about) 1 Dot_F64_D(double*, double*, unsigned long): # @Dot_F64_D(double*, double*, unsigned long) 2 testq %rdx, %rdx 3 je .LBB0_1 4 cmpq $16, %rdx 5 jae .LBB0_4 6 vxorpd %xmm0, %xmm0, %xmm0 7 xorl %eax, %eax 8 jmp .LBB0_7 9 .LBB0_1: 10 vxorps %xmm0, %xmm0, %xmm0 11 retq 12 .LBB0_4: 13 movq %rdx, %rax 14 andq $-16, %rax 15 vxorpd %xmm0, %xmm0, %xmm0 16 xorl %ecx, %ecx 17 vxorpd %xmm1, %xmm1, %xmm1 18 vxorpd %xmm2, %xmm2, %xmm2 19 vxorpd %xmm3, %xmm3, %xmm3 20 .LBB0_5: # =>This Inner Loop Header: Depth=1 21 vmovupd (%rsi,%rcx,8), %ymm4 22 vmovupd 32(%rsi,%rcx,8), %ymm5 23 vmovupd 64(%rsi,%rcx,8), %ymm6 24 vmovupd 96(%rsi,%rcx,8), %ymm7 25 vfmadd231pd (%rdi,%rcx,8), %ymm4, %ymm0 # ymm0 = (ymm4 * mem) + ymm0 26 vfmadd231pd 32(%rdi,%rcx,8), %ymm5, %ymm1 # ymm1 = (ymm5 * mem) + ymm1 27 vfmadd231pd 64(%rdi,%rcx,8), %ymm6, %ymm2 # ymm2 = (ymm6 * mem) + ymm2 28 vfmadd231pd 96(%rdi,%rcx,8), %ymm7, %ymm3 # ymm3 = (ymm7 * mem) + ymm3 29 addq $16, %rcx 30 cmpq %rcx, %rax 31 jne .LBB0_5 32 vaddpd %ymm0, %ymm1, %ymm0 33 vaddpd %ymm0, %ymm2, %ymm0 34 vaddpd %ymm0, %ymm3, %ymm0 35 vextractf128 $1, %ymm0, %xmm1 36 vaddpd %xmm1, %xmm0, %xmm0 37 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 38 vaddsd %xmm1, %xmm0, %xmm0 39 cmpq %rdx, %rax 40 je .LBB0_8 41 .LBB0_7: # =>This Inner Loop Header: Depth=1 42 vmovsd (%rsi,%rax,8), %xmm1 # xmm1 = mem[0],zero 43 vfmadd231sd (%rdi,%rax,8), %xmm1, %xmm0 # xmm0 = (xmm1 * mem) + xmm0 44 addq $1, %rax 45 cmpq %rax, %rdx 46 jne .LBB0_7 47 .LBB0_8: 48 vzeroupper 49 retq 50 Dot_F32_F(float*, float*, unsigned long): # @Dot_F32_F(float*, float*, unsigned long) 51 testq %rdx, %rdx 52 je .LBB1_1 53 cmpq $32, %rdx 54 jae .LBB1_4 55 vxorps %xmm0, %xmm0, %xmm0 56 xorl %eax, %eax 57 jmp .LBB1_7 58 .LBB1_1: 59 vxorps %xmm0, %xmm0, %xmm0 60 retq 61 .LBB1_4: 62 movq %rdx, %rax 63 andq $-32, %rax 64 vxorps %xmm0, %xmm0, %xmm0 65 xorl %ecx, %ecx 66 vxorps %xmm1, %xmm1, %xmm1 67 vxorps %xmm2, %xmm2, %xmm2 68 vxorps %xmm3, %xmm3, %xmm3 69 .LBB1_5: # =>This Inner Loop Header: Depth=1 70 vmovups (%rsi,%rcx,4), %ymm4 71 vmovups 32(%rsi,%rcx,4), %ymm5 72 vmovups 64(%rsi,%rcx,4), %ymm6 73 vmovups 96(%rsi,%rcx,4), %ymm7 74 vfmadd231ps (%rdi,%rcx,4), %ymm4, %ymm0 # ymm0 = (ymm4 * mem) + ymm0 75 vfmadd231ps 32(%rdi,%rcx,4), %ymm5, %ymm1 # ymm1 = (ymm5 * mem) + ymm1 76 vfmadd231ps 64(%rdi,%rcx,4), %ymm6, %ymm2 # ymm2 = (ymm6 * mem) + ymm2 77 vfmadd231ps 96(%rdi,%rcx,4), %ymm7, %ymm3 # ymm3 = (ymm7 * mem) + ymm3 78 addq $32, %rcx 79 cmpq %rcx, %rax 80 jne .LBB1_5 81 vaddps %ymm0, %ymm1, %ymm0 82 vaddps %ymm0, %ymm2, %ymm0 83 vaddps %ymm0, %ymm3, %ymm0 84 vextractf128 $1, %ymm0, %xmm1 85 vaddps %xmm1, %xmm0, %xmm0 86 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 87 vaddps %xmm1, %xmm0, %xmm0 88 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 89 vaddss %xmm1, %xmm0, %xmm0 90 cmpq %rdx, %rax 91 je .LBB1_8 92 .LBB1_7: # =>This Inner Loop Header: Depth=1 93 vmovss (%rsi,%rax,4), %xmm1 # xmm1 = mem[0],zero,zero,zero 94 vfmadd231ss (%rdi,%rax,4), %xmm1, %xmm0 # xmm0 = (xmm1 * mem) + xmm0 95 addq $1, %rax 96 cmpq %rax, %rdx 97 jne .LBB1_7 98 .LBB1_8: 99 vzeroupper 100 retq 101 CosineSimilarity_F64_D(double*, double*, unsigned long): # @CosineSimilarity_F64_D(double*, double*, unsigned long) 102 testq %rdx, %rdx 103 je .LBB2_1 104 cmpq $8, %rdx 105 jae .LBB2_5 106 vxorpd %xmm1, %xmm1, %xmm1 107 xorl %eax, %eax 108 vxorpd %xmm2, %xmm2, %xmm2 109 vxorpd %xmm0, %xmm0, %xmm0 110 jmp .LBB2_4 111 .LBB2_1: 112 vxorpd %xmm0, %xmm0, %xmm0 113 vxorpd %xmm1, %xmm1, %xmm1 114 vsqrtsd %xmm1, %xmm1, %xmm1 115 vdivsd %xmm1, %xmm0, %xmm0 116 retq 117 .LBB2_5: 118 movq %rdx, %rax 119 andq $-8, %rax 120 vxorpd %xmm1, %xmm1, %xmm1 121 xorl %ecx, %ecx 122 vxorpd %xmm3, %xmm3, %xmm3 123 vxorpd %xmm2, %xmm2, %xmm2 124 vxorpd %xmm4, %xmm4, %xmm4 125 vxorpd %xmm0, %xmm0, %xmm0 126 vxorpd %xmm5, %xmm5, %xmm5 127 .LBB2_6: # =>This Inner Loop Header: Depth=1 128 vmovupd (%rdi,%rcx,8), %ymm6 129 vmovupd 32(%rdi,%rcx,8), %ymm7 130 vmovupd (%rsi,%rcx,8), %ymm8 131 vmovupd 32(%rsi,%rcx,8), %ymm9 132 vfmadd231pd %ymm6, %ymm8, %ymm0 # ymm0 = (ymm8 * ymm6) + ymm0 133 vfmadd231pd %ymm7, %ymm9, %ymm5 # ymm5 = (ymm9 * ymm7) + ymm5 134 vfmadd231pd %ymm6, %ymm6, %ymm2 # ymm2 = (ymm6 * ymm6) + ymm2 135 vfmadd231pd %ymm7, %ymm7, %ymm4 # ymm4 = (ymm7 * ymm7) + ymm4 136 vfmadd231pd %ymm8, %ymm8, %ymm1 # ymm1 = (ymm8 * ymm8) + ymm1 137 vfmadd231pd %ymm9, %ymm9, %ymm3 # ymm3 = (ymm9 * ymm9) + ymm3 138 addq $8, %rcx 139 cmpq %rcx, %rax 140 jne .LBB2_6 141 vaddpd %ymm0, %ymm5, %ymm0 142 vextractf128 $1, %ymm0, %xmm5 143 vaddpd %xmm5, %xmm0, %xmm0 144 vpermilpd $1, %xmm0, %xmm5 # xmm5 = xmm0[1,0] 145 vaddsd %xmm5, %xmm0, %xmm0 146 vaddpd %ymm2, %ymm4, %ymm2 147 vextractf128 $1, %ymm2, %xmm4 148 vaddpd %xmm4, %xmm2, %xmm2 149 vpermilpd $1, %xmm2, %xmm4 # xmm4 = xmm2[1,0] 150 vaddsd %xmm4, %xmm2, %xmm2 151 vaddpd %ymm1, %ymm3, %ymm1 152 vextractf128 $1, %ymm1, %xmm3 153 vaddpd %xmm3, %xmm1, %xmm1 154 vpermilpd $1, %xmm1, %xmm3 # xmm3 = xmm1[1,0] 155 vaddsd %xmm3, %xmm1, %xmm1 156 cmpq %rdx, %rax 157 je .LBB2_8 158 .LBB2_4: # =>This Inner Loop Header: Depth=1 159 vmovsd (%rdi,%rax,8), %xmm3 # xmm3 = mem[0],zero 160 vmovsd (%rsi,%rax,8), %xmm4 # xmm4 = mem[0],zero 161 vfmadd231sd %xmm3, %xmm4, %xmm0 # xmm0 = (xmm4 * xmm3) + xmm0 162 vfmadd231sd %xmm3, %xmm3, %xmm2 # xmm2 = (xmm3 * xmm3) + xmm2 163 vfmadd231sd %xmm4, %xmm4, %xmm1 # xmm1 = (xmm4 * xmm4) + xmm1 164 addq $1, %rax 165 cmpq %rax, %rdx 166 jne .LBB2_4 167 .LBB2_8: 168 vmulsd %xmm2, %xmm1, %xmm1 169 vsqrtsd %xmm1, %xmm1, %xmm1 170 vdivsd %xmm1, %xmm0, %xmm0 171 vzeroupper 172 retq 173 .LCPI3_0: 174 .long 0xc0400000 # float -3 175 .LCPI3_1: 176 .long 0xbf000000 # float -0.5 177 CosineSimilarity_F32_F(float*, float*, unsigned long): # @CosineSimilarity_F32_F(float*, float*, unsigned long) 178 testq %rdx, %rdx 179 je .LBB3_1 180 cmpq $16, %rdx 181 jae .LBB3_5 182 vxorps %xmm1, %xmm1, %xmm1 183 xorl %eax, %eax 184 vxorps %xmm2, %xmm2, %xmm2 185 vxorps %xmm0, %xmm0, %xmm0 186 jmp .LBB3_4 187 .LBB3_1: 188 vxorps %xmm0, %xmm0, %xmm0 189 vxorps %xmm1, %xmm1, %xmm1 190 jmp .LBB3_9 191 .LBB3_5: 192 movq %rdx, %rax 193 andq $-16, %rax 194 vxorps %xmm1, %xmm1, %xmm1 195 xorl %ecx, %ecx 196 vxorps %xmm3, %xmm3, %xmm3 197 vxorps %xmm2, %xmm2, %xmm2 198 vxorps %xmm4, %xmm4, %xmm4 199 vxorps %xmm0, %xmm0, %xmm0 200 vxorps %xmm5, %xmm5, %xmm5 201 .LBB3_6: # =>This Inner Loop Header: Depth=1 202 vmovups (%rdi,%rcx,4), %ymm6 203 vmovups 32(%rdi,%rcx,4), %ymm7 204 vmovups (%rsi,%rcx,4), %ymm8 205 vmovups 32(%rsi,%rcx,4), %ymm9 206 vfmadd231ps %ymm6, %ymm8, %ymm0 # ymm0 = (ymm8 * ymm6) + ymm0 207 vfmadd231ps %ymm7, %ymm9, %ymm5 # ymm5 = (ymm9 * ymm7) + ymm5 208 vfmadd231ps %ymm6, %ymm6, %ymm2 # ymm2 = (ymm6 * ymm6) + ymm2 209 vfmadd231ps %ymm7, %ymm7, %ymm4 # ymm4 = (ymm7 * ymm7) + ymm4 210 vfmadd231ps %ymm8, %ymm8, %ymm1 # ymm1 = (ymm8 * ymm8) + ymm1 211 vfmadd231ps %ymm9, %ymm9, %ymm3 # ymm3 = (ymm9 * ymm9) + ymm3 212 addq $16, %rcx 213 cmpq %rcx, %rax 214 jne .LBB3_6 215 vaddps %ymm0, %ymm5, %ymm0 216 vextractf128 $1, %ymm0, %xmm5 217 vaddps %xmm5, %xmm0, %xmm0 218 vpermilpd $1, %xmm0, %xmm5 # xmm5 = xmm0[1,0] 219 vaddps %xmm5, %xmm0, %xmm0 220 vmovshdup %xmm0, %xmm5 # xmm5 = xmm0[1,1,3,3] 221 vaddss %xmm5, %xmm0, %xmm0 222 vaddps %ymm2, %ymm4, %ymm2 223 vextractf128 $1, %ymm2, %xmm4 224 vaddps %xmm4, %xmm2, %xmm2 225 vpermilpd $1, %xmm2, %xmm4 # xmm4 = xmm2[1,0] 226 vaddps %xmm4, %xmm2, %xmm2 227 vmovshdup %xmm2, %xmm4 # xmm4 = xmm2[1,1,3,3] 228 vaddss %xmm4, %xmm2, %xmm2 229 vaddps %ymm1, %ymm3, %ymm1 230 vextractf128 $1, %ymm1, %xmm3 231 vaddps %xmm3, %xmm1, %xmm1 232 vpermilpd $1, %xmm1, %xmm3 # xmm3 = xmm1[1,0] 233 vaddps %xmm3, %xmm1, %xmm1 234 vmovshdup %xmm1, %xmm3 # xmm3 = xmm1[1,1,3,3] 235 vaddss %xmm3, %xmm1, %xmm1 236 cmpq %rdx, %rax 237 je .LBB3_8 238 .LBB3_4: # =>This Inner Loop Header: Depth=1 239 vmovss (%rdi,%rax,4), %xmm3 # xmm3 = mem[0],zero,zero,zero 240 vmovss (%rsi,%rax,4), %xmm4 # xmm4 = mem[0],zero,zero,zero 241 vfmadd231ss %xmm3, %xmm4, %xmm0 # xmm0 = (xmm4 * xmm3) + xmm0 242 vfmadd231ss %xmm3, %xmm3, %xmm2 # xmm2 = (xmm3 * xmm3) + xmm2 243 vfmadd231ss %xmm4, %xmm4, %xmm1 # xmm1 = (xmm4 * xmm4) + xmm1 244 addq $1, %rax 245 cmpq %rax, %rdx 246 jne .LBB3_4 247 .LBB3_8: 248 vmulss %xmm2, %xmm1, %xmm1 249 .LBB3_9: 250 vrsqrtss %xmm1, %xmm1, %xmm2 251 vmulss %xmm2, %xmm1, %xmm1 252 vfmadd213ss .LCPI3_0(%rip), %xmm2, %xmm1 # xmm1 = (xmm2 * xmm1) + mem 253 vmulss .LCPI3_1(%rip), %xmm2, %xmm2 254 vmulss %xmm0, %xmm2, %xmm0 255 vmulss %xmm0, %xmm1, %xmm0 256 vzeroupper 257 retq 258 Norm_F64_D(double*, unsigned long): # @Norm_F64_D(double*, unsigned long) 259 testq %rsi, %rsi 260 je .LBB4_1 261 cmpq $16, %rsi 262 jae .LBB4_4 263 vxorpd %xmm0, %xmm0, %xmm0 264 xorl %eax, %eax 265 jmp .LBB4_11 266 .LBB4_1: 267 vxorpd %xmm0, %xmm0, %xmm0 268 vsqrtsd %xmm0, %xmm0, %xmm0 269 retq 270 .LBB4_4: 271 movq %rsi, %rax 272 andq $-16, %rax 273 leaq -16(%rax), %rcx 274 movq %rcx, %r8 275 shrq $4, %r8 276 addq $1, %r8 277 testq %rcx, %rcx 278 je .LBB4_5 279 movq %r8, %rcx 280 andq $-2, %rcx 281 vxorpd %xmm0, %xmm0, %xmm0 282 xorl %edx, %edx 283 vxorpd %xmm1, %xmm1, %xmm1 284 vxorpd %xmm2, %xmm2, %xmm2 285 vxorpd %xmm3, %xmm3, %xmm3 286 .LBB4_7: # =>This Inner Loop Header: Depth=1 287 vmovupd (%rdi,%rdx,8), %ymm4 288 vmovupd 32(%rdi,%rdx,8), %ymm5 289 vmovupd 64(%rdi,%rdx,8), %ymm6 290 vmovupd 96(%rdi,%rdx,8), %ymm7 291 vfmadd213pd %ymm0, %ymm4, %ymm4 # ymm4 = (ymm4 * ymm4) + ymm0 292 vfmadd213pd %ymm1, %ymm5, %ymm5 # ymm5 = (ymm5 * ymm5) + ymm1 293 vfmadd213pd %ymm2, %ymm6, %ymm6 # ymm6 = (ymm6 * ymm6) + ymm2 294 vfmadd213pd %ymm3, %ymm7, %ymm7 # ymm7 = (ymm7 * ymm7) + ymm3 295 vmovupd 128(%rdi,%rdx,8), %ymm0 296 vmovupd 160(%rdi,%rdx,8), %ymm1 297 vmovupd 192(%rdi,%rdx,8), %ymm2 298 vmovupd 224(%rdi,%rdx,8), %ymm3 299 vfmadd213pd %ymm4, %ymm0, %ymm0 # ymm0 = (ymm0 * ymm0) + ymm4 300 vfmadd213pd %ymm5, %ymm1, %ymm1 # ymm1 = (ymm1 * ymm1) + ymm5 301 vfmadd213pd %ymm6, %ymm2, %ymm2 # ymm2 = (ymm2 * ymm2) + ymm6 302 vfmadd213pd %ymm7, %ymm3, %ymm3 # ymm3 = (ymm3 * ymm3) + ymm7 303 addq $32, %rdx 304 addq $-2, %rcx 305 jne .LBB4_7 306 testb $1, %r8b 307 je .LBB4_10 308 .LBB4_9: 309 vmovupd (%rdi,%rdx,8), %ymm4 310 vmovupd 32(%rdi,%rdx,8), %ymm5 311 vmovupd 64(%rdi,%rdx,8), %ymm6 312 vmovupd 96(%rdi,%rdx,8), %ymm7 313 vfmadd231pd %ymm4, %ymm4, %ymm0 # ymm0 = (ymm4 * ymm4) + ymm0 314 vfmadd231pd %ymm5, %ymm5, %ymm1 # ymm1 = (ymm5 * ymm5) + ymm1 315 vfmadd231pd %ymm6, %ymm6, %ymm2 # ymm2 = (ymm6 * ymm6) + ymm2 316 vfmadd231pd %ymm7, %ymm7, %ymm3 # ymm3 = (ymm7 * ymm7) + ymm3 317 .LBB4_10: 318 vaddpd %ymm3, %ymm1, %ymm1 319 vaddpd %ymm2, %ymm0, %ymm0 320 vaddpd %ymm1, %ymm0, %ymm0 321 vextractf128 $1, %ymm0, %xmm1 322 vaddpd %xmm1, %xmm0, %xmm0 323 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 324 vaddsd %xmm1, %xmm0, %xmm0 325 cmpq %rsi, %rax 326 je .LBB4_12 327 .LBB4_11: # =>This Inner Loop Header: Depth=1 328 vmovsd (%rdi,%rax,8), %xmm1 # xmm1 = mem[0],zero 329 vfmadd231sd %xmm1, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm1) + xmm0 330 addq $1, %rax 331 cmpq %rax, %rsi 332 jne .LBB4_11 333 .LBB4_12: 334 vsqrtsd %xmm0, %xmm0, %xmm0 335 vzeroupper 336 retq 337 .LBB4_5: 338 vxorpd %xmm0, %xmm0, %xmm0 339 xorl %edx, %edx 340 vxorpd %xmm1, %xmm1, %xmm1 341 vxorpd %xmm2, %xmm2, %xmm2 342 vxorpd %xmm3, %xmm3, %xmm3 343 testb $1, %r8b 344 jne .LBB4_9 345 jmp .LBB4_10 346 .LCPI5_0: 347 .long 0xc0400000 # float -3 348 .LCPI5_1: 349 .long 0xbf000000 # float -0.5 350 .LCPI5_2: 351 .long 0x7fffffff # float NaN 352 .LCPI5_3: 353 .long 0x00800000 # float 1.17549435E-38 354 Norm_F32_F(float*, unsigned long): # @Norm_F32_F(float*, unsigned long) 355 testq %rsi, %rsi 356 je .LBB5_1 357 cmpq $32, %rsi 358 jae .LBB5_4 359 vxorps %xmm0, %xmm0, %xmm0 360 xorl %eax, %eax 361 jmp .LBB5_11 362 .LBB5_1: 363 vxorps %xmm0, %xmm0, %xmm0 364 jmp .LBB5_12 365 .LBB5_4: 366 movq %rsi, %rax 367 andq $-32, %rax 368 leaq -32(%rax), %rcx 369 movq %rcx, %r8 370 shrq $5, %r8 371 addq $1, %r8 372 testq %rcx, %rcx 373 je .LBB5_5 374 movq %r8, %rcx 375 andq $-2, %rcx 376 vxorps %xmm0, %xmm0, %xmm0 377 xorl %edx, %edx 378 vxorps %xmm1, %xmm1, %xmm1 379 vxorps %xmm2, %xmm2, %xmm2 380 vxorps %xmm3, %xmm3, %xmm3 381 .LBB5_7: # =>This Inner Loop Header: Depth=1 382 vmovups (%rdi,%rdx,4), %ymm4 383 vmovups 32(%rdi,%rdx,4), %ymm5 384 vmovups 64(%rdi,%rdx,4), %ymm6 385 vmovups 96(%rdi,%rdx,4), %ymm7 386 vfmadd213ps %ymm0, %ymm4, %ymm4 # ymm4 = (ymm4 * ymm4) + ymm0 387 vfmadd213ps %ymm1, %ymm5, %ymm5 # ymm5 = (ymm5 * ymm5) + ymm1 388 vfmadd213ps %ymm2, %ymm6, %ymm6 # ymm6 = (ymm6 * ymm6) + ymm2 389 vfmadd213ps %ymm3, %ymm7, %ymm7 # ymm7 = (ymm7 * ymm7) + ymm3 390 vmovups 128(%rdi,%rdx,4), %ymm0 391 vmovups 160(%rdi,%rdx,4), %ymm1 392 vmovups 192(%rdi,%rdx,4), %ymm2 393 vmovups 224(%rdi,%rdx,4), %ymm3 394 vfmadd213ps %ymm4, %ymm0, %ymm0 # ymm0 = (ymm0 * ymm0) + ymm4 395 vfmadd213ps %ymm5, %ymm1, %ymm1 # ymm1 = (ymm1 * ymm1) + ymm5 396 vfmadd213ps %ymm6, %ymm2, %ymm2 # ymm2 = (ymm2 * ymm2) + ymm6 397 vfmadd213ps %ymm7, %ymm3, %ymm3 # ymm3 = (ymm3 * ymm3) + ymm7 398 addq $64, %rdx 399 addq $-2, %rcx 400 jne .LBB5_7 401 testb $1, %r8b 402 je .LBB5_10 403 .LBB5_9: 404 vmovups (%rdi,%rdx,4), %ymm4 405 vmovups 32(%rdi,%rdx,4), %ymm5 406 vmovups 64(%rdi,%rdx,4), %ymm6 407 vmovups 96(%rdi,%rdx,4), %ymm7 408 vfmadd231ps %ymm4, %ymm4, %ymm0 # ymm0 = (ymm4 * ymm4) + ymm0 409 vfmadd231ps %ymm5, %ymm5, %ymm1 # ymm1 = (ymm5 * ymm5) + ymm1 410 vfmadd231ps %ymm6, %ymm6, %ymm2 # ymm2 = (ymm6 * ymm6) + ymm2 411 vfmadd231ps %ymm7, %ymm7, %ymm3 # ymm3 = (ymm7 * ymm7) + ymm3 412 .LBB5_10: 413 vaddps %ymm3, %ymm1, %ymm1 414 vaddps %ymm2, %ymm0, %ymm0 415 vaddps %ymm1, %ymm0, %ymm0 416 vextractf128 $1, %ymm0, %xmm1 417 vaddps %xmm1, %xmm0, %xmm0 418 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 419 vaddps %xmm1, %xmm0, %xmm0 420 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 421 vaddss %xmm1, %xmm0, %xmm0 422 cmpq %rsi, %rax 423 je .LBB5_12 424 .LBB5_11: # =>This Inner Loop Header: Depth=1 425 vmovss (%rdi,%rax,4), %xmm1 # xmm1 = mem[0],zero,zero,zero 426 vfmadd231ss %xmm1, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm1) + xmm0 427 addq $1, %rax 428 cmpq %rax, %rsi 429 jne .LBB5_11 430 .LBB5_12: 431 vrsqrtss %xmm0, %xmm0, %xmm1 432 vmulss %xmm1, %xmm0, %xmm2 433 vfmadd213ss .LCPI5_0(%rip), %xmm2, %xmm1 # xmm1 = (xmm2 * xmm1) + mem 434 vmulss .LCPI5_1(%rip), %xmm2, %xmm2 435 vmulss %xmm1, %xmm2, %xmm1 436 vbroadcastss .LCPI5_2(%rip), %xmm2 # xmm2 = [NaN,NaN,NaN,NaN] 437 vandps %xmm2, %xmm0, %xmm0 438 vcmpltss .LCPI5_3(%rip), %xmm0, %xmm0 439 vandnps %xmm1, %xmm0, %xmm0 440 vzeroupper 441 retq 442 .LBB5_5: 443 vxorps %xmm0, %xmm0, %xmm0 444 xorl %edx, %edx 445 vxorps %xmm1, %xmm1, %xmm1 446 vxorps %xmm2, %xmm2, %xmm2 447 vxorps %xmm3, %xmm3, %xmm3 448 testb $1, %r8b 449 jne .LBB5_9 450 jmp .LBB5_10 451 Distance_F64_D(double*, double*, unsigned long): # @Distance_F64_D(double*, double*, unsigned long) 452 testq %rdx, %rdx 453 je .LBB6_1 454 cmpq $16, %rdx 455 jae .LBB6_4 456 vxorpd %xmm0, %xmm0, %xmm0 457 xorl %eax, %eax 458 jmp .LBB6_7 459 .LBB6_1: 460 vxorpd %xmm0, %xmm0, %xmm0 461 vsqrtsd %xmm0, %xmm0, %xmm0 462 retq 463 .LBB6_4: 464 movq %rdx, %rax 465 andq $-16, %rax 466 vxorpd %xmm0, %xmm0, %xmm0 467 xorl %ecx, %ecx 468 vxorpd %xmm1, %xmm1, %xmm1 469 vxorpd %xmm2, %xmm2, %xmm2 470 vxorpd %xmm3, %xmm3, %xmm3 471 .LBB6_5: # =>This Inner Loop Header: Depth=1 472 vmovupd (%rdi,%rcx,8), %ymm4 473 vmovupd 32(%rdi,%rcx,8), %ymm5 474 vmovupd 64(%rdi,%rcx,8), %ymm6 475 vmovupd 96(%rdi,%rcx,8), %ymm7 476 vsubpd (%rsi,%rcx,8), %ymm4, %ymm4 477 vsubpd 32(%rsi,%rcx,8), %ymm5, %ymm5 478 vsubpd 64(%rsi,%rcx,8), %ymm6, %ymm6 479 vsubpd 96(%rsi,%rcx,8), %ymm7, %ymm7 480 vfmadd231pd %ymm4, %ymm4, %ymm0 # ymm0 = (ymm4 * ymm4) + ymm0 481 vfmadd231pd %ymm5, %ymm5, %ymm1 # ymm1 = (ymm5 * ymm5) + ymm1 482 vfmadd231pd %ymm6, %ymm6, %ymm2 # ymm2 = (ymm6 * ymm6) + ymm2 483 vfmadd231pd %ymm7, %ymm7, %ymm3 # ymm3 = (ymm7 * ymm7) + ymm3 484 addq $16, %rcx 485 cmpq %rcx, %rax 486 jne .LBB6_5 487 vaddpd %ymm0, %ymm1, %ymm0 488 vaddpd %ymm0, %ymm2, %ymm0 489 vaddpd %ymm0, %ymm3, %ymm0 490 vextractf128 $1, %ymm0, %xmm1 491 vaddpd %xmm1, %xmm0, %xmm0 492 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 493 vaddsd %xmm1, %xmm0, %xmm0 494 cmpq %rdx, %rax 495 je .LBB6_8 496 .LBB6_7: # =>This Inner Loop Header: Depth=1 497 vmovsd (%rdi,%rax,8), %xmm1 # xmm1 = mem[0],zero 498 vsubsd (%rsi,%rax,8), %xmm1, %xmm1 499 vfmadd231sd %xmm1, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm1) + xmm0 500 addq $1, %rax 501 cmpq %rax, %rdx 502 jne .LBB6_7 503 .LBB6_8: 504 vsqrtsd %xmm0, %xmm0, %xmm0 505 vzeroupper 506 retq 507 .LCPI7_0: 508 .long 0xc0400000 # float -3 509 .LCPI7_1: 510 .long 0xbf000000 # float -0.5 511 .LCPI7_2: 512 .long 0x7fffffff # float NaN 513 .LCPI7_3: 514 .long 0x00800000 # float 1.17549435E-38 515 Distance_F32_F(float*, float*, unsigned long): # @Distance_F32_F(float*, float*, unsigned long) 516 testq %rdx, %rdx 517 je .LBB7_1 518 cmpq $32, %rdx 519 jae .LBB7_4 520 vxorps %xmm0, %xmm0, %xmm0 521 xorl %eax, %eax 522 jmp .LBB7_7 523 .LBB7_1: 524 vxorps %xmm0, %xmm0, %xmm0 525 jmp .LBB7_8 526 .LBB7_4: 527 movq %rdx, %rax 528 andq $-32, %rax 529 vxorps %xmm0, %xmm0, %xmm0 530 xorl %ecx, %ecx 531 vxorps %xmm1, %xmm1, %xmm1 532 vxorps %xmm2, %xmm2, %xmm2 533 vxorps %xmm3, %xmm3, %xmm3 534 .LBB7_5: # =>This Inner Loop Header: Depth=1 535 vmovups (%rdi,%rcx,4), %ymm4 536 vmovups 32(%rdi,%rcx,4), %ymm5 537 vmovups 64(%rdi,%rcx,4), %ymm6 538 vmovups 96(%rdi,%rcx,4), %ymm7 539 vsubps (%rsi,%rcx,4), %ymm4, %ymm4 540 vsubps 32(%rsi,%rcx,4), %ymm5, %ymm5 541 vsubps 64(%rsi,%rcx,4), %ymm6, %ymm6 542 vsubps 96(%rsi,%rcx,4), %ymm7, %ymm7 543 vfmadd231ps %ymm4, %ymm4, %ymm0 # ymm0 = (ymm4 * ymm4) + ymm0 544 vfmadd231ps %ymm5, %ymm5, %ymm1 # ymm1 = (ymm5 * ymm5) + ymm1 545 vfmadd231ps %ymm6, %ymm6, %ymm2 # ymm2 = (ymm6 * ymm6) + ymm2 546 vfmadd231ps %ymm7, %ymm7, %ymm3 # ymm3 = (ymm7 * ymm7) + ymm3 547 addq $32, %rcx 548 cmpq %rcx, %rax 549 jne .LBB7_5 550 vaddps %ymm0, %ymm1, %ymm0 551 vaddps %ymm0, %ymm2, %ymm0 552 vaddps %ymm0, %ymm3, %ymm0 553 vextractf128 $1, %ymm0, %xmm1 554 vaddps %xmm1, %xmm0, %xmm0 555 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 556 vaddps %xmm1, %xmm0, %xmm0 557 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 558 vaddss %xmm1, %xmm0, %xmm0 559 cmpq %rdx, %rax 560 je .LBB7_8 561 .LBB7_7: # =>This Inner Loop Header: Depth=1 562 vmovss (%rdi,%rax,4), %xmm1 # xmm1 = mem[0],zero,zero,zero 563 vsubss (%rsi,%rax,4), %xmm1, %xmm1 564 vfmadd231ss %xmm1, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm1) + xmm0 565 addq $1, %rax 566 cmpq %rax, %rdx 567 jne .LBB7_7 568 .LBB7_8: 569 vrsqrtss %xmm0, %xmm0, %xmm1 570 vmulss %xmm1, %xmm0, %xmm2 571 vfmadd213ss .LCPI7_0(%rip), %xmm2, %xmm1 # xmm1 = (xmm2 * xmm1) + mem 572 vmulss .LCPI7_1(%rip), %xmm2, %xmm2 573 vmulss %xmm1, %xmm2, %xmm1 574 vbroadcastss .LCPI7_2(%rip), %xmm2 # xmm2 = [NaN,NaN,NaN,NaN] 575 vandps %xmm2, %xmm0, %xmm0 576 vcmpltss .LCPI7_3(%rip), %xmm0, %xmm0 577 vandnps %xmm1, %xmm0, %xmm0 578 vzeroupper 579 retq 580 .LCPI8_0: 581 .quad 0x7fffffffffffffff # double NaN 582 .LCPI8_1: 583 .quad 0x7fffffffffffffff # double NaN 584 .quad 0x7fffffffffffffff # double NaN 585 ManhattanNorm_F64_D(double*, unsigned long): # @ManhattanNorm_F64_D(double*, unsigned long) 586 testq %rsi, %rsi 587 je .LBB8_1 588 cmpq $16, %rsi 589 jae .LBB8_4 590 vxorpd %xmm0, %xmm0, %xmm0 591 xorl %eax, %eax 592 jmp .LBB8_7 593 .LBB8_1: 594 vxorps %xmm0, %xmm0, %xmm0 595 retq 596 .LBB8_4: 597 movq %rsi, %rax 598 andq $-16, %rax 599 vxorpd %xmm0, %xmm0, %xmm0 600 vbroadcastsd .LCPI8_0(%rip), %ymm1 # ymm1 = [NaN,NaN,NaN,NaN] 601 xorl %ecx, %ecx 602 vxorpd %xmm2, %xmm2, %xmm2 603 vxorpd %xmm3, %xmm3, %xmm3 604 vxorpd %xmm4, %xmm4, %xmm4 605 .LBB8_5: # =>This Inner Loop Header: Depth=1 606 vandpd (%rdi,%rcx,8), %ymm1, %ymm5 607 vaddpd %ymm0, %ymm5, %ymm0 608 vandpd 32(%rdi,%rcx,8), %ymm1, %ymm5 609 vaddpd %ymm2, %ymm5, %ymm2 610 vandpd 64(%rdi,%rcx,8), %ymm1, %ymm5 611 vandpd 96(%rdi,%rcx,8), %ymm1, %ymm6 612 vaddpd %ymm3, %ymm5, %ymm3 613 vaddpd %ymm4, %ymm6, %ymm4 614 addq $16, %rcx 615 cmpq %rcx, %rax 616 jne .LBB8_5 617 vaddpd %ymm0, %ymm2, %ymm0 618 vaddpd %ymm0, %ymm3, %ymm0 619 vaddpd %ymm0, %ymm4, %ymm0 620 vextractf128 $1, %ymm0, %xmm1 621 vaddpd %xmm1, %xmm0, %xmm0 622 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 623 vaddsd %xmm1, %xmm0, %xmm0 624 cmpq %rsi, %rax 625 je .LBB8_9 626 .LBB8_7: 627 vmovapd .LCPI8_1(%rip), %xmm1 # xmm1 = [NaN,NaN] 628 .LBB8_8: # =>This Inner Loop Header: Depth=1 629 vmovsd (%rdi,%rax,8), %xmm2 # xmm2 = mem[0],zero 630 vandpd %xmm1, %xmm2, %xmm2 631 vaddsd %xmm0, %xmm2, %xmm0 632 addq $1, %rax 633 cmpq %rax, %rsi 634 jne .LBB8_8 635 .LBB8_9: 636 vzeroupper 637 retq 638 .LCPI9_0: 639 .long 0x7fffffff # float NaN 640 ManhattanNorm_F32_F(float*, unsigned long): # @ManhattanNorm_F32_F(float*, unsigned long) 641 testq %rsi, %rsi 642 je .LBB9_1 643 cmpq $32, %rsi 644 jae .LBB9_4 645 vxorps %xmm0, %xmm0, %xmm0 646 xorl %eax, %eax 647 jmp .LBB9_7 648 .LBB9_1: 649 vxorps %xmm0, %xmm0, %xmm0 650 retq 651 .LBB9_4: 652 movq %rsi, %rax 653 andq $-32, %rax 654 vxorps %xmm0, %xmm0, %xmm0 655 vbroadcastss .LCPI9_0(%rip), %ymm1 # ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN] 656 xorl %ecx, %ecx 657 vxorps %xmm2, %xmm2, %xmm2 658 vxorps %xmm3, %xmm3, %xmm3 659 vxorps %xmm4, %xmm4, %xmm4 660 .LBB9_5: # =>This Inner Loop Header: Depth=1 661 vandps (%rdi,%rcx,4), %ymm1, %ymm5 662 vaddps %ymm0, %ymm5, %ymm0 663 vandps 32(%rdi,%rcx,4), %ymm1, %ymm5 664 vaddps %ymm2, %ymm5, %ymm2 665 vandps 64(%rdi,%rcx,4), %ymm1, %ymm5 666 vandps 96(%rdi,%rcx,4), %ymm1, %ymm6 667 vaddps %ymm3, %ymm5, %ymm3 668 vaddps %ymm4, %ymm6, %ymm4 669 addq $32, %rcx 670 cmpq %rcx, %rax 671 jne .LBB9_5 672 vaddps %ymm0, %ymm2, %ymm0 673 vaddps %ymm0, %ymm3, %ymm0 674 vaddps %ymm0, %ymm4, %ymm0 675 vextractf128 $1, %ymm0, %xmm1 676 vaddps %xmm1, %xmm0, %xmm0 677 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 678 vaddps %xmm1, %xmm0, %xmm0 679 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 680 vaddss %xmm1, %xmm0, %xmm0 681 cmpq %rsi, %rax 682 je .LBB9_9 683 .LBB9_7: 684 vbroadcastss .LCPI9_0(%rip), %xmm1 # xmm1 = [NaN,NaN,NaN,NaN] 685 .LBB9_8: # =>This Inner Loop Header: Depth=1 686 vmovss (%rdi,%rax,4), %xmm2 # xmm2 = mem[0],zero,zero,zero 687 vandps %xmm1, %xmm2, %xmm2 688 vaddss %xmm0, %xmm2, %xmm0 689 addq $1, %rax 690 cmpq %rax, %rsi 691 jne .LBB9_8 692 .LBB9_9: 693 vzeroupper 694 retq 695 .LCPI10_0: 696 .quad 0x7fffffffffffffff # double NaN 697 .LCPI10_1: 698 .quad 0x7fffffffffffffff # double NaN 699 .quad 0x7fffffffffffffff # double NaN 700 ManhattanDistance_F64_D(double*, double*, unsigned long): # @ManhattanDistance_F64_D(double*, double*, unsigned long) 701 testq %rdx, %rdx 702 je .LBB10_1 703 cmpq $16, %rdx 704 jae .LBB10_4 705 vxorpd %xmm0, %xmm0, %xmm0 706 xorl %eax, %eax 707 jmp .LBB10_7 708 .LBB10_1: 709 vxorps %xmm0, %xmm0, %xmm0 710 retq 711 .LBB10_4: 712 movq %rdx, %rax 713 andq $-16, %rax 714 vxorpd %xmm0, %xmm0, %xmm0 715 vbroadcastsd .LCPI10_0(%rip), %ymm1 # ymm1 = [NaN,NaN,NaN,NaN] 716 xorl %ecx, %ecx 717 vxorpd %xmm2, %xmm2, %xmm2 718 vxorpd %xmm3, %xmm3, %xmm3 719 vxorpd %xmm4, %xmm4, %xmm4 720 .LBB10_5: # =>This Inner Loop Header: Depth=1 721 vmovupd (%rdi,%rcx,8), %ymm5 722 vmovupd 32(%rdi,%rcx,8), %ymm6 723 vmovupd 64(%rdi,%rcx,8), %ymm7 724 vmovupd 96(%rdi,%rcx,8), %ymm8 725 vsubpd (%rsi,%rcx,8), %ymm5, %ymm5 726 vsubpd 32(%rsi,%rcx,8), %ymm6, %ymm6 727 vsubpd 64(%rsi,%rcx,8), %ymm7, %ymm7 728 vsubpd 96(%rsi,%rcx,8), %ymm8, %ymm8 729 vandpd %ymm1, %ymm5, %ymm5 730 vaddpd %ymm0, %ymm5, %ymm0 731 vandpd %ymm1, %ymm6, %ymm5 732 vaddpd %ymm2, %ymm5, %ymm2 733 vandpd %ymm1, %ymm7, %ymm5 734 vaddpd %ymm3, %ymm5, %ymm3 735 vandpd %ymm1, %ymm8, %ymm5 736 vaddpd %ymm4, %ymm5, %ymm4 737 addq $16, %rcx 738 cmpq %rcx, %rax 739 jne .LBB10_5 740 vaddpd %ymm0, %ymm2, %ymm0 741 vaddpd %ymm0, %ymm3, %ymm0 742 vaddpd %ymm0, %ymm4, %ymm0 743 vextractf128 $1, %ymm0, %xmm1 744 vaddpd %xmm1, %xmm0, %xmm0 745 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 746 vaddsd %xmm1, %xmm0, %xmm0 747 cmpq %rdx, %rax 748 je .LBB10_9 749 .LBB10_7: 750 vmovapd .LCPI10_1(%rip), %xmm1 # xmm1 = [NaN,NaN] 751 .LBB10_8: # =>This Inner Loop Header: Depth=1 752 vmovsd (%rdi,%rax,8), %xmm2 # xmm2 = mem[0],zero 753 vsubsd (%rsi,%rax,8), %xmm2, %xmm2 754 vandpd %xmm1, %xmm2, %xmm2 755 vaddsd %xmm0, %xmm2, %xmm0 756 addq $1, %rax 757 cmpq %rax, %rdx 758 jne .LBB10_8 759 .LBB10_9: 760 vzeroupper 761 retq 762 .LCPI11_0: 763 .long 0x7fffffff # float NaN 764 ManhattanDistance_F32_F(float*, float*, unsigned long): # @ManhattanDistance_F32_F(float*, float*, unsigned long) 765 testq %rdx, %rdx 766 je .LBB11_1 767 cmpq $32, %rdx 768 jae .LBB11_4 769 vxorps %xmm0, %xmm0, %xmm0 770 xorl %eax, %eax 771 jmp .LBB11_7 772 .LBB11_1: 773 vxorps %xmm0, %xmm0, %xmm0 774 retq 775 .LBB11_4: 776 movq %rdx, %rax 777 andq $-32, %rax 778 vxorps %xmm0, %xmm0, %xmm0 779 vbroadcastss .LCPI11_0(%rip), %ymm1 # ymm1 = [NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN] 780 xorl %ecx, %ecx 781 vxorps %xmm2, %xmm2, %xmm2 782 vxorps %xmm3, %xmm3, %xmm3 783 vxorps %xmm4, %xmm4, %xmm4 784 .LBB11_5: # =>This Inner Loop Header: Depth=1 785 vmovups (%rdi,%rcx,4), %ymm5 786 vmovups 32(%rdi,%rcx,4), %ymm6 787 vmovups 64(%rdi,%rcx,4), %ymm7 788 vmovups 96(%rdi,%rcx,4), %ymm8 789 vsubps (%rsi,%rcx,4), %ymm5, %ymm5 790 vsubps 32(%rsi,%rcx,4), %ymm6, %ymm6 791 vsubps 64(%rsi,%rcx,4), %ymm7, %ymm7 792 vsubps 96(%rsi,%rcx,4), %ymm8, %ymm8 793 vandps %ymm1, %ymm5, %ymm5 794 vaddps %ymm0, %ymm5, %ymm0 795 vandps %ymm1, %ymm6, %ymm5 796 vaddps %ymm2, %ymm5, %ymm2 797 vandps %ymm1, %ymm7, %ymm5 798 vaddps %ymm3, %ymm5, %ymm3 799 vandps %ymm1, %ymm8, %ymm5 800 vaddps %ymm4, %ymm5, %ymm4 801 addq $32, %rcx 802 cmpq %rcx, %rax 803 jne .LBB11_5 804 vaddps %ymm0, %ymm2, %ymm0 805 vaddps %ymm0, %ymm3, %ymm0 806 vaddps %ymm0, %ymm4, %ymm0 807 vextractf128 $1, %ymm0, %xmm1 808 vaddps %xmm1, %xmm0, %xmm0 809 vpermilpd $1, %xmm0, %xmm1 # xmm1 = xmm0[1,0] 810 vaddps %xmm1, %xmm0, %xmm0 811 vmovshdup %xmm0, %xmm1 # xmm1 = xmm0[1,1,3,3] 812 vaddss %xmm1, %xmm0, %xmm0 813 cmpq %rdx, %rax 814 je .LBB11_9 815 .LBB11_7: 816 vbroadcastss .LCPI11_0(%rip), %xmm1 # xmm1 = [NaN,NaN,NaN,NaN] 817 .LBB11_8: # =>This Inner Loop Header: Depth=1 818 vmovss (%rdi,%rax,4), %xmm2 # xmm2 = mem[0],zero,zero,zero 819 vsubss (%rsi,%rax,4), %xmm2, %xmm2 820 vandps %xmm1, %xmm2, %xmm2 821 vaddss %xmm0, %xmm2, %xmm0 822 addq $1, %rax 823 cmpq %rax, %rdx 824 jne .LBB11_8 825 .LBB11_9: 826 vzeroupper 827 retq