Source file src/simd/archsimd/ops_arm64.go
1 // Code generated by 'simdgen -o godefs -goroot $GOROOT -arch arm64 -arm64Path $ARM64_ISA_PATH go_arm64.yaml types.yaml categories.yaml'; DO NOT EDIT. 2 3 //go:build goexperiment.simd 4 5 package archsimd 6 7 /* Abs */ 8 9 // Abs computes the absolute value of each element. 10 // 11 // Asm: VFABS, CPU Feature: NEON 12 func (x Float32x4) Abs() Float32x4 13 14 // Abs computes the absolute value of each element. 15 // 16 // Asm: VFABS, CPU Feature: NEON 17 func (x Float64x2) Abs() Float64x2 18 19 // Abs computes the absolute value of each element. 20 // 21 // Asm: VABS, CPU Feature: NEON 22 func (x Int8x16) Abs() Int8x16 23 24 // Abs computes the absolute value of each element. 25 // 26 // Asm: VABS, CPU Feature: NEON 27 func (x Int16x8) Abs() Int16x8 28 29 // Abs computes the absolute value of each element. 30 // 31 // Asm: VABS, CPU Feature: NEON 32 func (x Int32x4) Abs() Int32x4 33 34 // Abs computes the absolute value of each element. 35 // 36 // Asm: VABS, CPU Feature: NEON 37 func (x Int64x2) Abs() Int64x2 38 39 /* Add */ 40 41 // Add adds corresponding elements of two vectors. 42 // 43 // Asm: VFADD, CPU Feature: NEON 44 func (x Float32x4) Add(y Float32x4) Float32x4 45 46 // Add adds corresponding elements of two vectors. 47 // 48 // Asm: VFADD, CPU Feature: NEON 49 func (x Float64x2) Add(y Float64x2) Float64x2 50 51 // Add adds corresponding elements of two vectors. 52 // 53 // Asm: VADD, CPU Feature: NEON 54 func (x Int8x16) Add(y Int8x16) Int8x16 55 56 // Add adds corresponding elements of two vectors. 57 // 58 // Asm: VADD, CPU Feature: NEON 59 func (x Int16x8) Add(y Int16x8) Int16x8 60 61 // Add adds corresponding elements of two vectors. 62 // 63 // Asm: VADD, CPU Feature: NEON 64 func (x Int32x4) Add(y Int32x4) Int32x4 65 66 // Add adds corresponding elements of two vectors. 67 // 68 // Asm: VADD, CPU Feature: NEON 69 func (x Int64x2) Add(y Int64x2) Int64x2 70 71 // Add adds corresponding elements of two vectors. 72 // 73 // Asm: VADD, CPU Feature: NEON 74 func (x Uint8x16) Add(y Uint8x16) Uint8x16 75 76 // Add adds corresponding elements of two vectors. 77 // 78 // Asm: VADD, CPU Feature: NEON 79 func (x Uint16x8) Add(y Uint16x8) Uint16x8 80 81 // Add adds corresponding elements of two vectors. 82 // 83 // Asm: VADD, CPU Feature: NEON 84 func (x Uint32x4) Add(y Uint32x4) Uint32x4 85 86 // Add adds corresponding elements of two vectors. 87 // 88 // Asm: VADD, CPU Feature: NEON 89 func (x Uint64x2) Add(y Uint64x2) Uint64x2 90 91 /* AddSaturated */ 92 93 // AddSaturated adds corresponding elements of two vectors with saturation. 94 // 95 // Asm: VSQADD, CPU Feature: NEON 96 func (x Int8x16) AddSaturated(y Int8x16) Int8x16 97 98 // AddSaturated adds corresponding elements of two vectors with saturation. 99 // 100 // Asm: VSQADD, CPU Feature: NEON 101 func (x Int16x8) AddSaturated(y Int16x8) Int16x8 102 103 // AddSaturated adds corresponding elements of two vectors with saturation. 104 // 105 // Asm: VSQADD, CPU Feature: NEON 106 func (x Int32x4) AddSaturated(y Int32x4) Int32x4 107 108 // AddSaturated adds corresponding elements of two vectors with saturation. 109 // 110 // Asm: VSQADD, CPU Feature: NEON 111 func (x Int64x2) AddSaturated(y Int64x2) Int64x2 112 113 // AddSaturated adds corresponding elements of two vectors with saturation. 114 // 115 // Asm: VUQADD, CPU Feature: NEON 116 func (x Uint8x16) AddSaturated(y Uint8x16) Uint8x16 117 118 // AddSaturated adds corresponding elements of two vectors with saturation. 119 // 120 // Asm: VUQADD, CPU Feature: NEON 121 func (x Uint16x8) AddSaturated(y Uint16x8) Uint16x8 122 123 // AddSaturated adds corresponding elements of two vectors with saturation. 124 // 125 // Asm: VUQADD, CPU Feature: NEON 126 func (x Uint32x4) AddSaturated(y Uint32x4) Uint32x4 127 128 // AddSaturated adds corresponding elements of two vectors with saturation. 129 // 130 // Asm: VUQADD, CPU Feature: NEON 131 func (x Uint64x2) AddSaturated(y Uint64x2) Uint64x2 132 133 /* And */ 134 135 // And performs a bitwise x & y. 136 // 137 // Asm: VAND, CPU Feature: NEON 138 func (x Int8x16) And(y Int8x16) Int8x16 139 140 // And performs a bitwise x & y. 141 // 142 // Asm: VAND, CPU Feature: NEON 143 func (x Int16x8) And(y Int16x8) Int16x8 144 145 // And performs a bitwise x & y. 146 // 147 // Asm: VAND, CPU Feature: NEON 148 func (x Int32x4) And(y Int32x4) Int32x4 149 150 // And performs a bitwise x & y. 151 // 152 // Asm: VAND, CPU Feature: NEON 153 func (x Int64x2) And(y Int64x2) Int64x2 154 155 // And performs a bitwise x & y. 156 // 157 // Asm: VAND, CPU Feature: NEON 158 func (x Uint8x16) And(y Uint8x16) Uint8x16 159 160 // And performs a bitwise x & y. 161 // 162 // Asm: VAND, CPU Feature: NEON 163 func (x Uint16x8) And(y Uint16x8) Uint16x8 164 165 // And performs a bitwise x & y. 166 // 167 // Asm: VAND, CPU Feature: NEON 168 func (x Uint32x4) And(y Uint32x4) Uint32x4 169 170 // And performs a bitwise x & y. 171 // 172 // Asm: VAND, CPU Feature: NEON 173 func (x Uint64x2) And(y Uint64x2) Uint64x2 174 175 /* AndNot */ 176 177 // AndNot performs a bitwise x &^ y. 178 // 179 // Asm: VBIC, CPU Feature: NEON 180 func (x Int8x16) AndNot(y Int8x16) Int8x16 181 182 // AndNot performs a bitwise x &^ y. 183 // 184 // Asm: VBIC, CPU Feature: NEON 185 func (x Int16x8) AndNot(y Int16x8) Int16x8 186 187 // AndNot performs a bitwise x &^ y. 188 // 189 // Asm: VBIC, CPU Feature: NEON 190 func (x Int32x4) AndNot(y Int32x4) Int32x4 191 192 // AndNot performs a bitwise x &^ y. 193 // 194 // Asm: VBIC, CPU Feature: NEON 195 func (x Int64x2) AndNot(y Int64x2) Int64x2 196 197 // AndNot performs a bitwise x &^ y. 198 // 199 // Asm: VBIC, CPU Feature: NEON 200 func (x Uint8x16) AndNot(y Uint8x16) Uint8x16 201 202 // AndNot performs a bitwise x &^ y. 203 // 204 // Asm: VBIC, CPU Feature: NEON 205 func (x Uint16x8) AndNot(y Uint16x8) Uint16x8 206 207 // AndNot performs a bitwise x &^ y. 208 // 209 // Asm: VBIC, CPU Feature: NEON 210 func (x Uint32x4) AndNot(y Uint32x4) Uint32x4 211 212 // AndNot performs a bitwise x &^ y. 213 // 214 // Asm: VBIC, CPU Feature: NEON 215 func (x Uint64x2) AndNot(y Uint64x2) Uint64x2 216 217 /* Average */ 218 219 // Average computes the rounded average of corresponding elements. 220 // 221 // Asm: VSRHADD, CPU Feature: NEON 222 func (x Int8x16) Average(y Int8x16) Int8x16 223 224 // Average computes the rounded average of corresponding elements. 225 // 226 // Asm: VSRHADD, CPU Feature: NEON 227 func (x Int16x8) Average(y Int16x8) Int16x8 228 229 // Average computes the rounded average of corresponding elements. 230 // 231 // Asm: VSRHADD, CPU Feature: NEON 232 func (x Int32x4) Average(y Int32x4) Int32x4 233 234 // Average computes the rounded average of corresponding elements. 235 // 236 // Asm: VURHADD, CPU Feature: NEON 237 func (x Uint8x16) Average(y Uint8x16) Uint8x16 238 239 // Average computes the rounded average of corresponding elements. 240 // 241 // Asm: VURHADD, CPU Feature: NEON 242 func (x Uint16x8) Average(y Uint16x8) Uint16x8 243 244 // Average computes the rounded average of corresponding elements. 245 // 246 // Asm: VURHADD, CPU Feature: NEON 247 func (x Uint32x4) Average(y Uint32x4) Uint32x4 248 249 /* Ceil */ 250 251 // Ceil rounds elements up to the nearest integer. 252 // 253 // Asm: VFRINTP, CPU Feature: NEON 254 func (x Float32x4) Ceil() Float32x4 255 256 // Ceil rounds elements up to the nearest integer. 257 // 258 // Asm: VFRINTP, CPU Feature: NEON 259 func (x Float64x2) Ceil() Float64x2 260 261 /* ConcatAddPairs */ 262 263 // ConcatAddPairs horizontally adds adjacent pairs of elements. 264 // For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [x0+x1, x2+x3, ..., y0+y1, y2+y3, ...]. 265 // 266 // Asm: VFADDP, CPU Feature: NEON 267 func (x Float32x4) ConcatAddPairs(y Float32x4) Float32x4 268 269 // ConcatAddPairs horizontally adds adjacent pairs of elements. 270 // For x = [x0, x1] and y = [y0, y1], the result is [x0+x1, y0+y1]. 271 // 272 // Asm: VFADDP, CPU Feature: NEON 273 func (x Float64x2) ConcatAddPairs(y Float64x2) Float64x2 274 275 // ConcatAddPairs horizontally adds adjacent pairs of elements. 276 // For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [x0+x1, x2+x3, ..., y0+y1, y2+y3, ...]. 277 // 278 // Asm: VADDP, CPU Feature: NEON 279 func (x Int16x8) ConcatAddPairs(y Int16x8) Int16x8 280 281 // ConcatAddPairs horizontally adds adjacent pairs of elements. 282 // For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [x0+x1, x2+x3, ..., y0+y1, y2+y3, ...]. 283 // 284 // Asm: VADDP, CPU Feature: NEON 285 func (x Int32x4) ConcatAddPairs(y Int32x4) Int32x4 286 287 // ConcatAddPairs horizontally adds adjacent pairs of elements. 288 // For x = [x0, x1] and y = [y0, y1], the result is [x0+x1, y0+y1]. 289 // 290 // Asm: VADDP, CPU Feature: NEON 291 func (x Int64x2) ConcatAddPairs(y Int64x2) Int64x2 292 293 // ConcatAddPairs horizontally adds adjacent pairs of elements. 294 // For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [x0+x1, x2+x3, ..., y0+y1, y2+y3, ...]. 295 // 296 // Asm: VADDP, CPU Feature: NEON 297 func (x Uint16x8) ConcatAddPairs(y Uint16x8) Uint16x8 298 299 // ConcatAddPairs horizontally adds adjacent pairs of elements. 300 // For x = [x0, x1, x2, x3, ...] and y = [y0, y1, y2, y3, ...], the result is [x0+x1, x2+x3, ..., y0+y1, y2+y3, ...]. 301 // 302 // Asm: VADDP, CPU Feature: NEON 303 func (x Uint32x4) ConcatAddPairs(y Uint32x4) Uint32x4 304 305 // ConcatAddPairs horizontally adds adjacent pairs of elements. 306 // For x = [x0, x1] and y = [y0, y1], the result is [x0+x1, y0+y1]. 307 // 308 // Asm: VADDP, CPU Feature: NEON 309 func (x Uint64x2) ConcatAddPairs(y Uint64x2) Uint64x2 310 311 /* ConcatEven */ 312 313 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 314 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 315 // 316 // Asm: VUZP1, CPU Feature: NEON 317 func (x Int8x16) ConcatEven(y Int8x16) Int8x16 318 319 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 320 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 321 // 322 // Asm: VUZP1, CPU Feature: NEON 323 func (x Int16x8) ConcatEven(y Int16x8) Int16x8 324 325 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 326 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 327 // 328 // Asm: VUZP1, CPU Feature: NEON 329 func (x Int32x4) ConcatEven(y Int32x4) Int32x4 330 331 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 332 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 333 // 334 // Asm: VUZP1, CPU Feature: NEON 335 func (x Int64x2) ConcatEven(y Int64x2) Int64x2 336 337 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 338 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 339 // 340 // Asm: VUZP1, CPU Feature: NEON 341 func (x Uint8x16) ConcatEven(y Uint8x16) Uint8x16 342 343 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 344 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 345 // 346 // Asm: VUZP1, CPU Feature: NEON 347 func (x Uint16x8) ConcatEven(y Uint16x8) Uint16x8 348 349 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 350 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 351 // 352 // Asm: VUZP1, CPU Feature: NEON 353 func (x Uint32x4) ConcatEven(y Uint32x4) Uint32x4 354 355 // ConcatEven concatenates even-indexed elements from the concatenation of x and y. 356 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x0,x2,y0,y2]. 357 // 358 // Asm: VUZP1, CPU Feature: NEON 359 func (x Uint64x2) ConcatEven(y Uint64x2) Uint64x2 360 361 /* ConcatOdd */ 362 363 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 364 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 365 // 366 // Asm: VUZP2, CPU Feature: NEON 367 func (x Int8x16) ConcatOdd(y Int8x16) Int8x16 368 369 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 370 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 371 // 372 // Asm: VUZP2, CPU Feature: NEON 373 func (x Int16x8) ConcatOdd(y Int16x8) Int16x8 374 375 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 376 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 377 // 378 // Asm: VUZP2, CPU Feature: NEON 379 func (x Int32x4) ConcatOdd(y Int32x4) Int32x4 380 381 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 382 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 383 // 384 // Asm: VUZP2, CPU Feature: NEON 385 func (x Int64x2) ConcatOdd(y Int64x2) Int64x2 386 387 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 388 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 389 // 390 // Asm: VUZP2, CPU Feature: NEON 391 func (x Uint8x16) ConcatOdd(y Uint8x16) Uint8x16 392 393 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 394 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 395 // 396 // Asm: VUZP2, CPU Feature: NEON 397 func (x Uint16x8) ConcatOdd(y Uint16x8) Uint16x8 398 399 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 400 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 401 // 402 // Asm: VUZP2, CPU Feature: NEON 403 func (x Uint32x4) ConcatOdd(y Uint32x4) Uint32x4 404 405 // ConcatOdd concatenates odd-indexed elements from the concatenation of x and y. 406 // For x = [x0,x1,x2,x3] and y = [y0,y1,y2,y3], result = [x1,x3,y1,y3]. 407 // 408 // Asm: VUZP2, CPU Feature: NEON 409 func (x Uint64x2) ConcatOdd(y Uint64x2) Uint64x2 410 411 /* ConcatShiftBytesRight */ 412 413 // ConcatShiftBytesRight concatenates x and y and shifts it right by shift bytes. 414 // The result vector will be the lower half of the concatenated vector. 415 // 416 // A non-constant value of shift may result in significantly worse performance for this operation. 417 // 418 // Asm: VEXT, CPU Feature: NEON 419 func (x Uint8x16) ConcatShiftBytesRight(y Uint8x16, shift uint64) Uint8x16 420 421 /* ConvertLo2ToFloat64 */ 422 423 // ConvertLo2ToFloat64 converts low-indexed float32 element values to float64. 424 // For the high-indexed elements, use HiToLo: 425 // 426 // x.HiToLo().ConvertLo2ToFloat64(...) 427 // 428 // Asm: VFCVTL, CPU Feature: NEON 429 func (x Float32x4) ConvertLo2ToFloat64() Float64x2 430 431 /* ConvertToFloat32 */ 432 433 // ConvertToFloat32 converts element values to float32. 434 // 435 // Asm: VFCVTN, CPU Feature: NEON 436 func (x Float64x2) ConvertToFloat32() Float32x4 437 438 // ConvertToFloat32 converts element values to float32. 439 // 440 // Asm: VSCVTF, CPU Feature: NEON 441 func (x Int32x4) ConvertToFloat32() Float32x4 442 443 // ConvertToFloat32 converts element values to float32. 444 // 445 // Asm: VUCVTF, CPU Feature: NEON 446 func (x Uint32x4) ConvertToFloat32() Float32x4 447 448 /* ConvertToFloat64 */ 449 450 // ConvertToFloat64 converts element values to float64. 451 // 452 // Asm: VSCVTF, CPU Feature: NEON 453 func (x Int64x2) ConvertToFloat64() Float64x2 454 455 // ConvertToFloat64 converts element values to float64. 456 // 457 // Asm: VUCVTF, CPU Feature: NEON 458 func (x Uint64x2) ConvertToFloat64() Float64x2 459 460 /* ConvertToInt32 */ 461 462 // ConvertToInt32 converts element values to int32. 463 // When a conversion is inexact, a truncated (round toward zero) value is returned. 464 // If a converted result cannot be represented in int32, an implementation-defined 465 // architecture-specific value is returned. 466 // 467 // Asm: VFCVTZS, CPU Feature: NEON 468 func (x Float32x4) ConvertToInt32() Int32x4 469 470 /* ConvertToInt64 */ 471 472 // ConvertToInt64 converts element values to int64. 473 // When a conversion is inexact, a truncated (round toward zero) value is returned. 474 // If a converted result cannot be represented in int64, an implementation-defined 475 // architecture-specific value is returned. 476 // 477 // Asm: VFCVTZS, CPU Feature: NEON 478 func (x Float64x2) ConvertToInt64() Int64x2 479 480 /* ConvertToUint32 */ 481 482 // ConvertToUint32 converts element values to uint32. 483 // When a conversion is inexact, a truncated (round toward zero) value is returned. 484 // If a converted result cannot be represented in uint32, an implementation-defined 485 // architecture-specific value is returned. 486 // 487 // Asm: VFCVTZU, CPU Feature: NEON 488 func (x Float32x4) ConvertToUint32() Uint32x4 489 490 /* ConvertToUint64 */ 491 492 // ConvertToUint64 converts element values to uint64. 493 // When a conversion is inexact, a truncated (round toward zero) value is returned. 494 // If a converted result cannot be represented in uint64, an implementation-defined 495 // architecture-specific value is returned. 496 // 497 // Asm: VFCVTZU, CPU Feature: NEON 498 func (x Float64x2) ConvertToUint64() Uint64x2 499 500 /* Div */ 501 502 // Div divides elements of two vectors. Division by zero follows IEEE 754 and does not panic. 503 // 504 // Asm: VFDIV, CPU Feature: NEON 505 func (x Float32x4) Div(y Float32x4) Float32x4 506 507 // Div divides elements of two vectors. Division by zero follows IEEE 754 and does not panic. 508 // 509 // Asm: VFDIV, CPU Feature: NEON 510 func (x Float64x2) Div(y Float64x2) Float64x2 511 512 /* Equal */ 513 514 // Equal returns a mask whose elements indicate whether x == y. 515 // 516 // Asm: VFCMEQ, CPU Feature: NEON 517 func (x Float32x4) Equal(y Float32x4) Mask32x4 518 519 // Equal returns a mask whose elements indicate whether x == y. 520 // 521 // Asm: VFCMEQ, CPU Feature: NEON 522 func (x Float64x2) Equal(y Float64x2) Mask64x2 523 524 // Equal returns a mask whose elements indicate whether x == y. 525 // 526 // Asm: VCMEQ, CPU Feature: NEON 527 func (x Int8x16) Equal(y Int8x16) Mask8x16 528 529 // Equal returns a mask whose elements indicate whether x == y. 530 // 531 // Asm: VCMEQ, CPU Feature: NEON 532 func (x Int16x8) Equal(y Int16x8) Mask16x8 533 534 // Equal returns a mask whose elements indicate whether x == y. 535 // 536 // Asm: VCMEQ, CPU Feature: NEON 537 func (x Int32x4) Equal(y Int32x4) Mask32x4 538 539 // Equal returns a mask whose elements indicate whether x == y. 540 // 541 // Asm: VCMEQ, CPU Feature: NEON 542 func (x Int64x2) Equal(y Int64x2) Mask64x2 543 544 // Equal returns a mask whose elements indicate whether x == y. 545 // 546 // Asm: VCMEQ, CPU Feature: NEON 547 func (x Uint8x16) Equal(y Uint8x16) Mask8x16 548 549 // Equal returns a mask whose elements indicate whether x == y. 550 // 551 // Asm: VCMEQ, CPU Feature: NEON 552 func (x Uint16x8) Equal(y Uint16x8) Mask16x8 553 554 // Equal returns a mask whose elements indicate whether x == y. 555 // 556 // Asm: VCMEQ, CPU Feature: NEON 557 func (x Uint32x4) Equal(y Uint32x4) Mask32x4 558 559 // Equal returns a mask whose elements indicate whether x == y. 560 // 561 // Asm: VCMEQ, CPU Feature: NEON 562 func (x Uint64x2) Equal(y Uint64x2) Mask64x2 563 564 /* ExtendLo2ToInt64 */ 565 566 // ExtendLo2ToInt64 sign-extends 2 lowest vector element values to int64. 567 // For the high-indexed elements, use HiToLo: 568 // 569 // x.HiToLo().ExtendLo2ToInt64(...) 570 // 571 // Asm: VSXTL, CPU Feature: NEON 572 func (x Int32x4) ExtendLo2ToInt64() Int64x2 573 574 /* ExtendLo2ToUint64 */ 575 576 // ExtendLo2ToUint64 zero-extends 2 lowest vector element values to uint64. 577 // For the high-indexed elements, use HiToLo: 578 // 579 // x.HiToLo().ExtendLo2ToUint64(...) 580 // 581 // Asm: VUXTL, CPU Feature: NEON 582 func (x Uint32x4) ExtendLo2ToUint64() Uint64x2 583 584 /* ExtendLo4ToInt32 */ 585 586 // ExtendLo4ToInt32 sign-extends 4 lowest vector element values to int32. 587 // For the high-indexed elements, use HiToLo: 588 // 589 // x.HiToLo().ExtendLo4ToInt32(...) 590 // 591 // Asm: VSXTL, CPU Feature: NEON 592 func (x Int16x8) ExtendLo4ToInt32() Int32x4 593 594 /* ExtendLo4ToUint32 */ 595 596 // ExtendLo4ToUint32 zero-extends 4 lowest vector element values to uint32. 597 // For the high-indexed elements, use HiToLo: 598 // 599 // x.HiToLo().ExtendLo4ToUint32(...) 600 // 601 // Asm: VUXTL, CPU Feature: NEON 602 func (x Uint16x8) ExtendLo4ToUint32() Uint32x4 603 604 /* ExtendLo8ToInt16 */ 605 606 // ExtendLo8ToInt16 sign-extends 8 lowest vector element values to int16. 607 // For the high-indexed elements, use HiToLo: 608 // 609 // x.HiToLo().ExtendLo8ToInt16(...) 610 // 611 // Asm: VSXTL, CPU Feature: NEON 612 func (x Int8x16) ExtendLo8ToInt16() Int16x8 613 614 /* ExtendLo8ToUint16 */ 615 616 // ExtendLo8ToUint16 zero-extends 8 lowest vector element values to uint16. 617 // For the high-indexed elements, use HiToLo: 618 // 619 // x.HiToLo().ExtendLo8ToUint16(...) 620 // 621 // Asm: VUXTL, CPU Feature: NEON 622 func (x Uint8x16) ExtendLo8ToUint16() Uint16x8 623 624 /* Floor */ 625 626 // Floor rounds elements down to the nearest integer. 627 // 628 // Asm: VFRINTM, CPU Feature: NEON 629 func (x Float32x4) Floor() Float32x4 630 631 // Floor rounds elements down to the nearest integer. 632 // 633 // Asm: VFRINTM, CPU Feature: NEON 634 func (x Float64x2) Floor() Float64x2 635 636 /* GetElem */ 637 638 // GetElem returns the index'th element of x. 639 // 640 // A non-constant value of index may result in significantly worse performance for this operation. 641 // 642 // Asm: VDUP, CPU Feature: NEON 643 func (x Float32x4) GetElem(index uint8) float32 644 645 // GetElem returns the index'th element of x. 646 // 647 // A non-constant value of index may result in significantly worse performance for this operation. 648 // 649 // Asm: VDUP, CPU Feature: NEON 650 func (x Float64x2) GetElem(index uint8) float64 651 652 // GetElem returns the index'th element of x. 653 // 654 // A non-constant value of index may result in significantly worse performance for this operation. 655 // 656 // Asm: VMOV, CPU Feature: NEON 657 func (x Int8x16) GetElem(index uint8) int8 658 659 // GetElem returns the index'th element of x. 660 // 661 // A non-constant value of index may result in significantly worse performance for this operation. 662 // 663 // Asm: VMOV, CPU Feature: NEON 664 func (x Int16x8) GetElem(index uint8) int16 665 666 // GetElem returns the index'th element of x. 667 // 668 // A non-constant value of index may result in significantly worse performance for this operation. 669 // 670 // Asm: VMOV, CPU Feature: NEON 671 func (x Int32x4) GetElem(index uint8) int32 672 673 // GetElem returns the index'th element of x. 674 // 675 // A non-constant value of index may result in significantly worse performance for this operation. 676 // 677 // Asm: VMOV, CPU Feature: NEON 678 func (x Int64x2) GetElem(index uint8) int64 679 680 // GetElem returns the index'th element of x. 681 // 682 // A non-constant value of index may result in significantly worse performance for this operation. 683 // 684 // Asm: VMOV, CPU Feature: NEON 685 func (x Uint8x16) GetElem(index uint8) uint8 686 687 // GetElem returns the index'th element of x. 688 // 689 // A non-constant value of index may result in significantly worse performance for this operation. 690 // 691 // Asm: VMOV, CPU Feature: NEON 692 func (x Uint16x8) GetElem(index uint8) uint16 693 694 // GetElem returns the index'th element of x. 695 // 696 // A non-constant value of index may result in significantly worse performance for this operation. 697 // 698 // Asm: VMOV, CPU Feature: NEON 699 func (x Uint32x4) GetElem(index uint8) uint32 700 701 // GetElem returns the index'th element of x. 702 // 703 // A non-constant value of index may result in significantly worse performance for this operation. 704 // 705 // Asm: VMOV, CPU Feature: NEON 706 func (x Uint64x2) GetElem(index uint8) uint64 707 708 /* Greater */ 709 710 // Greater returns a mask whose elements indicate whether x > y. 711 // 712 // Asm: VFCMGT, CPU Feature: NEON 713 func (x Float32x4) Greater(y Float32x4) Mask32x4 714 715 // Greater returns a mask whose elements indicate whether x > y. 716 // 717 // Asm: VFCMGT, CPU Feature: NEON 718 func (x Float64x2) Greater(y Float64x2) Mask64x2 719 720 // Greater returns a mask whose elements indicate whether x > y. 721 // 722 // Asm: VCMGT, CPU Feature: NEON 723 func (x Int8x16) Greater(y Int8x16) Mask8x16 724 725 // Greater returns a mask whose elements indicate whether x > y. 726 // 727 // Asm: VCMGT, CPU Feature: NEON 728 func (x Int16x8) Greater(y Int16x8) Mask16x8 729 730 // Greater returns a mask whose elements indicate whether x > y. 731 // 732 // Asm: VCMGT, CPU Feature: NEON 733 func (x Int32x4) Greater(y Int32x4) Mask32x4 734 735 // Greater returns a mask whose elements indicate whether x > y. 736 // 737 // Asm: VCMGT, CPU Feature: NEON 738 func (x Int64x2) Greater(y Int64x2) Mask64x2 739 740 // Greater returns a mask whose elements indicate whether x > y. 741 // 742 // Asm: VCMHI, CPU Feature: NEON 743 func (x Uint8x16) Greater(y Uint8x16) Mask8x16 744 745 // Greater returns a mask whose elements indicate whether x > y. 746 // 747 // Asm: VCMHI, CPU Feature: NEON 748 func (x Uint16x8) Greater(y Uint16x8) Mask16x8 749 750 // Greater returns a mask whose elements indicate whether x > y. 751 // 752 // Asm: VCMHI, CPU Feature: NEON 753 func (x Uint32x4) Greater(y Uint32x4) Mask32x4 754 755 // Greater returns a mask whose elements indicate whether x > y. 756 // 757 // Asm: VCMHI, CPU Feature: NEON 758 func (x Uint64x2) Greater(y Uint64x2) Mask64x2 759 760 /* GreaterEqual */ 761 762 // GreaterEqual returns a mask whose elements indicate whether x >= y. 763 // 764 // Asm: VFCMGE, CPU Feature: NEON 765 func (x Float32x4) GreaterEqual(y Float32x4) Mask32x4 766 767 // GreaterEqual returns a mask whose elements indicate whether x >= y. 768 // 769 // Asm: VFCMGE, CPU Feature: NEON 770 func (x Float64x2) GreaterEqual(y Float64x2) Mask64x2 771 772 // GreaterEqual returns a mask whose elements indicate whether x >= y. 773 // 774 // Asm: VCMGE, CPU Feature: NEON 775 func (x Int8x16) GreaterEqual(y Int8x16) Mask8x16 776 777 // GreaterEqual returns a mask whose elements indicate whether x >= y. 778 // 779 // Asm: VCMGE, CPU Feature: NEON 780 func (x Int16x8) GreaterEqual(y Int16x8) Mask16x8 781 782 // GreaterEqual returns a mask whose elements indicate whether x >= y. 783 // 784 // Asm: VCMGE, CPU Feature: NEON 785 func (x Int32x4) GreaterEqual(y Int32x4) Mask32x4 786 787 // GreaterEqual returns a mask whose elements indicate whether x >= y. 788 // 789 // Asm: VCMGE, CPU Feature: NEON 790 func (x Int64x2) GreaterEqual(y Int64x2) Mask64x2 791 792 // GreaterEqual returns a mask whose elements indicate whether x >= y. 793 // 794 // Asm: VCMHS, CPU Feature: NEON 795 func (x Uint8x16) GreaterEqual(y Uint8x16) Mask8x16 796 797 // GreaterEqual returns a mask whose elements indicate whether x >= y. 798 // 799 // Asm: VCMHS, CPU Feature: NEON 800 func (x Uint16x8) GreaterEqual(y Uint16x8) Mask16x8 801 802 // GreaterEqual returns a mask whose elements indicate whether x >= y. 803 // 804 // Asm: VCMHS, CPU Feature: NEON 805 func (x Uint32x4) GreaterEqual(y Uint32x4) Mask32x4 806 807 // GreaterEqual returns a mask whose elements indicate whether x >= y. 808 // 809 // Asm: VCMHS, CPU Feature: NEON 810 func (x Uint64x2) GreaterEqual(y Uint64x2) Mask64x2 811 812 /* InterleaveEven */ 813 814 // InterleaveEven interleaves even elements from x and y. 815 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 816 // 817 // Asm: VTRN1, CPU Feature: NEON 818 func (x Int8x16) InterleaveEven(y Int8x16) Int8x16 819 820 // InterleaveEven interleaves even elements from x and y. 821 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 822 // 823 // Asm: VTRN1, CPU Feature: NEON 824 func (x Int16x8) InterleaveEven(y Int16x8) Int16x8 825 826 // InterleaveEven interleaves even elements from x and y. 827 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 828 // 829 // Asm: VTRN1, CPU Feature: NEON 830 func (x Int32x4) InterleaveEven(y Int32x4) Int32x4 831 832 // InterleaveEven interleaves even elements from x and y. 833 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 834 // 835 // Asm: VTRN1, CPU Feature: NEON 836 func (x Int64x2) InterleaveEven(y Int64x2) Int64x2 837 838 // InterleaveEven interleaves even elements from x and y. 839 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 840 // 841 // Asm: VTRN1, CPU Feature: NEON 842 func (x Uint8x16) InterleaveEven(y Uint8x16) Uint8x16 843 844 // InterleaveEven interleaves even elements from x and y. 845 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 846 // 847 // Asm: VTRN1, CPU Feature: NEON 848 func (x Uint16x8) InterleaveEven(y Uint16x8) Uint16x8 849 850 // InterleaveEven interleaves even elements from x and y. 851 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 852 // 853 // Asm: VTRN1, CPU Feature: NEON 854 func (x Uint32x4) InterleaveEven(y Uint32x4) Uint32x4 855 856 // InterleaveEven interleaves even elements from x and y. 857 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a0,b0,a2,b2]. 858 // 859 // Asm: VTRN1, CPU Feature: NEON 860 func (x Uint64x2) InterleaveEven(y Uint64x2) Uint64x2 861 862 /* InterleaveHi */ 863 864 // InterleaveHi interleaves the elements of the high halves of x and y. 865 // 866 // Asm: VZIP2, CPU Feature: NEON 867 func (x Int8x16) InterleaveHi(y Int8x16) Int8x16 868 869 // InterleaveHi interleaves the elements of the high halves of x and y. 870 // 871 // Asm: VZIP2, CPU Feature: NEON 872 func (x Int16x8) InterleaveHi(y Int16x8) Int16x8 873 874 // InterleaveHi interleaves the elements of the high halves of x and y. 875 // 876 // Asm: VZIP2, CPU Feature: NEON 877 func (x Int32x4) InterleaveHi(y Int32x4) Int32x4 878 879 // InterleaveHi interleaves the elements of the high halves of x and y. 880 // 881 // Asm: VZIP2, CPU Feature: NEON 882 func (x Int64x2) InterleaveHi(y Int64x2) Int64x2 883 884 // InterleaveHi interleaves the elements of the high halves of x and y. 885 // 886 // Asm: VZIP2, CPU Feature: NEON 887 func (x Uint8x16) InterleaveHi(y Uint8x16) Uint8x16 888 889 // InterleaveHi interleaves the elements of the high halves of x and y. 890 // 891 // Asm: VZIP2, CPU Feature: NEON 892 func (x Uint16x8) InterleaveHi(y Uint16x8) Uint16x8 893 894 // InterleaveHi interleaves the elements of the high halves of x and y. 895 // 896 // Asm: VZIP2, CPU Feature: NEON 897 func (x Uint32x4) InterleaveHi(y Uint32x4) Uint32x4 898 899 // InterleaveHi interleaves the elements of the high halves of x and y. 900 // 901 // Asm: VZIP2, CPU Feature: NEON 902 func (x Uint64x2) InterleaveHi(y Uint64x2) Uint64x2 903 904 /* InterleaveLo */ 905 906 // InterleaveLo interleaves the elements of the low halves of x and y. 907 // 908 // Asm: VZIP1, CPU Feature: NEON 909 func (x Int8x16) InterleaveLo(y Int8x16) Int8x16 910 911 // InterleaveLo interleaves the elements of the low halves of x and y. 912 // 913 // Asm: VZIP1, CPU Feature: NEON 914 func (x Int16x8) InterleaveLo(y Int16x8) Int16x8 915 916 // InterleaveLo interleaves the elements of the low halves of x and y. 917 // 918 // Asm: VZIP1, CPU Feature: NEON 919 func (x Int32x4) InterleaveLo(y Int32x4) Int32x4 920 921 // InterleaveLo interleaves the elements of the low halves of x and y. 922 // 923 // Asm: VZIP1, CPU Feature: NEON 924 func (x Int64x2) InterleaveLo(y Int64x2) Int64x2 925 926 // InterleaveLo interleaves the elements of the low halves of x and y. 927 // 928 // Asm: VZIP1, CPU Feature: NEON 929 func (x Uint8x16) InterleaveLo(y Uint8x16) Uint8x16 930 931 // InterleaveLo interleaves the elements of the low halves of x and y. 932 // 933 // Asm: VZIP1, CPU Feature: NEON 934 func (x Uint16x8) InterleaveLo(y Uint16x8) Uint16x8 935 936 // InterleaveLo interleaves the elements of the low halves of x and y. 937 // 938 // Asm: VZIP1, CPU Feature: NEON 939 func (x Uint32x4) InterleaveLo(y Uint32x4) Uint32x4 940 941 // InterleaveLo interleaves the elements of the low halves of x and y. 942 // 943 // Asm: VZIP1, CPU Feature: NEON 944 func (x Uint64x2) InterleaveLo(y Uint64x2) Uint64x2 945 946 /* InterleaveOdd */ 947 948 // InterleaveOdd interleaves odd elements from x and y. 949 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 950 // 951 // Asm: VTRN2, CPU Feature: NEON 952 func (x Int8x16) InterleaveOdd(y Int8x16) Int8x16 953 954 // InterleaveOdd interleaves odd elements from x and y. 955 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 956 // 957 // Asm: VTRN2, CPU Feature: NEON 958 func (x Int16x8) InterleaveOdd(y Int16x8) Int16x8 959 960 // InterleaveOdd interleaves odd elements from x and y. 961 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 962 // 963 // Asm: VTRN2, CPU Feature: NEON 964 func (x Int32x4) InterleaveOdd(y Int32x4) Int32x4 965 966 // InterleaveOdd interleaves odd elements from x and y. 967 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 968 // 969 // Asm: VTRN2, CPU Feature: NEON 970 func (x Int64x2) InterleaveOdd(y Int64x2) Int64x2 971 972 // InterleaveOdd interleaves odd elements from x and y. 973 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 974 // 975 // Asm: VTRN2, CPU Feature: NEON 976 func (x Uint8x16) InterleaveOdd(y Uint8x16) Uint8x16 977 978 // InterleaveOdd interleaves odd elements from x and y. 979 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 980 // 981 // Asm: VTRN2, CPU Feature: NEON 982 func (x Uint16x8) InterleaveOdd(y Uint16x8) Uint16x8 983 984 // InterleaveOdd interleaves odd elements from x and y. 985 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 986 // 987 // Asm: VTRN2, CPU Feature: NEON 988 func (x Uint32x4) InterleaveOdd(y Uint32x4) Uint32x4 989 990 // InterleaveOdd interleaves odd elements from x and y. 991 // For x = [a0,a1,a2,a3] and y = [b0,b1,b2,b3], result = [a1,b1,a3,b3]. 992 // 993 // Asm: VTRN2, CPU Feature: NEON 994 func (x Uint64x2) InterleaveOdd(y Uint64x2) Uint64x2 995 996 /* LeadingSignBits */ 997 998 // LeadingSignBits counts the leading sign bits of each element in x. 999 // 1000 // Asm: VCLS, CPU Feature: NEON 1001 func (x Int8x16) LeadingSignBits() Int8x16 1002 1003 // LeadingSignBits counts the leading sign bits of each element in x. 1004 // 1005 // Asm: VCLS, CPU Feature: NEON 1006 func (x Int16x8) LeadingSignBits() Int16x8 1007 1008 // LeadingSignBits counts the leading sign bits of each element in x. 1009 // 1010 // Asm: VCLS, CPU Feature: NEON 1011 func (x Int32x4) LeadingSignBits() Int32x4 1012 1013 // LeadingSignBits counts the leading sign bits of each element in x. 1014 // 1015 // Asm: VCLS, CPU Feature: NEON 1016 func (x Uint8x16) LeadingSignBits() Uint8x16 1017 1018 // LeadingSignBits counts the leading sign bits of each element in x. 1019 // 1020 // Asm: VCLS, CPU Feature: NEON 1021 func (x Uint16x8) LeadingSignBits() Uint16x8 1022 1023 // LeadingSignBits counts the leading sign bits of each element in x. 1024 // 1025 // Asm: VCLS, CPU Feature: NEON 1026 func (x Uint32x4) LeadingSignBits() Uint32x4 1027 1028 /* LeadingZeros */ 1029 1030 // LeadingZeros counts the leading zeros of each element in x. 1031 // 1032 // Asm: VCLZ, CPU Feature: NEON 1033 func (x Int8x16) LeadingZeros() Int8x16 1034 1035 // LeadingZeros counts the leading zeros of each element in x. 1036 // 1037 // Asm: VCLZ, CPU Feature: NEON 1038 func (x Int16x8) LeadingZeros() Int16x8 1039 1040 // LeadingZeros counts the leading zeros of each element in x. 1041 // 1042 // Asm: VCLZ, CPU Feature: NEON 1043 func (x Int32x4) LeadingZeros() Int32x4 1044 1045 // LeadingZeros counts the leading zeros of each element in x. 1046 // 1047 // Asm: VCLZ, CPU Feature: NEON 1048 func (x Uint8x16) LeadingZeros() Uint8x16 1049 1050 // LeadingZeros counts the leading zeros of each element in x. 1051 // 1052 // Asm: VCLZ, CPU Feature: NEON 1053 func (x Uint16x8) LeadingZeros() Uint16x8 1054 1055 // LeadingZeros counts the leading zeros of each element in x. 1056 // 1057 // Asm: VCLZ, CPU Feature: NEON 1058 func (x Uint32x4) LeadingZeros() Uint32x4 1059 1060 /* LookupOrZero */ 1061 1062 // LookupOrZero looks up table. If an index is out of range, the result is 0. 1063 // 1064 // if 0 <= indices[i] && indices[i] < len(table) { 1065 // result[i] = table[indices[i]] 1066 // } else { 1067 // result[i] = 0 1068 // } 1069 // 1070 // Asm: VTBL, CPU Feature: NEON 1071 func (table Int8x16) LookupOrZero(indices Int8x16) Int8x16 1072 1073 // LookupOrZero looks up table. If an index is out of range, the result is 0. 1074 // 1075 // if 0 <= indices[i] && indices[i] < len(table) { 1076 // result[i] = table[indices[i]] 1077 // } else { 1078 // result[i] = 0 1079 // } 1080 // 1081 // Asm: VTBL, CPU Feature: NEON 1082 func (table Uint8x16) LookupOrZero(indices Uint8x16) Uint8x16 1083 1084 /* Max */ 1085 1086 // Max computes the maximum of each pair of corresponding elements in x and y. 1087 // 1088 // Asm: VFMAX, CPU Feature: NEON 1089 func (x Float32x4) Max(y Float32x4) Float32x4 1090 1091 // Max computes the maximum of each pair of corresponding elements in x and y. 1092 // 1093 // Asm: VFMAX, CPU Feature: NEON 1094 func (x Float64x2) Max(y Float64x2) Float64x2 1095 1096 // Max computes the maximum of each pair of corresponding elements in x and y. 1097 // 1098 // Asm: VSMAX, CPU Feature: NEON 1099 func (x Int8x16) Max(y Int8x16) Int8x16 1100 1101 // Max computes the maximum of each pair of corresponding elements in x and y. 1102 // 1103 // Asm: VSMAX, CPU Feature: NEON 1104 func (x Int16x8) Max(y Int16x8) Int16x8 1105 1106 // Max computes the maximum of each pair of corresponding elements in x and y. 1107 // 1108 // Asm: VSMAX, CPU Feature: NEON 1109 func (x Int32x4) Max(y Int32x4) Int32x4 1110 1111 // Max computes the maximum of each pair of corresponding elements in x and y. 1112 // 1113 // Asm: VUMAX, CPU Feature: NEON 1114 func (x Uint8x16) Max(y Uint8x16) Uint8x16 1115 1116 // Max computes the maximum of each pair of corresponding elements in x and y. 1117 // 1118 // Asm: VUMAX, CPU Feature: NEON 1119 func (x Uint16x8) Max(y Uint16x8) Uint16x8 1120 1121 // Max computes the maximum of each pair of corresponding elements in x and y. 1122 // 1123 // Asm: VUMAX, CPU Feature: NEON 1124 func (x Uint32x4) Max(y Uint32x4) Uint32x4 1125 1126 /* Min */ 1127 1128 // Min computes the minimum of each pair of corresponding elements in x and y. 1129 // 1130 // Asm: VFMIN, CPU Feature: NEON 1131 func (x Float32x4) Min(y Float32x4) Float32x4 1132 1133 // Min computes the minimum of each pair of corresponding elements in x and y. 1134 // 1135 // Asm: VFMIN, CPU Feature: NEON 1136 func (x Float64x2) Min(y Float64x2) Float64x2 1137 1138 // Min computes the minimum of each pair of corresponding elements in x and y. 1139 // 1140 // Asm: VSMIN, CPU Feature: NEON 1141 func (x Int8x16) Min(y Int8x16) Int8x16 1142 1143 // Min computes the minimum of each pair of corresponding elements in x and y. 1144 // 1145 // Asm: VSMIN, CPU Feature: NEON 1146 func (x Int16x8) Min(y Int16x8) Int16x8 1147 1148 // Min computes the minimum of each pair of corresponding elements in x and y. 1149 // 1150 // Asm: VSMIN, CPU Feature: NEON 1151 func (x Int32x4) Min(y Int32x4) Int32x4 1152 1153 // Min computes the minimum of each pair of corresponding elements in x and y. 1154 // 1155 // Asm: VUMIN, CPU Feature: NEON 1156 func (x Uint8x16) Min(y Uint8x16) Uint8x16 1157 1158 // Min computes the minimum of each pair of corresponding elements in x and y. 1159 // 1160 // Asm: VUMIN, CPU Feature: NEON 1161 func (x Uint16x8) Min(y Uint16x8) Uint16x8 1162 1163 // Min computes the minimum of each pair of corresponding elements in x and y. 1164 // 1165 // Asm: VUMIN, CPU Feature: NEON 1166 func (x Uint32x4) Min(y Uint32x4) Uint32x4 1167 1168 /* Mul */ 1169 1170 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1171 // 1172 // Asm: VFMUL, CPU Feature: NEON 1173 func (x Float32x4) Mul(y Float32x4) Float32x4 1174 1175 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1176 // 1177 // Asm: VFMUL, CPU Feature: NEON 1178 func (x Float64x2) Mul(y Float64x2) Float64x2 1179 1180 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1181 // 1182 // Asm: VMUL, CPU Feature: NEON 1183 func (x Int8x16) Mul(y Int8x16) Int8x16 1184 1185 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1186 // 1187 // Asm: VMUL, CPU Feature: NEON 1188 func (x Int16x8) Mul(y Int16x8) Int16x8 1189 1190 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1191 // 1192 // Asm: VMUL, CPU Feature: NEON 1193 func (x Int32x4) Mul(y Int32x4) Int32x4 1194 1195 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1196 // 1197 // Asm: VMUL, CPU Feature: NEON 1198 func (x Uint8x16) Mul(y Uint8x16) Uint8x16 1199 1200 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1201 // 1202 // Asm: VMUL, CPU Feature: NEON 1203 func (x Uint16x8) Mul(y Uint16x8) Uint16x8 1204 1205 // Mul multiplies corresponding elements of two vectors, modulo 2ⁿ. 1206 // 1207 // Asm: VMUL, CPU Feature: NEON 1208 func (x Uint32x4) Mul(y Uint32x4) Uint32x4 1209 1210 /* MulAdd */ 1211 1212 // MulAdd performs a fused (x * y) + z. 1213 // 1214 // Asm: VFMLA, CPU Feature: NEON 1215 func (x Float32x4) MulAdd(y Float32x4, z Float32x4) Float32x4 1216 1217 // MulAdd performs a fused (x * y) + z. 1218 // 1219 // Asm: VFMLA, CPU Feature: NEON 1220 func (x Float64x2) MulAdd(y Float64x2, z Float64x2) Float64x2 1221 1222 // MulAdd computes (x * y) + z. 1223 // 1224 // Asm: VMLA, CPU Feature: NEON 1225 func (x Int8x16) MulAdd(y Int8x16, z Int8x16) Int8x16 1226 1227 // MulAdd computes (x * y) + z. 1228 // 1229 // Asm: VMLA, CPU Feature: NEON 1230 func (x Int16x8) MulAdd(y Int16x8, z Int16x8) Int16x8 1231 1232 // MulAdd computes (x * y) + z. 1233 // 1234 // Asm: VMLA, CPU Feature: NEON 1235 func (x Int32x4) MulAdd(y Int32x4, z Int32x4) Int32x4 1236 1237 // MulAdd computes (x * y) + z. 1238 // 1239 // Asm: VMLA, CPU Feature: NEON 1240 func (x Uint8x16) MulAdd(y Uint8x16, z Uint8x16) Uint8x16 1241 1242 // MulAdd computes (x * y) + z. 1243 // 1244 // Asm: VMLA, CPU Feature: NEON 1245 func (x Uint16x8) MulAdd(y Uint16x8, z Uint16x8) Uint16x8 1246 1247 // MulAdd computes (x * y) + z. 1248 // 1249 // Asm: VMLA, CPU Feature: NEON 1250 func (x Uint32x4) MulAdd(y Uint32x4, z Uint32x4) Uint32x4 1251 1252 /* MulWidenLo */ 1253 1254 // MulWidenLo multiplies corresponding low-indexed elements and produces a result with double the element width. 1255 // For the high-indexed elements, use HiToLo: 1256 // 1257 // x.HiToLo().MulWidenLo(y.HiToLo()) 1258 // 1259 // Asm: VSMULL, CPU Feature: NEON 1260 func (x Int8x16) MulWidenLo(y Int8x16) Int16x8 1261 1262 // MulWidenLo multiplies corresponding low-indexed elements and produces a result with double the element width. 1263 // For the high-indexed elements, use HiToLo: 1264 // 1265 // x.HiToLo().MulWidenLo(y.HiToLo()) 1266 // 1267 // Asm: VSMULL, CPU Feature: NEON 1268 func (x Int16x8) MulWidenLo(y Int16x8) Int32x4 1269 1270 // MulWidenLo multiplies corresponding low-indexed elements and produces a result with double the element width. 1271 // For the high-indexed elements, use HiToLo: 1272 // 1273 // x.HiToLo().MulWidenLo(y.HiToLo()) 1274 // 1275 // Asm: VSMULL, CPU Feature: NEON 1276 func (x Int32x4) MulWidenLo(y Int32x4) Int64x2 1277 1278 // MulWidenLo multiplies corresponding low-indexed elements and produces a result with double the element width. 1279 // For the high-indexed elements, use HiToLo: 1280 // 1281 // x.HiToLo().MulWidenLo(y.HiToLo()) 1282 // 1283 // Asm: VUMULL, CPU Feature: NEON 1284 func (x Uint8x16) MulWidenLo(y Uint8x16) Uint16x8 1285 1286 // MulWidenLo multiplies corresponding low-indexed elements and produces a result with double the element width. 1287 // For the high-indexed elements, use HiToLo: 1288 // 1289 // x.HiToLo().MulWidenLo(y.HiToLo()) 1290 // 1291 // Asm: VUMULL, CPU Feature: NEON 1292 func (x Uint16x8) MulWidenLo(y Uint16x8) Uint32x4 1293 1294 // MulWidenLo multiplies corresponding low-indexed elements and produces a result with double the element width. 1295 // For the high-indexed elements, use HiToLo: 1296 // 1297 // x.HiToLo().MulWidenLo(y.HiToLo()) 1298 // 1299 // Asm: VUMULL, CPU Feature: NEON 1300 func (x Uint32x4) MulWidenLo(y Uint32x4) Uint64x2 1301 1302 /* Neg */ 1303 1304 // Neg returns the elementwise negation of x. 1305 // 1306 // Asm: VFNEG, CPU Feature: NEON 1307 func (x Float32x4) Neg() Float32x4 1308 1309 // Neg returns the elementwise negation of x. 1310 // 1311 // Asm: VFNEG, CPU Feature: NEON 1312 func (x Float64x2) Neg() Float64x2 1313 1314 // Neg returns the elementwise negation of x. 1315 // 1316 // Asm: VNEG, CPU Feature: NEON 1317 func (x Int8x16) Neg() Int8x16 1318 1319 // Neg returns the elementwise negation of x. 1320 // 1321 // Asm: VNEG, CPU Feature: NEON 1322 func (x Int16x8) Neg() Int16x8 1323 1324 // Neg returns the elementwise negation of x. 1325 // 1326 // Asm: VNEG, CPU Feature: NEON 1327 func (x Int32x4) Neg() Int32x4 1328 1329 // Neg returns the elementwise negation of x. 1330 // 1331 // Asm: VNEG, CPU Feature: NEON 1332 func (x Int64x2) Neg() Int64x2 1333 1334 /* Not */ 1335 1336 // Not returns the bitwise complement of x. 1337 // 1338 // Asm: VNOT, CPU Feature: NEON 1339 func (x Int8x16) Not() Int8x16 1340 1341 // Not returns the bitwise complement of x. 1342 // 1343 // Asm: VNOT, CPU Feature: NEON 1344 func (x Int16x8) Not() Int16x8 1345 1346 // Not returns the bitwise complement of x. 1347 // 1348 // Asm: VNOT, CPU Feature: NEON 1349 func (x Int32x4) Not() Int32x4 1350 1351 // Not returns the bitwise complement of x. 1352 // 1353 // Asm: VNOT, CPU Feature: NEON 1354 func (x Int64x2) Not() Int64x2 1355 1356 // Not returns the bitwise complement of x. 1357 // 1358 // Asm: VNOT, CPU Feature: NEON 1359 func (x Uint8x16) Not() Uint8x16 1360 1361 // Not returns the bitwise complement of x. 1362 // 1363 // Asm: VNOT, CPU Feature: NEON 1364 func (x Uint16x8) Not() Uint16x8 1365 1366 // Not returns the bitwise complement of x. 1367 // 1368 // Asm: VNOT, CPU Feature: NEON 1369 func (x Uint32x4) Not() Uint32x4 1370 1371 // Not returns the bitwise complement of x. 1372 // 1373 // Asm: VNOT, CPU Feature: NEON 1374 func (x Uint64x2) Not() Uint64x2 1375 1376 /* OnesCount */ 1377 1378 // OnesCount counts the number of set bits in each element. 1379 // 1380 // Asm: VCNT, CPU Feature: NEON 1381 func (x Int8x16) OnesCount() Int8x16 1382 1383 // OnesCount counts the number of set bits in each element. 1384 // 1385 // Asm: VCNT, CPU Feature: NEON 1386 func (x Uint8x16) OnesCount() Uint8x16 1387 1388 /* Or */ 1389 1390 // Or performs a bitwise x | y. 1391 // 1392 // Asm: VORR, CPU Feature: NEON 1393 func (x Int8x16) Or(y Int8x16) Int8x16 1394 1395 // Or performs a bitwise x | y. 1396 // 1397 // Asm: VORR, CPU Feature: NEON 1398 func (x Int16x8) Or(y Int16x8) Int16x8 1399 1400 // Or performs a bitwise x | y. 1401 // 1402 // Asm: VORR, CPU Feature: NEON 1403 func (x Int32x4) Or(y Int32x4) Int32x4 1404 1405 // Or performs a bitwise x | y. 1406 // 1407 // Asm: VORR, CPU Feature: NEON 1408 func (x Int64x2) Or(y Int64x2) Int64x2 1409 1410 // Or performs a bitwise x | y. 1411 // 1412 // Asm: VORR, CPU Feature: NEON 1413 func (x Uint8x16) Or(y Uint8x16) Uint8x16 1414 1415 // Or performs a bitwise x | y. 1416 // 1417 // Asm: VORR, CPU Feature: NEON 1418 func (x Uint16x8) Or(y Uint16x8) Uint16x8 1419 1420 // Or performs a bitwise x | y. 1421 // 1422 // Asm: VORR, CPU Feature: NEON 1423 func (x Uint32x4) Or(y Uint32x4) Uint32x4 1424 1425 // Or performs a bitwise x | y. 1426 // 1427 // Asm: VORR, CPU Feature: NEON 1428 func (x Uint64x2) Or(y Uint64x2) Uint64x2 1429 1430 /* OrNot */ 1431 1432 // OrNot performs a bitwise x | ^y. 1433 // 1434 // Asm: VORN, CPU Feature: NEON 1435 func (x Int8x16) OrNot(y Int8x16) Int8x16 1436 1437 // OrNot performs a bitwise x | ^y. 1438 // 1439 // Asm: VORN, CPU Feature: NEON 1440 func (x Int16x8) OrNot(y Int16x8) Int16x8 1441 1442 // OrNot performs a bitwise x | ^y. 1443 // 1444 // Asm: VORN, CPU Feature: NEON 1445 func (x Int32x4) OrNot(y Int32x4) Int32x4 1446 1447 // OrNot performs a bitwise x | ^y. 1448 // 1449 // Asm: VORN, CPU Feature: NEON 1450 func (x Int64x2) OrNot(y Int64x2) Int64x2 1451 1452 // OrNot performs a bitwise x | ^y. 1453 // 1454 // Asm: VORN, CPU Feature: NEON 1455 func (x Uint8x16) OrNot(y Uint8x16) Uint8x16 1456 1457 // OrNot performs a bitwise x | ^y. 1458 // 1459 // Asm: VORN, CPU Feature: NEON 1460 func (x Uint16x8) OrNot(y Uint16x8) Uint16x8 1461 1462 // OrNot performs a bitwise x | ^y. 1463 // 1464 // Asm: VORN, CPU Feature: NEON 1465 func (x Uint32x4) OrNot(y Uint32x4) Uint32x4 1466 1467 // OrNot performs a bitwise x | ^y. 1468 // 1469 // Asm: VORN, CPU Feature: NEON 1470 func (x Uint64x2) OrNot(y Uint64x2) Uint64x2 1471 1472 /* Round */ 1473 1474 // Round rounds elements to the nearest integer, rounding ties to even. 1475 // 1476 // Asm: VFRINTN, CPU Feature: NEON 1477 func (x Float32x4) Round() Float32x4 1478 1479 // Round rounds elements to the nearest integer, rounding ties to even. 1480 // 1481 // Asm: VFRINTN, CPU Feature: NEON 1482 func (x Float64x2) Round() Float64x2 1483 1484 /* SaturateToInt8 */ 1485 1486 // SaturateToInt8 converts element values to int8 with signed saturation. 1487 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1488 // 1489 // Asm: VSQXTN, CPU Feature: NEON 1490 func (x Int16x8) SaturateToInt8() Int8x16 1491 1492 /* SaturateToInt16 */ 1493 1494 // SaturateToInt16 converts element values to int16 with signed saturation. 1495 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1496 // 1497 // Asm: VSQXTN, CPU Feature: NEON 1498 func (x Int32x4) SaturateToInt16() Int16x8 1499 1500 /* SaturateToInt32 */ 1501 1502 // SaturateToInt32 converts element values to int32 with signed saturation. 1503 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1504 // 1505 // Asm: VSQXTN, CPU Feature: NEON 1506 func (x Int64x2) SaturateToInt32() Int32x4 1507 1508 /* SaturateToUint8 */ 1509 1510 // SaturateToUint8 converts element values to uint8 with unsigned saturation. 1511 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1512 // 1513 // Asm: VSQXTUN, CPU Feature: NEON 1514 func (x Int16x8) SaturateToUint8() Uint8x16 1515 1516 // SaturateToUint8 converts element values to uint8 with unsigned saturation. 1517 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1518 // 1519 // Asm: VUQXTN, CPU Feature: NEON 1520 func (x Uint16x8) SaturateToUint8() Uint8x16 1521 1522 /* SaturateToUint16 */ 1523 1524 // SaturateToUint16 converts element values to uint16 with unsigned saturation. 1525 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1526 // 1527 // Asm: VSQXTUN, CPU Feature: NEON 1528 func (x Int32x4) SaturateToUint16() Uint16x8 1529 1530 // SaturateToUint16 converts element values to uint16 with unsigned saturation. 1531 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1532 // 1533 // Asm: VUQXTN, CPU Feature: NEON 1534 func (x Uint32x4) SaturateToUint16() Uint16x8 1535 1536 /* SaturateToUint32 */ 1537 1538 // SaturateToUint32 converts element values to uint32 with unsigned saturation. 1539 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1540 // 1541 // Asm: VSQXTUN, CPU Feature: NEON 1542 func (x Int64x2) SaturateToUint32() Uint32x4 1543 1544 // SaturateToUint32 converts element values to uint32 with unsigned saturation. 1545 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1546 // 1547 // Asm: VUQXTN, CPU Feature: NEON 1548 func (x Uint64x2) SaturateToUint32() Uint32x4 1549 1550 /* SetElem */ 1551 1552 // SetElem returns x with the index'th element set to y. 1553 // 1554 // A non-constant value of index may result in significantly worse performance for this operation. 1555 // 1556 // Asm: VMOV, CPU Feature: NEON 1557 func (x Int8x16) SetElem(index uint8, y int8) Int8x16 1558 1559 // SetElem returns x with the index'th element set to y. 1560 // 1561 // A non-constant value of index may result in significantly worse performance for this operation. 1562 // 1563 // Asm: VMOV, CPU Feature: NEON 1564 func (x Int16x8) SetElem(index uint8, y int16) Int16x8 1565 1566 // SetElem returns x with the index'th element set to y. 1567 // 1568 // A non-constant value of index may result in significantly worse performance for this operation. 1569 // 1570 // Asm: VMOV, CPU Feature: NEON 1571 func (x Int32x4) SetElem(index uint8, y int32) Int32x4 1572 1573 // SetElem returns x with the index'th element set to y. 1574 // 1575 // A non-constant value of index may result in significantly worse performance for this operation. 1576 // 1577 // Asm: VMOV, CPU Feature: NEON 1578 func (x Int64x2) SetElem(index uint8, y int64) Int64x2 1579 1580 // SetElem returns x with the index'th element set to y. 1581 // 1582 // A non-constant value of index may result in significantly worse performance for this operation. 1583 // 1584 // Asm: VMOV, CPU Feature: NEON 1585 func (x Uint8x16) SetElem(index uint8, y uint8) Uint8x16 1586 1587 // SetElem returns x with the index'th element set to y. 1588 // 1589 // A non-constant value of index may result in significantly worse performance for this operation. 1590 // 1591 // Asm: VMOV, CPU Feature: NEON 1592 func (x Uint16x8) SetElem(index uint8, y uint16) Uint16x8 1593 1594 // SetElem returns x with the index'th element set to y. 1595 // 1596 // A non-constant value of index may result in significantly worse performance for this operation. 1597 // 1598 // Asm: VMOV, CPU Feature: NEON 1599 func (x Uint32x4) SetElem(index uint8, y uint32) Uint32x4 1600 1601 // SetElem returns x with the index'th element set to y. 1602 // 1603 // A non-constant value of index may result in significantly worse performance for this operation. 1604 // 1605 // Asm: VMOV, CPU Feature: NEON 1606 func (x Uint64x2) SetElem(index uint8, y uint64) Uint64x2 1607 1608 // SetElem returns x with the index'th element set to y. 1609 // 1610 // index results in better performance when it's a constant, a non-constant value will be translated into a jump table. 1611 // Asm: VMOV, CPU Feature: NEON 1612 func (x Float32x4) SetElem(index uint8, v float32) Float32x4 1613 1614 // SetElem returns x with the index'th element set to y. 1615 // 1616 // index results in better performance when it's a constant, a non-constant value will be translated into a jump table. 1617 // Asm: VMOV, CPU Feature: NEON 1618 func (x Float64x2) SetElem(index uint8, v float64) Float64x2 1619 1620 /* Shift */ 1621 1622 // Shift shifts each element in x by the signed value of the least significant byte 1623 // of y's corresponding element: positive values shift left, negative values shift right. 1624 // 1625 // Asm: VSSHL, CPU Feature: NEON 1626 func (x Int8x16) Shift(y Int8x16) Int8x16 1627 1628 // Shift shifts each element in x by the signed value of the least significant byte 1629 // of y's corresponding element: positive values shift left, negative values shift right. 1630 // 1631 // Asm: VSSHL, CPU Feature: NEON 1632 func (x Int16x8) Shift(y Int16x8) Int16x8 1633 1634 // Shift shifts each element in x by the signed value of the least significant byte 1635 // of y's corresponding element: positive values shift left, negative values shift right. 1636 // 1637 // Asm: VSSHL, CPU Feature: NEON 1638 func (x Int32x4) Shift(y Int32x4) Int32x4 1639 1640 // Shift shifts each element in x by the signed value of the least significant byte 1641 // of y's corresponding element: positive values shift left, negative values shift right. 1642 // 1643 // Asm: VSSHL, CPU Feature: NEON 1644 func (x Int64x2) Shift(y Int64x2) Int64x2 1645 1646 // Shift shifts each element in x by the signed value of the least significant byte 1647 // of y's corresponding element: positive values shift left, negative values shift right. 1648 // 1649 // Asm: VUSHL, CPU Feature: NEON 1650 func (x Uint8x16) Shift(y Int8x16) Uint8x16 1651 1652 // Shift shifts each element in x by the signed value of the least significant byte 1653 // of y's corresponding element: positive values shift left, negative values shift right. 1654 // 1655 // Asm: VUSHL, CPU Feature: NEON 1656 func (x Uint16x8) Shift(y Int16x8) Uint16x8 1657 1658 // Shift shifts each element in x by the signed value of the least significant byte 1659 // of y's corresponding element: positive values shift left, negative values shift right. 1660 // 1661 // Asm: VUSHL, CPU Feature: NEON 1662 func (x Uint32x4) Shift(y Int32x4) Uint32x4 1663 1664 // Shift shifts each element in x by the signed value of the least significant byte 1665 // of y's corresponding element: positive values shift left, negative values shift right. 1666 // 1667 // Asm: VUSHL, CPU Feature: NEON 1668 func (x Uint64x2) Shift(y Int64x2) Uint64x2 1669 1670 /* ShiftAllLeft */ 1671 1672 // ShiftAllLeft shifts each element of x left by y bits. 1673 // If y is greater than the element width, the result is 0. 1674 // 1675 // Asm: VSSHL, CPU Feature: NEON 1676 func (x Int8x16) ShiftAllLeft(y uint64) Int8x16 1677 1678 // ShiftAllLeft shifts each element of x left by y bits. 1679 // If y is greater than the element width, the result is 0. 1680 // 1681 // Asm: VSSHL, CPU Feature: NEON 1682 func (x Int16x8) ShiftAllLeft(y uint64) Int16x8 1683 1684 // ShiftAllLeft shifts each element of x left by y bits. 1685 // If y is greater than the element width, the result is 0. 1686 // 1687 // Asm: VSSHL, CPU Feature: NEON 1688 func (x Int32x4) ShiftAllLeft(y uint64) Int32x4 1689 1690 // ShiftAllLeft shifts each element of x left by y bits. 1691 // If y is greater than the element width, the result is 0. 1692 // 1693 // Asm: VSSHL, CPU Feature: NEON 1694 func (x Int64x2) ShiftAllLeft(y uint64) Int64x2 1695 1696 // ShiftAllLeft shifts each element of x left by y bits. 1697 // If y is greater than the element width, the result is 0. 1698 // 1699 // Asm: VUSHL, CPU Feature: NEON 1700 func (x Uint8x16) ShiftAllLeft(y uint64) Uint8x16 1701 1702 // ShiftAllLeft shifts each element of x left by y bits. 1703 // If y is greater than the element width, the result is 0. 1704 // 1705 // Asm: VUSHL, CPU Feature: NEON 1706 func (x Uint16x8) ShiftAllLeft(y uint64) Uint16x8 1707 1708 // ShiftAllLeft shifts each element of x left by y bits. 1709 // If y is greater than the element width, the result is 0. 1710 // 1711 // Asm: VUSHL, CPU Feature: NEON 1712 func (x Uint32x4) ShiftAllLeft(y uint64) Uint32x4 1713 1714 // ShiftAllLeft shifts each element of x left by y bits. 1715 // If y is greater than the element width, the result is 0. 1716 // 1717 // Asm: VUSHL, CPU Feature: NEON 1718 func (x Uint64x2) ShiftAllLeft(y uint64) Uint64x2 1719 1720 /* ShiftAllRight */ 1721 1722 // ShiftAllRight arithmetically shifts each element of x right by y bits. 1723 // If y is greater than the element width, the result is 0 or -1. 1724 // 1725 // Asm: VSSHL, CPU Feature: NEON 1726 func (x Int8x16) ShiftAllRight(y uint64) Int8x16 1727 1728 // ShiftAllRight arithmetically shifts each element of x right by y bits. 1729 // If y is greater than the element width, the result is 0 or -1. 1730 // 1731 // Asm: VSSHL, CPU Feature: NEON 1732 func (x Int16x8) ShiftAllRight(y uint64) Int16x8 1733 1734 // ShiftAllRight arithmetically shifts each element of x right by y bits. 1735 // If y is greater than the element width, the result is 0 or -1. 1736 // 1737 // Asm: VSSHL, CPU Feature: NEON 1738 func (x Int32x4) ShiftAllRight(y uint64) Int32x4 1739 1740 // ShiftAllRight arithmetically shifts each element of x right by y bits. 1741 // If y is greater than the element width, the result is 0 or -1. 1742 // 1743 // Asm: VSSHL, CPU Feature: NEON 1744 func (x Int64x2) ShiftAllRight(y uint64) Int64x2 1745 1746 // ShiftAllRight logically shifts each element of x right by y bits. 1747 // If y is greater than the element width, the result is 0. 1748 // 1749 // Asm: VUSHL, CPU Feature: NEON 1750 func (x Uint8x16) ShiftAllRight(y uint64) Uint8x16 1751 1752 // ShiftAllRight logically shifts each element of x right by y bits. 1753 // If y is greater than the element width, the result is 0. 1754 // 1755 // Asm: VUSHL, CPU Feature: NEON 1756 func (x Uint16x8) ShiftAllRight(y uint64) Uint16x8 1757 1758 // ShiftAllRight logically shifts each element of x right by y bits. 1759 // If y is greater than the element width, the result is 0. 1760 // 1761 // Asm: VUSHL, CPU Feature: NEON 1762 func (x Uint32x4) ShiftAllRight(y uint64) Uint32x4 1763 1764 // ShiftAllRight logically shifts each element of x right by y bits. 1765 // If y is greater than the element width, the result is 0. 1766 // 1767 // Asm: VUSHL, CPU Feature: NEON 1768 func (x Uint64x2) ShiftAllRight(y uint64) Uint64x2 1769 1770 /* ShiftSaturated */ 1771 1772 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1773 // of y's corresponding element (positive shifts left, negative shifts right). 1774 // Results are saturated to the signed range on overflow. 1775 // 1776 // Asm: VSQSHL, CPU Feature: NEON 1777 func (x Int8x16) ShiftSaturated(y Int8x16) Int8x16 1778 1779 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1780 // of y's corresponding element (positive shifts left, negative shifts right). 1781 // Results are saturated to the signed range on overflow. 1782 // 1783 // Asm: VSQSHL, CPU Feature: NEON 1784 func (x Int16x8) ShiftSaturated(y Int16x8) Int16x8 1785 1786 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1787 // of y's corresponding element (positive shifts left, negative shifts right). 1788 // Results are saturated to the signed range on overflow. 1789 // 1790 // Asm: VSQSHL, CPU Feature: NEON 1791 func (x Int32x4) ShiftSaturated(y Int32x4) Int32x4 1792 1793 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1794 // of y's corresponding element (positive shifts left, negative shifts right). 1795 // Results are saturated to the signed range on overflow. 1796 // 1797 // Asm: VSQSHL, CPU Feature: NEON 1798 func (x Int64x2) ShiftSaturated(y Int64x2) Int64x2 1799 1800 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1801 // of y's corresponding element (positive shifts left, negative shifts right). 1802 // Results are saturated to the unsigned range on overflow. 1803 // 1804 // Asm: VUQSHL, CPU Feature: NEON 1805 func (x Uint8x16) ShiftSaturated(y Int8x16) Uint8x16 1806 1807 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1808 // of y's corresponding element (positive shifts left, negative shifts right). 1809 // Results are saturated to the unsigned range on overflow. 1810 // 1811 // Asm: VUQSHL, CPU Feature: NEON 1812 func (x Uint16x8) ShiftSaturated(y Int16x8) Uint16x8 1813 1814 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1815 // of y's corresponding element (positive shifts left, negative shifts right). 1816 // Results are saturated to the unsigned range on overflow. 1817 // 1818 // Asm: VUQSHL, CPU Feature: NEON 1819 func (x Uint32x4) ShiftSaturated(y Int32x4) Uint32x4 1820 1821 // ShiftSaturated shifts each element in x by the signed value of the least significant byte 1822 // of y's corresponding element (positive shifts left, negative shifts right). 1823 // Results are saturated to the unsigned range on overflow. 1824 // 1825 // Asm: VUQSHL, CPU Feature: NEON 1826 func (x Uint64x2) ShiftSaturated(y Int64x2) Uint64x2 1827 1828 /* Sqrt */ 1829 1830 // Sqrt computes the square root of each element. 1831 // 1832 // Asm: VFSQRT, CPU Feature: NEON 1833 func (x Float32x4) Sqrt() Float32x4 1834 1835 // Sqrt computes the square root of each element. 1836 // 1837 // Asm: VFSQRT, CPU Feature: NEON 1838 func (x Float64x2) Sqrt() Float64x2 1839 1840 /* Sub */ 1841 1842 // Sub subtracts corresponding elements of two vectors. 1843 // 1844 // Asm: VFSUB, CPU Feature: NEON 1845 func (x Float32x4) Sub(y Float32x4) Float32x4 1846 1847 // Sub subtracts corresponding elements of two vectors. 1848 // 1849 // Asm: VFSUB, CPU Feature: NEON 1850 func (x Float64x2) Sub(y Float64x2) Float64x2 1851 1852 // Sub subtracts corresponding elements of two vectors. 1853 // 1854 // Asm: VSUB, CPU Feature: NEON 1855 func (x Int8x16) Sub(y Int8x16) Int8x16 1856 1857 // Sub subtracts corresponding elements of two vectors. 1858 // 1859 // Asm: VSUB, CPU Feature: NEON 1860 func (x Int16x8) Sub(y Int16x8) Int16x8 1861 1862 // Sub subtracts corresponding elements of two vectors. 1863 // 1864 // Asm: VSUB, CPU Feature: NEON 1865 func (x Int32x4) Sub(y Int32x4) Int32x4 1866 1867 // Sub subtracts corresponding elements of two vectors. 1868 // 1869 // Asm: VSUB, CPU Feature: NEON 1870 func (x Int64x2) Sub(y Int64x2) Int64x2 1871 1872 // Sub subtracts corresponding elements of two vectors. 1873 // 1874 // Asm: VSUB, CPU Feature: NEON 1875 func (x Uint8x16) Sub(y Uint8x16) Uint8x16 1876 1877 // Sub subtracts corresponding elements of two vectors. 1878 // 1879 // Asm: VSUB, CPU Feature: NEON 1880 func (x Uint16x8) Sub(y Uint16x8) Uint16x8 1881 1882 // Sub subtracts corresponding elements of two vectors. 1883 // 1884 // Asm: VSUB, CPU Feature: NEON 1885 func (x Uint32x4) Sub(y Uint32x4) Uint32x4 1886 1887 // Sub subtracts corresponding elements of two vectors. 1888 // 1889 // Asm: VSUB, CPU Feature: NEON 1890 func (x Uint64x2) Sub(y Uint64x2) Uint64x2 1891 1892 /* SubSaturated */ 1893 1894 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1895 // 1896 // Asm: VSQSUB, CPU Feature: NEON 1897 func (x Int8x16) SubSaturated(y Int8x16) Int8x16 1898 1899 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1900 // 1901 // Asm: VSQSUB, CPU Feature: NEON 1902 func (x Int16x8) SubSaturated(y Int16x8) Int16x8 1903 1904 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1905 // 1906 // Asm: VSQSUB, CPU Feature: NEON 1907 func (x Int32x4) SubSaturated(y Int32x4) Int32x4 1908 1909 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1910 // 1911 // Asm: VSQSUB, CPU Feature: NEON 1912 func (x Int64x2) SubSaturated(y Int64x2) Int64x2 1913 1914 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1915 // 1916 // Asm: VUQSUB, CPU Feature: NEON 1917 func (x Uint8x16) SubSaturated(y Uint8x16) Uint8x16 1918 1919 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1920 // 1921 // Asm: VUQSUB, CPU Feature: NEON 1922 func (x Uint16x8) SubSaturated(y Uint16x8) Uint16x8 1923 1924 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1925 // 1926 // Asm: VUQSUB, CPU Feature: NEON 1927 func (x Uint32x4) SubSaturated(y Uint32x4) Uint32x4 1928 1929 // SubSaturated subtracts corresponding elements of two vectors with saturation. 1930 // 1931 // Asm: VUQSUB, CPU Feature: NEON 1932 func (x Uint64x2) SubSaturated(y Uint64x2) Uint64x2 1933 1934 /* Trunc */ 1935 1936 // Trunc truncates elements towards zero. 1937 // 1938 // Asm: VFRINTZ, CPU Feature: NEON 1939 func (x Float32x4) Trunc() Float32x4 1940 1941 // Trunc truncates elements towards zero. 1942 // 1943 // Asm: VFRINTZ, CPU Feature: NEON 1944 func (x Float64x2) Trunc() Float64x2 1945 1946 /* TruncToInt8 */ 1947 1948 // TruncToInt8 truncates element values to int8. 1949 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1950 // 1951 // Asm: VXTN, CPU Feature: NEON 1952 func (x Int16x8) TruncToInt8() Int8x16 1953 1954 /* TruncToInt16 */ 1955 1956 // TruncToInt16 truncates element values to int16. 1957 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1958 // 1959 // Asm: VXTN, CPU Feature: NEON 1960 func (x Int32x4) TruncToInt16() Int16x8 1961 1962 /* TruncToInt32 */ 1963 1964 // TruncToInt32 truncates element values to int32. 1965 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1966 // 1967 // Asm: VXTN, CPU Feature: NEON 1968 func (x Int64x2) TruncToInt32() Int32x4 1969 1970 /* TruncToUint8 */ 1971 1972 // TruncToUint8 truncates element values to uint8. 1973 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1974 // 1975 // Asm: VXTN, CPU Feature: NEON 1976 func (x Uint16x8) TruncToUint8() Uint8x16 1977 1978 /* TruncToUint16 */ 1979 1980 // TruncToUint16 truncates element values to uint16. 1981 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1982 // 1983 // Asm: VXTN, CPU Feature: NEON 1984 func (x Uint32x4) TruncToUint16() Uint16x8 1985 1986 /* TruncToUint32 */ 1987 1988 // TruncToUint32 truncates element values to uint32. 1989 // Results are packed to low elements in the returned vector, its upper elements are zeroed. 1990 // 1991 // Asm: VXTN, CPU Feature: NEON 1992 func (x Uint64x2) TruncToUint32() Uint32x4 1993 1994 /* Xor */ 1995 1996 // Xor performs a bitwise x ^ y. 1997 // 1998 // Asm: VEOR, CPU Feature: NEON 1999 func (x Int8x16) Xor(y Int8x16) Int8x16 2000 2001 // Xor performs a bitwise x ^ y. 2002 // 2003 // Asm: VEOR, CPU Feature: NEON 2004 func (x Int16x8) Xor(y Int16x8) Int16x8 2005 2006 // Xor performs a bitwise x ^ y. 2007 // 2008 // Asm: VEOR, CPU Feature: NEON 2009 func (x Int32x4) Xor(y Int32x4) Int32x4 2010 2011 // Xor performs a bitwise x ^ y. 2012 // 2013 // Asm: VEOR, CPU Feature: NEON 2014 func (x Int64x2) Xor(y Int64x2) Int64x2 2015 2016 // Xor performs a bitwise x ^ y. 2017 // 2018 // Asm: VEOR, CPU Feature: NEON 2019 func (x Uint8x16) Xor(y Uint8x16) Uint8x16 2020 2021 // Xor performs a bitwise x ^ y. 2022 // 2023 // Asm: VEOR, CPU Feature: NEON 2024 func (x Uint16x8) Xor(y Uint16x8) Uint16x8 2025 2026 // Xor performs a bitwise x ^ y. 2027 // 2028 // Asm: VEOR, CPU Feature: NEON 2029 func (x Uint32x4) Xor(y Uint32x4) Uint32x4 2030 2031 // Xor performs a bitwise x ^ y. 2032 // 2033 // Asm: VEOR, CPU Feature: NEON 2034 func (x Uint64x2) Xor(y Uint64x2) Uint64x2 2035 2036 // BitsToInt8 reinterprets the bits of a Uint8x16 vector as a Int8x16 vector 2037 func (x Uint8x16) BitsToInt8() Int8x16 2038 2039 // ConvertToInt8 converts a Uint8x16 vector to a Int8x16 vector 2040 func (x Uint8x16) ConvertToInt8() Int8x16 2041 2042 // ConvertToUint8 converts a Int8x16 vector to a Uint8x16 vector 2043 func (x Int8x16) ConvertToUint8() Uint8x16 2044 2045 // ToBits reinterprets the bits of a Int8x16 vector as a Uint8x16 vector 2046 func (x Int8x16) ToBits() Uint8x16 2047 2048 // ReshapeToUint16s reinterprets the bits of a Uint8x16 vector as a Uint16x8 vector 2049 func (x Uint8x16) ReshapeToUint16s() Uint16x8 2050 2051 // ReshapeToUint32s reinterprets the bits of a Uint8x16 vector as a Uint32x4 vector 2052 func (x Uint8x16) ReshapeToUint32s() Uint32x4 2053 2054 // ReshapeToUint64s reinterprets the bits of a Uint8x16 vector as a Uint64x2 vector 2055 func (x Uint8x16) ReshapeToUint64s() Uint64x2 2056 2057 // BitsToInt16 reinterprets the bits of a Uint16x8 vector as a Int16x8 vector 2058 func (x Uint16x8) BitsToInt16() Int16x8 2059 2060 // ConvertToInt16 converts a Uint16x8 vector to a Int16x8 vector 2061 func (x Uint16x8) ConvertToInt16() Int16x8 2062 2063 // ConvertToUint16 converts a Int16x8 vector to a Uint16x8 vector 2064 func (x Int16x8) ConvertToUint16() Uint16x8 2065 2066 // ToBits reinterprets the bits of a Int16x8 vector as a Uint16x8 vector 2067 func (x Int16x8) ToBits() Uint16x8 2068 2069 // ReshapeToUint8s reinterprets the bits of a Uint16x8 vector as a Uint8x16 vector 2070 func (x Uint16x8) ReshapeToUint8s() Uint8x16 2071 2072 // ReshapeToUint32s reinterprets the bits of a Uint16x8 vector as a Uint32x4 vector 2073 func (x Uint16x8) ReshapeToUint32s() Uint32x4 2074 2075 // ReshapeToUint64s reinterprets the bits of a Uint16x8 vector as a Uint64x2 vector 2076 func (x Uint16x8) ReshapeToUint64s() Uint64x2 2077 2078 // BitsToFloat32 reinterprets the bits of a Uint32x4 vector as a Float32x4 vector 2079 func (x Uint32x4) BitsToFloat32() Float32x4 2080 2081 // ToBits reinterprets the bits of a Float32x4 vector as a Uint32x4 vector 2082 func (x Float32x4) ToBits() Uint32x4 2083 2084 // BitsToInt32 reinterprets the bits of a Uint32x4 vector as a Int32x4 vector 2085 func (x Uint32x4) BitsToInt32() Int32x4 2086 2087 // ConvertToInt32 converts a Uint32x4 vector to a Int32x4 vector 2088 func (x Uint32x4) ConvertToInt32() Int32x4 2089 2090 // ConvertToUint32 converts a Int32x4 vector to a Uint32x4 vector 2091 func (x Int32x4) ConvertToUint32() Uint32x4 2092 2093 // ToBits reinterprets the bits of a Int32x4 vector as a Uint32x4 vector 2094 func (x Int32x4) ToBits() Uint32x4 2095 2096 // ReshapeToUint8s reinterprets the bits of a Uint32x4 vector as a Uint8x16 vector 2097 func (x Uint32x4) ReshapeToUint8s() Uint8x16 2098 2099 // ReshapeToUint16s reinterprets the bits of a Uint32x4 vector as a Uint16x8 vector 2100 func (x Uint32x4) ReshapeToUint16s() Uint16x8 2101 2102 // ReshapeToUint64s reinterprets the bits of a Uint32x4 vector as a Uint64x2 vector 2103 func (x Uint32x4) ReshapeToUint64s() Uint64x2 2104 2105 // BitsToFloat64 reinterprets the bits of a Uint64x2 vector as a Float64x2 vector 2106 func (x Uint64x2) BitsToFloat64() Float64x2 2107 2108 // ToBits reinterprets the bits of a Float64x2 vector as a Uint64x2 vector 2109 func (x Float64x2) ToBits() Uint64x2 2110 2111 // BitsToInt64 reinterprets the bits of a Uint64x2 vector as a Int64x2 vector 2112 func (x Uint64x2) BitsToInt64() Int64x2 2113 2114 // ConvertToInt64 converts a Uint64x2 vector to a Int64x2 vector 2115 func (x Uint64x2) ConvertToInt64() Int64x2 2116 2117 // ConvertToUint64 converts a Int64x2 vector to a Uint64x2 vector 2118 func (x Int64x2) ConvertToUint64() Uint64x2 2119 2120 // ToBits reinterprets the bits of a Int64x2 vector as a Uint64x2 vector 2121 func (x Int64x2) ToBits() Uint64x2 2122 2123 // ReshapeToUint8s reinterprets the bits of a Uint64x2 vector as a Uint8x16 vector 2124 func (x Uint64x2) ReshapeToUint8s() Uint8x16 2125 2126 // ReshapeToUint16s reinterprets the bits of a Uint64x2 vector as a Uint16x8 vector 2127 func (x Uint64x2) ReshapeToUint16s() Uint16x8 2128 2129 // ReshapeToUint32s reinterprets the bits of a Uint64x2 vector as a Uint32x4 vector 2130 func (x Uint64x2) ReshapeToUint32s() Uint32x4 2131 2132 // ToInt8x16 converts from Mask8x16 to Int8x16. 2133 // If element i in the mask is "true", all bits in element i of the resulting 2134 // vector will be set. 2135 func (from Mask8x16) ToInt8x16() (to Int8x16) 2136 2137 // asMask converts from Int8x16 to Mask8x16. 2138 func (from Int8x16) asMask() (to Mask8x16) 2139 2140 func (x Mask8x16) And(y Mask8x16) Mask8x16 2141 2142 func (x Mask8x16) Or(y Mask8x16) Mask8x16 2143 2144 func (x Mask8x16) Not() Mask8x16 2145 2146 // ToInt16x8 converts from Mask16x8 to Int16x8. 2147 // If element i in the mask is "true", all bits in element i of the resulting 2148 // vector will be set. 2149 func (from Mask16x8) ToInt16x8() (to Int16x8) 2150 2151 // asMask converts from Int16x8 to Mask16x8. 2152 func (from Int16x8) asMask() (to Mask16x8) 2153 2154 func (x Mask16x8) And(y Mask16x8) Mask16x8 2155 2156 func (x Mask16x8) Or(y Mask16x8) Mask16x8 2157 2158 func (x Mask16x8) Not() Mask16x8 2159 2160 // ToInt32x4 converts from Mask32x4 to Int32x4. 2161 // If element i in the mask is "true", all bits in element i of the resulting 2162 // vector will be set. 2163 func (from Mask32x4) ToInt32x4() (to Int32x4) 2164 2165 // asMask converts from Int32x4 to Mask32x4. 2166 func (from Int32x4) asMask() (to Mask32x4) 2167 2168 func (x Mask32x4) And(y Mask32x4) Mask32x4 2169 2170 func (x Mask32x4) Or(y Mask32x4) Mask32x4 2171 2172 func (x Mask32x4) Not() Mask32x4 2173 2174 // ToInt64x2 converts from Mask64x2 to Int64x2. 2175 // If element i in the mask is "true", all bits in element i of the resulting 2176 // vector will be set. 2177 func (from Mask64x2) ToInt64x2() (to Int64x2) 2178 2179 // asMask converts from Int64x2 to Mask64x2. 2180 func (from Int64x2) asMask() (to Mask64x2) 2181 2182 func (x Mask64x2) And(y Mask64x2) Mask64x2 2183 2184 func (x Mask64x2) Or(y Mask64x2) Mask64x2 2185 2186 func (x Mask64x2) Not() Mask64x2 2187