Source file src/simd/simd.go
1 // Code generated by 'go run -C $GOROOT/src/simd/archsimd/_gen/midway'; DO NOT EDIT. 2 3 //go:build goexperiment.simd && (amd64 || wasm || arm64) 4 5 // Computed intersection of methods for supported SIMD architectures and vector widths 6 7 package simd 8 9 // internal SIMD marker. 10 type _simd struct { 11 _ [0]func(*_simd) *_simd 12 } 13 14 // Int8s represents a vector of 8-bit signed integers. 15 type Int8s struct { 16 _ _simd 17 atLeast [2]uint64 // the actual vector size may be larger. 18 } 19 20 // LoadInt8 loads a slice of int8 into an Int8s vector. 21 func LoadInt8s([]int8) Int8s 22 23 // LoadInt8Part loads a partial slice of int8 into an Int8s vector, returning the vector and the number of elements loaded. 24 func LoadInt8sPart([]int8) (Int8s, int) 25 26 // BroadcastInt8 fills the elements of a slice with its argument value. 27 func BroadcastInt8s(int8) Int8s 28 29 // Abs returns the element-wise absolute value of x. 30 func (x Int8s) Abs() Int8s 31 32 // Add returns the element-wise sum of x and y. 33 func (x Int8s) Add(y Int8s) Int8s 34 35 // AddSaturated returns the element-wise saturated sum of x and y. 36 func (x Int8s) AddSaturated(y Int8s) Int8s 37 38 // And returns the bitwise AND of x and y. 39 func (x Int8s) And(y Int8s) Int8s 40 41 // AndNot returns the bitwise AND NOT of x and y. 42 func (x Int8s) AndNot(y Int8s) Int8s 43 44 // ConvertToUint8 converts the vector elements to uint8. 45 func (x Int8s) ConvertToUint8() Uint8s 46 47 // Equal returns a mask indicating where x and y are equal. 48 func (x Int8s) Equal(y Int8s) Mask8s 49 50 // Greater returns a mask indicating where x is greater than y. 51 func (x Int8s) Greater(y Int8s) Mask8s 52 53 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 54 func (x Int8s) GreaterEqual(y Int8s) Mask8s 55 56 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 57 func (x Int8s) IfElse(mask Mask8s, y Int8s) Int8s 58 59 // Len returns the number of elements in the vector. 60 func (x Int8s) Len() int 61 62 // Less returns a mask indicating where x is less than y. 63 func (x Int8s) Less(y Int8s) Mask8s 64 65 // LessEqual returns a mask indicating where x is less than or equal to y. 66 func (x Int8s) LessEqual(y Int8s) Mask8s 67 68 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 69 func (x Int8s) Masked(mask Mask8s) Int8s 70 71 // Max returns the element-wise maximum of x and y. 72 func (x Int8s) Max(y Int8s) Int8s 73 74 // Min returns the element-wise minimum of x and y. 75 func (x Int8s) Min(y Int8s) Int8s 76 77 // Mul returns the element-wise product of x and y. 78 func (x Int8s) Mul(y Int8s) Int8s 79 80 // Neg returns the element-wise negation of x. 81 func (x Int8s) Neg() Int8s 82 83 // Not returns the bitwise NOT of x. 84 func (x Int8s) Not() Int8s 85 86 // NotEqual returns a mask indicating where x and y are not equal. 87 func (x Int8s) NotEqual(y Int8s) Mask8s 88 89 // Or returns the bitwise OR of x and y. 90 func (x Int8s) Or(y Int8s) Int8s 91 92 // StoreSlice stores the vector elements into the slice s. 93 func (x Int8s) Store(s []int8) 94 95 // StoreSlicePart stores a partial vector into the slice s. 96 func (x Int8s) StorePart(s []int8) int 97 98 // String returns a string representation of the vector. 99 func (x Int8s) String() string 100 101 // Sub returns the element-wise difference of x and y. 102 func (x Int8s) Sub(y Int8s) Int8s 103 104 // SubSaturated returns the element-wise saturated difference of x and y. 105 func (x Int8s) SubSaturated(y Int8s) Int8s 106 107 // ToBits reinterprets the vector bits as an unsigned integer vector. 108 func (x Int8s) ToBits() Uint8s 109 110 // ToMask returns a mask representation of the vector. 111 func (x Int8s) ToMask() (to Mask8s) 112 113 // Xor returns the bitwise XOR of x and y. 114 func (x Int8s) Xor(y Int8s) Int8s 115 116 // Int16s represents a vector of 16-bit signed integers. 117 type Int16s struct { 118 _ _simd 119 atLeast [2]uint64 // the actual vector size may be larger. 120 } 121 122 // LoadInt16 loads a slice of int16 into an Int16s vector. 123 func LoadInt16s([]int16) Int16s 124 125 // LoadInt16Part loads a partial slice of int16 into an Int16s vector, returning the vector and the number of elements loaded. 126 func LoadInt16sPart([]int16) (Int16s, int) 127 128 // BroadcastInt16 fills the elements of a slice with its argument value. 129 func BroadcastInt16s(int16) Int16s 130 131 // Abs returns the element-wise absolute value of x. 132 func (x Int16s) Abs() Int16s 133 134 // Add returns the element-wise sum of x and y. 135 func (x Int16s) Add(y Int16s) Int16s 136 137 // AddSaturated returns the element-wise saturated sum of x and y. 138 func (x Int16s) AddSaturated(y Int16s) Int16s 139 140 // And returns the bitwise AND of x and y. 141 func (x Int16s) And(y Int16s) Int16s 142 143 // AndNot returns the bitwise AND NOT of x and y. 144 func (x Int16s) AndNot(y Int16s) Int16s 145 146 // ConvertToUint16 converts the vector elements to uint16. 147 func (x Int16s) ConvertToUint16() Uint16s 148 149 // Equal returns a mask indicating where x and y are equal. 150 func (x Int16s) Equal(y Int16s) Mask16s 151 152 // Greater returns a mask indicating where x is greater than y. 153 func (x Int16s) Greater(y Int16s) Mask16s 154 155 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 156 func (x Int16s) GreaterEqual(y Int16s) Mask16s 157 158 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 159 func (x Int16s) IfElse(mask Mask16s, y Int16s) Int16s 160 161 // Len returns the number of elements in the vector. 162 func (x Int16s) Len() int 163 164 // Less returns a mask indicating where x is less than y. 165 func (x Int16s) Less(y Int16s) Mask16s 166 167 // LessEqual returns a mask indicating where x is less than or equal to y. 168 func (x Int16s) LessEqual(y Int16s) Mask16s 169 170 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 171 func (x Int16s) Masked(mask Mask16s) Int16s 172 173 // Max returns the element-wise maximum of x and y. 174 func (x Int16s) Max(y Int16s) Int16s 175 176 // Min returns the element-wise minimum of x and y. 177 func (x Int16s) Min(y Int16s) Int16s 178 179 // Mul returns the element-wise product of x and y. 180 func (x Int16s) Mul(y Int16s) Int16s 181 182 // Neg returns the element-wise negation of x. 183 func (x Int16s) Neg() Int16s 184 185 // Not returns the bitwise NOT of x. 186 func (x Int16s) Not() Int16s 187 188 // NotEqual returns a mask indicating where x and y are not equal. 189 func (x Int16s) NotEqual(y Int16s) Mask16s 190 191 // Or returns the bitwise OR of x and y. 192 func (x Int16s) Or(y Int16s) Int16s 193 194 // RotatesAllLeft rotates all elements left by y bits. 195 func (x Int16s) RotateAllLeft(dist uint64) Int16s 196 197 // RotatesAllRight rotates all elements right by y bits. 198 func (x Int16s) RotateAllRight(dist uint64) Int16s 199 200 // ShiftAllLeft shifts all elements left by y bits. 201 func (x Int16s) ShiftAllLeft(shift uint64) Int16s 202 203 // ShiftAllRight shifts all elements right by y bits. 204 func (x Int16s) ShiftAllRight(shift uint64) Int16s 205 206 // StoreSlice stores the vector elements into the slice s. 207 func (x Int16s) Store(s []int16) 208 209 // StoreSlicePart stores a partial vector into the slice s. 210 func (x Int16s) StorePart(s []int16) int 211 212 // String returns a string representation of the vector. 213 func (x Int16s) String() string 214 215 // Sub returns the element-wise difference of x and y. 216 func (x Int16s) Sub(y Int16s) Int16s 217 218 // SubSaturated returns the element-wise saturated difference of x and y. 219 func (x Int16s) SubSaturated(y Int16s) Int16s 220 221 // ToBits reinterprets the vector bits as an unsigned integer vector. 222 func (x Int16s) ToBits() Uint16s 223 224 // ToMask returns a mask representation of the vector. 225 func (x Int16s) ToMask() (to Mask16s) 226 227 // Xor returns the bitwise XOR of x and y. 228 func (x Int16s) Xor(y Int16s) Int16s 229 230 // Int32s represents a vector of 32-bit signed integers. 231 type Int32s struct { 232 _ _simd 233 atLeast [2]uint64 // the actual vector size may be larger. 234 } 235 236 // LoadInt32 loads a slice of int32 into an Int32s vector. 237 func LoadInt32s([]int32) Int32s 238 239 // LoadInt32Part loads a partial slice of int32 into an Int32s vector, returning the vector and the number of elements loaded. 240 func LoadInt32sPart([]int32) (Int32s, int) 241 242 // BroadcastInt32 fills the elements of a slice with its argument value. 243 func BroadcastInt32s(int32) Int32s 244 245 // Abs returns the element-wise absolute value of x. 246 func (x Int32s) Abs() Int32s 247 248 // Add returns the element-wise sum of x and y. 249 func (x Int32s) Add(y Int32s) Int32s 250 251 // And returns the bitwise AND of x and y. 252 func (x Int32s) And(y Int32s) Int32s 253 254 // AndNot returns the bitwise AND NOT of x and y. 255 func (x Int32s) AndNot(y Int32s) Int32s 256 257 // ConvertToFloat32 converts the vector elements to float32. 258 func (x Int32s) ConvertToFloat32() Float32s 259 260 // ConvertToUint32 converts the vector elements to uint32. 261 func (x Int32s) ConvertToUint32() Uint32s 262 263 // Equal returns a mask indicating where x and y are equal. 264 func (x Int32s) Equal(y Int32s) Mask32s 265 266 // Greater returns a mask indicating where x is greater than y. 267 func (x Int32s) Greater(y Int32s) Mask32s 268 269 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 270 func (x Int32s) GreaterEqual(y Int32s) Mask32s 271 272 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 273 func (x Int32s) IfElse(mask Mask32s, y Int32s) Int32s 274 275 // Len returns the number of elements in the vector. 276 func (x Int32s) Len() int 277 278 // Less returns a mask indicating where x is less than y. 279 func (x Int32s) Less(y Int32s) Mask32s 280 281 // LessEqual returns a mask indicating where x is less than or equal to y. 282 func (x Int32s) LessEqual(y Int32s) Mask32s 283 284 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 285 func (x Int32s) Masked(mask Mask32s) Int32s 286 287 // Max returns the element-wise maximum of x and y. 288 func (x Int32s) Max(y Int32s) Int32s 289 290 // Min returns the element-wise minimum of x and y. 291 func (x Int32s) Min(y Int32s) Int32s 292 293 // Mul returns the element-wise product of x and y. 294 func (x Int32s) Mul(y Int32s) Int32s 295 296 // Neg returns the element-wise negation of x. 297 func (x Int32s) Neg() Int32s 298 299 // Not returns the bitwise NOT of x. 300 func (x Int32s) Not() Int32s 301 302 // NotEqual returns a mask indicating where x and y are not equal. 303 func (x Int32s) NotEqual(y Int32s) Mask32s 304 305 // Or returns the bitwise OR of x and y. 306 func (x Int32s) Or(y Int32s) Int32s 307 308 // RotatesAllLeft rotates all elements left by y bits. 309 func (x Int32s) RotateAllLeft(dist uint64) Int32s 310 311 // RotatesAllRight rotates all elements right by y bits. 312 func (x Int32s) RotateAllRight(dist uint64) Int32s 313 314 // ShiftAllLeft shifts all elements left by y bits. 315 func (x Int32s) ShiftAllLeft(shift uint64) Int32s 316 317 // ShiftAllRight shifts all elements right by y bits. 318 func (x Int32s) ShiftAllRight(shift uint64) Int32s 319 320 // StoreSlice stores the vector elements into the slice s. 321 func (x Int32s) Store(s []int32) 322 323 // StoreSlicePart stores a partial vector into the slice s. 324 func (x Int32s) StorePart(s []int32) int 325 326 // String returns a string representation of the vector. 327 func (x Int32s) String() string 328 329 // Sub returns the element-wise difference of x and y. 330 func (x Int32s) Sub(y Int32s) Int32s 331 332 // ToBits reinterprets the vector bits as an unsigned integer vector. 333 func (x Int32s) ToBits() Uint32s 334 335 // ToMask returns a mask representation of the vector. 336 func (x Int32s) ToMask() (to Mask32s) 337 338 // Xor returns the bitwise XOR of x and y. 339 func (x Int32s) Xor(y Int32s) Int32s 340 341 // Int64s represents a vector of 64-bit signed integers. 342 type Int64s struct { 343 _ _simd 344 atLeast [2]uint64 // the actual vector size may be larger. 345 } 346 347 // LoadInt64 loads a slice of int64 into an Int64s vector. 348 func LoadInt64s([]int64) Int64s 349 350 // LoadInt64Part loads a partial slice of int64 into an Int64s vector, returning the vector and the number of elements loaded. 351 func LoadInt64sPart([]int64) (Int64s, int) 352 353 // BroadcastInt64 fills the elements of a slice with its argument value. 354 func BroadcastInt64s(int64) Int64s 355 356 // Add returns the element-wise sum of x and y. 357 func (x Int64s) Add(y Int64s) Int64s 358 359 // And returns the bitwise AND of x and y. 360 func (x Int64s) And(y Int64s) Int64s 361 362 // AndNot returns the bitwise AND NOT of x and y. 363 func (x Int64s) AndNot(y Int64s) Int64s 364 365 // ConvertToUint64 converts the vector elements to uint64. 366 func (x Int64s) ConvertToUint64() Uint64s 367 368 // Equal returns a mask indicating where x and y are equal. 369 func (x Int64s) Equal(y Int64s) Mask64s 370 371 // Greater returns a mask indicating where x is greater than y. 372 func (x Int64s) Greater(y Int64s) Mask64s 373 374 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 375 func (x Int64s) GreaterEqual(y Int64s) Mask64s 376 377 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 378 func (x Int64s) IfElse(mask Mask64s, y Int64s) Int64s 379 380 // Len returns the number of elements in the vector. 381 func (x Int64s) Len() int 382 383 // Less returns a mask indicating where x is less than y. 384 func (x Int64s) Less(y Int64s) Mask64s 385 386 // LessEqual returns a mask indicating where x is less than or equal to y. 387 func (x Int64s) LessEqual(y Int64s) Mask64s 388 389 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 390 func (x Int64s) Masked(mask Mask64s) Int64s 391 392 // Neg returns the element-wise negation of x. 393 func (x Int64s) Neg() Int64s 394 395 // Not returns the bitwise NOT of x. 396 func (x Int64s) Not() Int64s 397 398 // NotEqual returns a mask indicating where x and y are not equal. 399 func (x Int64s) NotEqual(y Int64s) Mask64s 400 401 // Or returns the bitwise OR of x and y. 402 func (x Int64s) Or(y Int64s) Int64s 403 404 // RotatesAllLeft rotates all elements left by y bits. 405 func (x Int64s) RotateAllLeft(dist uint64) Int64s 406 407 // RotatesAllRight rotates all elements right by y bits. 408 func (x Int64s) RotateAllRight(dist uint64) Int64s 409 410 // ShiftAllLeft shifts all elements left by y bits. 411 func (x Int64s) ShiftAllLeft(shift uint64) Int64s 412 413 // StoreSlice stores the vector elements into the slice s. 414 func (x Int64s) Store(s []int64) 415 416 // StoreSlicePart stores a partial vector into the slice s. 417 func (x Int64s) StorePart(s []int64) int 418 419 // String returns a string representation of the vector. 420 func (x Int64s) String() string 421 422 // Sub returns the element-wise difference of x and y. 423 func (x Int64s) Sub(y Int64s) Int64s 424 425 // ToBits reinterprets the vector bits as an unsigned integer vector. 426 func (x Int64s) ToBits() Uint64s 427 428 // ToMask returns a mask representation of the vector. 429 func (x Int64s) ToMask() (to Mask64s) 430 431 // Xor returns the bitwise XOR of x and y. 432 func (x Int64s) Xor(y Int64s) Int64s 433 434 // Uint8s represents a vector of 8-bit unsigned integers. 435 type Uint8s struct { 436 _ _simd 437 atLeast [2]uint64 // the actual vector size may be larger. 438 } 439 440 // LoadUint8 loads a slice of uint8 into an Uint8s vector. 441 func LoadUint8s([]uint8) Uint8s 442 443 // LoadUint8Part loads a partial slice of uint8 into an Uint8s vector, returning the vector and the number of elements loaded. 444 func LoadUint8sPart([]uint8) (Uint8s, int) 445 446 // BroadcastUint8 fills the elements of a slice with its argument value. 447 func BroadcastUint8s(uint8) Uint8s 448 449 // Add returns the element-wise sum of x and y. 450 func (x Uint8s) Add(y Uint8s) Uint8s 451 452 // AddSaturated returns the element-wise saturated sum of x and y. 453 func (x Uint8s) AddSaturated(y Uint8s) Uint8s 454 455 // And returns the bitwise AND of x and y. 456 func (x Uint8s) And(y Uint8s) Uint8s 457 458 // AndNot returns the bitwise AND NOT of x and y. 459 func (x Uint8s) AndNot(y Uint8s) Uint8s 460 461 // Average returns the element-wise average of x and y. 462 func (x Uint8s) Average(y Uint8s) Uint8s 463 464 // BitsToInt8 reinterprets the vector bits as an Int8s vector. 465 func (x Uint8s) BitsToInt8() Int8s 466 467 // ConvertToInt8 converts the vector elements to int8. 468 func (x Uint8s) ConvertToInt8() Int8s 469 470 // Equal returns a mask indicating where x and y are equal. 471 func (x Uint8s) Equal(y Uint8s) Mask8s 472 473 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 474 func (x Uint8s) IfElse(mask Mask8s, y Uint8s) Uint8s 475 476 // Len returns the number of elements in the vector. 477 func (x Uint8s) Len() int 478 479 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 480 func (x Uint8s) Masked(mask Mask8s) Uint8s 481 482 // Max returns the element-wise maximum of x and y. 483 func (x Uint8s) Max(y Uint8s) Uint8s 484 485 // Min returns the element-wise minimum of x and y. 486 func (x Uint8s) Min(y Uint8s) Uint8s 487 488 // Mul returns the element-wise product of x and y. 489 func (x Uint8s) Mul(y Uint8s) Uint8s 490 491 // Not returns the bitwise NOT of x. 492 func (x Uint8s) Not() Uint8s 493 494 // NotEqual returns a mask indicating where x and y are not equal. 495 func (x Uint8s) NotEqual(y Uint8s) Mask8s 496 497 // Or returns the bitwise OR of x and y. 498 func (x Uint8s) Or(y Uint8s) Uint8s 499 500 // ReshapeToUint16s reinterprets the vector bits as a Uint16s vector. 501 func (x Uint8s) ReshapeToUint16s() Uint16s 502 503 // ReshapeToUint32s reinterprets the vector bits as a Uint32s vector. 504 func (x Uint8s) ReshapeToUint32s() Uint32s 505 506 // ReshapeToUint64s reinterprets the vector bits as a Uint64s vector. 507 func (x Uint8s) ReshapeToUint64s() Uint64s 508 509 // StoreSlice stores the vector elements into the slice s. 510 func (x Uint8s) Store(s []uint8) 511 512 // StoreSlicePart stores a partial vector into the slice s. 513 func (x Uint8s) StorePart(s []uint8) int 514 515 // String returns a string representation of the vector. 516 func (x Uint8s) String() string 517 518 // Sub returns the element-wise difference of x and y. 519 func (x Uint8s) Sub(y Uint8s) Uint8s 520 521 // SubSaturated returns the element-wise saturated difference of x and y. 522 func (x Uint8s) SubSaturated(y Uint8s) Uint8s 523 524 // Xor returns the bitwise XOR of x and y. 525 func (x Uint8s) Xor(y Uint8s) Uint8s 526 527 // Uint16s represents a vector of 16-bit unsigned integers. 528 type Uint16s struct { 529 _ _simd 530 atLeast [2]uint64 // the actual vector size may be larger. 531 } 532 533 // LoadUint16 loads a slice of uint16 into an Uint16s vector. 534 func LoadUint16s([]uint16) Uint16s 535 536 // LoadUint16Part loads a partial slice of uint16 into an Uint16s vector, returning the vector and the number of elements loaded. 537 func LoadUint16sPart([]uint16) (Uint16s, int) 538 539 // BroadcastUint16 fills the elements of a slice with its argument value. 540 func BroadcastUint16s(uint16) Uint16s 541 542 // Add returns the element-wise sum of x and y. 543 func (x Uint16s) Add(y Uint16s) Uint16s 544 545 // AddSaturated returns the element-wise saturated sum of x and y. 546 func (x Uint16s) AddSaturated(y Uint16s) Uint16s 547 548 // And returns the bitwise AND of x and y. 549 func (x Uint16s) And(y Uint16s) Uint16s 550 551 // AndNot returns the bitwise AND NOT of x and y. 552 func (x Uint16s) AndNot(y Uint16s) Uint16s 553 554 // Average returns the element-wise average of x and y. 555 func (x Uint16s) Average(y Uint16s) Uint16s 556 557 // BitsToInt16 reinterprets the vector bits as an Int16s vector. 558 func (x Uint16s) BitsToInt16() Int16s 559 560 // ConvertToInt16 converts the vector elements to int16. 561 func (x Uint16s) ConvertToInt16() Int16s 562 563 // Equal returns a mask indicating where x and y are equal. 564 func (x Uint16s) Equal(y Uint16s) Mask16s 565 566 // Greater returns a mask indicating where x is greater than y. 567 func (x Uint16s) Greater(y Uint16s) Mask16s 568 569 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 570 func (x Uint16s) GreaterEqual(y Uint16s) Mask16s 571 572 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 573 func (x Uint16s) IfElse(mask Mask16s, y Uint16s) Uint16s 574 575 // Len returns the number of elements in the vector. 576 func (x Uint16s) Len() int 577 578 // Less returns a mask indicating where x is less than y. 579 func (x Uint16s) Less(y Uint16s) Mask16s 580 581 // LessEqual returns a mask indicating where x is less than or equal to y. 582 func (x Uint16s) LessEqual(y Uint16s) Mask16s 583 584 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 585 func (x Uint16s) Masked(mask Mask16s) Uint16s 586 587 // Max returns the element-wise maximum of x and y. 588 func (x Uint16s) Max(y Uint16s) Uint16s 589 590 // Min returns the element-wise minimum of x and y. 591 func (x Uint16s) Min(y Uint16s) Uint16s 592 593 // Mul returns the element-wise product of x and y. 594 func (x Uint16s) Mul(y Uint16s) Uint16s 595 596 // Not returns the bitwise NOT of x. 597 func (x Uint16s) Not() Uint16s 598 599 // NotEqual returns a mask indicating where x and y are not equal. 600 func (x Uint16s) NotEqual(y Uint16s) Mask16s 601 602 // Or returns the bitwise OR of x and y. 603 func (x Uint16s) Or(y Uint16s) Uint16s 604 605 // ReshapeToUint32s reinterprets the vector bits as a Uint32s vector. 606 func (x Uint16s) ReshapeToUint32s() Uint32s 607 608 // ReshapeToUint64s reinterprets the vector bits as a Uint64s vector. 609 func (x Uint16s) ReshapeToUint64s() Uint64s 610 611 // ReshapeToUint8s reinterprets the vector bits as a Uint8s vector. 612 func (x Uint16s) ReshapeToUint8s() Uint8s 613 614 // RotatesAllLeft rotates all elements left by y bits. 615 func (x Uint16s) RotateAllLeft(dist uint64) Uint16s 616 617 // RotatesAllRight rotates all elements right by y bits. 618 func (x Uint16s) RotateAllRight(dist uint64) Uint16s 619 620 // ShiftAllLeft shifts all elements left by y bits. 621 func (x Uint16s) ShiftAllLeft(shift uint64) Uint16s 622 623 // ShiftAllRight shifts all elements right by y bits. 624 func (x Uint16s) ShiftAllRight(shift uint64) Uint16s 625 626 // StoreSlice stores the vector elements into the slice s. 627 func (x Uint16s) Store(s []uint16) 628 629 // StoreSlicePart stores a partial vector into the slice s. 630 func (x Uint16s) StorePart(s []uint16) int 631 632 // String returns a string representation of the vector. 633 func (x Uint16s) String() string 634 635 // Sub returns the element-wise difference of x and y. 636 func (x Uint16s) Sub(y Uint16s) Uint16s 637 638 // SubSaturated returns the element-wise saturated difference of x and y. 639 func (x Uint16s) SubSaturated(y Uint16s) Uint16s 640 641 // Xor returns the bitwise XOR of x and y. 642 func (x Uint16s) Xor(y Uint16s) Uint16s 643 644 // Uint32s represents a vector of 32-bit unsigned integers. 645 type Uint32s struct { 646 _ _simd 647 atLeast [2]uint64 // the actual vector size may be larger. 648 } 649 650 // LoadUint32 loads a slice of uint32 into an Uint32s vector. 651 func LoadUint32s([]uint32) Uint32s 652 653 // LoadUint32Part loads a partial slice of uint32 into an Uint32s vector, returning the vector and the number of elements loaded. 654 func LoadUint32sPart([]uint32) (Uint32s, int) 655 656 // BroadcastUint32 fills the elements of a slice with its argument value. 657 func BroadcastUint32s(uint32) Uint32s 658 659 // Add returns the element-wise sum of x and y. 660 func (x Uint32s) Add(y Uint32s) Uint32s 661 662 // And returns the bitwise AND of x and y. 663 func (x Uint32s) And(y Uint32s) Uint32s 664 665 // AndNot returns the bitwise AND NOT of x and y. 666 func (x Uint32s) AndNot(y Uint32s) Uint32s 667 668 // BitsToFloat32 reinterprets the vector bits as a Float32s vector. 669 func (x Uint32s) BitsToFloat32() Float32s 670 671 // BitsToInt32 reinterprets the vector bits as an Int32s vector. 672 func (x Uint32s) BitsToInt32() Int32s 673 674 // ConvertToInt32 converts the vector elements to int32. 675 func (x Uint32s) ConvertToInt32() Int32s 676 677 // Equal returns a mask indicating where x and y are equal. 678 func (x Uint32s) Equal(y Uint32s) Mask32s 679 680 // Greater returns a mask indicating where x is greater than y. 681 func (x Uint32s) Greater(y Uint32s) Mask32s 682 683 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 684 func (x Uint32s) GreaterEqual(y Uint32s) Mask32s 685 686 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 687 func (x Uint32s) IfElse(mask Mask32s, y Uint32s) Uint32s 688 689 // Len returns the number of elements in the vector. 690 func (x Uint32s) Len() int 691 692 // Less returns a mask indicating where x is less than y. 693 func (x Uint32s) Less(y Uint32s) Mask32s 694 695 // LessEqual returns a mask indicating where x is less than or equal to y. 696 func (x Uint32s) LessEqual(y Uint32s) Mask32s 697 698 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 699 func (x Uint32s) Masked(mask Mask32s) Uint32s 700 701 // Max returns the element-wise maximum of x and y. 702 func (x Uint32s) Max(y Uint32s) Uint32s 703 704 // Min returns the element-wise minimum of x and y. 705 func (x Uint32s) Min(y Uint32s) Uint32s 706 707 // Mul returns the element-wise product of x and y. 708 func (x Uint32s) Mul(y Uint32s) Uint32s 709 710 // Not returns the bitwise NOT of x. 711 func (x Uint32s) Not() Uint32s 712 713 // NotEqual returns a mask indicating where x and y are not equal. 714 func (x Uint32s) NotEqual(y Uint32s) Mask32s 715 716 // Or returns the bitwise OR of x and y. 717 func (x Uint32s) Or(y Uint32s) Uint32s 718 719 // ReshapeToUint16s reinterprets the vector bits as a Uint16s vector. 720 func (x Uint32s) ReshapeToUint16s() Uint16s 721 722 // ReshapeToUint64s reinterprets the vector bits as a Uint64s vector. 723 func (x Uint32s) ReshapeToUint64s() Uint64s 724 725 // ReshapeToUint8s reinterprets the vector bits as a Uint8s vector. 726 func (x Uint32s) ReshapeToUint8s() Uint8s 727 728 // RotatesAllLeft rotates all elements left by y bits. 729 func (x Uint32s) RotateAllLeft(dist uint64) Uint32s 730 731 // RotatesAllRight rotates all elements right by y bits. 732 func (x Uint32s) RotateAllRight(dist uint64) Uint32s 733 734 // ShiftAllLeft shifts all elements left by y bits. 735 func (x Uint32s) ShiftAllLeft(shift uint64) Uint32s 736 737 // ShiftAllRight shifts all elements right by y bits. 738 func (x Uint32s) ShiftAllRight(shift uint64) Uint32s 739 740 // StoreSlice stores the vector elements into the slice s. 741 func (x Uint32s) Store(s []uint32) 742 743 // StoreSlicePart stores a partial vector into the slice s. 744 func (x Uint32s) StorePart(s []uint32) int 745 746 // String returns a string representation of the vector. 747 func (x Uint32s) String() string 748 749 // Sub returns the element-wise difference of x and y. 750 func (x Uint32s) Sub(y Uint32s) Uint32s 751 752 // Xor returns the bitwise XOR of x and y. 753 func (x Uint32s) Xor(y Uint32s) Uint32s 754 755 // Uint64s represents a vector of 64-bit unsigned integers. 756 type Uint64s struct { 757 _ _simd 758 atLeast [2]uint64 // the actual vector size may be larger. 759 } 760 761 // LoadUint64 loads a slice of uint64 into an Uint64s vector. 762 func LoadUint64s([]uint64) Uint64s 763 764 // LoadUint64Part loads a partial slice of uint64 into an Uint64s vector, returning the vector and the number of elements loaded. 765 func LoadUint64sPart([]uint64) (Uint64s, int) 766 767 // BroadcastUint64 fills the elements of a slice with its argument value. 768 func BroadcastUint64s(uint64) Uint64s 769 770 // Add returns the element-wise sum of x and y. 771 func (x Uint64s) Add(y Uint64s) Uint64s 772 773 // And returns the bitwise AND of x and y. 774 func (x Uint64s) And(y Uint64s) Uint64s 775 776 // AndNot returns the bitwise AND NOT of x and y. 777 func (x Uint64s) AndNot(y Uint64s) Uint64s 778 779 // BitsToFloat64 reinterprets the vector bits as a Float64s vector. 780 func (x Uint64s) BitsToFloat64() Float64s 781 782 // BitsToInt64 reinterprets the vector bits as an Int64s vector. 783 func (x Uint64s) BitsToInt64() Int64s 784 785 // CarrylessMultiplyOdd computes the carryless 786 // multiplications of selected even indexed elements of x and y. 787 // Each product is 128 bits wide and fills the corresponding 788 // even-odd pairs in the result. 789 // 790 // A carryless multiplication uses bitwise XOR instead of 791 // add-with-carry, for example (in base two): 792 // 793 // 11 * 11 = 11 * (10 ^ 1) = (11 * 10) ^ (11 * 1) = 110 ^ 11 = 101 794 // 795 // This also models multiplication of polynomials with coefficients 796 // from GF(2) -- 11 * 11 models (x+1)*(x+1) = x**2 + (1^1)x + 1 = 797 // x**2 + 0x + 1 = x**2 + 1 modeled by 101. (Note that "+" adds 798 // polynomial terms, but coefficients "add" with XOR.)" 799 func (x Uint64s) CarrylessMultiplyEven(y Uint64s) Uint64s 800 801 // CarrylessMultiplyOdd computes the carryless 802 // multiplications of selected odd indexed elements of x and y. 803 // Each product is 128 bits wide and fills the corresponding 804 // even-odd pairs in the result. 805 // 806 // A carryless multiplication uses bitwise XOR instead of 807 // add-with-carry, for example (in base two): 808 // 809 // 11 * 11 = 11 * (10 ^ 1) = (11 * 10) ^ (11 * 1) = 110 ^ 11 = 101 810 // 811 // This also models multiplication of polynomials with coefficients 812 // from GF(2) -- 11 * 11 models (x+1)*(x+1) = x**2 + (1^1)x + 1 = 813 // x**2 + 0x + 1 = x**2 + 1 modeled by 101. (Note that "+" adds 814 // polynomial terms, but coefficients "add" with XOR.)" 815 func (x Uint64s) CarrylessMultiplyOdd(y Uint64s) Uint64s 816 817 // ConvertToInt64 converts the vector elements to int64. 818 func (x Uint64s) ConvertToInt64() Int64s 819 820 // Equal returns a mask indicating where x and y are equal. 821 func (x Uint64s) Equal(y Uint64s) Mask64s 822 823 // Greater returns a mask indicating where x is greater than y. 824 func (x Uint64s) Greater(y Uint64s) Mask64s 825 826 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 827 func (x Uint64s) GreaterEqual(y Uint64s) Mask64s 828 829 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 830 func (x Uint64s) IfElse(mask Mask64s, y Uint64s) Uint64s 831 832 // Len returns the number of elements in the vector. 833 func (x Uint64s) Len() int 834 835 // Less returns a mask indicating where x is less than y. 836 func (x Uint64s) Less(y Uint64s) Mask64s 837 838 // LessEqual returns a mask indicating where x is less than or equal to y. 839 func (x Uint64s) LessEqual(y Uint64s) Mask64s 840 841 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 842 func (x Uint64s) Masked(mask Mask64s) Uint64s 843 844 // Not returns the bitwise NOT of x. 845 func (x Uint64s) Not() Uint64s 846 847 // NotEqual returns a mask indicating where x and y are not equal. 848 func (x Uint64s) NotEqual(y Uint64s) Mask64s 849 850 // Or returns the bitwise OR of x and y. 851 func (x Uint64s) Or(y Uint64s) Uint64s 852 853 // ReshapeToUint16s reinterprets the vector bits as a Uint16s vector. 854 func (x Uint64s) ReshapeToUint16s() Uint16s 855 856 // ReshapeToUint32s reinterprets the vector bits as a Uint32s vector. 857 func (x Uint64s) ReshapeToUint32s() Uint32s 858 859 // ReshapeToUint8s reinterprets the vector bits as a Uint8s vector. 860 func (x Uint64s) ReshapeToUint8s() Uint8s 861 862 // RotatesAllLeft rotates all elements left by y bits. 863 func (x Uint64s) RotateAllLeft(dist uint64) Uint64s 864 865 // RotatesAllRight rotates all elements right by y bits. 866 func (x Uint64s) RotateAllRight(dist uint64) Uint64s 867 868 // ShiftAllLeft shifts all elements left by y bits. 869 func (x Uint64s) ShiftAllLeft(shift uint64) Uint64s 870 871 // ShiftAllRight shifts all elements right by y bits. 872 func (x Uint64s) ShiftAllRight(shift uint64) Uint64s 873 874 // StoreSlice stores the vector elements into the slice s. 875 func (x Uint64s) Store(s []uint64) 876 877 // StoreSlicePart stores a partial vector into the slice s. 878 func (x Uint64s) StorePart(s []uint64) int 879 880 // String returns a string representation of the vector. 881 func (x Uint64s) String() string 882 883 // Sub returns the element-wise difference of x and y. 884 func (x Uint64s) Sub(y Uint64s) Uint64s 885 886 // Xor returns the bitwise XOR of x and y. 887 func (x Uint64s) Xor(y Uint64s) Uint64s 888 889 // Float32s represents a vector of 32-bit floating-point numbers. 890 type Float32s struct { 891 _ _simd 892 atLeast [2]uint64 // the actual vector size may be larger. 893 } 894 895 // LoadFloat32 loads a slice of float32 into an Float32s vector. 896 func LoadFloat32s([]float32) Float32s 897 898 // LoadFloat32Part loads a partial slice of float32 into an Float32s vector, returning the vector and the number of elements loaded. 899 func LoadFloat32sPart([]float32) (Float32s, int) 900 901 // BroadcastFloat32 fills the elements of a slice with its argument value. 902 func BroadcastFloat32s(float32) Float32s 903 904 // Abs returns the element-wise absolute value of x. 905 func (x Float32s) Abs() Float32s 906 907 // Add returns the element-wise sum of x and y. 908 func (x Float32s) Add(y Float32s) Float32s 909 910 // ConvertToInt32 converts the vector elements to int32. 911 func (x Float32s) ConvertToInt32() Int32s 912 913 // Div returns the element-wise quotient of x and y. 914 func (x Float32s) Div(y Float32s) Float32s 915 916 // Equal returns a mask indicating where x and y are equal. 917 func (x Float32s) Equal(y Float32s) Mask32s 918 919 // Greater returns a mask indicating where x is greater than y. 920 func (x Float32s) Greater(y Float32s) Mask32s 921 922 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 923 func (x Float32s) GreaterEqual(y Float32s) Mask32s 924 925 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 926 func (x Float32s) IfElse(mask Mask32s, y Float32s) Float32s 927 928 // Len returns the number of elements in the vector. 929 func (x Float32s) Len() int 930 931 // Less returns a mask indicating where x is less than y. 932 func (x Float32s) Less(y Float32s) Mask32s 933 934 // LessEqual returns a mask indicating where x is less than or equal to y. 935 func (x Float32s) LessEqual(y Float32s) Mask32s 936 937 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 938 func (x Float32s) Masked(mask Mask32s) Float32s 939 940 // Max returns the element-wise maximum of x and y. 941 func (x Float32s) Max(y Float32s) Float32s 942 943 // Min returns the element-wise minimum of x and y. 944 func (x Float32s) Min(y Float32s) Float32s 945 946 // Mul returns the element-wise product of x and y. 947 func (x Float32s) Mul(y Float32s) Float32s 948 949 // MulAdd returns x * y + z element-wise. 950 func (x Float32s) MulAdd(y Float32s, z Float32s) Float32s 951 952 // Neg returns the element-wise negation of x. 953 func (x Float32s) Neg() Float32s 954 955 // NotEqual returns a mask indicating where x and y are not equal. 956 func (x Float32s) NotEqual(y Float32s) Mask32s 957 958 // Sqrt returns the element-wise square root of x. 959 func (x Float32s) Sqrt() Float32s 960 961 // StoreSlice stores the vector elements into the slice s. 962 func (x Float32s) Store(s []float32) 963 964 // StoreSlicePart stores a partial vector into the slice s. 965 func (x Float32s) StorePart(s []float32) int 966 967 // String returns a string representation of the vector. 968 func (x Float32s) String() string 969 970 // Sub returns the element-wise difference of x and y. 971 func (x Float32s) Sub(y Float32s) Float32s 972 973 // ToBits reinterprets the vector bits as an unsigned integer vector. 974 func (x Float32s) ToBits() Uint32s 975 976 // Float64s represents a vector of 64-bit floating-point numbers. 977 type Float64s struct { 978 _ _simd 979 atLeast [2]uint64 // the actual vector size may be larger. 980 } 981 982 // LoadFloat64 loads a slice of float64 into an Float64s vector. 983 func LoadFloat64s([]float64) Float64s 984 985 // LoadFloat64Part loads a partial slice of float64 into an Float64s vector, returning the vector and the number of elements loaded. 986 func LoadFloat64sPart([]float64) (Float64s, int) 987 988 // BroadcastFloat64 fills the elements of a slice with its argument value. 989 func BroadcastFloat64s(float64) Float64s 990 991 // Abs returns the element-wise absolute value of x. 992 func (x Float64s) Abs() Float64s 993 994 // Add returns the element-wise sum of x and y. 995 func (x Float64s) Add(y Float64s) Float64s 996 997 // Div returns the element-wise quotient of x and y. 998 func (x Float64s) Div(y Float64s) Float64s 999 1000 // Equal returns a mask indicating where x and y are equal. 1001 func (x Float64s) Equal(y Float64s) Mask64s 1002 1003 // Greater returns a mask indicating where x is greater than y. 1004 func (x Float64s) Greater(y Float64s) Mask64s 1005 1006 // GreaterEqual returns a mask indicating where x is greater than or equal to y. 1007 func (x Float64s) GreaterEqual(y Float64s) Mask64s 1008 1009 // IfElse returns a new vector with elements from x where mask is true, and y where mask is false. 1010 func (x Float64s) IfElse(mask Mask64s, y Float64s) Float64s 1011 1012 // Len returns the number of elements in the vector. 1013 func (x Float64s) Len() int 1014 1015 // Less returns a mask indicating where x is less than y. 1016 func (x Float64s) Less(y Float64s) Mask64s 1017 1018 // LessEqual returns a mask indicating where x is less than or equal to y. 1019 func (x Float64s) LessEqual(y Float64s) Mask64s 1020 1021 // Masked returns a new vector with elements from x where mask is true, and zero elsewhere. 1022 func (x Float64s) Masked(mask Mask64s) Float64s 1023 1024 // Max returns the element-wise maximum of x and y. 1025 func (x Float64s) Max(y Float64s) Float64s 1026 1027 // Min returns the element-wise minimum of x and y. 1028 func (x Float64s) Min(y Float64s) Float64s 1029 1030 // Mul returns the element-wise product of x and y. 1031 func (x Float64s) Mul(y Float64s) Float64s 1032 1033 // MulAdd returns x * y + z element-wise. 1034 func (x Float64s) MulAdd(y Float64s, z Float64s) Float64s 1035 1036 // Neg returns the element-wise negation of x. 1037 func (x Float64s) Neg() Float64s 1038 1039 // NotEqual returns a mask indicating where x and y are not equal. 1040 func (x Float64s) NotEqual(y Float64s) Mask64s 1041 1042 // Sqrt returns the element-wise square root of x. 1043 func (x Float64s) Sqrt() Float64s 1044 1045 // StoreSlice stores the vector elements into the slice s. 1046 func (x Float64s) Store(s []float64) 1047 1048 // StoreSlicePart stores a partial vector into the slice s. 1049 func (x Float64s) StorePart(s []float64) int 1050 1051 // String returns a string representation of the vector. 1052 func (x Float64s) String() string 1053 1054 // Sub returns the element-wise difference of x and y. 1055 func (x Float64s) Sub(y Float64s) Float64s 1056 1057 // ToBits reinterprets the vector bits as an unsigned integer vector. 1058 func (x Float64s) ToBits() Uint64s 1059 1060 // Mask8s represents a boolean mask for Int8s/Uint8s vectors. 1061 type Mask8s struct { 1062 _ _simd 1063 atLeast [2]uint64 // the actual vector size may be larger. 1064 } 1065 1066 // And returns the bitwise AND of x and y. 1067 func (x Mask8s) And(y Mask8s) Mask8s 1068 1069 // Or returns the bitwise OR of x and y. 1070 func (x Mask8s) Or(y Mask8s) Mask8s 1071 1072 // String returns a string representation of the vector. 1073 func (x Mask8s) String() string 1074 1075 // ToInt8s converts the mask to an Int8s vector. 1076 func (x Mask8s) ToInt8s() (to Int8s) 1077 1078 // Mask16s represents a boolean mask for Int16s/Uint16s vectors. 1079 type Mask16s struct { 1080 _ _simd 1081 atLeast [2]uint64 // the actual vector size may be larger. 1082 } 1083 1084 // And returns the bitwise AND of x and y. 1085 func (x Mask16s) And(y Mask16s) Mask16s 1086 1087 // Or returns the bitwise OR of x and y. 1088 func (x Mask16s) Or(y Mask16s) Mask16s 1089 1090 // String returns a string representation of the vector. 1091 func (x Mask16s) String() string 1092 1093 // ToInt16s converts the mask to an Int16s vector. 1094 func (x Mask16s) ToInt16s() (to Int16s) 1095 1096 // Mask32s represents a boolean mask for Int32s/Uint32s vectors. 1097 type Mask32s struct { 1098 _ _simd 1099 atLeast [2]uint64 // the actual vector size may be larger. 1100 } 1101 1102 // And returns the bitwise AND of x and y. 1103 func (x Mask32s) And(y Mask32s) Mask32s 1104 1105 // Or returns the bitwise OR of x and y. 1106 func (x Mask32s) Or(y Mask32s) Mask32s 1107 1108 // String returns a string representation of the vector. 1109 func (x Mask32s) String() string 1110 1111 // ToInt32s converts the mask to an Int32s vector. 1112 func (x Mask32s) ToInt32s() (to Int32s) 1113 1114 // Mask64s represents a boolean mask for Int64s/Uint64s vectors. 1115 type Mask64s struct { 1116 _ _simd 1117 atLeast [2]uint64 // the actual vector size may be larger. 1118 } 1119 1120 // And returns the bitwise AND of x and y. 1121 func (x Mask64s) And(y Mask64s) Mask64s 1122 1123 // Or returns the bitwise OR of x and y. 1124 func (x Mask64s) Or(y Mask64s) Mask64s 1125 1126 // String returns a string representation of the vector. 1127 func (x Mask64s) String() string 1128 1129 // ToInt64s converts the mask to an Int64s vector. 1130 func (x Mask64s) ToInt64s() (to Int64s) 1131