gitee.com/quant1x/gox@v1.7.6/num/asm/matrix.go (about) 1 package main 2 3 import ( 4 . "github.com/mmcloughlin/avo/build" 5 . "github.com/mmcloughlin/avo/operand" 6 . "github.com/mmcloughlin/avo/reg" 7 ) 8 9 func genMat4Mul_F64() { 10 11 TEXT("Mat4Mul_AVX2_F64", NOSPLIT, "func(x, y, z []float64)") 12 Pragma("noescape") 13 Load(Param("x").Base(), RDI) 14 Load(Param("y").Base(), RSI) 15 Load(Param("z").Base(), RDX) 16 17 VBROADCASTSD(Mem{Base: RSI}, Y0) 18 VMOVUPD(Mem{Base: RDX}, Y1) 19 VMOVUPD(Mem{Base: RDX}.Offset(32), Y2) 20 VMOVUPD(Mem{Base: RDX}.Offset(64), Y3) 21 VMOVUPD(Mem{Base: RDX}.Offset(96), Y4) 22 VMULPD(Y0, Y1, Y0) 23 VBROADCASTSD(Mem{Base: RSI}.Offset(8), Y5) 24 VFMADD213PD(Y0, Y2, Y5) 25 VBROADCASTSD(Mem{Base: RSI}.Offset(16), Y0) 26 VFMADD213PD(Y5, Y3, Y0) 27 VBROADCASTSD(Mem{Base: RSI}.Offset(24), Y5) 28 VFMADD213PD(Y0, Y4, Y5) 29 VMOVUPD(Y5, Mem{Base: RDI}) 30 VBROADCASTSD(Mem{Base: RSI}.Offset(32), Y0) 31 VMULPD(Y0, Y1, Y0) 32 VBROADCASTSD(Mem{Base: RSI}.Offset(40), Y1) 33 VFMADD213PD(Y0, Y2, Y1) 34 VBROADCASTSD(Mem{Base: RSI}.Offset(48), Y0) 35 VFMADD213PD(Y1, Y3, Y0) 36 VBROADCASTSD(Mem{Base: RSI}.Offset(56), Y1) 37 VFMADD213PD(Y0, Y4, Y1) 38 VMOVUPD(Y1, Mem{Base: RDI}.Offset(32)) 39 VBROADCASTSD(Mem{Base: RSI}.Offset(64), Y0) 40 VMOVUPD(Mem{Base: RDX}, Y1) 41 VMOVUPD(Mem{Base: RDX}.Offset(32), Y2) 42 VMOVUPD(Mem{Base: RDX}.Offset(64), Y3) 43 VMOVUPD(Mem{Base: RDX}.Offset(96), Y4) 44 VMULPD(Y0, Y1, Y0) 45 VBROADCASTSD(Mem{Base: RSI}.Offset(72), Y5) 46 VFMADD213PD(Y0, Y2, Y5) 47 VBROADCASTSD(Mem{Base: RSI}.Offset(80), Y0) 48 VFMADD213PD(Y5, Y3, Y0) 49 VBROADCASTSD(Mem{Base: RSI}.Offset(88), Y5) 50 VFMADD213PD(Y0, Y4, Y5) 51 VMOVUPD(Y5, Mem{Base: RDI}.Offset(64)) 52 VBROADCASTSD(Mem{Base: RSI}.Offset(96), Y0) 53 VMULPD(Y0, Y1, Y0) 54 VBROADCASTSD(Mem{Base: RSI}.Offset(104), Y1) 55 VFMADD213PD(Y0, Y2, Y1) 56 VBROADCASTSD(Mem{Base: RSI}.Offset(112), Y0) 57 VFMADD213PD(Y1, Y3, Y0) 58 VBROADCASTSD(Mem{Base: RSI}.Offset(120), Y1) 59 VFMADD213PD(Y0, Y4, Y1) 60 VMOVUPD(Y1, Mem{Base: RDI}.Offset(96)) 61 VZEROUPPER() 62 RET() 63 } 64 65 func genMat4Mul_F32() { 66 67 TEXT("Mat4Mul_AVX2_F32", NOSPLIT, "func(x, y, z []float32)") 68 Pragma("noescape") 69 Load(Param("x").Base(), RDI) 70 Load(Param("y").Base(), RSI) 71 Load(Param("z").Base(), RDX) 72 73 VBROADCASTF128(Mem{Base: RDX}, Y0) 74 VBROADCASTF128(Mem{Base: RDX}.Offset(16), Y1) 75 VBROADCASTF128(Mem{Base: RDX}.Offset(32), Y2) 76 VBROADCASTF128(Mem{Base: RDX}.Offset(48), Y3) 77 VMOVSS(Mem{Base: RSI}.Offset(16), X4) 78 VMOVSS(Mem{Base: RSI}, X5) 79 VSHUFPS(Imm(0), X4, X5, X4) 80 VMOVSS(Mem{Base: RSI}.Offset(4), X5) 81 VMOVSS(Mem{Base: RSI}.Offset(8), X6) 82 VMOVSS(Mem{Base: RSI}.Offset(12), X7) 83 VPERMPD(Imm(80), Y4, Y4) 84 VMULPS(Y4, Y0, Y0) 85 VMOVSS(Mem{Base: RSI}.Offset(20), X4) 86 VSHUFPS(Imm(0), X4, X5, X4) 87 VPERMPD(Imm(80), Y4, Y4) 88 VFMADD213PS(Y0, Y1, Y4) 89 VMOVSS(Mem{Base: RSI}.Offset(24), X0) 90 VSHUFPS(Imm(0), X0, X6, X0) 91 VPERMPD(Imm(80), Y0, Y0) 92 VFMADD213PS(Y4, Y2, Y0) 93 VMOVSS(Mem{Base: RSI}.Offset(28), X1) 94 VSHUFPS(Imm(0), X1, X7, X1) 95 VPERMPD(Imm(80), Y1, Y1) 96 VFMADD213PS(Y0, Y3, Y1) 97 VBROADCASTF128(Mem{Base: RDX}, Y0) 98 VBROADCASTF128(Mem{Base: RDX}.Offset(16), Y2) 99 VBROADCASTF128(Mem{Base: RDX}.Offset(32), Y3) 100 VMOVUPS(Y1, Mem{Base: RDI}) 101 VBROADCASTF128(Mem{Base: RDX}.Offset(48), Y1) 102 VMOVSS(Mem{Base: RSI}.Offset(48), X4) 103 VMOVSS(Mem{Base: RSI}.Offset(32), X5) 104 VSHUFPS(Imm(0), X4, X5, X4) 105 VMOVSS(Mem{Base: RSI}.Offset(36), X5) 106 VMOVSS(Mem{Base: RSI}.Offset(40), X6) 107 VMOVSS(Mem{Base: RSI}.Offset(44), X7) 108 VPERMPD(Imm(80), Y4, Y4) 109 VMULPS(Y4, Y0, Y0) 110 VMOVSS(Mem{Base: RSI}.Offset(52), X4) 111 VSHUFPS(Imm(0), X4, X5, X4) 112 VPERMPD(Imm(80), Y4, Y4) 113 VFMADD213PS(Y0, Y2, Y4) 114 VMOVSS(Mem{Base: RSI}.Offset(56), X0) 115 VSHUFPS(Imm(0), X0, X6, X0) 116 VPERMPD(Imm(80), Y0, Y0) 117 VFMADD213PS(Y4, Y3, Y0) 118 VMOVSS(Mem{Base: RSI}.Offset(60), X2) 119 VSHUFPS(Imm(0), X2, X7, X2) 120 VPERMPD(Imm(80), Y2, Y2) 121 VFMADD213PS(Y0, Y1, Y2) 122 VMOVUPS(Y2, Mem{Base: RDI}.Offset(32)) 123 VZEROUPPER() 124 RET() 125 } 126 127 func genMatMul_F64() { 128 129 TEXT("MatMul_AVX2_F64", 0, "func(x, y, z []float64, a, b, c int)") 130 Pragma("noescape") 131 Load(Param("x").Base(), RDI) 132 Load(Param("y").Base(), RSI) 133 Load(Param("z").Base(), RDX) 134 Load(Param("a"), RCX) 135 Load(Param("b"), R8) 136 Load(Param("c"), R9) 137 138 PUSHQ(RBP) 139 PUSHQ(R15) 140 PUSHQ(R14) 141 PUSHQ(R13) 142 PUSHQ(R12) 143 PUSHQ(RBX) 144 MOVQ(RDX, Mem{Base: RSP}.Offset(-16)) 145 MOVQ(RCX, Mem{Base: RSP}.Offset(-8)) 146 TESTQ(RCX, RCX) 147 JE(LabelRef("LBB4_13")) 148 TESTQ(R8, R8) 149 JE(LabelRef("LBB4_13")) 150 TESTQ(R9, R9) 151 JE(LabelRef("LBB4_13")) 152 MOVQ(R9, R12) 153 ANDQ(I32(-16), R12) 154 MOVQ(Mem{Base: RSP}.Offset(-16), RAX) 155 LEAQ(Mem{Base: RAX}.Offset(96), RCX) 156 XORQ(R15, R15) 157 LEAQ(Mem{Base: R15}.Idx(R9, 8), R11) 158 LEAQ(Mem{Base: RDI}.Offset(96), RBX) 159 XORL(R14L, R14L) 160 JMP(LabelRef("LBB4_4")) 161 162 Label("LBB4_12") 163 { 164 ADDQ(Imm(1), R14) 165 ADDQ(R11, RBX) 166 ADDQ(R11, RDI) 167 CMPQ(R14, Mem{Base: RSP}.Offset(-8)) 168 JE(LabelRef("LBB4_13")) 169 } 170 171 Label("LBB4_4") 172 { 173 MOVQ(R14, R15) 174 IMULQ(R8, R15) 175 MOVQ(Mem{Base: RSP}.Offset(-16), R13) 176 MOVQ(RCX, RAX) 177 XORL(EBP, EBP) 178 JMP(LabelRef("LBB4_5")) 179 } 180 181 Label("LBB4_11") 182 { 183 ADDQ(Imm(1), RBP) 184 ADDQ(R11, RAX) 185 ADDQ(R11, R13) 186 CMPQ(RBP, R8) 187 JE(LabelRef("LBB4_12")) 188 } 189 190 Label("LBB4_5") 191 { 192 LEAQ(Mem{Base: R15}.Idx(RBP, 1), RDX) 193 VMOVSD(Mem{Base: RSI}.Idx(RDX, 8), X0) 194 CMPQ(R9, Imm(16)) 195 JAE(LabelRef("LBB4_7")) 196 XORL(EDX, EDX) 197 JMP(LabelRef("LBB4_10")) 198 } 199 200 Label("LBB4_7") 201 { 202 VBROADCASTSD(X0, Y1) 203 XORL(R10L, R10L) 204 } 205 206 Label("LBB4_8") 207 { 208 VMOVUPD(Mem{Base: RAX}.Idx(R10, 8).Offset(-96), Y2) 209 VMOVUPD(Mem{Base: RAX}.Idx(R10, 8).Offset(-64), Y3) 210 VMOVUPD(Mem{Base: RAX}.Idx(R10, 8).Offset(-32), Y4) 211 VMOVUPD(Mem{Base: RAX}.Idx(R10, 8), Y5) 212 VFMADD213PD(Mem{Base: RBX}.Idx(R10, 8).Offset(-96), Y1, Y2) 213 VFMADD213PD(Mem{Base: RBX}.Idx(R10, 8).Offset(-64), Y1, Y3) 214 VFMADD213PD(Mem{Base: RBX}.Idx(R10, 8).Offset(-32), Y1, Y4) 215 VFMADD213PD(Mem{Base: RBX}.Idx(R10, 8), Y1, Y5) 216 VMOVUPD(Y2, Mem{Base: RBX}.Idx(R10, 8).Offset(-96)) 217 VMOVUPD(Y3, Mem{Base: RBX}.Idx(R10, 8).Offset(-64)) 218 VMOVUPD(Y4, Mem{Base: RBX}.Idx(R10, 8).Offset(-32)) 219 VMOVUPD(Y5, Mem{Base: RBX}.Idx(R10, 8)) 220 ADDQ(Imm(16), R10) 221 CMPQ(R12, R10) 222 JNE(LabelRef("LBB4_8")) 223 MOVQ(R12, RDX) 224 CMPQ(R12, R9) 225 JE(LabelRef("LBB4_11")) 226 } 227 228 Label("LBB4_10") 229 { 230 VMOVSD(Mem{Base: R13}.Idx(RDX, 8), X1) 231 VFMADD213SD(Mem{Base: RDI}.Idx(RDX, 8), X0, X1) 232 VMOVSD(X1, Mem{Base: RDI}.Idx(RDX, 8)) 233 ADDQ(Imm(1), RDX) 234 CMPQ(R9, RDX) 235 JNE(LabelRef("LBB4_10")) 236 JMP(LabelRef("LBB4_11")) 237 } 238 239 Label("LBB4_13") 240 { 241 POPQ(RBX) 242 POPQ(R12) 243 POPQ(R13) 244 POPQ(R14) 245 POPQ(R15) 246 POPQ(RBP) 247 VZEROUPPER() 248 RET() 249 } 250 } 251 252 func genMatMul_F32() { 253 254 TEXT("MatMul_AVX2_F32", 0, "func(x, y, z []float32, a, b, c int)") 255 Pragma("noescape") 256 Load(Param("x").Base(), RDI) 257 Load(Param("y").Base(), RSI) 258 Load(Param("z").Base(), RDX) 259 Load(Param("a"), RCX) 260 Load(Param("b"), R8) 261 Load(Param("c"), R9) 262 263 PUSHQ(RBP) 264 PUSHQ(R15) 265 PUSHQ(R14) 266 PUSHQ(R13) 267 PUSHQ(R12) 268 PUSHQ(RBX) 269 MOVQ(RDX, Mem{Base: RSP}.Offset(-16)) 270 MOVQ(RCX, Mem{Base: RSP}.Offset(-8)) 271 TESTQ(RCX, RCX) 272 JE(LabelRef("LBB5_13")) 273 TESTQ(R8, R8) 274 JE(LabelRef("LBB5_13")) 275 TESTQ(R9, R9) 276 JE(LabelRef("LBB5_13")) 277 MOVQ(R9, R12) 278 ANDQ(I32(-32), R12) 279 MOVQ(Mem{Base: RSP}.Offset(-16), RAX) 280 LEAQ(Mem{Base: RAX}.Offset(96), RCX) 281 XORQ(R15, R15) 282 LEAQ(Mem{Base: R15}.Idx(R9, 4), R11) 283 LEAQ(Mem{Base: RDI}.Offset(96), RBX) 284 XORL(R14L, R14L) 285 JMP(LabelRef("LBB5_4")) 286 287 Label("LBB5_12") 288 { 289 ADDQ(Imm(1), R14) 290 ADDQ(R11, RBX) 291 ADDQ(R11, RDI) 292 CMPQ(R14, Mem{Base: RSP}.Offset(-8)) 293 JE(LabelRef("LBB5_13")) 294 } 295 296 Label("LBB5_4") 297 { 298 MOVQ(R14, R15) 299 IMULQ(R8, R15) 300 MOVQ(Mem{Base: RSP}.Offset(-16), R13) 301 MOVQ(RCX, RAX) 302 XORL(EBP, EBP) 303 JMP(LabelRef("LBB5_5")) 304 } 305 306 Label("LBB5_11") 307 { 308 ADDQ(Imm(1), RBP) 309 ADDQ(R11, RAX) 310 ADDQ(R11, R13) 311 CMPQ(RBP, R8) 312 JE(LabelRef("LBB5_12")) 313 } 314 315 Label("LBB5_5") 316 { 317 LEAQ(Mem{Base: R15}.Idx(RBP, 1), RDX) 318 VMOVSS(Mem{Base: RSI}.Idx(RDX, 4), X0) 319 CMPQ(R9, Imm(32)) 320 JAE(LabelRef("LBB5_7")) 321 XORL(EDX, EDX) 322 JMP(LabelRef("LBB5_10")) 323 } 324 325 Label("LBB5_7") 326 { 327 VBROADCASTSS(X0, Y1) 328 XORL(R10L, R10L) 329 } 330 331 Label("LBB5_8") 332 { 333 VMOVUPS(Mem{Base: RAX}.Idx(R10, 4).Offset(-96), Y2) 334 VMOVUPS(Mem{Base: RAX}.Idx(R10, 4).Offset(-64), Y3) 335 VMOVUPS(Mem{Base: RAX}.Idx(R10, 4).Offset(-32), Y4) 336 VMOVUPS(Mem{Base: RAX}.Idx(R10, 4), Y5) 337 VFMADD213PS(Mem{Base: RBX}.Idx(R10, 4).Offset(-96), Y1, Y2) 338 VFMADD213PS(Mem{Base: RBX}.Idx(R10, 4).Offset(-64), Y1, Y3) 339 VFMADD213PS(Mem{Base: RBX}.Idx(R10, 4).Offset(-32), Y1, Y4) 340 VFMADD213PS(Mem{Base: RBX}.Idx(R10, 4), Y1, Y5) 341 VMOVUPS(Y2, Mem{Base: RBX}.Idx(R10, 4).Offset(-96)) 342 VMOVUPS(Y3, Mem{Base: RBX}.Idx(R10, 4).Offset(-64)) 343 VMOVUPS(Y4, Mem{Base: RBX}.Idx(R10, 4).Offset(-32)) 344 VMOVUPS(Y5, Mem{Base: RBX}.Idx(R10, 4)) 345 ADDQ(Imm(32), R10) 346 CMPQ(R12, R10) 347 JNE(LabelRef("LBB5_8")) 348 MOVQ(R12, RDX) 349 CMPQ(R12, R9) 350 JE(LabelRef("LBB5_11")) 351 } 352 353 Label("LBB5_10") 354 { 355 VMOVSS(Mem{Base: R13}.Idx(RDX, 4), X1) 356 VFMADD213SS(Mem{Base: RDI}.Idx(RDX, 4), X0, X1) 357 VMOVSS(X1, Mem{Base: RDI}.Idx(RDX, 4)) 358 ADDQ(Imm(1), RDX) 359 CMPQ(R9, RDX) 360 JNE(LabelRef("LBB5_10")) 361 JMP(LabelRef("LBB5_11")) 362 } 363 364 Label("LBB5_13") 365 { 366 POPQ(RBX) 367 POPQ(R12) 368 POPQ(R13) 369 POPQ(R14) 370 POPQ(R15) 371 POPQ(RBP) 372 VZEROUPPER() 373 RET() 374 } 375 } 376 377 func genMatMulVec_F64() { 378 379 TEXT("MatMulVec_AVX2_F64", 0, "func(x, y, z []float64, a, b int)") 380 Pragma("noescape") 381 Load(Param("x").Base(), RDI) 382 Load(Param("y").Base(), RSI) 383 Load(Param("z").Base(), RDX) 384 Load(Param("a"), RCX) 385 Load(Param("b"), R8) 386 387 PUSHQ(RBX) 388 TESTQ(RCX, RCX) 389 JE(LabelRef("LBB6_10")) 390 TESTQ(R8, R8) 391 JE(LabelRef("LBB6_10")) 392 MOVQ(R8, R9) 393 ANDQ(I32(-16), R9) 394 LEAQ(Mem{Base: RSI}.Offset(96), RAX) 395 XORQ(R10, R10) 396 LEAQ(Mem{Base: R10}.Idx(R8, 8), R10) 397 XORL(R11L, R11L) 398 JMP(LabelRef("LBB6_3")) 399 400 Label("LBB6_9") 401 { 402 VMOVSD(X0, Mem{Base: RDI}.Idx(R11, 8)) 403 ADDQ(Imm(1), R11) 404 ADDQ(R10, RAX) 405 ADDQ(R10, RSI) 406 CMPQ(R11, RCX) 407 JE(LabelRef("LBB6_10")) 408 } 409 410 Label("LBB6_3") 411 { 412 VMOVQ(Mem{Base: RDI}.Idx(R11, 8), X0) 413 CMPQ(R8, Imm(16)) 414 JAE(LabelRef("LBB6_5")) 415 XORL(EBX, EBX) 416 JMP(LabelRef("LBB6_8")) 417 } 418 419 Label("LBB6_5") 420 { 421 VMOVQ(X0, X0) 422 VXORPD(X1, X1, X1) 423 XORL(EBX, EBX) 424 VXORPD(X2, X2, X2) 425 VXORPD(X3, X3, X3) 426 } 427 428 Label("LBB6_6") 429 { 430 VMOVUPD(Mem{Base: RDX}.Idx(RBX, 8), Y4) 431 VMOVUPD(Mem{Base: RDX}.Idx(RBX, 8).Offset(32), Y5) 432 VMOVUPD(Mem{Base: RDX}.Idx(RBX, 8).Offset(64), Y6) 433 VMOVUPD(Mem{Base: RDX}.Idx(RBX, 8).Offset(96), Y7) 434 VFMADD231PD(Mem{Base: RAX}.Idx(RBX, 8).Offset(-96), Y4, Y0) 435 VFMADD231PD(Mem{Base: RAX}.Idx(RBX, 8).Offset(-64), Y5, Y1) 436 VFMADD231PD(Mem{Base: RAX}.Idx(RBX, 8).Offset(-32), Y6, Y2) 437 VFMADD231PD(Mem{Base: RAX}.Idx(RBX, 8), Y7, Y3) 438 ADDQ(Imm(16), RBX) 439 CMPQ(R9, RBX) 440 JNE(LabelRef("LBB6_6")) 441 VADDPD(Y0, Y1, Y0) 442 VADDPD(Y0, Y2, Y0) 443 VADDPD(Y0, Y3, Y0) 444 VEXTRACTF128(Imm(1), Y0, X1) 445 VADDPD(X1, X0, X0) 446 VPERMILPD(Imm(1), X0, X1) 447 VADDSD(X1, X0, X0) 448 MOVQ(R9, RBX) 449 CMPQ(R9, R8) 450 JE(LabelRef("LBB6_9")) 451 } 452 453 Label("LBB6_8") 454 { 455 VMOVSD(Mem{Base: RDX}.Idx(RBX, 8), X1) 456 VFMADD231SD(Mem{Base: RSI}.Idx(RBX, 8), X1, X0) 457 ADDQ(Imm(1), RBX) 458 CMPQ(R8, RBX) 459 JNE(LabelRef("LBB6_8")) 460 JMP(LabelRef("LBB6_9")) 461 } 462 463 Label("LBB6_10") 464 { 465 POPQ(RBX) 466 VZEROUPPER() 467 RET() 468 } 469 } 470 471 func genMatMulVec_F32() { 472 473 TEXT("MatMulVec_AVX2_F32", 0, "func(x, y, z []float32, a, b int)") 474 Pragma("noescape") 475 Load(Param("x").Base(), RDI) 476 Load(Param("y").Base(), RSI) 477 Load(Param("z").Base(), RDX) 478 Load(Param("a"), RCX) 479 Load(Param("b"), R8) 480 481 PUSHQ(RBX) 482 TESTQ(RCX, RCX) 483 JE(LabelRef("LBB7_10")) 484 TESTQ(R8, R8) 485 JE(LabelRef("LBB7_10")) 486 MOVQ(R8, R9) 487 ANDQ(I32(-32), R9) 488 LEAQ(Mem{Base: RSI}.Offset(96), RAX) 489 XORQ(R10, R10) 490 LEAQ(Mem{Base: R10}.Idx(R8, 4), R10) 491 XORL(R11L, R11L) 492 VXORPS(X0, X0, X0) 493 JMP(LabelRef("LBB7_3")) 494 495 Label("LBB7_9") 496 { 497 VMOVSS(X1, Mem{Base: RDI}.Idx(R11, 4)) 498 ADDQ(Imm(1), R11) 499 ADDQ(R10, RAX) 500 ADDQ(R10, RSI) 501 CMPQ(R11, RCX) 502 JE(LabelRef("LBB7_10")) 503 } 504 505 Label("LBB7_3") 506 { 507 VMOVSS(Mem{Base: RDI}.Idx(R11, 4), X1) 508 CMPQ(R8, Imm(32)) 509 JAE(LabelRef("LBB7_5")) 510 XORL(EBX, EBX) 511 JMP(LabelRef("LBB7_8")) 512 } 513 514 Label("LBB7_5") 515 { 516 VBLENDPS(Imm(1), X1, X0, X1) 517 VXORPS(X2, X2, X2) 518 XORL(EBX, EBX) 519 VXORPS(X3, X3, X3) 520 VXORPS(X4, X4, X4) 521 } 522 523 Label("LBB7_6") 524 { 525 VMOVUPS(Mem{Base: RDX}.Idx(RBX, 4), Y5) 526 VMOVUPS(Mem{Base: RDX}.Idx(RBX, 4).Offset(32), Y6) 527 VMOVUPS(Mem{Base: RDX}.Idx(RBX, 4).Offset(64), Y7) 528 VMOVUPS(Mem{Base: RDX}.Idx(RBX, 4).Offset(96), Y8) 529 VFMADD231PS(Mem{Base: RAX}.Idx(RBX, 4).Offset(-96), Y5, Y1) 530 VFMADD231PS(Mem{Base: RAX}.Idx(RBX, 4).Offset(-64), Y6, Y2) 531 VFMADD231PS(Mem{Base: RAX}.Idx(RBX, 4).Offset(-32), Y7, Y3) 532 VFMADD231PS(Mem{Base: RAX}.Idx(RBX, 4), Y8, Y4) 533 ADDQ(Imm(32), RBX) 534 CMPQ(R9, RBX) 535 JNE(LabelRef("LBB7_6")) 536 VADDPS(Y1, Y2, Y1) 537 VADDPS(Y1, Y3, Y1) 538 VADDPS(Y1, Y4, Y1) 539 VEXTRACTF128(Imm(1), Y1, X2) 540 VADDPS(X2, X1, X1) 541 VPERMILPD(Imm(1), X1, X2) 542 VADDPS(X2, X1, X1) 543 VMOVSHDUP(X1, X2) 544 VADDSS(X2, X1, X1) 545 MOVQ(R9, RBX) 546 CMPQ(R9, R8) 547 JE(LabelRef("LBB7_9")) 548 } 549 550 Label("LBB7_8") 551 { 552 VMOVSS(Mem{Base: RDX}.Idx(RBX, 4), X2) 553 VFMADD231SS(Mem{Base: RSI}.Idx(RBX, 4), X2, X1) 554 ADDQ(Imm(1), RBX) 555 CMPQ(R8, RBX) 556 JNE(LabelRef("LBB7_8")) 557 JMP(LabelRef("LBB7_9")) 558 } 559 560 Label("LBB7_10") 561 { 562 POPQ(RBX) 563 VZEROUPPER() 564 RET() 565 } 566 } 567 568 func genMatMulTiled_F64() { 569 570 TEXT("MatMulTiled_AVX2_F64", 0, "func(x, y, z []float64, a, b, c int)") 571 Pragma("noescape") 572 Load(Param("x").Base(), RDI) 573 Load(Param("y").Base(), RSI) 574 Load(Param("z").Base(), RDX) 575 Load(Param("a"), RCX) 576 Load(Param("b"), R8) 577 Load(Param("c"), R9) 578 579 PUSHQ(RBP) 580 PUSHQ(R15) 581 PUSHQ(R14) 582 PUSHQ(R13) 583 PUSHQ(R12) 584 PUSHQ(RBX) 585 SUBQ(Imm(72), RSP) 586 MOVQ(R9, Mem{Base: RSP}.Offset(-128)) 587 MOVQ(R8, Mem{Base: RSP}.Offset(-104)) 588 MOVQ(RDX, Mem{Base: RSP}.Offset(-88)) 589 MOVQ(RDI, Mem{Base: RSP}.Offset(-112)) 590 MOVQ(RCX, Mem{Base: RSP}.Offset(-64)) 591 ADDQ(Imm(7), RCX) 592 MOVQ(RCX, Mem{Base: RSP}.Offset(-72)) 593 JE(LabelRef("LBB8_21")) 594 MOVQ(Mem{Base: RSP}.Offset(-104), RAX) 595 ADDQ(Imm(255), RAX) 596 MOVQ(RAX, Mem{Base: RSP}.Offset(8)) 597 JE(LabelRef("LBB8_21")) 598 MOVQ(Mem{Base: RSP}.Offset(-128), RAX) 599 ADDQ(Imm(255), RAX) 600 MOVQ(RAX, Mem{Base: RSP}.Offset(-40)) 601 JE(LabelRef("LBB8_21")) 602 MOVQ(Mem{Base: RSP}.Offset(-88), RAX) 603 ADDQ(Imm(96), RAX) 604 MOVQ(RAX, Mem{Base: RSP}.Offset(-48)) 605 MOVQ(Mem{Base: RSP}.Offset(-128), RAX) 606 XORQ(R15, R15) 607 LEAQ(Mem{Base: R15}.Idx(RAX, 8), RBX) 608 MOVQ(Mem{Base: RSP}.Offset(-112), RCX) 609 ADDQ(Imm(96), RCX) 610 MOVQ(RCX, Mem{Base: RSP}.Offset(-96)) 611 SHLQ(Imm(6), RAX) 612 MOVQ(RAX, Mem{Base: RSP}.Offset(-80)) 613 XORL(EDX, EDX) 614 JMP(LabelRef("LBB8_4")) 615 616 Label("LBB8_20") 617 { 618 MOVQ(Mem{Base: RSP}.Offset(-80), RAX) 619 ADDQ(RAX, Mem{Base: RSP}.Offset(-96)) 620 ADDQ(RAX, Mem{Base: RSP}.Offset(-112)) 621 MOVQ(Mem{Base: RSP}.Offset(-56), RAX) 622 MOVQ(RAX, RDX) 623 CMPQ(RAX, Mem{Base: RSP}.Offset(-72)) 624 JAE(LabelRef("LBB8_21")) 625 } 626 627 Label("LBB8_4") 628 { 629 LEAQ(Mem{Base: RDX}.Offset(8), RAX) 630 MOVQ(Mem{Base: RSP}.Offset(-64), RCX) 631 CMPQ(RAX, RCX) 632 MOVQ(RAX, Mem{Base: RSP}.Offset(-56)) 633 CMOVQGT(RCX, RAX) 634 CDQE() 635 MOVQ(RDX, Mem{Base: RSP}.Offset(-16)) 636 MOVQ(RAX, Mem{Base: RSP}.Offset(24)) 637 CMPQ(RDX, RAX) 638 JAE(LabelRef("LBB8_20")) 639 XORL(EAX, EAX) 640 MOVQ(RAX, Mem{Base: RSP}.Offset(-120)) 641 MOVL(I32(256), EDX) 642 XORL(EAX, EAX) 643 JMP(LabelRef("LBB8_6")) 644 } 645 646 Label("LBB8_19") 647 { 648 MOVQ(Mem{Base: RSP}.Offset(-120), RAX) 649 ADDL(Imm(1), EAX) 650 MOVQ(RAX, Mem{Base: RSP}.Offset(-120)) 651 MOVQ(Mem{Base: RSP}.Offset(-24), RDX) 652 ADDQ(I32(256), RDX) 653 MOVQ(Mem{Base: RSP}.Offset(-32), RAX) 654 CMPQ(RAX, Mem{Base: RSP}.Offset(-40)) 655 JAE(LabelRef("LBB8_20")) 656 } 657 658 Label("LBB8_6") 659 { 660 MOVL(EAX, EDI) 661 MOVQ(Mem{Base: RSP}.Offset(-128), RBP) 662 CMPQ(RBP, RDX) 663 MOVQ(RDX, Mem{Base: RSP}.Offset(-24)) 664 CMOVQLT(RBP, RDX) 665 ADDQ(I32(256), RAX) 666 CMPQ(RBP, RAX) 667 MOVQ(RAX, RCX) 668 CMOVQLT(RBP, RCX) 669 MOVQ(RAX, Mem{Base: RSP}.Offset(-32)) 670 CMOVQLT(RBP, RAX) 671 CMPL(EDI, EAX) 672 JGE(LabelRef("LBB8_19")) 673 MOVLQSX(EDI, R14) 674 MOVQ(Mem{Base: RSP}.Offset(-96), RDI) 675 LEAQ(Mem{Base: RDI}.Idx(R14, 8), RDI) 676 MOVQ(RDI, Mem{Base: RSP}) 677 MOVLQSX(EDX, R11) 678 SUBQ(R14, R11) 679 ANDQ(I32(-16), R11) 680 MOVLQSX(ECX, R12) 681 MOVQ(Mem{Base: RSP}.Offset(-120), RCX) 682 SHLL(Imm(8), ECX) 683 MOVLQSX(ECX, RCX) 684 SUBQ(RCX, R12) 685 MOVLQSX(EAX, RDX) 686 MOVQ(R12, RCX) 687 ANDQ(I32(-16), RCX) 688 MOVQ(Mem{Base: RSP}.Offset(-48), RAX) 689 LEAQ(Mem{Base: RAX}.Idx(R14, 8), RAX) 690 MOVQ(RAX, Mem{Base: RSP}.Offset(-8)) 691 MOVQ(R14, R13) 692 MOVQ(RCX, Mem{Base: RSP}.Offset(64)) 693 ADDQ(RCX, R13) 694 XORL(EAX, EAX) 695 JMP(LabelRef("LBB8_8")) 696 } 697 698 Label("LBB8_18") 699 { 700 MOVQ(Mem{Base: RSP}.Offset(16), RAX) 701 CMPQ(RAX, Mem{Base: RSP}.Offset(8)) 702 JAE(LabelRef("LBB8_19")) 703 } 704 705 Label("LBB8_8") 706 { 707 MOVL(EAX, ECX) 708 ADDQ(I32(256), RAX) 709 MOVQ(Mem{Base: RSP}.Offset(-104), RDI) 710 CMPQ(RAX, RDI) 711 MOVQ(RAX, Mem{Base: RSP}.Offset(16)) 712 CMOVQGT(RDI, RAX) 713 CMPL(ECX, EAX) 714 JGE(LabelRef("LBB8_18")) 715 MOVLQSX(ECX, RDI) 716 MOVQ(Mem{Base: RSP}.Offset(-128), RCX) 717 MOVQ(RDI, Mem{Base: RSP}.Offset(48)) 718 IMULQ(RDI, RCX) 719 MOVQ(Mem{Base: RSP}.Offset(-88), RDI) 720 LEAQ(Mem{Base: RDI}.Idx(RCX, 8), RDI) 721 MOVQ(RDI, Mem{Base: RSP}.Offset(40)) 722 MOVQ(Mem{Base: RSP}.Offset(-8), RDI) 723 LEAQ(Mem{Base: RDI}.Idx(RCX, 8), RCX) 724 MOVQ(RCX, Mem{Base: RSP}.Offset(32)) 725 CDQE() 726 MOVQ(Mem{Base: RSP}.Offset(-112), RCX) 727 MOVQ(Mem{Base: RSP}, R10) 728 MOVQ(Mem{Base: RSP}.Offset(-16), R8) 729 JMP(LabelRef("LBB8_10")) 730 } 731 732 Label("LBB8_17") 733 { 734 MOVQ(Mem{Base: RSP}.Offset(56), R8) 735 ADDQ(Imm(1), R8) 736 ADDQ(RBX, R10) 737 ADDQ(RBX, RCX) 738 CMPQ(R8, Mem{Base: RSP}.Offset(24)) 739 JAE(LabelRef("LBB8_18")) 740 } 741 742 Label("LBB8_10") 743 { 744 MOVQ(R8, Mem{Base: RSP}.Offset(56)) 745 IMULQ(Mem{Base: RSP}.Offset(-104), R8) 746 MOVQ(Mem{Base: RSP}.Offset(40), R15) 747 MOVQ(Mem{Base: RSP}.Offset(32), RDI) 748 MOVQ(Mem{Base: RSP}.Offset(48), R9) 749 JMP(LabelRef("LBB8_11")) 750 } 751 752 Label("LBB8_16") 753 { 754 ADDQ(Imm(1), R9) 755 ADDQ(RBX, RDI) 756 ADDQ(RBX, R15) 757 CMPQ(R9, RAX) 758 JGE(LabelRef("LBB8_17")) 759 } 760 761 Label("LBB8_11") 762 { 763 LEAQ(Mem{Base: R9}.Idx(R8, 1), RBP) 764 VMOVSD(Mem{Base: RSI}.Idx(RBP, 8), X0) 765 MOVQ(R14, RBP) 766 CMPQ(R12, Imm(16)) 767 JB(LabelRef("LBB8_15")) 768 VBROADCASTSD(X0, Y1) 769 XORL(EBP, EBP) 770 } 771 772 Label("LBB8_13") 773 { 774 VMOVUPD(Mem{Base: RDI}.Idx(RBP, 8).Offset(-96), Y2) 775 VMOVUPD(Mem{Base: RDI}.Idx(RBP, 8).Offset(-64), Y3) 776 VMOVUPD(Mem{Base: RDI}.Idx(RBP, 8).Offset(-32), Y4) 777 VMOVUPD(Mem{Base: RDI}.Idx(RBP, 8), Y5) 778 VFMADD213PD(Mem{Base: R10}.Idx(RBP, 8).Offset(-96), Y1, Y2) 779 VFMADD213PD(Mem{Base: R10}.Idx(RBP, 8).Offset(-64), Y1, Y3) 780 VFMADD213PD(Mem{Base: R10}.Idx(RBP, 8).Offset(-32), Y1, Y4) 781 VFMADD213PD(Mem{Base: R10}.Idx(RBP, 8), Y1, Y5) 782 VMOVUPD(Y2, Mem{Base: R10}.Idx(RBP, 8).Offset(-96)) 783 VMOVUPD(Y3, Mem{Base: R10}.Idx(RBP, 8).Offset(-64)) 784 VMOVUPD(Y4, Mem{Base: R10}.Idx(RBP, 8).Offset(-32)) 785 VMOVUPD(Y5, Mem{Base: R10}.Idx(RBP, 8)) 786 ADDQ(Imm(16), RBP) 787 CMPQ(R11, RBP) 788 JNE(LabelRef("LBB8_13")) 789 MOVQ(R13, RBP) 790 CMPQ(R12, Mem{Base: RSP}.Offset(64)) 791 JE(LabelRef("LBB8_16")) 792 } 793 794 Label("LBB8_15") 795 { 796 VMOVSD(Mem{Base: R15}.Idx(RBP, 8), X1) 797 VFMADD213SD(Mem{Base: RCX}.Idx(RBP, 8), X0, X1) 798 VMOVSD(X1, Mem{Base: RCX}.Idx(RBP, 8)) 799 ADDQ(Imm(1), RBP) 800 CMPQ(RBP, RDX) 801 JL(LabelRef("LBB8_15")) 802 JMP(LabelRef("LBB8_16")) 803 } 804 805 Label("LBB8_21") 806 { 807 ADDQ(Imm(72), RSP) 808 POPQ(RBX) 809 POPQ(R12) 810 POPQ(R13) 811 POPQ(R14) 812 POPQ(R15) 813 POPQ(RBP) 814 VZEROUPPER() 815 RET() 816 } 817 } 818 819 func genMatMulTiled_F32() { 820 821 TEXT("MatMulTiled_AVX2_F32", 0, "func(x, y, z []float32, a, b, c int)") 822 Pragma("noescape") 823 Load(Param("x").Base(), RDI) 824 Load(Param("y").Base(), RSI) 825 Load(Param("z").Base(), RDX) 826 Load(Param("a"), RCX) 827 Load(Param("b"), R8) 828 Load(Param("c"), R9) 829 830 PUSHQ(RBP) 831 PUSHQ(R15) 832 PUSHQ(R14) 833 PUSHQ(R13) 834 PUSHQ(R12) 835 PUSHQ(RBX) 836 SUBQ(Imm(72), RSP) 837 MOVQ(R9, Mem{Base: RSP}.Offset(-128)) 838 MOVQ(R8, Mem{Base: RSP}.Offset(-104)) 839 MOVQ(RDX, Mem{Base: RSP}.Offset(-88)) 840 MOVQ(RDI, Mem{Base: RSP}.Offset(-112)) 841 MOVQ(RCX, Mem{Base: RSP}.Offset(-64)) 842 ADDQ(Imm(7), RCX) 843 MOVQ(RCX, Mem{Base: RSP}.Offset(-72)) 844 JE(LabelRef("LBB9_21")) 845 MOVQ(Mem{Base: RSP}.Offset(-104), RAX) 846 ADDQ(Imm(255), RAX) 847 MOVQ(RAX, Mem{Base: RSP}.Offset(8)) 848 JE(LabelRef("LBB9_21")) 849 MOVQ(Mem{Base: RSP}.Offset(-128), RAX) 850 ADDQ(Imm(255), RAX) 851 MOVQ(RAX, Mem{Base: RSP}.Offset(-40)) 852 JE(LabelRef("LBB9_21")) 853 MOVQ(Mem{Base: RSP}.Offset(-88), RAX) 854 ADDQ(Imm(96), RAX) 855 MOVQ(RAX, Mem{Base: RSP}.Offset(-48)) 856 MOVQ(Mem{Base: RSP}.Offset(-128), RAX) 857 XORQ(R15, R15) 858 LEAQ(Mem{Base: R15}.Idx(RAX, 4), RBX) 859 MOVQ(Mem{Base: RSP}.Offset(-112), RCX) 860 ADDQ(Imm(96), RCX) 861 MOVQ(RCX, Mem{Base: RSP}.Offset(-96)) 862 SHLQ(Imm(5), RAX) 863 MOVQ(RAX, Mem{Base: RSP}.Offset(-80)) 864 XORL(EDX, EDX) 865 JMP(LabelRef("LBB9_4")) 866 867 Label("LBB9_20") 868 { 869 MOVQ(Mem{Base: RSP}.Offset(-80), RAX) 870 ADDQ(RAX, Mem{Base: RSP}.Offset(-96)) 871 ADDQ(RAX, Mem{Base: RSP}.Offset(-112)) 872 MOVQ(Mem{Base: RSP}.Offset(-56), RAX) 873 MOVQ(RAX, RDX) 874 CMPQ(RAX, Mem{Base: RSP}.Offset(-72)) 875 JAE(LabelRef("LBB9_21")) 876 } 877 878 Label("LBB9_4") 879 { 880 LEAQ(Mem{Base: RDX}.Offset(8), RAX) 881 MOVQ(Mem{Base: RSP}.Offset(-64), RCX) 882 CMPQ(RAX, RCX) 883 MOVQ(RAX, Mem{Base: RSP}.Offset(-56)) 884 CMOVQGT(RCX, RAX) 885 CDQE() 886 MOVQ(RDX, Mem{Base: RSP}.Offset(-16)) 887 MOVQ(RAX, Mem{Base: RSP}.Offset(24)) 888 CMPQ(RDX, RAX) 889 JAE(LabelRef("LBB9_20")) 890 XORL(EAX, EAX) 891 MOVQ(RAX, Mem{Base: RSP}.Offset(-120)) 892 MOVL(I32(256), EDX) 893 XORL(EAX, EAX) 894 JMP(LabelRef("LBB9_6")) 895 } 896 897 Label("LBB9_19") 898 { 899 MOVQ(Mem{Base: RSP}.Offset(-120), RAX) 900 ADDL(Imm(1), EAX) 901 MOVQ(RAX, Mem{Base: RSP}.Offset(-120)) 902 MOVQ(Mem{Base: RSP}.Offset(-24), RDX) 903 ADDQ(I32(256), RDX) 904 MOVQ(Mem{Base: RSP}.Offset(-32), RAX) 905 CMPQ(RAX, Mem{Base: RSP}.Offset(-40)) 906 JAE(LabelRef("LBB9_20")) 907 } 908 909 Label("LBB9_6") 910 { 911 MOVL(EAX, EDI) 912 MOVQ(Mem{Base: RSP}.Offset(-128), RBP) 913 CMPQ(RBP, RDX) 914 MOVQ(RDX, Mem{Base: RSP}.Offset(-24)) 915 CMOVQLT(RBP, RDX) 916 ADDQ(I32(256), RAX) 917 CMPQ(RBP, RAX) 918 MOVQ(RAX, RCX) 919 CMOVQLT(RBP, RCX) 920 MOVQ(RAX, Mem{Base: RSP}.Offset(-32)) 921 CMOVQLT(RBP, RAX) 922 CMPL(EDI, EAX) 923 JGE(LabelRef("LBB9_19")) 924 MOVLQSX(EDI, R14) 925 MOVQ(Mem{Base: RSP}.Offset(-96), RDI) 926 LEAQ(Mem{Base: RDI}.Idx(R14, 4), RDI) 927 MOVQ(RDI, Mem{Base: RSP}) 928 MOVLQSX(EDX, R11) 929 SUBQ(R14, R11) 930 ANDQ(I32(-32), R11) 931 MOVLQSX(ECX, R12) 932 MOVQ(Mem{Base: RSP}.Offset(-120), RCX) 933 SHLL(Imm(8), ECX) 934 MOVLQSX(ECX, RCX) 935 SUBQ(RCX, R12) 936 MOVLQSX(EAX, RDX) 937 MOVQ(R12, RCX) 938 ANDQ(I32(-32), RCX) 939 MOVQ(Mem{Base: RSP}.Offset(-48), RAX) 940 LEAQ(Mem{Base: RAX}.Idx(R14, 4), RAX) 941 MOVQ(RAX, Mem{Base: RSP}.Offset(-8)) 942 MOVQ(R14, R13) 943 MOVQ(RCX, Mem{Base: RSP}.Offset(64)) 944 ADDQ(RCX, R13) 945 XORL(EAX, EAX) 946 JMP(LabelRef("LBB9_8")) 947 } 948 949 Label("LBB9_18") 950 { 951 MOVQ(Mem{Base: RSP}.Offset(16), RAX) 952 CMPQ(RAX, Mem{Base: RSP}.Offset(8)) 953 JAE(LabelRef("LBB9_19")) 954 } 955 956 Label("LBB9_8") 957 { 958 MOVL(EAX, ECX) 959 ADDQ(I32(256), RAX) 960 MOVQ(Mem{Base: RSP}.Offset(-104), RDI) 961 CMPQ(RAX, RDI) 962 MOVQ(RAX, Mem{Base: RSP}.Offset(16)) 963 CMOVQGT(RDI, RAX) 964 CMPL(ECX, EAX) 965 JGE(LabelRef("LBB9_18")) 966 MOVLQSX(ECX, RDI) 967 MOVQ(Mem{Base: RSP}.Offset(-128), RCX) 968 MOVQ(RDI, Mem{Base: RSP}.Offset(48)) 969 IMULQ(RDI, RCX) 970 MOVQ(Mem{Base: RSP}.Offset(-88), RDI) 971 LEAQ(Mem{Base: RDI}.Idx(RCX, 4), RDI) 972 MOVQ(RDI, Mem{Base: RSP}.Offset(40)) 973 MOVQ(Mem{Base: RSP}.Offset(-8), RDI) 974 LEAQ(Mem{Base: RDI}.Idx(RCX, 4), RCX) 975 MOVQ(RCX, Mem{Base: RSP}.Offset(32)) 976 CDQE() 977 MOVQ(Mem{Base: RSP}.Offset(-112), RCX) 978 MOVQ(Mem{Base: RSP}, R10) 979 MOVQ(Mem{Base: RSP}.Offset(-16), R8) 980 JMP(LabelRef("LBB9_10")) 981 } 982 983 Label("LBB9_17") 984 { 985 MOVQ(Mem{Base: RSP}.Offset(56), R8) 986 ADDQ(Imm(1), R8) 987 ADDQ(RBX, R10) 988 ADDQ(RBX, RCX) 989 CMPQ(R8, Mem{Base: RSP}.Offset(24)) 990 JAE(LabelRef("LBB9_18")) 991 } 992 993 Label("LBB9_10") 994 { 995 MOVQ(R8, Mem{Base: RSP}.Offset(56)) 996 IMULQ(Mem{Base: RSP}.Offset(-104), R8) 997 MOVQ(Mem{Base: RSP}.Offset(40), R15) 998 MOVQ(Mem{Base: RSP}.Offset(32), RDI) 999 MOVQ(Mem{Base: RSP}.Offset(48), R9) 1000 JMP(LabelRef("LBB9_11")) 1001 } 1002 1003 Label("LBB9_16") 1004 { 1005 ADDQ(Imm(1), R9) 1006 ADDQ(RBX, RDI) 1007 ADDQ(RBX, R15) 1008 CMPQ(R9, RAX) 1009 JGE(LabelRef("LBB9_17")) 1010 } 1011 1012 Label("LBB9_11") 1013 { 1014 LEAQ(Mem{Base: R9}.Idx(R8, 1), RBP) 1015 VMOVSS(Mem{Base: RSI}.Idx(RBP, 4), X0) 1016 MOVQ(R14, RBP) 1017 CMPQ(R12, Imm(32)) 1018 JB(LabelRef("LBB9_15")) 1019 VBROADCASTSS(X0, Y1) 1020 XORL(EBP, EBP) 1021 } 1022 1023 Label("LBB9_13") 1024 { 1025 VMOVUPS(Mem{Base: RDI}.Idx(RBP, 4).Offset(-96), Y2) 1026 VMOVUPS(Mem{Base: RDI}.Idx(RBP, 4).Offset(-64), Y3) 1027 VMOVUPS(Mem{Base: RDI}.Idx(RBP, 4).Offset(-32), Y4) 1028 VMOVUPS(Mem{Base: RDI}.Idx(RBP, 4), Y5) 1029 VFMADD213PS(Mem{Base: R10}.Idx(RBP, 4).Offset(-96), Y1, Y2) 1030 VFMADD213PS(Mem{Base: R10}.Idx(RBP, 4).Offset(-64), Y1, Y3) 1031 VFMADD213PS(Mem{Base: R10}.Idx(RBP, 4).Offset(-32), Y1, Y4) 1032 VFMADD213PS(Mem{Base: R10}.Idx(RBP, 4), Y1, Y5) 1033 VMOVUPS(Y2, Mem{Base: R10}.Idx(RBP, 4).Offset(-96)) 1034 VMOVUPS(Y3, Mem{Base: R10}.Idx(RBP, 4).Offset(-64)) 1035 VMOVUPS(Y4, Mem{Base: R10}.Idx(RBP, 4).Offset(-32)) 1036 VMOVUPS(Y5, Mem{Base: R10}.Idx(RBP, 4)) 1037 ADDQ(Imm(32), RBP) 1038 CMPQ(R11, RBP) 1039 JNE(LabelRef("LBB9_13")) 1040 MOVQ(R13, RBP) 1041 CMPQ(R12, Mem{Base: RSP}.Offset(64)) 1042 JE(LabelRef("LBB9_16")) 1043 } 1044 1045 Label("LBB9_15") 1046 { 1047 VMOVSS(Mem{Base: R15}.Idx(RBP, 4), X1) 1048 VFMADD213SS(Mem{Base: RCX}.Idx(RBP, 4), X0, X1) 1049 VMOVSS(X1, Mem{Base: RCX}.Idx(RBP, 4)) 1050 ADDQ(Imm(1), RBP) 1051 CMPQ(RBP, RDX) 1052 JL(LabelRef("LBB9_15")) 1053 JMP(LabelRef("LBB9_16")) 1054 } 1055 1056 Label("LBB9_21") 1057 { 1058 ADDQ(Imm(72), RSP) 1059 POPQ(RBX) 1060 POPQ(R12) 1061 POPQ(R13) 1062 POPQ(R14) 1063 POPQ(R15) 1064 POPQ(RBP) 1065 VZEROUPPER() 1066 RET() 1067 } 1068 }