Source file src/simd/types_amd64.go
1 // Code generated by x/arch/internal/simdgen using 'go run . -xedPath $XED_PATH -o godefs -goroot $GOROOT go.yaml types.yaml categories.yaml'; DO NOT EDIT. 2 3 //go:build goexperiment.simd 4 5 package simd 6 7 // v128 is a tag type that tells the compiler that this is really 128-bit SIMD 8 type v128 struct { 9 _128 [0]func() // uncomparable 10 } 11 12 // Float32x4 is a 128-bit SIMD vector of 4 float32 13 type Float32x4 struct { 14 float32x4 v128 15 vals [4]float32 16 } 17 18 // Len returns the number of elements in a Float32x4 19 func (x Float32x4) Len() int { return 4 } 20 21 // LoadFloat32x4 loads a Float32x4 from an array 22 // 23 //go:noescape 24 func LoadFloat32x4(y *[4]float32) Float32x4 25 26 // Store stores a Float32x4 to an array 27 // 28 //go:noescape 29 func (x Float32x4) Store(y *[4]float32) 30 31 // LoadMaskedFloat32x4 loads a Float32x4 from an array, 32 // at those elements enabled by mask 33 // 34 // Asm: VMASKMOVD, CPU Feature: AVX2 35 // 36 //go:noescape 37 func LoadMaskedFloat32x4(y *[4]float32, mask Mask32x4) Float32x4 38 39 // StoreMasked stores a Float32x4 to an array, 40 // at those elements enabled by mask 41 // 42 // Asm: VMASKMOVD, CPU Feature: AVX2 43 // 44 //go:noescape 45 func (x Float32x4) StoreMasked(y *[4]float32, mask Mask32x4) 46 47 // Float64x2 is a 128-bit SIMD vector of 2 float64 48 type Float64x2 struct { 49 float64x2 v128 50 vals [2]float64 51 } 52 53 // Len returns the number of elements in a Float64x2 54 func (x Float64x2) Len() int { return 2 } 55 56 // LoadFloat64x2 loads a Float64x2 from an array 57 // 58 //go:noescape 59 func LoadFloat64x2(y *[2]float64) Float64x2 60 61 // Store stores a Float64x2 to an array 62 // 63 //go:noescape 64 func (x Float64x2) Store(y *[2]float64) 65 66 // LoadMaskedFloat64x2 loads a Float64x2 from an array, 67 // at those elements enabled by mask 68 // 69 // Asm: VMASKMOVQ, CPU Feature: AVX2 70 // 71 //go:noescape 72 func LoadMaskedFloat64x2(y *[2]float64, mask Mask64x2) Float64x2 73 74 // StoreMasked stores a Float64x2 to an array, 75 // at those elements enabled by mask 76 // 77 // Asm: VMASKMOVQ, CPU Feature: AVX2 78 // 79 //go:noescape 80 func (x Float64x2) StoreMasked(y *[2]float64, mask Mask64x2) 81 82 // Int8x16 is a 128-bit SIMD vector of 16 int8 83 type Int8x16 struct { 84 int8x16 v128 85 vals [16]int8 86 } 87 88 // Len returns the number of elements in a Int8x16 89 func (x Int8x16) Len() int { return 16 } 90 91 // LoadInt8x16 loads a Int8x16 from an array 92 // 93 //go:noescape 94 func LoadInt8x16(y *[16]int8) Int8x16 95 96 // Store stores a Int8x16 to an array 97 // 98 //go:noescape 99 func (x Int8x16) Store(y *[16]int8) 100 101 // Int16x8 is a 128-bit SIMD vector of 8 int16 102 type Int16x8 struct { 103 int16x8 v128 104 vals [8]int16 105 } 106 107 // Len returns the number of elements in a Int16x8 108 func (x Int16x8) Len() int { return 8 } 109 110 // LoadInt16x8 loads a Int16x8 from an array 111 // 112 //go:noescape 113 func LoadInt16x8(y *[8]int16) Int16x8 114 115 // Store stores a Int16x8 to an array 116 // 117 //go:noescape 118 func (x Int16x8) Store(y *[8]int16) 119 120 // Int32x4 is a 128-bit SIMD vector of 4 int32 121 type Int32x4 struct { 122 int32x4 v128 123 vals [4]int32 124 } 125 126 // Len returns the number of elements in a Int32x4 127 func (x Int32x4) Len() int { return 4 } 128 129 // LoadInt32x4 loads a Int32x4 from an array 130 // 131 //go:noescape 132 func LoadInt32x4(y *[4]int32) Int32x4 133 134 // Store stores a Int32x4 to an array 135 // 136 //go:noescape 137 func (x Int32x4) Store(y *[4]int32) 138 139 // LoadMaskedInt32x4 loads a Int32x4 from an array, 140 // at those elements enabled by mask 141 // 142 // Asm: VMASKMOVD, CPU Feature: AVX2 143 // 144 //go:noescape 145 func LoadMaskedInt32x4(y *[4]int32, mask Mask32x4) Int32x4 146 147 // StoreMasked stores a Int32x4 to an array, 148 // at those elements enabled by mask 149 // 150 // Asm: VMASKMOVD, CPU Feature: AVX2 151 // 152 //go:noescape 153 func (x Int32x4) StoreMasked(y *[4]int32, mask Mask32x4) 154 155 // Int64x2 is a 128-bit SIMD vector of 2 int64 156 type Int64x2 struct { 157 int64x2 v128 158 vals [2]int64 159 } 160 161 // Len returns the number of elements in a Int64x2 162 func (x Int64x2) Len() int { return 2 } 163 164 // LoadInt64x2 loads a Int64x2 from an array 165 // 166 //go:noescape 167 func LoadInt64x2(y *[2]int64) Int64x2 168 169 // Store stores a Int64x2 to an array 170 // 171 //go:noescape 172 func (x Int64x2) Store(y *[2]int64) 173 174 // LoadMaskedInt64x2 loads a Int64x2 from an array, 175 // at those elements enabled by mask 176 // 177 // Asm: VMASKMOVQ, CPU Feature: AVX2 178 // 179 //go:noescape 180 func LoadMaskedInt64x2(y *[2]int64, mask Mask64x2) Int64x2 181 182 // StoreMasked stores a Int64x2 to an array, 183 // at those elements enabled by mask 184 // 185 // Asm: VMASKMOVQ, CPU Feature: AVX2 186 // 187 //go:noescape 188 func (x Int64x2) StoreMasked(y *[2]int64, mask Mask64x2) 189 190 // Uint8x16 is a 128-bit SIMD vector of 16 uint8 191 type Uint8x16 struct { 192 uint8x16 v128 193 vals [16]uint8 194 } 195 196 // Len returns the number of elements in a Uint8x16 197 func (x Uint8x16) Len() int { return 16 } 198 199 // LoadUint8x16 loads a Uint8x16 from an array 200 // 201 //go:noescape 202 func LoadUint8x16(y *[16]uint8) Uint8x16 203 204 // Store stores a Uint8x16 to an array 205 // 206 //go:noescape 207 func (x Uint8x16) Store(y *[16]uint8) 208 209 // Uint16x8 is a 128-bit SIMD vector of 8 uint16 210 type Uint16x8 struct { 211 uint16x8 v128 212 vals [8]uint16 213 } 214 215 // Len returns the number of elements in a Uint16x8 216 func (x Uint16x8) Len() int { return 8 } 217 218 // LoadUint16x8 loads a Uint16x8 from an array 219 // 220 //go:noescape 221 func LoadUint16x8(y *[8]uint16) Uint16x8 222 223 // Store stores a Uint16x8 to an array 224 // 225 //go:noescape 226 func (x Uint16x8) Store(y *[8]uint16) 227 228 // Uint32x4 is a 128-bit SIMD vector of 4 uint32 229 type Uint32x4 struct { 230 uint32x4 v128 231 vals [4]uint32 232 } 233 234 // Len returns the number of elements in a Uint32x4 235 func (x Uint32x4) Len() int { return 4 } 236 237 // LoadUint32x4 loads a Uint32x4 from an array 238 // 239 //go:noescape 240 func LoadUint32x4(y *[4]uint32) Uint32x4 241 242 // Store stores a Uint32x4 to an array 243 // 244 //go:noescape 245 func (x Uint32x4) Store(y *[4]uint32) 246 247 // LoadMaskedUint32x4 loads a Uint32x4 from an array, 248 // at those elements enabled by mask 249 // 250 // Asm: VMASKMOVD, CPU Feature: AVX2 251 // 252 //go:noescape 253 func LoadMaskedUint32x4(y *[4]uint32, mask Mask32x4) Uint32x4 254 255 // StoreMasked stores a Uint32x4 to an array, 256 // at those elements enabled by mask 257 // 258 // Asm: VMASKMOVD, CPU Feature: AVX2 259 // 260 //go:noescape 261 func (x Uint32x4) StoreMasked(y *[4]uint32, mask Mask32x4) 262 263 // Uint64x2 is a 128-bit SIMD vector of 2 uint64 264 type Uint64x2 struct { 265 uint64x2 v128 266 vals [2]uint64 267 } 268 269 // Len returns the number of elements in a Uint64x2 270 func (x Uint64x2) Len() int { return 2 } 271 272 // LoadUint64x2 loads a Uint64x2 from an array 273 // 274 //go:noescape 275 func LoadUint64x2(y *[2]uint64) Uint64x2 276 277 // Store stores a Uint64x2 to an array 278 // 279 //go:noescape 280 func (x Uint64x2) Store(y *[2]uint64) 281 282 // LoadMaskedUint64x2 loads a Uint64x2 from an array, 283 // at those elements enabled by mask 284 // 285 // Asm: VMASKMOVQ, CPU Feature: AVX2 286 // 287 //go:noescape 288 func LoadMaskedUint64x2(y *[2]uint64, mask Mask64x2) Uint64x2 289 290 // StoreMasked stores a Uint64x2 to an array, 291 // at those elements enabled by mask 292 // 293 // Asm: VMASKMOVQ, CPU Feature: AVX2 294 // 295 //go:noescape 296 func (x Uint64x2) StoreMasked(y *[2]uint64, mask Mask64x2) 297 298 // Mask8x16 is a 128-bit SIMD vector of 16 int8 299 type Mask8x16 struct { 300 int8x16 v128 301 vals [16]int8 302 } 303 304 // Mask8x16FromBits constructs a Mask8x16 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 305 // 306 // Asm: KMOVB, CPU Feature: AVX512 307 func Mask8x16FromBits(y uint16) Mask8x16 308 309 // ToBits constructs a bitmap from a Mask8x16, where 1 means set for the indexed element, 0 means unset. 310 // 311 // Asm: KMOVB, CPU Features: AVX512 312 func (x Mask8x16) ToBits() uint16 313 314 // Mask16x8 is a 128-bit SIMD vector of 8 int16 315 type Mask16x8 struct { 316 int16x8 v128 317 vals [8]int16 318 } 319 320 // Mask16x8FromBits constructs a Mask16x8 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 321 // 322 // Asm: KMOVW, CPU Feature: AVX512 323 func Mask16x8FromBits(y uint8) Mask16x8 324 325 // ToBits constructs a bitmap from a Mask16x8, where 1 means set for the indexed element, 0 means unset. 326 // 327 // Asm: KMOVW, CPU Features: AVX512 328 func (x Mask16x8) ToBits() uint8 329 330 // Mask32x4 is a 128-bit SIMD vector of 4 int32 331 type Mask32x4 struct { 332 int32x4 v128 333 vals [4]int32 334 } 335 336 // Mask32x4FromBits constructs a Mask32x4 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 337 // Only the lower 4 bits of y are used. 338 // 339 // Asm: KMOVD, CPU Feature: AVX512 340 func Mask32x4FromBits(y uint8) Mask32x4 341 342 // ToBits constructs a bitmap from a Mask32x4, where 1 means set for the indexed element, 0 means unset. 343 // Only the lower 4 bits of y are used. 344 // 345 // Asm: KMOVD, CPU Features: AVX512 346 func (x Mask32x4) ToBits() uint8 347 348 // Mask64x2 is a 128-bit SIMD vector of 2 int64 349 type Mask64x2 struct { 350 int64x2 v128 351 vals [2]int64 352 } 353 354 // Mask64x2FromBits constructs a Mask64x2 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 355 // Only the lower 2 bits of y are used. 356 // 357 // Asm: KMOVQ, CPU Feature: AVX512 358 func Mask64x2FromBits(y uint8) Mask64x2 359 360 // ToBits constructs a bitmap from a Mask64x2, where 1 means set for the indexed element, 0 means unset. 361 // Only the lower 2 bits of y are used. 362 // 363 // Asm: KMOVQ, CPU Features: AVX512 364 func (x Mask64x2) ToBits() uint8 365 366 // v256 is a tag type that tells the compiler that this is really 256-bit SIMD 367 type v256 struct { 368 _256 [0]func() // uncomparable 369 } 370 371 // Float32x8 is a 256-bit SIMD vector of 8 float32 372 type Float32x8 struct { 373 float32x8 v256 374 vals [8]float32 375 } 376 377 // Len returns the number of elements in a Float32x8 378 func (x Float32x8) Len() int { return 8 } 379 380 // LoadFloat32x8 loads a Float32x8 from an array 381 // 382 //go:noescape 383 func LoadFloat32x8(y *[8]float32) Float32x8 384 385 // Store stores a Float32x8 to an array 386 // 387 //go:noescape 388 func (x Float32x8) Store(y *[8]float32) 389 390 // LoadMaskedFloat32x8 loads a Float32x8 from an array, 391 // at those elements enabled by mask 392 // 393 // Asm: VMASKMOVD, CPU Feature: AVX2 394 // 395 //go:noescape 396 func LoadMaskedFloat32x8(y *[8]float32, mask Mask32x8) Float32x8 397 398 // StoreMasked stores a Float32x8 to an array, 399 // at those elements enabled by mask 400 // 401 // Asm: VMASKMOVD, CPU Feature: AVX2 402 // 403 //go:noescape 404 func (x Float32x8) StoreMasked(y *[8]float32, mask Mask32x8) 405 406 // Float64x4 is a 256-bit SIMD vector of 4 float64 407 type Float64x4 struct { 408 float64x4 v256 409 vals [4]float64 410 } 411 412 // Len returns the number of elements in a Float64x4 413 func (x Float64x4) Len() int { return 4 } 414 415 // LoadFloat64x4 loads a Float64x4 from an array 416 // 417 //go:noescape 418 func LoadFloat64x4(y *[4]float64) Float64x4 419 420 // Store stores a Float64x4 to an array 421 // 422 //go:noescape 423 func (x Float64x4) Store(y *[4]float64) 424 425 // LoadMaskedFloat64x4 loads a Float64x4 from an array, 426 // at those elements enabled by mask 427 // 428 // Asm: VMASKMOVQ, CPU Feature: AVX2 429 // 430 //go:noescape 431 func LoadMaskedFloat64x4(y *[4]float64, mask Mask64x4) Float64x4 432 433 // StoreMasked stores a Float64x4 to an array, 434 // at those elements enabled by mask 435 // 436 // Asm: VMASKMOVQ, CPU Feature: AVX2 437 // 438 //go:noescape 439 func (x Float64x4) StoreMasked(y *[4]float64, mask Mask64x4) 440 441 // Int8x32 is a 256-bit SIMD vector of 32 int8 442 type Int8x32 struct { 443 int8x32 v256 444 vals [32]int8 445 } 446 447 // Len returns the number of elements in a Int8x32 448 func (x Int8x32) Len() int { return 32 } 449 450 // LoadInt8x32 loads a Int8x32 from an array 451 // 452 //go:noescape 453 func LoadInt8x32(y *[32]int8) Int8x32 454 455 // Store stores a Int8x32 to an array 456 // 457 //go:noescape 458 func (x Int8x32) Store(y *[32]int8) 459 460 // Int16x16 is a 256-bit SIMD vector of 16 int16 461 type Int16x16 struct { 462 int16x16 v256 463 vals [16]int16 464 } 465 466 // Len returns the number of elements in a Int16x16 467 func (x Int16x16) Len() int { return 16 } 468 469 // LoadInt16x16 loads a Int16x16 from an array 470 // 471 //go:noescape 472 func LoadInt16x16(y *[16]int16) Int16x16 473 474 // Store stores a Int16x16 to an array 475 // 476 //go:noescape 477 func (x Int16x16) Store(y *[16]int16) 478 479 // Int32x8 is a 256-bit SIMD vector of 8 int32 480 type Int32x8 struct { 481 int32x8 v256 482 vals [8]int32 483 } 484 485 // Len returns the number of elements in a Int32x8 486 func (x Int32x8) Len() int { return 8 } 487 488 // LoadInt32x8 loads a Int32x8 from an array 489 // 490 //go:noescape 491 func LoadInt32x8(y *[8]int32) Int32x8 492 493 // Store stores a Int32x8 to an array 494 // 495 //go:noescape 496 func (x Int32x8) Store(y *[8]int32) 497 498 // LoadMaskedInt32x8 loads a Int32x8 from an array, 499 // at those elements enabled by mask 500 // 501 // Asm: VMASKMOVD, CPU Feature: AVX2 502 // 503 //go:noescape 504 func LoadMaskedInt32x8(y *[8]int32, mask Mask32x8) Int32x8 505 506 // StoreMasked stores a Int32x8 to an array, 507 // at those elements enabled by mask 508 // 509 // Asm: VMASKMOVD, CPU Feature: AVX2 510 // 511 //go:noescape 512 func (x Int32x8) StoreMasked(y *[8]int32, mask Mask32x8) 513 514 // Int64x4 is a 256-bit SIMD vector of 4 int64 515 type Int64x4 struct { 516 int64x4 v256 517 vals [4]int64 518 } 519 520 // Len returns the number of elements in a Int64x4 521 func (x Int64x4) Len() int { return 4 } 522 523 // LoadInt64x4 loads a Int64x4 from an array 524 // 525 //go:noescape 526 func LoadInt64x4(y *[4]int64) Int64x4 527 528 // Store stores a Int64x4 to an array 529 // 530 //go:noescape 531 func (x Int64x4) Store(y *[4]int64) 532 533 // LoadMaskedInt64x4 loads a Int64x4 from an array, 534 // at those elements enabled by mask 535 // 536 // Asm: VMASKMOVQ, CPU Feature: AVX2 537 // 538 //go:noescape 539 func LoadMaskedInt64x4(y *[4]int64, mask Mask64x4) Int64x4 540 541 // StoreMasked stores a Int64x4 to an array, 542 // at those elements enabled by mask 543 // 544 // Asm: VMASKMOVQ, CPU Feature: AVX2 545 // 546 //go:noescape 547 func (x Int64x4) StoreMasked(y *[4]int64, mask Mask64x4) 548 549 // Uint8x32 is a 256-bit SIMD vector of 32 uint8 550 type Uint8x32 struct { 551 uint8x32 v256 552 vals [32]uint8 553 } 554 555 // Len returns the number of elements in a Uint8x32 556 func (x Uint8x32) Len() int { return 32 } 557 558 // LoadUint8x32 loads a Uint8x32 from an array 559 // 560 //go:noescape 561 func LoadUint8x32(y *[32]uint8) Uint8x32 562 563 // Store stores a Uint8x32 to an array 564 // 565 //go:noescape 566 func (x Uint8x32) Store(y *[32]uint8) 567 568 // Uint16x16 is a 256-bit SIMD vector of 16 uint16 569 type Uint16x16 struct { 570 uint16x16 v256 571 vals [16]uint16 572 } 573 574 // Len returns the number of elements in a Uint16x16 575 func (x Uint16x16) Len() int { return 16 } 576 577 // LoadUint16x16 loads a Uint16x16 from an array 578 // 579 //go:noescape 580 func LoadUint16x16(y *[16]uint16) Uint16x16 581 582 // Store stores a Uint16x16 to an array 583 // 584 //go:noescape 585 func (x Uint16x16) Store(y *[16]uint16) 586 587 // Uint32x8 is a 256-bit SIMD vector of 8 uint32 588 type Uint32x8 struct { 589 uint32x8 v256 590 vals [8]uint32 591 } 592 593 // Len returns the number of elements in a Uint32x8 594 func (x Uint32x8) Len() int { return 8 } 595 596 // LoadUint32x8 loads a Uint32x8 from an array 597 // 598 //go:noescape 599 func LoadUint32x8(y *[8]uint32) Uint32x8 600 601 // Store stores a Uint32x8 to an array 602 // 603 //go:noescape 604 func (x Uint32x8) Store(y *[8]uint32) 605 606 // LoadMaskedUint32x8 loads a Uint32x8 from an array, 607 // at those elements enabled by mask 608 // 609 // Asm: VMASKMOVD, CPU Feature: AVX2 610 // 611 //go:noescape 612 func LoadMaskedUint32x8(y *[8]uint32, mask Mask32x8) Uint32x8 613 614 // StoreMasked stores a Uint32x8 to an array, 615 // at those elements enabled by mask 616 // 617 // Asm: VMASKMOVD, CPU Feature: AVX2 618 // 619 //go:noescape 620 func (x Uint32x8) StoreMasked(y *[8]uint32, mask Mask32x8) 621 622 // Uint64x4 is a 256-bit SIMD vector of 4 uint64 623 type Uint64x4 struct { 624 uint64x4 v256 625 vals [4]uint64 626 } 627 628 // Len returns the number of elements in a Uint64x4 629 func (x Uint64x4) Len() int { return 4 } 630 631 // LoadUint64x4 loads a Uint64x4 from an array 632 // 633 //go:noescape 634 func LoadUint64x4(y *[4]uint64) Uint64x4 635 636 // Store stores a Uint64x4 to an array 637 // 638 //go:noescape 639 func (x Uint64x4) Store(y *[4]uint64) 640 641 // LoadMaskedUint64x4 loads a Uint64x4 from an array, 642 // at those elements enabled by mask 643 // 644 // Asm: VMASKMOVQ, CPU Feature: AVX2 645 // 646 //go:noescape 647 func LoadMaskedUint64x4(y *[4]uint64, mask Mask64x4) Uint64x4 648 649 // StoreMasked stores a Uint64x4 to an array, 650 // at those elements enabled by mask 651 // 652 // Asm: VMASKMOVQ, CPU Feature: AVX2 653 // 654 //go:noescape 655 func (x Uint64x4) StoreMasked(y *[4]uint64, mask Mask64x4) 656 657 // Mask8x32 is a 256-bit SIMD vector of 32 int8 658 type Mask8x32 struct { 659 int8x32 v256 660 vals [32]int8 661 } 662 663 // Mask8x32FromBits constructs a Mask8x32 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 664 // 665 // Asm: KMOVB, CPU Feature: AVX512 666 func Mask8x32FromBits(y uint32) Mask8x32 667 668 // ToBits constructs a bitmap from a Mask8x32, where 1 means set for the indexed element, 0 means unset. 669 // 670 // Asm: KMOVB, CPU Features: AVX512 671 func (x Mask8x32) ToBits() uint32 672 673 // Mask16x16 is a 256-bit SIMD vector of 16 int16 674 type Mask16x16 struct { 675 int16x16 v256 676 vals [16]int16 677 } 678 679 // Mask16x16FromBits constructs a Mask16x16 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 680 // 681 // Asm: KMOVW, CPU Feature: AVX512 682 func Mask16x16FromBits(y uint16) Mask16x16 683 684 // ToBits constructs a bitmap from a Mask16x16, where 1 means set for the indexed element, 0 means unset. 685 // 686 // Asm: KMOVW, CPU Features: AVX512 687 func (x Mask16x16) ToBits() uint16 688 689 // Mask32x8 is a 256-bit SIMD vector of 8 int32 690 type Mask32x8 struct { 691 int32x8 v256 692 vals [8]int32 693 } 694 695 // Mask32x8FromBits constructs a Mask32x8 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 696 // 697 // Asm: KMOVD, CPU Feature: AVX512 698 func Mask32x8FromBits(y uint8) Mask32x8 699 700 // ToBits constructs a bitmap from a Mask32x8, where 1 means set for the indexed element, 0 means unset. 701 // 702 // Asm: KMOVD, CPU Features: AVX512 703 func (x Mask32x8) ToBits() uint8 704 705 // Mask64x4 is a 256-bit SIMD vector of 4 int64 706 type Mask64x4 struct { 707 int64x4 v256 708 vals [4]int64 709 } 710 711 // Mask64x4FromBits constructs a Mask64x4 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 712 // Only the lower 4 bits of y are used. 713 // 714 // Asm: KMOVQ, CPU Feature: AVX512 715 func Mask64x4FromBits(y uint8) Mask64x4 716 717 // ToBits constructs a bitmap from a Mask64x4, where 1 means set for the indexed element, 0 means unset. 718 // Only the lower 4 bits of y are used. 719 // 720 // Asm: KMOVQ, CPU Features: AVX512 721 func (x Mask64x4) ToBits() uint8 722 723 // v512 is a tag type that tells the compiler that this is really 512-bit SIMD 724 type v512 struct { 725 _512 [0]func() // uncomparable 726 } 727 728 // Float32x16 is a 512-bit SIMD vector of 16 float32 729 type Float32x16 struct { 730 float32x16 v512 731 vals [16]float32 732 } 733 734 // Len returns the number of elements in a Float32x16 735 func (x Float32x16) Len() int { return 16 } 736 737 // LoadFloat32x16 loads a Float32x16 from an array 738 // 739 //go:noescape 740 func LoadFloat32x16(y *[16]float32) Float32x16 741 742 // Store stores a Float32x16 to an array 743 // 744 //go:noescape 745 func (x Float32x16) Store(y *[16]float32) 746 747 // LoadMaskedFloat32x16 loads a Float32x16 from an array, 748 // at those elements enabled by mask 749 // 750 // Asm: VMOVDQU32.Z, CPU Feature: AVX512 751 // 752 //go:noescape 753 func LoadMaskedFloat32x16(y *[16]float32, mask Mask32x16) Float32x16 754 755 // StoreMasked stores a Float32x16 to an array, 756 // at those elements enabled by mask 757 // 758 // Asm: VMOVDQU32, CPU Feature: AVX512 759 // 760 //go:noescape 761 func (x Float32x16) StoreMasked(y *[16]float32, mask Mask32x16) 762 763 // Float64x8 is a 512-bit SIMD vector of 8 float64 764 type Float64x8 struct { 765 float64x8 v512 766 vals [8]float64 767 } 768 769 // Len returns the number of elements in a Float64x8 770 func (x Float64x8) Len() int { return 8 } 771 772 // LoadFloat64x8 loads a Float64x8 from an array 773 // 774 //go:noescape 775 func LoadFloat64x8(y *[8]float64) Float64x8 776 777 // Store stores a Float64x8 to an array 778 // 779 //go:noescape 780 func (x Float64x8) Store(y *[8]float64) 781 782 // LoadMaskedFloat64x8 loads a Float64x8 from an array, 783 // at those elements enabled by mask 784 // 785 // Asm: VMOVDQU64.Z, CPU Feature: AVX512 786 // 787 //go:noescape 788 func LoadMaskedFloat64x8(y *[8]float64, mask Mask64x8) Float64x8 789 790 // StoreMasked stores a Float64x8 to an array, 791 // at those elements enabled by mask 792 // 793 // Asm: VMOVDQU64, CPU Feature: AVX512 794 // 795 //go:noescape 796 func (x Float64x8) StoreMasked(y *[8]float64, mask Mask64x8) 797 798 // Int8x64 is a 512-bit SIMD vector of 64 int8 799 type Int8x64 struct { 800 int8x64 v512 801 vals [64]int8 802 } 803 804 // Len returns the number of elements in a Int8x64 805 func (x Int8x64) Len() int { return 64 } 806 807 // LoadInt8x64 loads a Int8x64 from an array 808 // 809 //go:noescape 810 func LoadInt8x64(y *[64]int8) Int8x64 811 812 // Store stores a Int8x64 to an array 813 // 814 //go:noescape 815 func (x Int8x64) Store(y *[64]int8) 816 817 // LoadMaskedInt8x64 loads a Int8x64 from an array, 818 // at those elements enabled by mask 819 // 820 // Asm: VMOVDQU8.Z, CPU Feature: AVX512 821 // 822 //go:noescape 823 func LoadMaskedInt8x64(y *[64]int8, mask Mask8x64) Int8x64 824 825 // StoreMasked stores a Int8x64 to an array, 826 // at those elements enabled by mask 827 // 828 // Asm: VMOVDQU8, CPU Feature: AVX512 829 // 830 //go:noescape 831 func (x Int8x64) StoreMasked(y *[64]int8, mask Mask8x64) 832 833 // Int16x32 is a 512-bit SIMD vector of 32 int16 834 type Int16x32 struct { 835 int16x32 v512 836 vals [32]int16 837 } 838 839 // Len returns the number of elements in a Int16x32 840 func (x Int16x32) Len() int { return 32 } 841 842 // LoadInt16x32 loads a Int16x32 from an array 843 // 844 //go:noescape 845 func LoadInt16x32(y *[32]int16) Int16x32 846 847 // Store stores a Int16x32 to an array 848 // 849 //go:noescape 850 func (x Int16x32) Store(y *[32]int16) 851 852 // LoadMaskedInt16x32 loads a Int16x32 from an array, 853 // at those elements enabled by mask 854 // 855 // Asm: VMOVDQU16.Z, CPU Feature: AVX512 856 // 857 //go:noescape 858 func LoadMaskedInt16x32(y *[32]int16, mask Mask16x32) Int16x32 859 860 // StoreMasked stores a Int16x32 to an array, 861 // at those elements enabled by mask 862 // 863 // Asm: VMOVDQU16, CPU Feature: AVX512 864 // 865 //go:noescape 866 func (x Int16x32) StoreMasked(y *[32]int16, mask Mask16x32) 867 868 // Int32x16 is a 512-bit SIMD vector of 16 int32 869 type Int32x16 struct { 870 int32x16 v512 871 vals [16]int32 872 } 873 874 // Len returns the number of elements in a Int32x16 875 func (x Int32x16) Len() int { return 16 } 876 877 // LoadInt32x16 loads a Int32x16 from an array 878 // 879 //go:noescape 880 func LoadInt32x16(y *[16]int32) Int32x16 881 882 // Store stores a Int32x16 to an array 883 // 884 //go:noescape 885 func (x Int32x16) Store(y *[16]int32) 886 887 // LoadMaskedInt32x16 loads a Int32x16 from an array, 888 // at those elements enabled by mask 889 // 890 // Asm: VMOVDQU32.Z, CPU Feature: AVX512 891 // 892 //go:noescape 893 func LoadMaskedInt32x16(y *[16]int32, mask Mask32x16) Int32x16 894 895 // StoreMasked stores a Int32x16 to an array, 896 // at those elements enabled by mask 897 // 898 // Asm: VMOVDQU32, CPU Feature: AVX512 899 // 900 //go:noescape 901 func (x Int32x16) StoreMasked(y *[16]int32, mask Mask32x16) 902 903 // Int64x8 is a 512-bit SIMD vector of 8 int64 904 type Int64x8 struct { 905 int64x8 v512 906 vals [8]int64 907 } 908 909 // Len returns the number of elements in a Int64x8 910 func (x Int64x8) Len() int { return 8 } 911 912 // LoadInt64x8 loads a Int64x8 from an array 913 // 914 //go:noescape 915 func LoadInt64x8(y *[8]int64) Int64x8 916 917 // Store stores a Int64x8 to an array 918 // 919 //go:noescape 920 func (x Int64x8) Store(y *[8]int64) 921 922 // LoadMaskedInt64x8 loads a Int64x8 from an array, 923 // at those elements enabled by mask 924 // 925 // Asm: VMOVDQU64.Z, CPU Feature: AVX512 926 // 927 //go:noescape 928 func LoadMaskedInt64x8(y *[8]int64, mask Mask64x8) Int64x8 929 930 // StoreMasked stores a Int64x8 to an array, 931 // at those elements enabled by mask 932 // 933 // Asm: VMOVDQU64, CPU Feature: AVX512 934 // 935 //go:noescape 936 func (x Int64x8) StoreMasked(y *[8]int64, mask Mask64x8) 937 938 // Uint8x64 is a 512-bit SIMD vector of 64 uint8 939 type Uint8x64 struct { 940 uint8x64 v512 941 vals [64]uint8 942 } 943 944 // Len returns the number of elements in a Uint8x64 945 func (x Uint8x64) Len() int { return 64 } 946 947 // LoadUint8x64 loads a Uint8x64 from an array 948 // 949 //go:noescape 950 func LoadUint8x64(y *[64]uint8) Uint8x64 951 952 // Store stores a Uint8x64 to an array 953 // 954 //go:noescape 955 func (x Uint8x64) Store(y *[64]uint8) 956 957 // LoadMaskedUint8x64 loads a Uint8x64 from an array, 958 // at those elements enabled by mask 959 // 960 // Asm: VMOVDQU8.Z, CPU Feature: AVX512 961 // 962 //go:noescape 963 func LoadMaskedUint8x64(y *[64]uint8, mask Mask8x64) Uint8x64 964 965 // StoreMasked stores a Uint8x64 to an array, 966 // at those elements enabled by mask 967 // 968 // Asm: VMOVDQU8, CPU Feature: AVX512 969 // 970 //go:noescape 971 func (x Uint8x64) StoreMasked(y *[64]uint8, mask Mask8x64) 972 973 // Uint16x32 is a 512-bit SIMD vector of 32 uint16 974 type Uint16x32 struct { 975 uint16x32 v512 976 vals [32]uint16 977 } 978 979 // Len returns the number of elements in a Uint16x32 980 func (x Uint16x32) Len() int { return 32 } 981 982 // LoadUint16x32 loads a Uint16x32 from an array 983 // 984 //go:noescape 985 func LoadUint16x32(y *[32]uint16) Uint16x32 986 987 // Store stores a Uint16x32 to an array 988 // 989 //go:noescape 990 func (x Uint16x32) Store(y *[32]uint16) 991 992 // LoadMaskedUint16x32 loads a Uint16x32 from an array, 993 // at those elements enabled by mask 994 // 995 // Asm: VMOVDQU16.Z, CPU Feature: AVX512 996 // 997 //go:noescape 998 func LoadMaskedUint16x32(y *[32]uint16, mask Mask16x32) Uint16x32 999 1000 // StoreMasked stores a Uint16x32 to an array, 1001 // at those elements enabled by mask 1002 // 1003 // Asm: VMOVDQU16, CPU Feature: AVX512 1004 // 1005 //go:noescape 1006 func (x Uint16x32) StoreMasked(y *[32]uint16, mask Mask16x32) 1007 1008 // Uint32x16 is a 512-bit SIMD vector of 16 uint32 1009 type Uint32x16 struct { 1010 uint32x16 v512 1011 vals [16]uint32 1012 } 1013 1014 // Len returns the number of elements in a Uint32x16 1015 func (x Uint32x16) Len() int { return 16 } 1016 1017 // LoadUint32x16 loads a Uint32x16 from an array 1018 // 1019 //go:noescape 1020 func LoadUint32x16(y *[16]uint32) Uint32x16 1021 1022 // Store stores a Uint32x16 to an array 1023 // 1024 //go:noescape 1025 func (x Uint32x16) Store(y *[16]uint32) 1026 1027 // LoadMaskedUint32x16 loads a Uint32x16 from an array, 1028 // at those elements enabled by mask 1029 // 1030 // Asm: VMOVDQU32.Z, CPU Feature: AVX512 1031 // 1032 //go:noescape 1033 func LoadMaskedUint32x16(y *[16]uint32, mask Mask32x16) Uint32x16 1034 1035 // StoreMasked stores a Uint32x16 to an array, 1036 // at those elements enabled by mask 1037 // 1038 // Asm: VMOVDQU32, CPU Feature: AVX512 1039 // 1040 //go:noescape 1041 func (x Uint32x16) StoreMasked(y *[16]uint32, mask Mask32x16) 1042 1043 // Uint64x8 is a 512-bit SIMD vector of 8 uint64 1044 type Uint64x8 struct { 1045 uint64x8 v512 1046 vals [8]uint64 1047 } 1048 1049 // Len returns the number of elements in a Uint64x8 1050 func (x Uint64x8) Len() int { return 8 } 1051 1052 // LoadUint64x8 loads a Uint64x8 from an array 1053 // 1054 //go:noescape 1055 func LoadUint64x8(y *[8]uint64) Uint64x8 1056 1057 // Store stores a Uint64x8 to an array 1058 // 1059 //go:noescape 1060 func (x Uint64x8) Store(y *[8]uint64) 1061 1062 // LoadMaskedUint64x8 loads a Uint64x8 from an array, 1063 // at those elements enabled by mask 1064 // 1065 // Asm: VMOVDQU64.Z, CPU Feature: AVX512 1066 // 1067 //go:noescape 1068 func LoadMaskedUint64x8(y *[8]uint64, mask Mask64x8) Uint64x8 1069 1070 // StoreMasked stores a Uint64x8 to an array, 1071 // at those elements enabled by mask 1072 // 1073 // Asm: VMOVDQU64, CPU Feature: AVX512 1074 // 1075 //go:noescape 1076 func (x Uint64x8) StoreMasked(y *[8]uint64, mask Mask64x8) 1077 1078 // Mask8x64 is a 512-bit SIMD vector of 64 int8 1079 type Mask8x64 struct { 1080 int8x64 v512 1081 vals [64]int8 1082 } 1083 1084 // Mask8x64FromBits constructs a Mask8x64 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 1085 // 1086 // Asm: KMOVB, CPU Feature: AVX512 1087 func Mask8x64FromBits(y uint64) Mask8x64 1088 1089 // ToBits constructs a bitmap from a Mask8x64, where 1 means set for the indexed element, 0 means unset. 1090 // 1091 // Asm: KMOVB, CPU Features: AVX512 1092 func (x Mask8x64) ToBits() uint64 1093 1094 // Mask16x32 is a 512-bit SIMD vector of 32 int16 1095 type Mask16x32 struct { 1096 int16x32 v512 1097 vals [32]int16 1098 } 1099 1100 // Mask16x32FromBits constructs a Mask16x32 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 1101 // 1102 // Asm: KMOVW, CPU Feature: AVX512 1103 func Mask16x32FromBits(y uint32) Mask16x32 1104 1105 // ToBits constructs a bitmap from a Mask16x32, where 1 means set for the indexed element, 0 means unset. 1106 // 1107 // Asm: KMOVW, CPU Features: AVX512 1108 func (x Mask16x32) ToBits() uint32 1109 1110 // Mask32x16 is a 512-bit SIMD vector of 16 int32 1111 type Mask32x16 struct { 1112 int32x16 v512 1113 vals [16]int32 1114 } 1115 1116 // Mask32x16FromBits constructs a Mask32x16 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 1117 // 1118 // Asm: KMOVD, CPU Feature: AVX512 1119 func Mask32x16FromBits(y uint16) Mask32x16 1120 1121 // ToBits constructs a bitmap from a Mask32x16, where 1 means set for the indexed element, 0 means unset. 1122 // 1123 // Asm: KMOVD, CPU Features: AVX512 1124 func (x Mask32x16) ToBits() uint16 1125 1126 // Mask64x8 is a 512-bit SIMD vector of 8 int64 1127 type Mask64x8 struct { 1128 int64x8 v512 1129 vals [8]int64 1130 } 1131 1132 // Mask64x8FromBits constructs a Mask64x8 from a bitmap value, where 1 means set for the indexed element, 0 means unset. 1133 // 1134 // Asm: KMOVQ, CPU Feature: AVX512 1135 func Mask64x8FromBits(y uint8) Mask64x8 1136 1137 // ToBits constructs a bitmap from a Mask64x8, where 1 means set for the indexed element, 0 means unset. 1138 // 1139 // Asm: KMOVQ, CPU Features: AVX512 1140 func (x Mask64x8) ToBits() uint8 1141