1/*===---- altivec.h - Standard header for type generic math ---------------===*\ 2 * 3 * Permission is hereby granted, free of charge, to any person obtaining a copy 4 * of this software and associated documentation files (the "Software"), to deal 5 * in the Software without restriction, including without limitation the rights 6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 * copies of the Software, and to permit persons to whom the Software is 8 * furnished to do so, subject to the following conditions: 9 * 10 * The above copyright notice and this permission notice shall be included in 11 * all copies or substantial portions of the Software. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 * THE SOFTWARE. 20 * 21\*===----------------------------------------------------------------------===*/ 22 23#ifndef __ALTIVEC_H 24#define __ALTIVEC_H 25 26#ifndef __ALTIVEC__ 27#error "AltiVec support not enabled" 28#endif 29 30/* Constants for mapping CR6 bits to predicate result. */ 31 32#define __CR6_EQ 0 33#define __CR6_EQ_REV 1 34#define __CR6_LT 2 35#define __CR6_LT_REV 3 36 37/* Constants for vec_test_data_class */ 38#define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0) 39#define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1) 40#define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \ 41 __VEC_CLASS_FP_SUBNORMAL_N) 42#define __VEC_CLASS_FP_ZERO_N (1<<2) 43#define __VEC_CLASS_FP_ZERO_P (1<<3) 44#define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P | \ 45 __VEC_CLASS_FP_ZERO_N) 46#define __VEC_CLASS_FP_INFINITY_N (1<<4) 47#define __VEC_CLASS_FP_INFINITY_P (1<<5) 48#define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P | \ 49 __VEC_CLASS_FP_INFINITY_N) 50#define __VEC_CLASS_FP_NAN (1<<6) 51#define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN | \ 52 __VEC_CLASS_FP_SUBNORMAL | \ 53 __VEC_CLASS_FP_ZERO | \ 54 __VEC_CLASS_FP_INFINITY) 55 56#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__)) 57 58#ifdef __POWER9_VECTOR__ 59#include <stddef.h> 60#endif 61 62static __inline__ vector signed char __ATTRS_o_ai vec_perm( 63 vector signed char __a, vector signed char __b, vector unsigned char __c); 64 65static __inline__ vector unsigned char __ATTRS_o_ai 66vec_perm(vector unsigned char __a, vector unsigned char __b, 67 vector unsigned char __c); 68 69static __inline__ vector bool char __ATTRS_o_ai 70vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c); 71 72static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a, 73 vector signed short __b, 74 vector unsigned char __c); 75 76static __inline__ vector unsigned short __ATTRS_o_ai 77vec_perm(vector unsigned short __a, vector unsigned short __b, 78 vector unsigned char __c); 79 80static __inline__ vector bool short __ATTRS_o_ai vec_perm( 81 vector bool short __a, vector bool short __b, vector unsigned char __c); 82 83static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a, 84 vector pixel __b, 85 vector unsigned char __c); 86 87static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a, 88 vector signed int __b, 89 vector unsigned char __c); 90 91static __inline__ vector unsigned int __ATTRS_o_ai vec_perm( 92 vector unsigned int __a, vector unsigned int __b, vector unsigned char __c); 93 94static __inline__ vector bool int __ATTRS_o_ai 95vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c); 96 97static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a, 98 vector float __b, 99 vector unsigned char __c); 100 101#ifdef __VSX__ 102static __inline__ vector long long __ATTRS_o_ai 103vec_perm(vector signed long long __a, vector signed long long __b, 104 vector unsigned char __c); 105 106static __inline__ vector unsigned long long __ATTRS_o_ai 107vec_perm(vector unsigned long long __a, vector unsigned long long __b, 108 vector unsigned char __c); 109 110static __inline__ vector bool long long __ATTRS_o_ai 111vec_perm(vector bool long long __a, vector bool long long __b, 112 vector unsigned char __c); 113 114static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a, 115 vector double __b, 116 vector unsigned char __c); 117#endif 118 119static __inline__ vector unsigned char __ATTRS_o_ai 120vec_xor(vector unsigned char __a, vector unsigned char __b); 121 122/* vec_abs */ 123 124#define __builtin_altivec_abs_v16qi vec_abs 125#define __builtin_altivec_abs_v8hi vec_abs 126#define __builtin_altivec_abs_v4si vec_abs 127 128static __inline__ vector signed char __ATTRS_o_ai 129vec_abs(vector signed char __a) { 130 return __builtin_altivec_vmaxsb(__a, -__a); 131} 132 133static __inline__ vector signed short __ATTRS_o_ai 134vec_abs(vector signed short __a) { 135 return __builtin_altivec_vmaxsh(__a, -__a); 136} 137 138static __inline__ vector signed int __ATTRS_o_ai 139vec_abs(vector signed int __a) { 140 return __builtin_altivec_vmaxsw(__a, -__a); 141} 142 143#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 144static __inline__ vector signed long long __ATTRS_o_ai 145vec_abs(vector signed long long __a) { 146 return __builtin_altivec_vmaxsd(__a, -__a); 147} 148#endif 149 150static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) { 151#ifdef __VSX__ 152 return __builtin_vsx_xvabssp(__a); 153#else 154 vector unsigned int __res = 155 (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF); 156 return (vector float)__res; 157#endif 158} 159 160#ifdef __VSX__ 161static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) { 162 return __builtin_vsx_xvabsdp(__a); 163} 164#endif 165 166/* vec_abss */ 167#define __builtin_altivec_abss_v16qi vec_abss 168#define __builtin_altivec_abss_v8hi vec_abss 169#define __builtin_altivec_abss_v4si vec_abss 170 171static __inline__ vector signed char __ATTRS_o_ai 172vec_abss(vector signed char __a) { 173 return __builtin_altivec_vmaxsb( 174 __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a)); 175} 176 177static __inline__ vector signed short __ATTRS_o_ai 178vec_abss(vector signed short __a) { 179 return __builtin_altivec_vmaxsh( 180 __a, __builtin_altivec_vsubshs((vector signed short)(0), __a)); 181} 182 183static __inline__ vector signed int __ATTRS_o_ai 184vec_abss(vector signed int __a) { 185 return __builtin_altivec_vmaxsw( 186 __a, __builtin_altivec_vsubsws((vector signed int)(0), __a)); 187} 188 189/* vec_absd */ 190#if defined(__POWER9_VECTOR__) 191 192static __inline__ vector unsigned char __ATTRS_o_ai 193vec_absd(vector unsigned char __a, vector unsigned char __b) { 194 return __builtin_altivec_vabsdub(__a, __b); 195} 196 197static __inline__ vector unsigned short __ATTRS_o_ai 198vec_absd(vector unsigned short __a, vector unsigned short __b) { 199 return __builtin_altivec_vabsduh(__a, __b); 200} 201 202static __inline__ vector unsigned int __ATTRS_o_ai 203vec_absd(vector unsigned int __a, vector unsigned int __b) { 204 return __builtin_altivec_vabsduw(__a, __b); 205} 206 207#endif /* End __POWER9_VECTOR__ */ 208 209/* vec_add */ 210 211static __inline__ vector signed char __ATTRS_o_ai 212vec_add(vector signed char __a, vector signed char __b) { 213 return __a + __b; 214} 215 216static __inline__ vector signed char __ATTRS_o_ai 217vec_add(vector bool char __a, vector signed char __b) { 218 return (vector signed char)__a + __b; 219} 220 221static __inline__ vector signed char __ATTRS_o_ai 222vec_add(vector signed char __a, vector bool char __b) { 223 return __a + (vector signed char)__b; 224} 225 226static __inline__ vector unsigned char __ATTRS_o_ai 227vec_add(vector unsigned char __a, vector unsigned char __b) { 228 return __a + __b; 229} 230 231static __inline__ vector unsigned char __ATTRS_o_ai 232vec_add(vector bool char __a, vector unsigned char __b) { 233 return (vector unsigned char)__a + __b; 234} 235 236static __inline__ vector unsigned char __ATTRS_o_ai 237vec_add(vector unsigned char __a, vector bool char __b) { 238 return __a + (vector unsigned char)__b; 239} 240 241static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a, 242 vector short __b) { 243 return __a + __b; 244} 245 246static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a, 247 vector short __b) { 248 return (vector short)__a + __b; 249} 250 251static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a, 252 vector bool short __b) { 253 return __a + (vector short)__b; 254} 255 256static __inline__ vector unsigned short __ATTRS_o_ai 257vec_add(vector unsigned short __a, vector unsigned short __b) { 258 return __a + __b; 259} 260 261static __inline__ vector unsigned short __ATTRS_o_ai 262vec_add(vector bool short __a, vector unsigned short __b) { 263 return (vector unsigned short)__a + __b; 264} 265 266static __inline__ vector unsigned short __ATTRS_o_ai 267vec_add(vector unsigned short __a, vector bool short __b) { 268 return __a + (vector unsigned short)__b; 269} 270 271static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a, 272 vector int __b) { 273 return __a + __b; 274} 275 276static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a, 277 vector int __b) { 278 return (vector int)__a + __b; 279} 280 281static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a, 282 vector bool int __b) { 283 return __a + (vector int)__b; 284} 285 286static __inline__ vector unsigned int __ATTRS_o_ai 287vec_add(vector unsigned int __a, vector unsigned int __b) { 288 return __a + __b; 289} 290 291static __inline__ vector unsigned int __ATTRS_o_ai 292vec_add(vector bool int __a, vector unsigned int __b) { 293 return (vector unsigned int)__a + __b; 294} 295 296static __inline__ vector unsigned int __ATTRS_o_ai 297vec_add(vector unsigned int __a, vector bool int __b) { 298 return __a + (vector unsigned int)__b; 299} 300 301#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 302static __inline__ vector signed long long __ATTRS_o_ai 303vec_add(vector signed long long __a, vector signed long long __b) { 304 return __a + __b; 305} 306 307static __inline__ vector unsigned long long __ATTRS_o_ai 308vec_add(vector unsigned long long __a, vector unsigned long long __b) { 309 return __a + __b; 310} 311 312static __inline__ vector signed __int128 __ATTRS_o_ai 313vec_add(vector signed __int128 __a, vector signed __int128 __b) { 314 return __a + __b; 315} 316 317static __inline__ vector unsigned __int128 __ATTRS_o_ai 318vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) { 319 return __a + __b; 320} 321#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) 322 323static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a, 324 vector float __b) { 325 return __a + __b; 326} 327 328#ifdef __VSX__ 329static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a, 330 vector double __b) { 331 return __a + __b; 332} 333#endif // __VSX__ 334 335/* vec_adde */ 336 337#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 338static __inline__ vector signed __int128 __ATTRS_o_ai 339vec_adde(vector signed __int128 __a, vector signed __int128 __b, 340 vector signed __int128 __c) { 341 return __builtin_altivec_vaddeuqm(__a, __b, __c); 342} 343 344static __inline__ vector unsigned __int128 __ATTRS_o_ai 345vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b, 346 vector unsigned __int128 __c) { 347 return __builtin_altivec_vaddeuqm(__a, __b, __c); 348} 349#endif 350 351static __inline__ vector signed int __ATTRS_o_ai 352vec_adde(vector signed int __a, vector signed int __b, 353 vector signed int __c) { 354 vector signed int __mask = {1, 1, 1, 1}; 355 vector signed int __carry = __c & __mask; 356 return vec_add(vec_add(__a, __b), __carry); 357} 358 359static __inline__ vector unsigned int __ATTRS_o_ai 360vec_adde(vector unsigned int __a, vector unsigned int __b, 361 vector unsigned int __c) { 362 vector unsigned int __mask = {1, 1, 1, 1}; 363 vector unsigned int __carry = __c & __mask; 364 return vec_add(vec_add(__a, __b), __carry); 365} 366 367/* vec_addec */ 368 369#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 370static __inline__ vector signed __int128 __ATTRS_o_ai 371vec_addec(vector signed __int128 __a, vector signed __int128 __b, 372 vector signed __int128 __c) { 373 return __builtin_altivec_vaddecuq(__a, __b, __c); 374} 375 376static __inline__ vector unsigned __int128 __ATTRS_o_ai 377vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b, 378 vector unsigned __int128 __c) { 379 return __builtin_altivec_vaddecuq(__a, __b, __c); 380} 381 382static __inline__ vector signed int __ATTRS_o_ai 383vec_addec(vector signed int __a, vector signed int __b, 384 vector signed int __c) { 385 386 signed int __result[4]; 387 for (int i = 0; i < 4; i++) { 388 unsigned int __tempa = (unsigned int) __a[i]; 389 unsigned int __tempb = (unsigned int) __b[i]; 390 unsigned int __tempc = (unsigned int) __c[i]; 391 __tempc = __tempc & 0x00000001; 392 unsigned long long __longa = (unsigned long long) __tempa; 393 unsigned long long __longb = (unsigned long long) __tempb; 394 unsigned long long __longc = (unsigned long long) __tempc; 395 unsigned long long __sum = __longa + __longb + __longc; 396 unsigned long long __res = (__sum >> 32) & 0x01; 397 unsigned long long __tempres = (unsigned int) __res; 398 __result[i] = (signed int) __tempres; 399 } 400 401 vector signed int ret = { __result[0], __result[1], __result[2], __result[3] }; 402 return ret; 403} 404 405static __inline__ vector unsigned int __ATTRS_o_ai 406vec_addec(vector unsigned int __a, vector unsigned int __b, 407 vector unsigned int __c) { 408 409 unsigned int __result[4]; 410 for (int i = 0; i < 4; i++) { 411 unsigned int __tempc = __c[i] & 1; 412 unsigned long long __longa = (unsigned long long) __a[i]; 413 unsigned long long __longb = (unsigned long long) __b[i]; 414 unsigned long long __longc = (unsigned long long) __tempc; 415 unsigned long long __sum = __longa + __longb + __longc; 416 unsigned long long __res = (__sum >> 32) & 0x01; 417 unsigned long long __tempres = (unsigned int) __res; 418 __result[i] = (signed int) __tempres; 419 } 420 421 vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] }; 422 return ret; 423} 424 425#endif 426 427/* vec_vaddubm */ 428 429#define __builtin_altivec_vaddubm vec_vaddubm 430 431static __inline__ vector signed char __ATTRS_o_ai 432vec_vaddubm(vector signed char __a, vector signed char __b) { 433 return __a + __b; 434} 435 436static __inline__ vector signed char __ATTRS_o_ai 437vec_vaddubm(vector bool char __a, vector signed char __b) { 438 return (vector signed char)__a + __b; 439} 440 441static __inline__ vector signed char __ATTRS_o_ai 442vec_vaddubm(vector signed char __a, vector bool char __b) { 443 return __a + (vector signed char)__b; 444} 445 446static __inline__ vector unsigned char __ATTRS_o_ai 447vec_vaddubm(vector unsigned char __a, vector unsigned char __b) { 448 return __a + __b; 449} 450 451static __inline__ vector unsigned char __ATTRS_o_ai 452vec_vaddubm(vector bool char __a, vector unsigned char __b) { 453 return (vector unsigned char)__a + __b; 454} 455 456static __inline__ vector unsigned char __ATTRS_o_ai 457vec_vaddubm(vector unsigned char __a, vector bool char __b) { 458 return __a + (vector unsigned char)__b; 459} 460 461/* vec_vadduhm */ 462 463#define __builtin_altivec_vadduhm vec_vadduhm 464 465static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a, 466 vector short __b) { 467 return __a + __b; 468} 469 470static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a, 471 vector short __b) { 472 return (vector short)__a + __b; 473} 474 475static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a, 476 vector bool short __b) { 477 return __a + (vector short)__b; 478} 479 480static __inline__ vector unsigned short __ATTRS_o_ai 481vec_vadduhm(vector unsigned short __a, vector unsigned short __b) { 482 return __a + __b; 483} 484 485static __inline__ vector unsigned short __ATTRS_o_ai 486vec_vadduhm(vector bool short __a, vector unsigned short __b) { 487 return (vector unsigned short)__a + __b; 488} 489 490static __inline__ vector unsigned short __ATTRS_o_ai 491vec_vadduhm(vector unsigned short __a, vector bool short __b) { 492 return __a + (vector unsigned short)__b; 493} 494 495/* vec_vadduwm */ 496 497#define __builtin_altivec_vadduwm vec_vadduwm 498 499static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a, 500 vector int __b) { 501 return __a + __b; 502} 503 504static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a, 505 vector int __b) { 506 return (vector int)__a + __b; 507} 508 509static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a, 510 vector bool int __b) { 511 return __a + (vector int)__b; 512} 513 514static __inline__ vector unsigned int __ATTRS_o_ai 515vec_vadduwm(vector unsigned int __a, vector unsigned int __b) { 516 return __a + __b; 517} 518 519static __inline__ vector unsigned int __ATTRS_o_ai 520vec_vadduwm(vector bool int __a, vector unsigned int __b) { 521 return (vector unsigned int)__a + __b; 522} 523 524static __inline__ vector unsigned int __ATTRS_o_ai 525vec_vadduwm(vector unsigned int __a, vector bool int __b) { 526 return __a + (vector unsigned int)__b; 527} 528 529/* vec_vaddfp */ 530 531#define __builtin_altivec_vaddfp vec_vaddfp 532 533static __inline__ vector float __attribute__((__always_inline__)) 534vec_vaddfp(vector float __a, vector float __b) { 535 return __a + __b; 536} 537 538/* vec_addc */ 539 540static __inline__ vector signed int __ATTRS_o_ai 541vec_addc(vector signed int __a, vector signed int __b) { 542 return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a, 543 (vector unsigned int)__b); 544} 545 546static __inline__ vector unsigned int __ATTRS_o_ai 547vec_addc(vector unsigned int __a, vector unsigned int __b) { 548 return __builtin_altivec_vaddcuw(__a, __b); 549} 550 551#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 552static __inline__ vector signed __int128 __ATTRS_o_ai 553vec_addc(vector signed __int128 __a, vector signed __int128 __b) { 554 return (vector signed __int128)__builtin_altivec_vaddcuq( 555 (vector unsigned __int128)__a, (vector unsigned __int128)__b); 556} 557 558static __inline__ vector unsigned __int128 __ATTRS_o_ai 559vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) { 560 return __builtin_altivec_vaddcuq(__a, __b); 561} 562#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) 563 564/* vec_vaddcuw */ 565 566static __inline__ vector unsigned int __attribute__((__always_inline__)) 567vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) { 568 return __builtin_altivec_vaddcuw(__a, __b); 569} 570 571/* vec_adds */ 572 573static __inline__ vector signed char __ATTRS_o_ai 574vec_adds(vector signed char __a, vector signed char __b) { 575 return __builtin_altivec_vaddsbs(__a, __b); 576} 577 578static __inline__ vector signed char __ATTRS_o_ai 579vec_adds(vector bool char __a, vector signed char __b) { 580 return __builtin_altivec_vaddsbs((vector signed char)__a, __b); 581} 582 583static __inline__ vector signed char __ATTRS_o_ai 584vec_adds(vector signed char __a, vector bool char __b) { 585 return __builtin_altivec_vaddsbs(__a, (vector signed char)__b); 586} 587 588static __inline__ vector unsigned char __ATTRS_o_ai 589vec_adds(vector unsigned char __a, vector unsigned char __b) { 590 return __builtin_altivec_vaddubs(__a, __b); 591} 592 593static __inline__ vector unsigned char __ATTRS_o_ai 594vec_adds(vector bool char __a, vector unsigned char __b) { 595 return __builtin_altivec_vaddubs((vector unsigned char)__a, __b); 596} 597 598static __inline__ vector unsigned char __ATTRS_o_ai 599vec_adds(vector unsigned char __a, vector bool char __b) { 600 return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b); 601} 602 603static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a, 604 vector short __b) { 605 return __builtin_altivec_vaddshs(__a, __b); 606} 607 608static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a, 609 vector short __b) { 610 return __builtin_altivec_vaddshs((vector short)__a, __b); 611} 612 613static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a, 614 vector bool short __b) { 615 return __builtin_altivec_vaddshs(__a, (vector short)__b); 616} 617 618static __inline__ vector unsigned short __ATTRS_o_ai 619vec_adds(vector unsigned short __a, vector unsigned short __b) { 620 return __builtin_altivec_vadduhs(__a, __b); 621} 622 623static __inline__ vector unsigned short __ATTRS_o_ai 624vec_adds(vector bool short __a, vector unsigned short __b) { 625 return __builtin_altivec_vadduhs((vector unsigned short)__a, __b); 626} 627 628static __inline__ vector unsigned short __ATTRS_o_ai 629vec_adds(vector unsigned short __a, vector bool short __b) { 630 return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b); 631} 632 633static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a, 634 vector int __b) { 635 return __builtin_altivec_vaddsws(__a, __b); 636} 637 638static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a, 639 vector int __b) { 640 return __builtin_altivec_vaddsws((vector int)__a, __b); 641} 642 643static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a, 644 vector bool int __b) { 645 return __builtin_altivec_vaddsws(__a, (vector int)__b); 646} 647 648static __inline__ vector unsigned int __ATTRS_o_ai 649vec_adds(vector unsigned int __a, vector unsigned int __b) { 650 return __builtin_altivec_vadduws(__a, __b); 651} 652 653static __inline__ vector unsigned int __ATTRS_o_ai 654vec_adds(vector bool int __a, vector unsigned int __b) { 655 return __builtin_altivec_vadduws((vector unsigned int)__a, __b); 656} 657 658static __inline__ vector unsigned int __ATTRS_o_ai 659vec_adds(vector unsigned int __a, vector bool int __b) { 660 return __builtin_altivec_vadduws(__a, (vector unsigned int)__b); 661} 662 663/* vec_vaddsbs */ 664 665static __inline__ vector signed char __ATTRS_o_ai 666vec_vaddsbs(vector signed char __a, vector signed char __b) { 667 return __builtin_altivec_vaddsbs(__a, __b); 668} 669 670static __inline__ vector signed char __ATTRS_o_ai 671vec_vaddsbs(vector bool char __a, vector signed char __b) { 672 return __builtin_altivec_vaddsbs((vector signed char)__a, __b); 673} 674 675static __inline__ vector signed char __ATTRS_o_ai 676vec_vaddsbs(vector signed char __a, vector bool char __b) { 677 return __builtin_altivec_vaddsbs(__a, (vector signed char)__b); 678} 679 680/* vec_vaddubs */ 681 682static __inline__ vector unsigned char __ATTRS_o_ai 683vec_vaddubs(vector unsigned char __a, vector unsigned char __b) { 684 return __builtin_altivec_vaddubs(__a, __b); 685} 686 687static __inline__ vector unsigned char __ATTRS_o_ai 688vec_vaddubs(vector bool char __a, vector unsigned char __b) { 689 return __builtin_altivec_vaddubs((vector unsigned char)__a, __b); 690} 691 692static __inline__ vector unsigned char __ATTRS_o_ai 693vec_vaddubs(vector unsigned char __a, vector bool char __b) { 694 return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b); 695} 696 697/* vec_vaddshs */ 698 699static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a, 700 vector short __b) { 701 return __builtin_altivec_vaddshs(__a, __b); 702} 703 704static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a, 705 vector short __b) { 706 return __builtin_altivec_vaddshs((vector short)__a, __b); 707} 708 709static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a, 710 vector bool short __b) { 711 return __builtin_altivec_vaddshs(__a, (vector short)__b); 712} 713 714/* vec_vadduhs */ 715 716static __inline__ vector unsigned short __ATTRS_o_ai 717vec_vadduhs(vector unsigned short __a, vector unsigned short __b) { 718 return __builtin_altivec_vadduhs(__a, __b); 719} 720 721static __inline__ vector unsigned short __ATTRS_o_ai 722vec_vadduhs(vector bool short __a, vector unsigned short __b) { 723 return __builtin_altivec_vadduhs((vector unsigned short)__a, __b); 724} 725 726static __inline__ vector unsigned short __ATTRS_o_ai 727vec_vadduhs(vector unsigned short __a, vector bool short __b) { 728 return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b); 729} 730 731/* vec_vaddsws */ 732 733static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a, 734 vector int __b) { 735 return __builtin_altivec_vaddsws(__a, __b); 736} 737 738static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a, 739 vector int __b) { 740 return __builtin_altivec_vaddsws((vector int)__a, __b); 741} 742 743static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a, 744 vector bool int __b) { 745 return __builtin_altivec_vaddsws(__a, (vector int)__b); 746} 747 748/* vec_vadduws */ 749 750static __inline__ vector unsigned int __ATTRS_o_ai 751vec_vadduws(vector unsigned int __a, vector unsigned int __b) { 752 return __builtin_altivec_vadduws(__a, __b); 753} 754 755static __inline__ vector unsigned int __ATTRS_o_ai 756vec_vadduws(vector bool int __a, vector unsigned int __b) { 757 return __builtin_altivec_vadduws((vector unsigned int)__a, __b); 758} 759 760static __inline__ vector unsigned int __ATTRS_o_ai 761vec_vadduws(vector unsigned int __a, vector bool int __b) { 762 return __builtin_altivec_vadduws(__a, (vector unsigned int)__b); 763} 764 765#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 766/* vec_vadduqm */ 767 768static __inline__ vector signed __int128 __ATTRS_o_ai 769vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) { 770 return __a + __b; 771} 772 773static __inline__ vector unsigned __int128 __ATTRS_o_ai 774vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) { 775 return __a + __b; 776} 777 778/* vec_vaddeuqm */ 779 780static __inline__ vector signed __int128 __ATTRS_o_ai 781vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b, 782 vector signed __int128 __c) { 783 return __builtin_altivec_vaddeuqm(__a, __b, __c); 784} 785 786static __inline__ vector unsigned __int128 __ATTRS_o_ai 787vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b, 788 vector unsigned __int128 __c) { 789 return __builtin_altivec_vaddeuqm(__a, __b, __c); 790} 791 792/* vec_vaddcuq */ 793 794static __inline__ vector signed __int128 __ATTRS_o_ai 795vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) { 796 return __builtin_altivec_vaddcuq(__a, __b); 797} 798 799static __inline__ vector unsigned __int128 __ATTRS_o_ai 800vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) { 801 return __builtin_altivec_vaddcuq(__a, __b); 802} 803 804/* vec_vaddecuq */ 805 806static __inline__ vector signed __int128 __ATTRS_o_ai 807vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b, 808 vector signed __int128 __c) { 809 return __builtin_altivec_vaddecuq(__a, __b, __c); 810} 811 812static __inline__ vector unsigned __int128 __ATTRS_o_ai 813vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b, 814 vector unsigned __int128 __c) { 815 return __builtin_altivec_vaddecuq(__a, __b, __c); 816} 817#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) 818 819/* vec_and */ 820 821#define __builtin_altivec_vand vec_and 822 823static __inline__ vector signed char __ATTRS_o_ai 824vec_and(vector signed char __a, vector signed char __b) { 825 return __a & __b; 826} 827 828static __inline__ vector signed char __ATTRS_o_ai 829vec_and(vector bool char __a, vector signed char __b) { 830 return (vector signed char)__a & __b; 831} 832 833static __inline__ vector signed char __ATTRS_o_ai 834vec_and(vector signed char __a, vector bool char __b) { 835 return __a & (vector signed char)__b; 836} 837 838static __inline__ vector unsigned char __ATTRS_o_ai 839vec_and(vector unsigned char __a, vector unsigned char __b) { 840 return __a & __b; 841} 842 843static __inline__ vector unsigned char __ATTRS_o_ai 844vec_and(vector bool char __a, vector unsigned char __b) { 845 return (vector unsigned char)__a & __b; 846} 847 848static __inline__ vector unsigned char __ATTRS_o_ai 849vec_and(vector unsigned char __a, vector bool char __b) { 850 return __a & (vector unsigned char)__b; 851} 852 853static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a, 854 vector bool char __b) { 855 return __a & __b; 856} 857 858static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a, 859 vector short __b) { 860 return __a & __b; 861} 862 863static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a, 864 vector short __b) { 865 return (vector short)__a & __b; 866} 867 868static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a, 869 vector bool short __b) { 870 return __a & (vector short)__b; 871} 872 873static __inline__ vector unsigned short __ATTRS_o_ai 874vec_and(vector unsigned short __a, vector unsigned short __b) { 875 return __a & __b; 876} 877 878static __inline__ vector unsigned short __ATTRS_o_ai 879vec_and(vector bool short __a, vector unsigned short __b) { 880 return (vector unsigned short)__a & __b; 881} 882 883static __inline__ vector unsigned short __ATTRS_o_ai 884vec_and(vector unsigned short __a, vector bool short __b) { 885 return __a & (vector unsigned short)__b; 886} 887 888static __inline__ vector bool short __ATTRS_o_ai 889vec_and(vector bool short __a, vector bool short __b) { 890 return __a & __b; 891} 892 893static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a, 894 vector int __b) { 895 return __a & __b; 896} 897 898static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a, 899 vector int __b) { 900 return (vector int)__a & __b; 901} 902 903static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a, 904 vector bool int __b) { 905 return __a & (vector int)__b; 906} 907 908static __inline__ vector unsigned int __ATTRS_o_ai 909vec_and(vector unsigned int __a, vector unsigned int __b) { 910 return __a & __b; 911} 912 913static __inline__ vector unsigned int __ATTRS_o_ai 914vec_and(vector bool int __a, vector unsigned int __b) { 915 return (vector unsigned int)__a & __b; 916} 917 918static __inline__ vector unsigned int __ATTRS_o_ai 919vec_and(vector unsigned int __a, vector bool int __b) { 920 return __a & (vector unsigned int)__b; 921} 922 923static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a, 924 vector bool int __b) { 925 return __a & __b; 926} 927 928static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a, 929 vector float __b) { 930 vector unsigned int __res = 931 (vector unsigned int)__a & (vector unsigned int)__b; 932 return (vector float)__res; 933} 934 935static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a, 936 vector float __b) { 937 vector unsigned int __res = 938 (vector unsigned int)__a & (vector unsigned int)__b; 939 return (vector float)__res; 940} 941 942static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a, 943 vector bool int __b) { 944 vector unsigned int __res = 945 (vector unsigned int)__a & (vector unsigned int)__b; 946 return (vector float)__res; 947} 948 949#ifdef __VSX__ 950static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a, 951 vector double __b) { 952 vector unsigned long long __res = 953 (vector unsigned long long)__a & (vector unsigned long long)__b; 954 return (vector double)__res; 955} 956 957static __inline__ vector double __ATTRS_o_ai 958vec_and(vector double __a, vector bool long long __b) { 959 vector unsigned long long __res = 960 (vector unsigned long long)__a & (vector unsigned long long)__b; 961 return (vector double)__res; 962} 963 964static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a, 965 vector double __b) { 966 vector unsigned long long __res = 967 (vector unsigned long long)__a & (vector unsigned long long)__b; 968 return (vector double)__res; 969} 970 971static __inline__ vector signed long long __ATTRS_o_ai 972vec_and(vector signed long long __a, vector signed long long __b) { 973 return __a & __b; 974} 975 976static __inline__ vector signed long long __ATTRS_o_ai 977vec_and(vector bool long long __a, vector signed long long __b) { 978 return (vector signed long long)__a & __b; 979} 980 981static __inline__ vector signed long long __ATTRS_o_ai 982vec_and(vector signed long long __a, vector bool long long __b) { 983 return __a & (vector signed long long)__b; 984} 985 986static __inline__ vector unsigned long long __ATTRS_o_ai 987vec_and(vector unsigned long long __a, vector unsigned long long __b) { 988 return __a & __b; 989} 990 991static __inline__ vector unsigned long long __ATTRS_o_ai 992vec_and(vector bool long long __a, vector unsigned long long __b) { 993 return (vector unsigned long long)__a & __b; 994} 995 996static __inline__ vector unsigned long long __ATTRS_o_ai 997vec_and(vector unsigned long long __a, vector bool long long __b) { 998 return __a & (vector unsigned long long)__b; 999} 1000 1001static __inline__ vector bool long long __ATTRS_o_ai 1002vec_and(vector bool long long __a, vector bool long long __b) { 1003 return __a & __b; 1004} 1005#endif 1006 1007/* vec_vand */ 1008 1009static __inline__ vector signed char __ATTRS_o_ai 1010vec_vand(vector signed char __a, vector signed char __b) { 1011 return __a & __b; 1012} 1013 1014static __inline__ vector signed char __ATTRS_o_ai 1015vec_vand(vector bool char __a, vector signed char __b) { 1016 return (vector signed char)__a & __b; 1017} 1018 1019static __inline__ vector signed char __ATTRS_o_ai 1020vec_vand(vector signed char __a, vector bool char __b) { 1021 return __a & (vector signed char)__b; 1022} 1023 1024static __inline__ vector unsigned char __ATTRS_o_ai 1025vec_vand(vector unsigned char __a, vector unsigned char __b) { 1026 return __a & __b; 1027} 1028 1029static __inline__ vector unsigned char __ATTRS_o_ai 1030vec_vand(vector bool char __a, vector unsigned char __b) { 1031 return (vector unsigned char)__a & __b; 1032} 1033 1034static __inline__ vector unsigned char __ATTRS_o_ai 1035vec_vand(vector unsigned char __a, vector bool char __b) { 1036 return __a & (vector unsigned char)__b; 1037} 1038 1039static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a, 1040 vector bool char __b) { 1041 return __a & __b; 1042} 1043 1044static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a, 1045 vector short __b) { 1046 return __a & __b; 1047} 1048 1049static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a, 1050 vector short __b) { 1051 return (vector short)__a & __b; 1052} 1053 1054static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a, 1055 vector bool short __b) { 1056 return __a & (vector short)__b; 1057} 1058 1059static __inline__ vector unsigned short __ATTRS_o_ai 1060vec_vand(vector unsigned short __a, vector unsigned short __b) { 1061 return __a & __b; 1062} 1063 1064static __inline__ vector unsigned short __ATTRS_o_ai 1065vec_vand(vector bool short __a, vector unsigned short __b) { 1066 return (vector unsigned short)__a & __b; 1067} 1068 1069static __inline__ vector unsigned short __ATTRS_o_ai 1070vec_vand(vector unsigned short __a, vector bool short __b) { 1071 return __a & (vector unsigned short)__b; 1072} 1073 1074static __inline__ vector bool short __ATTRS_o_ai 1075vec_vand(vector bool short __a, vector bool short __b) { 1076 return __a & __b; 1077} 1078 1079static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a, 1080 vector int __b) { 1081 return __a & __b; 1082} 1083 1084static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a, 1085 vector int __b) { 1086 return (vector int)__a & __b; 1087} 1088 1089static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a, 1090 vector bool int __b) { 1091 return __a & (vector int)__b; 1092} 1093 1094static __inline__ vector unsigned int __ATTRS_o_ai 1095vec_vand(vector unsigned int __a, vector unsigned int __b) { 1096 return __a & __b; 1097} 1098 1099static __inline__ vector unsigned int __ATTRS_o_ai 1100vec_vand(vector bool int __a, vector unsigned int __b) { 1101 return (vector unsigned int)__a & __b; 1102} 1103 1104static __inline__ vector unsigned int __ATTRS_o_ai 1105vec_vand(vector unsigned int __a, vector bool int __b) { 1106 return __a & (vector unsigned int)__b; 1107} 1108 1109static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a, 1110 vector bool int __b) { 1111 return __a & __b; 1112} 1113 1114static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a, 1115 vector float __b) { 1116 vector unsigned int __res = 1117 (vector unsigned int)__a & (vector unsigned int)__b; 1118 return (vector float)__res; 1119} 1120 1121static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a, 1122 vector float __b) { 1123 vector unsigned int __res = 1124 (vector unsigned int)__a & (vector unsigned int)__b; 1125 return (vector float)__res; 1126} 1127 1128static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a, 1129 vector bool int __b) { 1130 vector unsigned int __res = 1131 (vector unsigned int)__a & (vector unsigned int)__b; 1132 return (vector float)__res; 1133} 1134 1135#ifdef __VSX__ 1136static __inline__ vector signed long long __ATTRS_o_ai 1137vec_vand(vector signed long long __a, vector signed long long __b) { 1138 return __a & __b; 1139} 1140 1141static __inline__ vector signed long long __ATTRS_o_ai 1142vec_vand(vector bool long long __a, vector signed long long __b) { 1143 return (vector signed long long)__a & __b; 1144} 1145 1146static __inline__ vector signed long long __ATTRS_o_ai 1147vec_vand(vector signed long long __a, vector bool long long __b) { 1148 return __a & (vector signed long long)__b; 1149} 1150 1151static __inline__ vector unsigned long long __ATTRS_o_ai 1152vec_vand(vector unsigned long long __a, vector unsigned long long __b) { 1153 return __a & __b; 1154} 1155 1156static __inline__ vector unsigned long long __ATTRS_o_ai 1157vec_vand(vector bool long long __a, vector unsigned long long __b) { 1158 return (vector unsigned long long)__a & __b; 1159} 1160 1161static __inline__ vector unsigned long long __ATTRS_o_ai 1162vec_vand(vector unsigned long long __a, vector bool long long __b) { 1163 return __a & (vector unsigned long long)__b; 1164} 1165 1166static __inline__ vector bool long long __ATTRS_o_ai 1167vec_vand(vector bool long long __a, vector bool long long __b) { 1168 return __a & __b; 1169} 1170#endif 1171 1172/* vec_andc */ 1173 1174#define __builtin_altivec_vandc vec_andc 1175 1176static __inline__ vector signed char __ATTRS_o_ai 1177vec_andc(vector signed char __a, vector signed char __b) { 1178 return __a & ~__b; 1179} 1180 1181static __inline__ vector signed char __ATTRS_o_ai 1182vec_andc(vector bool char __a, vector signed char __b) { 1183 return (vector signed char)__a & ~__b; 1184} 1185 1186static __inline__ vector signed char __ATTRS_o_ai 1187vec_andc(vector signed char __a, vector bool char __b) { 1188 return __a & ~(vector signed char)__b; 1189} 1190 1191static __inline__ vector unsigned char __ATTRS_o_ai 1192vec_andc(vector unsigned char __a, vector unsigned char __b) { 1193 return __a & ~__b; 1194} 1195 1196static __inline__ vector unsigned char __ATTRS_o_ai 1197vec_andc(vector bool char __a, vector unsigned char __b) { 1198 return (vector unsigned char)__a & ~__b; 1199} 1200 1201static __inline__ vector unsigned char __ATTRS_o_ai 1202vec_andc(vector unsigned char __a, vector bool char __b) { 1203 return __a & ~(vector unsigned char)__b; 1204} 1205 1206static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a, 1207 vector bool char __b) { 1208 return __a & ~__b; 1209} 1210 1211static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a, 1212 vector short __b) { 1213 return __a & ~__b; 1214} 1215 1216static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a, 1217 vector short __b) { 1218 return (vector short)__a & ~__b; 1219} 1220 1221static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a, 1222 vector bool short __b) { 1223 return __a & ~(vector short)__b; 1224} 1225 1226static __inline__ vector unsigned short __ATTRS_o_ai 1227vec_andc(vector unsigned short __a, vector unsigned short __b) { 1228 return __a & ~__b; 1229} 1230 1231static __inline__ vector unsigned short __ATTRS_o_ai 1232vec_andc(vector bool short __a, vector unsigned short __b) { 1233 return (vector unsigned short)__a & ~__b; 1234} 1235 1236static __inline__ vector unsigned short __ATTRS_o_ai 1237vec_andc(vector unsigned short __a, vector bool short __b) { 1238 return __a & ~(vector unsigned short)__b; 1239} 1240 1241static __inline__ vector bool short __ATTRS_o_ai 1242vec_andc(vector bool short __a, vector bool short __b) { 1243 return __a & ~__b; 1244} 1245 1246static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a, 1247 vector int __b) { 1248 return __a & ~__b; 1249} 1250 1251static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a, 1252 vector int __b) { 1253 return (vector int)__a & ~__b; 1254} 1255 1256static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a, 1257 vector bool int __b) { 1258 return __a & ~(vector int)__b; 1259} 1260 1261static __inline__ vector unsigned int __ATTRS_o_ai 1262vec_andc(vector unsigned int __a, vector unsigned int __b) { 1263 return __a & ~__b; 1264} 1265 1266static __inline__ vector unsigned int __ATTRS_o_ai 1267vec_andc(vector bool int __a, vector unsigned int __b) { 1268 return (vector unsigned int)__a & ~__b; 1269} 1270 1271static __inline__ vector unsigned int __ATTRS_o_ai 1272vec_andc(vector unsigned int __a, vector bool int __b) { 1273 return __a & ~(vector unsigned int)__b; 1274} 1275 1276static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a, 1277 vector bool int __b) { 1278 return __a & ~__b; 1279} 1280 1281static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a, 1282 vector float __b) { 1283 vector unsigned int __res = 1284 (vector unsigned int)__a & ~(vector unsigned int)__b; 1285 return (vector float)__res; 1286} 1287 1288static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a, 1289 vector float __b) { 1290 vector unsigned int __res = 1291 (vector unsigned int)__a & ~(vector unsigned int)__b; 1292 return (vector float)__res; 1293} 1294 1295static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a, 1296 vector bool int __b) { 1297 vector unsigned int __res = 1298 (vector unsigned int)__a & ~(vector unsigned int)__b; 1299 return (vector float)__res; 1300} 1301 1302#ifdef __VSX__ 1303static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a, 1304 vector double __b) { 1305 vector unsigned long long __res = 1306 (vector unsigned long long)__a & ~(vector unsigned long long)__b; 1307 return (vector double)__res; 1308} 1309 1310static __inline__ vector double __ATTRS_o_ai 1311vec_andc(vector double __a, vector bool long long __b) { 1312 vector unsigned long long __res = 1313 (vector unsigned long long)__a & ~(vector unsigned long long)__b; 1314 return (vector double)__res; 1315} 1316 1317static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a, 1318 vector double __b) { 1319 vector unsigned long long __res = 1320 (vector unsigned long long)__a & ~(vector unsigned long long)__b; 1321 return (vector double)__res; 1322} 1323 1324static __inline__ vector signed long long __ATTRS_o_ai 1325vec_andc(vector signed long long __a, vector signed long long __b) { 1326 return __a & ~__b; 1327} 1328 1329static __inline__ vector signed long long __ATTRS_o_ai 1330vec_andc(vector bool long long __a, vector signed long long __b) { 1331 return (vector signed long long)__a & ~__b; 1332} 1333 1334static __inline__ vector signed long long __ATTRS_o_ai 1335vec_andc(vector signed long long __a, vector bool long long __b) { 1336 return __a & ~(vector signed long long)__b; 1337} 1338 1339static __inline__ vector unsigned long long __ATTRS_o_ai 1340vec_andc(vector unsigned long long __a, vector unsigned long long __b) { 1341 return __a & ~__b; 1342} 1343 1344static __inline__ vector unsigned long long __ATTRS_o_ai 1345vec_andc(vector bool long long __a, vector unsigned long long __b) { 1346 return (vector unsigned long long)__a & ~__b; 1347} 1348 1349static __inline__ vector unsigned long long __ATTRS_o_ai 1350vec_andc(vector unsigned long long __a, vector bool long long __b) { 1351 return __a & ~(vector unsigned long long)__b; 1352} 1353 1354static __inline__ vector bool long long __ATTRS_o_ai 1355vec_andc(vector bool long long __a, vector bool long long __b) { 1356 return __a & ~__b; 1357} 1358#endif 1359 1360/* vec_vandc */ 1361 1362static __inline__ vector signed char __ATTRS_o_ai 1363vec_vandc(vector signed char __a, vector signed char __b) { 1364 return __a & ~__b; 1365} 1366 1367static __inline__ vector signed char __ATTRS_o_ai 1368vec_vandc(vector bool char __a, vector signed char __b) { 1369 return (vector signed char)__a & ~__b; 1370} 1371 1372static __inline__ vector signed char __ATTRS_o_ai 1373vec_vandc(vector signed char __a, vector bool char __b) { 1374 return __a & ~(vector signed char)__b; 1375} 1376 1377static __inline__ vector unsigned char __ATTRS_o_ai 1378vec_vandc(vector unsigned char __a, vector unsigned char __b) { 1379 return __a & ~__b; 1380} 1381 1382static __inline__ vector unsigned char __ATTRS_o_ai 1383vec_vandc(vector bool char __a, vector unsigned char __b) { 1384 return (vector unsigned char)__a & ~__b; 1385} 1386 1387static __inline__ vector unsigned char __ATTRS_o_ai 1388vec_vandc(vector unsigned char __a, vector bool char __b) { 1389 return __a & ~(vector unsigned char)__b; 1390} 1391 1392static __inline__ vector bool char __ATTRS_o_ai 1393vec_vandc(vector bool char __a, vector bool char __b) { 1394 return __a & ~__b; 1395} 1396 1397static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a, 1398 vector short __b) { 1399 return __a & ~__b; 1400} 1401 1402static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a, 1403 vector short __b) { 1404 return (vector short)__a & ~__b; 1405} 1406 1407static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a, 1408 vector bool short __b) { 1409 return __a & ~(vector short)__b; 1410} 1411 1412static __inline__ vector unsigned short __ATTRS_o_ai 1413vec_vandc(vector unsigned short __a, vector unsigned short __b) { 1414 return __a & ~__b; 1415} 1416 1417static __inline__ vector unsigned short __ATTRS_o_ai 1418vec_vandc(vector bool short __a, vector unsigned short __b) { 1419 return (vector unsigned short)__a & ~__b; 1420} 1421 1422static __inline__ vector unsigned short __ATTRS_o_ai 1423vec_vandc(vector unsigned short __a, vector bool short __b) { 1424 return __a & ~(vector unsigned short)__b; 1425} 1426 1427static __inline__ vector bool short __ATTRS_o_ai 1428vec_vandc(vector bool short __a, vector bool short __b) { 1429 return __a & ~__b; 1430} 1431 1432static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a, 1433 vector int __b) { 1434 return __a & ~__b; 1435} 1436 1437static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a, 1438 vector int __b) { 1439 return (vector int)__a & ~__b; 1440} 1441 1442static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a, 1443 vector bool int __b) { 1444 return __a & ~(vector int)__b; 1445} 1446 1447static __inline__ vector unsigned int __ATTRS_o_ai 1448vec_vandc(vector unsigned int __a, vector unsigned int __b) { 1449 return __a & ~__b; 1450} 1451 1452static __inline__ vector unsigned int __ATTRS_o_ai 1453vec_vandc(vector bool int __a, vector unsigned int __b) { 1454 return (vector unsigned int)__a & ~__b; 1455} 1456 1457static __inline__ vector unsigned int __ATTRS_o_ai 1458vec_vandc(vector unsigned int __a, vector bool int __b) { 1459 return __a & ~(vector unsigned int)__b; 1460} 1461 1462static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a, 1463 vector bool int __b) { 1464 return __a & ~__b; 1465} 1466 1467static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a, 1468 vector float __b) { 1469 vector unsigned int __res = 1470 (vector unsigned int)__a & ~(vector unsigned int)__b; 1471 return (vector float)__res; 1472} 1473 1474static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a, 1475 vector float __b) { 1476 vector unsigned int __res = 1477 (vector unsigned int)__a & ~(vector unsigned int)__b; 1478 return (vector float)__res; 1479} 1480 1481static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a, 1482 vector bool int __b) { 1483 vector unsigned int __res = 1484 (vector unsigned int)__a & ~(vector unsigned int)__b; 1485 return (vector float)__res; 1486} 1487 1488#ifdef __VSX__ 1489static __inline__ vector signed long long __ATTRS_o_ai 1490vec_vandc(vector signed long long __a, vector signed long long __b) { 1491 return __a & ~__b; 1492} 1493 1494static __inline__ vector signed long long __ATTRS_o_ai 1495vec_vandc(vector bool long long __a, vector signed long long __b) { 1496 return (vector signed long long)__a & ~__b; 1497} 1498 1499static __inline__ vector signed long long __ATTRS_o_ai 1500vec_vandc(vector signed long long __a, vector bool long long __b) { 1501 return __a & ~(vector signed long long)__b; 1502} 1503 1504static __inline__ vector unsigned long long __ATTRS_o_ai 1505vec_vandc(vector unsigned long long __a, vector unsigned long long __b) { 1506 return __a & ~__b; 1507} 1508 1509static __inline__ vector unsigned long long __ATTRS_o_ai 1510vec_vandc(vector bool long long __a, vector unsigned long long __b) { 1511 return (vector unsigned long long)__a & ~__b; 1512} 1513 1514static __inline__ vector unsigned long long __ATTRS_o_ai 1515vec_vandc(vector unsigned long long __a, vector bool long long __b) { 1516 return __a & ~(vector unsigned long long)__b; 1517} 1518 1519static __inline__ vector bool long long __ATTRS_o_ai 1520vec_vandc(vector bool long long __a, vector bool long long __b) { 1521 return __a & ~__b; 1522} 1523#endif 1524 1525/* vec_avg */ 1526 1527static __inline__ vector signed char __ATTRS_o_ai 1528vec_avg(vector signed char __a, vector signed char __b) { 1529 return __builtin_altivec_vavgsb(__a, __b); 1530} 1531 1532static __inline__ vector unsigned char __ATTRS_o_ai 1533vec_avg(vector unsigned char __a, vector unsigned char __b) { 1534 return __builtin_altivec_vavgub(__a, __b); 1535} 1536 1537static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a, 1538 vector short __b) { 1539 return __builtin_altivec_vavgsh(__a, __b); 1540} 1541 1542static __inline__ vector unsigned short __ATTRS_o_ai 1543vec_avg(vector unsigned short __a, vector unsigned short __b) { 1544 return __builtin_altivec_vavguh(__a, __b); 1545} 1546 1547static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a, 1548 vector int __b) { 1549 return __builtin_altivec_vavgsw(__a, __b); 1550} 1551 1552static __inline__ vector unsigned int __ATTRS_o_ai 1553vec_avg(vector unsigned int __a, vector unsigned int __b) { 1554 return __builtin_altivec_vavguw(__a, __b); 1555} 1556 1557/* vec_vavgsb */ 1558 1559static __inline__ vector signed char __attribute__((__always_inline__)) 1560vec_vavgsb(vector signed char __a, vector signed char __b) { 1561 return __builtin_altivec_vavgsb(__a, __b); 1562} 1563 1564/* vec_vavgub */ 1565 1566static __inline__ vector unsigned char __attribute__((__always_inline__)) 1567vec_vavgub(vector unsigned char __a, vector unsigned char __b) { 1568 return __builtin_altivec_vavgub(__a, __b); 1569} 1570 1571/* vec_vavgsh */ 1572 1573static __inline__ vector short __attribute__((__always_inline__)) 1574vec_vavgsh(vector short __a, vector short __b) { 1575 return __builtin_altivec_vavgsh(__a, __b); 1576} 1577 1578/* vec_vavguh */ 1579 1580static __inline__ vector unsigned short __attribute__((__always_inline__)) 1581vec_vavguh(vector unsigned short __a, vector unsigned short __b) { 1582 return __builtin_altivec_vavguh(__a, __b); 1583} 1584 1585/* vec_vavgsw */ 1586 1587static __inline__ vector int __attribute__((__always_inline__)) 1588vec_vavgsw(vector int __a, vector int __b) { 1589 return __builtin_altivec_vavgsw(__a, __b); 1590} 1591 1592/* vec_vavguw */ 1593 1594static __inline__ vector unsigned int __attribute__((__always_inline__)) 1595vec_vavguw(vector unsigned int __a, vector unsigned int __b) { 1596 return __builtin_altivec_vavguw(__a, __b); 1597} 1598 1599/* vec_ceil */ 1600 1601static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) { 1602#ifdef __VSX__ 1603 return __builtin_vsx_xvrspip(__a); 1604#else 1605 return __builtin_altivec_vrfip(__a); 1606#endif 1607} 1608 1609#ifdef __VSX__ 1610static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) { 1611 return __builtin_vsx_xvrdpip(__a); 1612} 1613#endif 1614 1615/* vec_vrfip */ 1616 1617static __inline__ vector float __attribute__((__always_inline__)) 1618vec_vrfip(vector float __a) { 1619 return __builtin_altivec_vrfip(__a); 1620} 1621 1622/* vec_cmpb */ 1623 1624static __inline__ vector int __attribute__((__always_inline__)) 1625vec_cmpb(vector float __a, vector float __b) { 1626 return __builtin_altivec_vcmpbfp(__a, __b); 1627} 1628 1629/* vec_vcmpbfp */ 1630 1631static __inline__ vector int __attribute__((__always_inline__)) 1632vec_vcmpbfp(vector float __a, vector float __b) { 1633 return __builtin_altivec_vcmpbfp(__a, __b); 1634} 1635 1636/* vec_cmpeq */ 1637 1638static __inline__ vector bool char __ATTRS_o_ai 1639vec_cmpeq(vector signed char __a, vector signed char __b) { 1640 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a, 1641 (vector char)__b); 1642} 1643 1644static __inline__ vector bool char __ATTRS_o_ai 1645vec_cmpeq(vector unsigned char __a, vector unsigned char __b) { 1646 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a, 1647 (vector char)__b); 1648} 1649 1650static __inline__ vector bool char __ATTRS_o_ai 1651vec_cmpeq(vector bool char __a, vector bool char __b) { 1652 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a, 1653 (vector char)__b); 1654} 1655 1656static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a, 1657 vector short __b) { 1658 return (vector bool short)__builtin_altivec_vcmpequh(__a, __b); 1659} 1660 1661static __inline__ vector bool short __ATTRS_o_ai 1662vec_cmpeq(vector unsigned short __a, vector unsigned short __b) { 1663 return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a, 1664 (vector short)__b); 1665} 1666 1667static __inline__ vector bool short __ATTRS_o_ai 1668vec_cmpeq(vector bool short __a, vector bool short __b) { 1669 return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a, 1670 (vector short)__b); 1671} 1672 1673static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a, 1674 vector int __b) { 1675 return (vector bool int)__builtin_altivec_vcmpequw(__a, __b); 1676} 1677 1678static __inline__ vector bool int __ATTRS_o_ai 1679vec_cmpeq(vector unsigned int __a, vector unsigned int __b) { 1680 return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a, 1681 (vector int)__b); 1682} 1683 1684static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a, 1685 vector bool int __b) { 1686 return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a, 1687 (vector int)__b); 1688} 1689 1690#ifdef __POWER8_VECTOR__ 1691static __inline__ vector bool long long __ATTRS_o_ai 1692vec_cmpeq(vector signed long long __a, vector signed long long __b) { 1693 return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b); 1694} 1695 1696static __inline__ vector bool long long __ATTRS_o_ai 1697vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) { 1698 return (vector bool long long)__builtin_altivec_vcmpequd( 1699 (vector long long)__a, (vector long long)__b); 1700} 1701 1702static __inline__ vector bool long long __ATTRS_o_ai 1703vec_cmpeq(vector bool long long __a, vector bool long long __b) { 1704 return (vector bool long long)__builtin_altivec_vcmpequd( 1705 (vector long long)__a, (vector long long)__b); 1706} 1707 1708#endif 1709 1710static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a, 1711 vector float __b) { 1712#ifdef __VSX__ 1713 return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b); 1714#else 1715 return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b); 1716#endif 1717} 1718 1719#ifdef __VSX__ 1720static __inline__ vector bool long long __ATTRS_o_ai 1721vec_cmpeq(vector double __a, vector double __b) { 1722 return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b); 1723} 1724#endif 1725 1726#ifdef __POWER9_VECTOR__ 1727/* vec_cmpne */ 1728 1729static __inline__ vector bool char __ATTRS_o_ai 1730vec_cmpne(vector bool char __a, vector bool char __b) { 1731 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a, 1732 (vector char)__b); 1733} 1734 1735static __inline__ vector bool char __ATTRS_o_ai 1736vec_cmpne(vector signed char __a, vector signed char __b) { 1737 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a, 1738 (vector char)__b); 1739} 1740 1741static __inline__ vector bool char __ATTRS_o_ai 1742vec_cmpne(vector unsigned char __a, vector unsigned char __b) { 1743 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a, 1744 (vector char)__b); 1745} 1746 1747static __inline__ vector bool short __ATTRS_o_ai 1748vec_cmpne(vector bool short __a, vector bool short __b) { 1749 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a, 1750 (vector short)__b); 1751} 1752 1753static __inline__ vector bool short __ATTRS_o_ai 1754vec_cmpne(vector signed short __a, vector signed short __b) { 1755 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a, 1756 (vector short)__b); 1757} 1758 1759static __inline__ vector bool short __ATTRS_o_ai 1760vec_cmpne(vector unsigned short __a, vector unsigned short __b) { 1761 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a, 1762 (vector short)__b); 1763} 1764 1765static __inline__ vector bool int __ATTRS_o_ai 1766vec_cmpne(vector bool int __a, vector bool int __b) { 1767 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a, 1768 (vector int)__b); 1769} 1770 1771static __inline__ vector bool int __ATTRS_o_ai 1772vec_cmpne(vector signed int __a, vector signed int __b) { 1773 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a, 1774 (vector int)__b); 1775} 1776 1777static __inline__ vector bool int __ATTRS_o_ai 1778vec_cmpne(vector unsigned int __a, vector unsigned int __b) { 1779 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a, 1780 (vector int)__b); 1781} 1782 1783static __inline__ vector bool long long __ATTRS_o_ai 1784vec_cmpne(vector bool long long __a, vector bool long long __b) { 1785 return (vector bool long long) 1786 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b)); 1787} 1788 1789static __inline__ vector bool long long __ATTRS_o_ai 1790vec_cmpne(vector signed long long __a, vector signed long long __b) { 1791 return (vector bool long long) 1792 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b)); 1793} 1794 1795static __inline__ vector bool long long __ATTRS_o_ai 1796vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) { 1797 return (vector bool long long) 1798 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b)); 1799} 1800 1801static __inline__ vector bool int __ATTRS_o_ai 1802vec_cmpne(vector float __a, vector float __b) { 1803 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a, 1804 (vector int)__b); 1805} 1806 1807static __inline__ vector bool long long __ATTRS_o_ai 1808vec_cmpne(vector double __a, vector double __b) { 1809 return (vector bool long long) 1810 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b)); 1811} 1812 1813/* vec_cmpnez */ 1814 1815static __inline__ vector bool char __ATTRS_o_ai 1816vec_cmpnez(vector signed char __a, vector signed char __b) { 1817 return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a, 1818 (vector char)__b); 1819} 1820 1821static __inline__ vector bool char __ATTRS_o_ai 1822vec_cmpnez(vector unsigned char __a, vector unsigned char __b) { 1823 return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a, 1824 (vector char)__b); 1825} 1826 1827static __inline__ vector bool short __ATTRS_o_ai 1828vec_cmpnez(vector signed short __a, vector signed short __b) { 1829 return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a, 1830 (vector short)__b); 1831} 1832 1833static __inline__ vector bool short __ATTRS_o_ai 1834vec_cmpnez(vector unsigned short __a, vector unsigned short __b) { 1835 return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a, 1836 (vector short)__b); 1837} 1838 1839static __inline__ vector bool int __ATTRS_o_ai 1840vec_cmpnez(vector signed int __a, vector signed int __b) { 1841 return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a, 1842 (vector int)__b); 1843} 1844 1845static __inline__ vector bool int __ATTRS_o_ai 1846vec_cmpnez(vector unsigned int __a, vector unsigned int __b) { 1847 return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a, 1848 (vector int)__b); 1849} 1850 1851static __inline__ signed int __ATTRS_o_ai 1852vec_cntlz_lsbb(vector signed char __a) { 1853#ifdef __LITTLE_ENDIAN__ 1854 return __builtin_altivec_vctzlsbb(__a); 1855#else 1856 return __builtin_altivec_vclzlsbb(__a); 1857#endif 1858} 1859 1860static __inline__ signed int __ATTRS_o_ai 1861vec_cntlz_lsbb(vector unsigned char __a) { 1862#ifdef __LITTLE_ENDIAN__ 1863 return __builtin_altivec_vctzlsbb(__a); 1864#else 1865 return __builtin_altivec_vclzlsbb(__a); 1866#endif 1867} 1868 1869static __inline__ signed int __ATTRS_o_ai 1870vec_cnttz_lsbb(vector signed char __a) { 1871#ifdef __LITTLE_ENDIAN__ 1872 return __builtin_altivec_vclzlsbb(__a); 1873#else 1874 return __builtin_altivec_vctzlsbb(__a); 1875#endif 1876} 1877 1878static __inline__ signed int __ATTRS_o_ai 1879vec_cnttz_lsbb(vector unsigned char __a) { 1880#ifdef __LITTLE_ENDIAN__ 1881 return __builtin_altivec_vclzlsbb(__a); 1882#else 1883 return __builtin_altivec_vctzlsbb(__a); 1884#endif 1885} 1886 1887static __inline__ vector unsigned int __ATTRS_o_ai 1888vec_parity_lsbb(vector unsigned int __a) { 1889 return __builtin_altivec_vprtybw(__a); 1890} 1891 1892static __inline__ vector unsigned int __ATTRS_o_ai 1893vec_parity_lsbb(vector signed int __a) { 1894 return __builtin_altivec_vprtybw(__a); 1895} 1896 1897static __inline__ vector unsigned __int128 __ATTRS_o_ai 1898vec_parity_lsbb(vector unsigned __int128 __a) { 1899 return __builtin_altivec_vprtybq(__a); 1900} 1901 1902static __inline__ vector unsigned __int128 __ATTRS_o_ai 1903vec_parity_lsbb(vector signed __int128 __a) { 1904 return __builtin_altivec_vprtybq(__a); 1905} 1906 1907static __inline__ vector unsigned long long __ATTRS_o_ai 1908vec_parity_lsbb(vector unsigned long long __a) { 1909 return __builtin_altivec_vprtybd(__a); 1910} 1911 1912static __inline__ vector unsigned long long __ATTRS_o_ai 1913vec_parity_lsbb(vector signed long long __a) { 1914 return __builtin_altivec_vprtybd(__a); 1915} 1916 1917#endif 1918 1919/* vec_cmpgt */ 1920 1921static __inline__ vector bool char __ATTRS_o_ai 1922vec_cmpgt(vector signed char __a, vector signed char __b) { 1923 return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b); 1924} 1925 1926static __inline__ vector bool char __ATTRS_o_ai 1927vec_cmpgt(vector unsigned char __a, vector unsigned char __b) { 1928 return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b); 1929} 1930 1931static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a, 1932 vector short __b) { 1933 return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b); 1934} 1935 1936static __inline__ vector bool short __ATTRS_o_ai 1937vec_cmpgt(vector unsigned short __a, vector unsigned short __b) { 1938 return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b); 1939} 1940 1941static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a, 1942 vector int __b) { 1943 return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b); 1944} 1945 1946static __inline__ vector bool int __ATTRS_o_ai 1947vec_cmpgt(vector unsigned int __a, vector unsigned int __b) { 1948 return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b); 1949} 1950 1951#ifdef __POWER8_VECTOR__ 1952static __inline__ vector bool long long __ATTRS_o_ai 1953vec_cmpgt(vector signed long long __a, vector signed long long __b) { 1954 return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b); 1955} 1956 1957static __inline__ vector bool long long __ATTRS_o_ai 1958vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) { 1959 return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b); 1960} 1961#endif 1962 1963static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a, 1964 vector float __b) { 1965#ifdef __VSX__ 1966 return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b); 1967#else 1968 return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b); 1969#endif 1970} 1971 1972#ifdef __VSX__ 1973static __inline__ vector bool long long __ATTRS_o_ai 1974vec_cmpgt(vector double __a, vector double __b) { 1975 return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b); 1976} 1977#endif 1978 1979/* vec_cmpge */ 1980 1981static __inline__ vector bool char __ATTRS_o_ai 1982vec_cmpge(vector signed char __a, vector signed char __b) { 1983 return ~(vec_cmpgt(__b, __a)); 1984} 1985 1986static __inline__ vector bool char __ATTRS_o_ai 1987vec_cmpge(vector unsigned char __a, vector unsigned char __b) { 1988 return ~(vec_cmpgt(__b, __a)); 1989} 1990 1991static __inline__ vector bool short __ATTRS_o_ai 1992vec_cmpge(vector signed short __a, vector signed short __b) { 1993 return ~(vec_cmpgt(__b, __a)); 1994} 1995 1996static __inline__ vector bool short __ATTRS_o_ai 1997vec_cmpge(vector unsigned short __a, vector unsigned short __b) { 1998 return ~(vec_cmpgt(__b, __a)); 1999} 2000 2001static __inline__ vector bool int __ATTRS_o_ai 2002vec_cmpge(vector signed int __a, vector signed int __b) { 2003 return ~(vec_cmpgt(__b, __a)); 2004} 2005 2006static __inline__ vector bool int __ATTRS_o_ai 2007vec_cmpge(vector unsigned int __a, vector unsigned int __b) { 2008 return ~(vec_cmpgt(__b, __a)); 2009} 2010 2011static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a, 2012 vector float __b) { 2013#ifdef __VSX__ 2014 return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b); 2015#else 2016 return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b); 2017#endif 2018} 2019 2020#ifdef __VSX__ 2021static __inline__ vector bool long long __ATTRS_o_ai 2022vec_cmpge(vector double __a, vector double __b) { 2023 return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b); 2024} 2025#endif 2026 2027#ifdef __POWER8_VECTOR__ 2028static __inline__ vector bool long long __ATTRS_o_ai 2029vec_cmpge(vector signed long long __a, vector signed long long __b) { 2030 return ~(vec_cmpgt(__b, __a)); 2031} 2032 2033static __inline__ vector bool long long __ATTRS_o_ai 2034vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) { 2035 return ~(vec_cmpgt(__b, __a)); 2036} 2037#endif 2038 2039/* vec_vcmpgefp */ 2040 2041static __inline__ vector bool int __attribute__((__always_inline__)) 2042vec_vcmpgefp(vector float __a, vector float __b) { 2043 return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b); 2044} 2045 2046/* vec_vcmpgtsb */ 2047 2048static __inline__ vector bool char __attribute__((__always_inline__)) 2049vec_vcmpgtsb(vector signed char __a, vector signed char __b) { 2050 return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b); 2051} 2052 2053/* vec_vcmpgtub */ 2054 2055static __inline__ vector bool char __attribute__((__always_inline__)) 2056vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) { 2057 return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b); 2058} 2059 2060/* vec_vcmpgtsh */ 2061 2062static __inline__ vector bool short __attribute__((__always_inline__)) 2063vec_vcmpgtsh(vector short __a, vector short __b) { 2064 return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b); 2065} 2066 2067/* vec_vcmpgtuh */ 2068 2069static __inline__ vector bool short __attribute__((__always_inline__)) 2070vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) { 2071 return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b); 2072} 2073 2074/* vec_vcmpgtsw */ 2075 2076static __inline__ vector bool int __attribute__((__always_inline__)) 2077vec_vcmpgtsw(vector int __a, vector int __b) { 2078 return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b); 2079} 2080 2081/* vec_vcmpgtuw */ 2082 2083static __inline__ vector bool int __attribute__((__always_inline__)) 2084vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) { 2085 return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b); 2086} 2087 2088/* vec_vcmpgtfp */ 2089 2090static __inline__ vector bool int __attribute__((__always_inline__)) 2091vec_vcmpgtfp(vector float __a, vector float __b) { 2092 return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b); 2093} 2094 2095/* vec_cmple */ 2096 2097static __inline__ vector bool char __ATTRS_o_ai 2098vec_cmple(vector signed char __a, vector signed char __b) { 2099 return vec_cmpge(__b, __a); 2100} 2101 2102static __inline__ vector bool char __ATTRS_o_ai 2103vec_cmple(vector unsigned char __a, vector unsigned char __b) { 2104 return vec_cmpge(__b, __a); 2105} 2106 2107static __inline__ vector bool short __ATTRS_o_ai 2108vec_cmple(vector signed short __a, vector signed short __b) { 2109 return vec_cmpge(__b, __a); 2110} 2111 2112static __inline__ vector bool short __ATTRS_o_ai 2113vec_cmple(vector unsigned short __a, vector unsigned short __b) { 2114 return vec_cmpge(__b, __a); 2115} 2116 2117static __inline__ vector bool int __ATTRS_o_ai 2118vec_cmple(vector signed int __a, vector signed int __b) { 2119 return vec_cmpge(__b, __a); 2120} 2121 2122static __inline__ vector bool int __ATTRS_o_ai 2123vec_cmple(vector unsigned int __a, vector unsigned int __b) { 2124 return vec_cmpge(__b, __a); 2125} 2126 2127static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a, 2128 vector float __b) { 2129 return vec_cmpge(__b, __a); 2130} 2131 2132#ifdef __VSX__ 2133static __inline__ vector bool long long __ATTRS_o_ai 2134vec_cmple(vector double __a, vector double __b) { 2135 return vec_cmpge(__b, __a); 2136} 2137#endif 2138 2139#ifdef __POWER8_VECTOR__ 2140static __inline__ vector bool long long __ATTRS_o_ai 2141vec_cmple(vector signed long long __a, vector signed long long __b) { 2142 return vec_cmpge(__b, __a); 2143} 2144 2145static __inline__ vector bool long long __ATTRS_o_ai 2146vec_cmple(vector unsigned long long __a, vector unsigned long long __b) { 2147 return vec_cmpge(__b, __a); 2148} 2149#endif 2150 2151/* vec_cmplt */ 2152 2153static __inline__ vector bool char __ATTRS_o_ai 2154vec_cmplt(vector signed char __a, vector signed char __b) { 2155 return vec_cmpgt(__b, __a); 2156} 2157 2158static __inline__ vector bool char __ATTRS_o_ai 2159vec_cmplt(vector unsigned char __a, vector unsigned char __b) { 2160 return vec_cmpgt(__b, __a); 2161} 2162 2163static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a, 2164 vector short __b) { 2165 return vec_cmpgt(__b, __a); 2166} 2167 2168static __inline__ vector bool short __ATTRS_o_ai 2169vec_cmplt(vector unsigned short __a, vector unsigned short __b) { 2170 return vec_cmpgt(__b, __a); 2171} 2172 2173static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a, 2174 vector int __b) { 2175 return vec_cmpgt(__b, __a); 2176} 2177 2178static __inline__ vector bool int __ATTRS_o_ai 2179vec_cmplt(vector unsigned int __a, vector unsigned int __b) { 2180 return vec_cmpgt(__b, __a); 2181} 2182 2183static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a, 2184 vector float __b) { 2185 return vec_cmpgt(__b, __a); 2186} 2187 2188#ifdef __VSX__ 2189static __inline__ vector bool long long __ATTRS_o_ai 2190vec_cmplt(vector double __a, vector double __b) { 2191 return vec_cmpgt(__b, __a); 2192} 2193#endif 2194 2195#ifdef __POWER8_VECTOR__ 2196static __inline__ vector bool long long __ATTRS_o_ai 2197vec_cmplt(vector signed long long __a, vector signed long long __b) { 2198 return vec_cmpgt(__b, __a); 2199} 2200 2201static __inline__ vector bool long long __ATTRS_o_ai 2202vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) { 2203 return vec_cmpgt(__b, __a); 2204} 2205 2206/* vec_popcnt */ 2207 2208static __inline__ vector signed char __ATTRS_o_ai 2209vec_popcnt(vector signed char __a) { 2210 return __builtin_altivec_vpopcntb(__a); 2211} 2212static __inline__ vector unsigned char __ATTRS_o_ai 2213vec_popcnt(vector unsigned char __a) { 2214 return __builtin_altivec_vpopcntb(__a); 2215} 2216static __inline__ vector signed short __ATTRS_o_ai 2217vec_popcnt(vector signed short __a) { 2218 return __builtin_altivec_vpopcnth(__a); 2219} 2220static __inline__ vector unsigned short __ATTRS_o_ai 2221vec_popcnt(vector unsigned short __a) { 2222 return __builtin_altivec_vpopcnth(__a); 2223} 2224static __inline__ vector signed int __ATTRS_o_ai 2225vec_popcnt(vector signed int __a) { 2226 return __builtin_altivec_vpopcntw(__a); 2227} 2228static __inline__ vector unsigned int __ATTRS_o_ai 2229vec_popcnt(vector unsigned int __a) { 2230 return __builtin_altivec_vpopcntw(__a); 2231} 2232static __inline__ vector signed long long __ATTRS_o_ai 2233vec_popcnt(vector signed long long __a) { 2234 return __builtin_altivec_vpopcntd(__a); 2235} 2236static __inline__ vector unsigned long long __ATTRS_o_ai 2237vec_popcnt(vector unsigned long long __a) { 2238 return __builtin_altivec_vpopcntd(__a); 2239} 2240 2241/* vec_cntlz */ 2242 2243static __inline__ vector signed char __ATTRS_o_ai 2244vec_cntlz(vector signed char __a) { 2245 return __builtin_altivec_vclzb(__a); 2246} 2247static __inline__ vector unsigned char __ATTRS_o_ai 2248vec_cntlz(vector unsigned char __a) { 2249 return __builtin_altivec_vclzb(__a); 2250} 2251static __inline__ vector signed short __ATTRS_o_ai 2252vec_cntlz(vector signed short __a) { 2253 return __builtin_altivec_vclzh(__a); 2254} 2255static __inline__ vector unsigned short __ATTRS_o_ai 2256vec_cntlz(vector unsigned short __a) { 2257 return __builtin_altivec_vclzh(__a); 2258} 2259static __inline__ vector signed int __ATTRS_o_ai 2260vec_cntlz(vector signed int __a) { 2261 return __builtin_altivec_vclzw(__a); 2262} 2263static __inline__ vector unsigned int __ATTRS_o_ai 2264vec_cntlz(vector unsigned int __a) { 2265 return __builtin_altivec_vclzw(__a); 2266} 2267static __inline__ vector signed long long __ATTRS_o_ai 2268vec_cntlz(vector signed long long __a) { 2269 return __builtin_altivec_vclzd(__a); 2270} 2271static __inline__ vector unsigned long long __ATTRS_o_ai 2272vec_cntlz(vector unsigned long long __a) { 2273 return __builtin_altivec_vclzd(__a); 2274} 2275#endif 2276 2277#ifdef __POWER9_VECTOR__ 2278 2279/* vec_cnttz */ 2280 2281static __inline__ vector signed char __ATTRS_o_ai 2282vec_cnttz(vector signed char __a) { 2283 return __builtin_altivec_vctzb(__a); 2284} 2285static __inline__ vector unsigned char __ATTRS_o_ai 2286vec_cnttz(vector unsigned char __a) { 2287 return __builtin_altivec_vctzb(__a); 2288} 2289static __inline__ vector signed short __ATTRS_o_ai 2290vec_cnttz(vector signed short __a) { 2291 return __builtin_altivec_vctzh(__a); 2292} 2293static __inline__ vector unsigned short __ATTRS_o_ai 2294vec_cnttz(vector unsigned short __a) { 2295 return __builtin_altivec_vctzh(__a); 2296} 2297static __inline__ vector signed int __ATTRS_o_ai 2298vec_cnttz(vector signed int __a) { 2299 return __builtin_altivec_vctzw(__a); 2300} 2301static __inline__ vector unsigned int __ATTRS_o_ai 2302vec_cnttz(vector unsigned int __a) { 2303 return __builtin_altivec_vctzw(__a); 2304} 2305static __inline__ vector signed long long __ATTRS_o_ai 2306vec_cnttz(vector signed long long __a) { 2307 return __builtin_altivec_vctzd(__a); 2308} 2309static __inline__ vector unsigned long long __ATTRS_o_ai 2310vec_cnttz(vector unsigned long long __a) { 2311 return __builtin_altivec_vctzd(__a); 2312} 2313 2314/* vec_first_match_index */ 2315 2316static __inline__ unsigned __ATTRS_o_ai 2317vec_first_match_index(vector signed char __a, vector signed char __b) { 2318 vector unsigned long long __res = 2319#ifdef __LITTLE_ENDIAN__ 2320 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b)); 2321#else 2322 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b)); 2323#endif 2324 if (__res[0] == 64) { 2325 return (__res[1] + 64) >> 3; 2326 } 2327 return __res[0] >> 3; 2328} 2329 2330static __inline__ unsigned __ATTRS_o_ai 2331vec_first_match_index(vector unsigned char __a, vector unsigned char __b) { 2332 vector unsigned long long __res = 2333#ifdef __LITTLE_ENDIAN__ 2334 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b)); 2335#else 2336 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b)); 2337#endif 2338 if (__res[0] == 64) { 2339 return (__res[1] + 64) >> 3; 2340 } 2341 return __res[0] >> 3; 2342} 2343 2344static __inline__ unsigned __ATTRS_o_ai 2345vec_first_match_index(vector signed short __a, vector signed short __b) { 2346 vector unsigned long long __res = 2347#ifdef __LITTLE_ENDIAN__ 2348 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b)); 2349#else 2350 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b)); 2351#endif 2352 if (__res[0] == 64) { 2353 return (__res[1] + 64) >> 4; 2354 } 2355 return __res[0] >> 4; 2356} 2357 2358static __inline__ unsigned __ATTRS_o_ai 2359vec_first_match_index(vector unsigned short __a, vector unsigned short __b) { 2360 vector unsigned long long __res = 2361#ifdef __LITTLE_ENDIAN__ 2362 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b)); 2363#else 2364 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b)); 2365#endif 2366 if (__res[0] == 64) { 2367 return (__res[1] + 64) >> 4; 2368 } 2369 return __res[0] >> 4; 2370} 2371 2372static __inline__ unsigned __ATTRS_o_ai 2373vec_first_match_index(vector signed int __a, vector signed int __b) { 2374 vector unsigned long long __res = 2375#ifdef __LITTLE_ENDIAN__ 2376 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b)); 2377#else 2378 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b)); 2379#endif 2380 if (__res[0] == 64) { 2381 return (__res[1] + 64) >> 5; 2382 } 2383 return __res[0] >> 5; 2384} 2385 2386static __inline__ unsigned __ATTRS_o_ai 2387vec_first_match_index(vector unsigned int __a, vector unsigned int __b) { 2388 vector unsigned long long __res = 2389#ifdef __LITTLE_ENDIAN__ 2390 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b)); 2391#else 2392 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b)); 2393#endif 2394 if (__res[0] == 64) { 2395 return (__res[1] + 64) >> 5; 2396 } 2397 return __res[0] >> 5; 2398} 2399 2400/* vec_first_match_or_eos_index */ 2401 2402static __inline__ unsigned __ATTRS_o_ai 2403vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) { 2404 /* Compare the result of the comparison of two vectors with either and OR the 2405 result. Either the elements are equal or one will equal the comparison 2406 result if either is zero. 2407 */ 2408 vector bool char __tmp1 = vec_cmpeq(__a, __b); 2409 vector bool char __tmp2 = __tmp1 | 2410 vec_cmpeq((vector signed char)__tmp1, __a) | 2411 vec_cmpeq((vector signed char)__tmp1, __b); 2412 2413 vector unsigned long long __res = 2414#ifdef __LITTLE_ENDIAN__ 2415 vec_cnttz((vector unsigned long long)__tmp2); 2416#else 2417 vec_cntlz((vector unsigned long long)__tmp2); 2418#endif 2419 if (__res[0] == 64) { 2420 return (__res[1] + 64) >> 3; 2421 } 2422 return __res[0] >> 3; 2423} 2424 2425static __inline__ unsigned __ATTRS_o_ai 2426vec_first_match_or_eos_index(vector unsigned char __a, 2427 vector unsigned char __b) { 2428 vector bool char __tmp1 = vec_cmpeq(__a, __b); 2429 vector bool char __tmp2 = __tmp1 | 2430 vec_cmpeq((vector unsigned char)__tmp1, __a) | 2431 vec_cmpeq((vector unsigned char)__tmp1, __b); 2432 2433 vector unsigned long long __res = 2434#ifdef __LITTLE_ENDIAN__ 2435 vec_cnttz((vector unsigned long long)__tmp2); 2436#else 2437 vec_cntlz((vector unsigned long long)__tmp2); 2438#endif 2439 if (__res[0] == 64) { 2440 return (__res[1] + 64) >> 3; 2441 } 2442 return __res[0] >> 3; 2443} 2444 2445static __inline__ unsigned __ATTRS_o_ai 2446vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) { 2447 vector bool short __tmp1 = vec_cmpeq(__a, __b); 2448 vector bool short __tmp2 = __tmp1 | 2449 vec_cmpeq((vector signed short)__tmp1, __a) | 2450 vec_cmpeq((vector signed short)__tmp1, __b); 2451 2452 vector unsigned long long __res = 2453#ifdef __LITTLE_ENDIAN__ 2454 vec_cnttz((vector unsigned long long)__tmp2); 2455#else 2456 vec_cntlz((vector unsigned long long)__tmp2); 2457#endif 2458 if (__res[0] == 64) { 2459 return (__res[1] + 64) >> 4; 2460 } 2461 return __res[0] >> 4; 2462} 2463 2464static __inline__ unsigned __ATTRS_o_ai 2465vec_first_match_or_eos_index(vector unsigned short __a, 2466 vector unsigned short __b) { 2467 vector bool short __tmp1 = vec_cmpeq(__a, __b); 2468 vector bool short __tmp2 = __tmp1 | 2469 vec_cmpeq((vector unsigned short)__tmp1, __a) | 2470 vec_cmpeq((vector unsigned short)__tmp1, __b); 2471 2472 vector unsigned long long __res = 2473#ifdef __LITTLE_ENDIAN__ 2474 vec_cnttz((vector unsigned long long)__tmp2); 2475#else 2476 vec_cntlz((vector unsigned long long)__tmp2); 2477#endif 2478 if (__res[0] == 64) { 2479 return (__res[1] + 64) >> 4; 2480 } 2481 return __res[0] >> 4; 2482} 2483 2484static __inline__ unsigned __ATTRS_o_ai 2485vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) { 2486 vector bool int __tmp1 = vec_cmpeq(__a, __b); 2487 vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) | 2488 vec_cmpeq((vector signed int)__tmp1, __b); 2489 2490 vector unsigned long long __res = 2491#ifdef __LITTLE_ENDIAN__ 2492 vec_cnttz((vector unsigned long long)__tmp2); 2493#else 2494 vec_cntlz((vector unsigned long long)__tmp2); 2495#endif 2496 if (__res[0] == 64) { 2497 return (__res[1] + 64) >> 5; 2498 } 2499 return __res[0] >> 5; 2500} 2501 2502static __inline__ unsigned __ATTRS_o_ai 2503vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) { 2504 vector bool int __tmp1 = vec_cmpeq(__a, __b); 2505 vector bool int __tmp2 = __tmp1 | 2506 vec_cmpeq((vector unsigned int)__tmp1, __a) | 2507 vec_cmpeq((vector unsigned int)__tmp1, __b); 2508 2509 vector unsigned long long __res = 2510#ifdef __LITTLE_ENDIAN__ 2511 vec_cnttz((vector unsigned long long)__tmp2); 2512#else 2513 vec_cntlz((vector unsigned long long)__tmp2); 2514#endif 2515 if (__res[0] == 64) { 2516 return (__res[1] + 64) >> 5; 2517 } 2518 return __res[0] >> 5; 2519} 2520 2521/* vec_first_mismatch_index */ 2522 2523static __inline__ unsigned __ATTRS_o_ai 2524vec_first_mismatch_index(vector signed char __a, vector signed char __b) { 2525 vector unsigned long long __res = 2526#ifdef __LITTLE_ENDIAN__ 2527 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b)); 2528#else 2529 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b)); 2530#endif 2531 if (__res[0] == 64) { 2532 return (__res[1] + 64) >> 3; 2533 } 2534 return __res[0] >> 3; 2535} 2536 2537static __inline__ unsigned __ATTRS_o_ai 2538vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) { 2539 vector unsigned long long __res = 2540#ifdef __LITTLE_ENDIAN__ 2541 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b)); 2542#else 2543 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b)); 2544#endif 2545 if (__res[0] == 64) { 2546 return (__res[1] + 64) >> 3; 2547 } 2548 return __res[0] >> 3; 2549} 2550 2551static __inline__ unsigned __ATTRS_o_ai 2552vec_first_mismatch_index(vector signed short __a, vector signed short __b) { 2553 vector unsigned long long __res = 2554#ifdef __LITTLE_ENDIAN__ 2555 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b)); 2556#else 2557 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b)); 2558#endif 2559 if (__res[0] == 64) { 2560 return (__res[1] + 64) >> 4; 2561 } 2562 return __res[0] >> 4; 2563} 2564 2565static __inline__ unsigned __ATTRS_o_ai 2566vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) { 2567 vector unsigned long long __res = 2568#ifdef __LITTLE_ENDIAN__ 2569 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b)); 2570#else 2571 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b)); 2572#endif 2573 if (__res[0] == 64) { 2574 return (__res[1] + 64) >> 4; 2575 } 2576 return __res[0] >> 4; 2577} 2578 2579static __inline__ unsigned __ATTRS_o_ai 2580vec_first_mismatch_index(vector signed int __a, vector signed int __b) { 2581 vector unsigned long long __res = 2582#ifdef __LITTLE_ENDIAN__ 2583 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b)); 2584#else 2585 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b)); 2586#endif 2587 if (__res[0] == 64) { 2588 return (__res[1] + 64) >> 5; 2589 } 2590 return __res[0] >> 5; 2591} 2592 2593static __inline__ unsigned __ATTRS_o_ai 2594vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) { 2595 vector unsigned long long __res = 2596#ifdef __LITTLE_ENDIAN__ 2597 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b)); 2598#else 2599 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b)); 2600#endif 2601 if (__res[0] == 64) { 2602 return (__res[1] + 64) >> 5; 2603 } 2604 return __res[0] >> 5; 2605} 2606 2607/* vec_first_mismatch_or_eos_index */ 2608 2609static __inline__ unsigned __ATTRS_o_ai 2610vec_first_mismatch_or_eos_index(vector signed char __a, 2611 vector signed char __b) { 2612 vector unsigned long long __res = 2613#ifdef __LITTLE_ENDIAN__ 2614 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b)); 2615#else 2616 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b)); 2617#endif 2618 if (__res[0] == 64) { 2619 return (__res[1] + 64) >> 3; 2620 } 2621 return __res[0] >> 3; 2622} 2623 2624static __inline__ unsigned __ATTRS_o_ai 2625vec_first_mismatch_or_eos_index(vector unsigned char __a, 2626 vector unsigned char __b) { 2627 vector unsigned long long __res = 2628#ifdef __LITTLE_ENDIAN__ 2629 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b)); 2630#else 2631 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b)); 2632#endif 2633 if (__res[0] == 64) { 2634 return (__res[1] + 64) >> 3; 2635 } 2636 return __res[0] >> 3; 2637} 2638 2639static __inline__ unsigned __ATTRS_o_ai 2640vec_first_mismatch_or_eos_index(vector signed short __a, 2641 vector signed short __b) { 2642 vector unsigned long long __res = 2643#ifdef __LITTLE_ENDIAN__ 2644 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b)); 2645#else 2646 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b)); 2647#endif 2648 if (__res[0] == 64) { 2649 return (__res[1] + 64) >> 4; 2650 } 2651 return __res[0] >> 4; 2652} 2653 2654static __inline__ unsigned __ATTRS_o_ai 2655vec_first_mismatch_or_eos_index(vector unsigned short __a, 2656 vector unsigned short __b) { 2657 vector unsigned long long __res = 2658#ifdef __LITTLE_ENDIAN__ 2659 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b)); 2660#else 2661 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b)); 2662#endif 2663 if (__res[0] == 64) { 2664 return (__res[1] + 64) >> 4; 2665 } 2666 return __res[0] >> 4; 2667} 2668 2669static __inline__ unsigned __ATTRS_o_ai 2670vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) { 2671 vector unsigned long long __res = 2672#ifdef __LITTLE_ENDIAN__ 2673 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b)); 2674#else 2675 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b)); 2676#endif 2677 if (__res[0] == 64) { 2678 return (__res[1] + 64) >> 5; 2679 } 2680 return __res[0] >> 5; 2681} 2682 2683static __inline__ unsigned __ATTRS_o_ai 2684vec_first_mismatch_or_eos_index(vector unsigned int __a, 2685 vector unsigned int __b) { 2686 vector unsigned long long __res = 2687#ifdef __LITTLE_ENDIAN__ 2688 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b)); 2689#else 2690 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b)); 2691#endif 2692 if (__res[0] == 64) { 2693 return (__res[1] + 64) >> 5; 2694 } 2695 return __res[0] >> 5; 2696} 2697 2698static __inline__ vector double __ATTRS_o_ai 2699vec_insert_exp(vector double __a, vector unsigned long long __b) { 2700 return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b); 2701} 2702 2703static __inline__ vector double __ATTRS_o_ai 2704vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) { 2705 return __builtin_vsx_xviexpdp(__a,__b); 2706} 2707 2708static __inline__ vector float __ATTRS_o_ai 2709vec_insert_exp(vector float __a, vector unsigned int __b) { 2710 return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b); 2711} 2712 2713static __inline__ vector float __ATTRS_o_ai 2714vec_insert_exp(vector unsigned int __a, vector unsigned int __b) { 2715 return __builtin_vsx_xviexpsp(__a,__b); 2716} 2717 2718#if defined(__powerpc64__) 2719static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(signed char *__a, 2720 size_t __b) { 2721 return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56)); 2722} 2723 2724static __inline__ vector unsigned char __ATTRS_o_ai 2725vec_xl_len(unsigned char *__a, size_t __b) { 2726 return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56)); 2727} 2728 2729static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(signed short *__a, 2730 size_t __b) { 2731 return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56)); 2732} 2733 2734static __inline__ vector unsigned short __ATTRS_o_ai 2735vec_xl_len(unsigned short *__a, size_t __b) { 2736 return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56)); 2737} 2738 2739static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(signed int *__a, 2740 size_t __b) { 2741 return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56)); 2742} 2743 2744static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(unsigned int *__a, 2745 size_t __b) { 2746 return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56)); 2747} 2748 2749static __inline__ vector float __ATTRS_o_ai vec_xl_len(float *__a, size_t __b) { 2750 return (vector float)__builtin_vsx_lxvl(__a, (__b << 56)); 2751} 2752 2753static __inline__ vector signed __int128 __ATTRS_o_ai 2754vec_xl_len(signed __int128 *__a, size_t __b) { 2755 return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56)); 2756} 2757 2758static __inline__ vector unsigned __int128 __ATTRS_o_ai 2759vec_xl_len(unsigned __int128 *__a, size_t __b) { 2760 return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56)); 2761} 2762 2763static __inline__ vector signed long long __ATTRS_o_ai 2764vec_xl_len(signed long long *__a, size_t __b) { 2765 return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56)); 2766} 2767 2768static __inline__ vector unsigned long long __ATTRS_o_ai 2769vec_xl_len(unsigned long long *__a, size_t __b) { 2770 return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56)); 2771} 2772 2773static __inline__ vector double __ATTRS_o_ai vec_xl_len(double *__a, 2774 size_t __b) { 2775 return (vector double)__builtin_vsx_lxvl(__a, (__b << 56)); 2776} 2777 2778static __inline__ vector double __ATTRS_o_ai vec_xl_len_r(unsigned char *__a, 2779 size_t __b) { 2780 vector unsigned char __res = 2781 (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56)); 2782#ifdef __LITTLE_ENDIAN__ 2783 vector unsigned char __mask = 2784 (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL); 2785 __res = (vector unsigned char)__builtin_altivec_vperm_4si( 2786 (vector int)__res, (vector int)__res, __mask); 2787#endif 2788 return __res; 2789} 2790 2791// vec_xst_len 2792static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a, 2793 unsigned char *__b, 2794 size_t __c) { 2795 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2796} 2797 2798static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a, 2799 signed char *__b, size_t __c) { 2800 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2801} 2802 2803static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a, 2804 signed short *__b, size_t __c) { 2805 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2806} 2807 2808static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a, 2809 unsigned short *__b, 2810 size_t __c) { 2811 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2812} 2813 2814static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a, 2815 signed int *__b, size_t __c) { 2816 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2817} 2818 2819static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a, 2820 unsigned int *__b, size_t __c) { 2821 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2822} 2823 2824static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b, 2825 size_t __c) { 2826 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2827} 2828 2829static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a, 2830 signed __int128 *__b, 2831 size_t __c) { 2832 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2833} 2834 2835static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a, 2836 unsigned __int128 *__b, 2837 size_t __c) { 2838 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2839} 2840 2841static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a, 2842 signed long long *__b, 2843 size_t __c) { 2844 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2845} 2846 2847static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a, 2848 unsigned long long *__b, 2849 size_t __c) { 2850 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2851} 2852 2853static __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b, 2854 size_t __c) { 2855 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56)); 2856} 2857 2858static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a, 2859 unsigned char *__b, 2860 size_t __c) { 2861#ifdef __LITTLE_ENDIAN__ 2862 vector unsigned char __mask = 2863 (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL); 2864 vector unsigned char __res = 2865 __builtin_altivec_vperm_4si((vector int)__a, (vector int)__a, __mask); 2866 return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56)); 2867#else 2868 return __builtin_vsx_stxvll((vector int)__a, __b, (__c << 56)); 2869#endif 2870} 2871#endif 2872#endif 2873 2874/* vec_cpsgn */ 2875 2876#ifdef __VSX__ 2877static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a, 2878 vector float __b) { 2879 return __builtin_vsx_xvcpsgnsp(__a, __b); 2880} 2881 2882static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a, 2883 vector double __b) { 2884 return __builtin_vsx_xvcpsgndp(__a, __b); 2885} 2886#endif 2887 2888/* vec_ctf */ 2889 2890#ifdef __VSX__ 2891#define vec_ctf(__a, __b) \ 2892 _Generic((__a), vector int \ 2893 : (vector float)__builtin_altivec_vcfsx((__a), (__b)), \ 2894 vector unsigned int \ 2895 : (vector float)__builtin_altivec_vcfux((vector int)(__a), (__b)), \ 2896 vector unsigned long long \ 2897 : (__builtin_convertvector((vector unsigned long long)(__a), \ 2898 vector double) * \ 2899 (vector double)(vector unsigned long long)((0x3ffULL - (__b)) \ 2900 << 52)), \ 2901 vector signed long long \ 2902 : (__builtin_convertvector((vector signed long long)(__a), \ 2903 vector double) * \ 2904 (vector double)(vector unsigned long long)((0x3ffULL - (__b)) \ 2905 << 52))) 2906#else 2907#define vec_ctf(__a, __b) \ 2908 _Generic((__a), vector int \ 2909 : (vector float)__builtin_altivec_vcfsx((__a), (__b)), \ 2910 vector unsigned int \ 2911 : (vector float)__builtin_altivec_vcfux((vector int)(__a), (__b))) 2912#endif 2913 2914/* vec_vcfsx */ 2915 2916#define vec_vcfux __builtin_altivec_vcfux 2917 2918/* vec_vcfux */ 2919 2920#define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b)) 2921 2922/* vec_cts */ 2923 2924#ifdef __VSX__ 2925#define vec_cts(__a, __b) \ 2926 _Generic((__a), vector float \ 2927 : __builtin_altivec_vctsxs((__a), (__b)), vector double \ 2928 : __extension__({ \ 2929 vector double __ret = \ 2930 (__a) * \ 2931 (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \ 2932 << 52); \ 2933 __builtin_convertvector(__ret, vector signed long long); \ 2934 })) 2935#else 2936#define vec_cts __builtin_altivec_vctsxs 2937#endif 2938 2939/* vec_vctsxs */ 2940 2941#define vec_vctsxs __builtin_altivec_vctsxs 2942 2943/* vec_ctu */ 2944 2945#ifdef __VSX__ 2946#define vec_ctu(__a, __b) \ 2947 _Generic((__a), vector float \ 2948 : __builtin_altivec_vctuxs((__a), (__b)), vector double \ 2949 : __extension__({ \ 2950 vector double __ret = \ 2951 (__a) * \ 2952 (vector double)(vector unsigned long long)((0x3ffULL + __b) \ 2953 << 52); \ 2954 __builtin_convertvector(__ret, vector unsigned long long); \ 2955 })) 2956#else 2957#define vec_ctu __builtin_altivec_vctuxs 2958#endif 2959 2960/* vec_vctuxs */ 2961 2962#define vec_vctuxs __builtin_altivec_vctuxs 2963 2964/* vec_signed */ 2965 2966static __inline__ vector signed int __ATTRS_o_ai 2967vec_sld(vector signed int, vector signed int, unsigned const int __c); 2968 2969static __inline__ vector signed int __ATTRS_o_ai 2970vec_signed(vector float __a) { 2971 return __builtin_convertvector(__a, vector signed int); 2972} 2973 2974#ifdef __VSX__ 2975static __inline__ vector signed long long __ATTRS_o_ai 2976vec_signed(vector double __a) { 2977 return __builtin_convertvector(__a, vector signed long long); 2978} 2979 2980static __inline__ vector signed int __attribute__((__always_inline__)) 2981vec_signed2(vector double __a, vector double __b) { 2982 return (vector signed int) { __a[0], __a[1], __b[0], __b[1] }; 2983} 2984 2985static __inline__ vector signed int __ATTRS_o_ai 2986vec_signede(vector double __a) { 2987#ifdef __LITTLE_ENDIAN__ 2988 vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a); 2989 return vec_sld(__ret, __ret, 12); 2990#else 2991 return __builtin_vsx_xvcvdpsxws(__a); 2992#endif 2993} 2994 2995static __inline__ vector signed int __ATTRS_o_ai 2996vec_signedo(vector double __a) { 2997#ifdef __LITTLE_ENDIAN__ 2998 return __builtin_vsx_xvcvdpsxws(__a); 2999#else 3000 vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a); 3001 return vec_sld(__ret, __ret, 12); 3002#endif 3003} 3004#endif 3005 3006/* vec_unsigned */ 3007 3008static __inline__ vector unsigned int __ATTRS_o_ai 3009vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c); 3010 3011static __inline__ vector unsigned int __ATTRS_o_ai 3012vec_unsigned(vector float __a) { 3013 return __builtin_convertvector(__a, vector unsigned int); 3014} 3015 3016#ifdef __VSX__ 3017static __inline__ vector unsigned long long __ATTRS_o_ai 3018vec_unsigned(vector double __a) { 3019 return __builtin_convertvector(__a, vector unsigned long long); 3020} 3021 3022static __inline__ vector unsigned int __attribute__((__always_inline__)) 3023vec_unsigned2(vector double __a, vector double __b) { 3024 return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] }; 3025} 3026 3027static __inline__ vector unsigned int __ATTRS_o_ai 3028vec_unsignede(vector double __a) { 3029#ifdef __LITTLE_ENDIAN__ 3030 vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a); 3031 return vec_sld(__ret, __ret, 12); 3032#else 3033 return __builtin_vsx_xvcvdpuxws(__a); 3034#endif 3035} 3036 3037static __inline__ vector unsigned int __ATTRS_o_ai 3038vec_unsignedo(vector double __a) { 3039#ifdef __LITTLE_ENDIAN__ 3040 return __builtin_vsx_xvcvdpuxws(__a); 3041#else 3042 vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a); 3043 return vec_sld(__ret, __ret, 12); 3044#endif 3045} 3046#endif 3047 3048/* vec_float */ 3049 3050static __inline__ vector float __ATTRS_o_ai 3051vec_sld(vector float, vector float, unsigned const int __c); 3052 3053static __inline__ vector float __ATTRS_o_ai 3054vec_float(vector signed int __a) { 3055 return __builtin_convertvector(__a, vector float); 3056} 3057 3058static __inline__ vector float __ATTRS_o_ai 3059vec_float(vector unsigned int __a) { 3060 return __builtin_convertvector(__a, vector float); 3061} 3062 3063#ifdef __VSX__ 3064static __inline__ vector float __ATTRS_o_ai 3065vec_float2(vector signed long long __a, vector signed long long __b) { 3066 return (vector float) { __a[0], __a[1], __b[0], __b[1] }; 3067} 3068 3069static __inline__ vector float __ATTRS_o_ai 3070vec_float2(vector unsigned long long __a, vector unsigned long long __b) { 3071 return (vector float) { __a[0], __a[1], __b[0], __b[1] }; 3072} 3073 3074static __inline__ vector float __ATTRS_o_ai 3075vec_float2(vector double __a, vector double __b) { 3076 return (vector float) { __a[0], __a[1], __b[0], __b[1] }; 3077} 3078 3079static __inline__ vector float __ATTRS_o_ai 3080vec_floate(vector signed long long __a) { 3081#ifdef __LITTLE_ENDIAN__ 3082 vector float __ret = __builtin_vsx_xvcvsxdsp(__a); 3083 return vec_sld(__ret, __ret, 12); 3084#else 3085 return __builtin_vsx_xvcvsxdsp(__a); 3086#endif 3087} 3088 3089static __inline__ vector float __ATTRS_o_ai 3090vec_floate(vector unsigned long long __a) { 3091#ifdef __LITTLE_ENDIAN__ 3092 vector float __ret = __builtin_vsx_xvcvuxdsp(__a); 3093 return vec_sld(__ret, __ret, 12); 3094#else 3095 return __builtin_vsx_xvcvuxdsp(__a); 3096#endif 3097} 3098 3099static __inline__ vector float __ATTRS_o_ai 3100vec_floate(vector double __a) { 3101#ifdef __LITTLE_ENDIAN__ 3102 vector float __ret = __builtin_vsx_xvcvdpsp(__a); 3103 return vec_sld(__ret, __ret, 12); 3104#else 3105 return __builtin_vsx_xvcvdpsp(__a); 3106#endif 3107} 3108 3109static __inline__ vector float __ATTRS_o_ai 3110vec_floato(vector signed long long __a) { 3111#ifdef __LITTLE_ENDIAN__ 3112 return __builtin_vsx_xvcvsxdsp(__a); 3113#else 3114 vector float __ret = __builtin_vsx_xvcvsxdsp(__a); 3115 return vec_sld(__ret, __ret, 12); 3116#endif 3117} 3118 3119static __inline__ vector float __ATTRS_o_ai 3120vec_floato(vector unsigned long long __a) { 3121#ifdef __LITTLE_ENDIAN__ 3122 return __builtin_vsx_xvcvuxdsp(__a); 3123#else 3124 vector float __ret = __builtin_vsx_xvcvuxdsp(__a); 3125 return vec_sld(__ret, __ret, 12); 3126#endif 3127} 3128 3129static __inline__ vector float __ATTRS_o_ai 3130vec_floato(vector double __a) { 3131#ifdef __LITTLE_ENDIAN__ 3132 return __builtin_vsx_xvcvdpsp(__a); 3133#else 3134 vector float __ret = __builtin_vsx_xvcvdpsp(__a); 3135 return vec_sld(__ret, __ret, 12); 3136#endif 3137} 3138#endif 3139 3140/* vec_double */ 3141 3142#ifdef __VSX__ 3143static __inline__ vector double __ATTRS_o_ai 3144vec_double(vector signed long long __a) { 3145 return __builtin_convertvector(__a, vector double); 3146} 3147 3148static __inline__ vector double __ATTRS_o_ai 3149vec_double(vector unsigned long long __a) { 3150 return __builtin_convertvector(__a, vector double); 3151} 3152 3153static __inline__ vector double __ATTRS_o_ai 3154vec_doublee(vector signed int __a) { 3155#ifdef __LITTLE_ENDIAN__ 3156 return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4)); 3157#else 3158 return __builtin_vsx_xvcvsxwdp(__a); 3159#endif 3160} 3161 3162static __inline__ vector double __ATTRS_o_ai 3163vec_doublee(vector unsigned int __a) { 3164#ifdef __LITTLE_ENDIAN__ 3165 return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4)); 3166#else 3167 return __builtin_vsx_xvcvuxwdp(__a); 3168#endif 3169} 3170 3171static __inline__ vector double __ATTRS_o_ai 3172vec_doublee(vector float __a) { 3173#ifdef __LITTLE_ENDIAN__ 3174 return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4)); 3175#else 3176 return __builtin_vsx_xvcvspdp(__a); 3177#endif 3178} 3179 3180static __inline__ vector double __ATTRS_o_ai 3181vec_doubleh(vector signed int __a) { 3182 vector double __ret = {__a[0], __a[1]}; 3183 return __ret; 3184} 3185 3186static __inline__ vector double __ATTRS_o_ai 3187vec_doubleh(vector unsigned int __a) { 3188 vector double __ret = {__a[0], __a[1]}; 3189 return __ret; 3190} 3191 3192static __inline__ vector double __ATTRS_o_ai 3193vec_doubleh(vector float __a) { 3194 vector double __ret = {__a[0], __a[1]}; 3195 return __ret; 3196} 3197 3198static __inline__ vector double __ATTRS_o_ai 3199vec_doublel(vector signed int __a) { 3200 vector double __ret = {__a[2], __a[3]}; 3201 return __ret; 3202} 3203 3204static __inline__ vector double __ATTRS_o_ai 3205vec_doublel(vector unsigned int __a) { 3206 vector double __ret = {__a[2], __a[3]}; 3207 return __ret; 3208} 3209 3210static __inline__ vector double __ATTRS_o_ai 3211vec_doublel(vector float __a) { 3212 vector double __ret = {__a[2], __a[3]}; 3213 return __ret; 3214} 3215 3216static __inline__ vector double __ATTRS_o_ai 3217vec_doubleo(vector signed int __a) { 3218#ifdef __LITTLE_ENDIAN__ 3219 return __builtin_vsx_xvcvsxwdp(__a); 3220#else 3221 return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4)); 3222#endif 3223} 3224 3225static __inline__ vector double __ATTRS_o_ai 3226vec_doubleo(vector unsigned int __a) { 3227#ifdef __LITTLE_ENDIAN__ 3228 return __builtin_vsx_xvcvuxwdp(__a); 3229#else 3230 return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4)); 3231#endif 3232} 3233 3234static __inline__ vector double __ATTRS_o_ai 3235vec_doubleo(vector float __a) { 3236#ifdef __LITTLE_ENDIAN__ 3237 return __builtin_vsx_xvcvspdp(__a); 3238#else 3239 return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4)); 3240#endif 3241} 3242#endif 3243 3244/* vec_div */ 3245 3246/* Integer vector divides (vectors are scalarized, elements divided 3247 and the vectors reassembled). 3248*/ 3249static __inline__ vector signed char __ATTRS_o_ai 3250vec_div(vector signed char __a, vector signed char __b) { 3251 return __a / __b; 3252} 3253 3254static __inline__ vector unsigned char __ATTRS_o_ai 3255vec_div(vector unsigned char __a, vector unsigned char __b) { 3256 return __a / __b; 3257} 3258 3259static __inline__ vector signed short __ATTRS_o_ai 3260vec_div(vector signed short __a, vector signed short __b) { 3261 return __a / __b; 3262} 3263 3264static __inline__ vector unsigned short __ATTRS_o_ai 3265vec_div(vector unsigned short __a, vector unsigned short __b) { 3266 return __a / __b; 3267} 3268 3269static __inline__ vector signed int __ATTRS_o_ai 3270vec_div(vector signed int __a, vector signed int __b) { 3271 return __a / __b; 3272} 3273 3274static __inline__ vector unsigned int __ATTRS_o_ai 3275vec_div(vector unsigned int __a, vector unsigned int __b) { 3276 return __a / __b; 3277} 3278 3279#ifdef __VSX__ 3280static __inline__ vector signed long long __ATTRS_o_ai 3281vec_div(vector signed long long __a, vector signed long long __b) { 3282 return __a / __b; 3283} 3284 3285static __inline__ vector unsigned long long __ATTRS_o_ai 3286vec_div(vector unsigned long long __a, vector unsigned long long __b) { 3287 return __a / __b; 3288} 3289 3290static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a, 3291 vector float __b) { 3292 return __a / __b; 3293} 3294 3295static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a, 3296 vector double __b) { 3297 return __a / __b; 3298} 3299#endif 3300 3301/* vec_dss */ 3302 3303static __inline__ void __attribute__((__always_inline__)) vec_dss(int __a) { 3304 __builtin_altivec_dss(__a); 3305} 3306 3307/* vec_dssall */ 3308 3309static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) { 3310 __builtin_altivec_dssall(); 3311} 3312 3313/* vec_dst */ 3314#define vec_dst(__PTR, __CW, __STR) \ 3315 __extension__( \ 3316 { __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR)); }) 3317 3318/* vec_dstst */ 3319#define vec_dstst(__PTR, __CW, __STR) \ 3320 __extension__( \ 3321 { __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR)); }) 3322 3323/* vec_dststt */ 3324#define vec_dststt(__PTR, __CW, __STR) \ 3325 __extension__( \ 3326 { __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR)); }) 3327 3328/* vec_dstt */ 3329#define vec_dstt(__PTR, __CW, __STR) \ 3330 __extension__( \ 3331 { __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR)); }) 3332 3333/* vec_eqv */ 3334 3335#ifdef __POWER8_VECTOR__ 3336static __inline__ vector signed char __ATTRS_o_ai 3337vec_eqv(vector signed char __a, vector signed char __b) { 3338 return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a, 3339 (vector unsigned int)__b); 3340} 3341 3342static __inline__ vector unsigned char __ATTRS_o_ai 3343vec_eqv(vector unsigned char __a, vector unsigned char __b) { 3344 return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a, 3345 (vector unsigned int)__b); 3346} 3347 3348static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a, 3349 vector bool char __b) { 3350 return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a, 3351 (vector unsigned int)__b); 3352} 3353 3354static __inline__ vector signed short __ATTRS_o_ai 3355vec_eqv(vector signed short __a, vector signed short __b) { 3356 return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a, 3357 (vector unsigned int)__b); 3358} 3359 3360static __inline__ vector unsigned short __ATTRS_o_ai 3361vec_eqv(vector unsigned short __a, vector unsigned short __b) { 3362 return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a, 3363 (vector unsigned int)__b); 3364} 3365 3366static __inline__ vector bool short __ATTRS_o_ai 3367vec_eqv(vector bool short __a, vector bool short __b) { 3368 return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a, 3369 (vector unsigned int)__b); 3370} 3371 3372static __inline__ vector signed int __ATTRS_o_ai 3373vec_eqv(vector signed int __a, vector signed int __b) { 3374 return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a, 3375 (vector unsigned int)__b); 3376} 3377 3378static __inline__ vector unsigned int __ATTRS_o_ai 3379vec_eqv(vector unsigned int __a, vector unsigned int __b) { 3380 return __builtin_vsx_xxleqv(__a, __b); 3381} 3382 3383static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a, 3384 vector bool int __b) { 3385 return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a, 3386 (vector unsigned int)__b); 3387} 3388 3389static __inline__ vector signed long long __ATTRS_o_ai 3390vec_eqv(vector signed long long __a, vector signed long long __b) { 3391 return (vector signed long long)__builtin_vsx_xxleqv( 3392 (vector unsigned int)__a, (vector unsigned int)__b); 3393} 3394 3395static __inline__ vector unsigned long long __ATTRS_o_ai 3396vec_eqv(vector unsigned long long __a, vector unsigned long long __b) { 3397 return (vector unsigned long long)__builtin_vsx_xxleqv( 3398 (vector unsigned int)__a, (vector unsigned int)__b); 3399} 3400 3401static __inline__ vector bool long long __ATTRS_o_ai 3402vec_eqv(vector bool long long __a, vector bool long long __b) { 3403 return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a, 3404 (vector unsigned int)__b); 3405} 3406 3407static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a, 3408 vector float __b) { 3409 return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a, 3410 (vector unsigned int)__b); 3411} 3412 3413static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a, 3414 vector double __b) { 3415 return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a, 3416 (vector unsigned int)__b); 3417} 3418#endif 3419 3420/* vec_expte */ 3421 3422static __inline__ vector float __attribute__((__always_inline__)) 3423vec_expte(vector float __a) { 3424 return __builtin_altivec_vexptefp(__a); 3425} 3426 3427/* vec_vexptefp */ 3428 3429static __inline__ vector float __attribute__((__always_inline__)) 3430vec_vexptefp(vector float __a) { 3431 return __builtin_altivec_vexptefp(__a); 3432} 3433 3434/* vec_floor */ 3435 3436static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) { 3437#ifdef __VSX__ 3438 return __builtin_vsx_xvrspim(__a); 3439#else 3440 return __builtin_altivec_vrfim(__a); 3441#endif 3442} 3443 3444#ifdef __VSX__ 3445static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) { 3446 return __builtin_vsx_xvrdpim(__a); 3447} 3448#endif 3449 3450/* vec_vrfim */ 3451 3452static __inline__ vector float __attribute__((__always_inline__)) 3453vec_vrfim(vector float __a) { 3454 return __builtin_altivec_vrfim(__a); 3455} 3456 3457/* vec_ld */ 3458 3459static __inline__ vector signed char __ATTRS_o_ai 3460vec_ld(int __a, const vector signed char *__b) { 3461 return (vector signed char)__builtin_altivec_lvx(__a, __b); 3462} 3463 3464static __inline__ vector signed char __ATTRS_o_ai 3465vec_ld(int __a, const signed char *__b) { 3466 return (vector signed char)__builtin_altivec_lvx(__a, __b); 3467} 3468 3469static __inline__ vector unsigned char __ATTRS_o_ai 3470vec_ld(int __a, const vector unsigned char *__b) { 3471 return (vector unsigned char)__builtin_altivec_lvx(__a, __b); 3472} 3473 3474static __inline__ vector unsigned char __ATTRS_o_ai 3475vec_ld(int __a, const unsigned char *__b) { 3476 return (vector unsigned char)__builtin_altivec_lvx(__a, __b); 3477} 3478 3479static __inline__ vector bool char __ATTRS_o_ai 3480vec_ld(int __a, const vector bool char *__b) { 3481 return (vector bool char)__builtin_altivec_lvx(__a, __b); 3482} 3483 3484static __inline__ vector short __ATTRS_o_ai vec_ld(int __a, 3485 const vector short *__b) { 3486 return (vector short)__builtin_altivec_lvx(__a, __b); 3487} 3488 3489static __inline__ vector short __ATTRS_o_ai vec_ld(int __a, const short *__b) { 3490 return (vector short)__builtin_altivec_lvx(__a, __b); 3491} 3492 3493static __inline__ vector unsigned short __ATTRS_o_ai 3494vec_ld(int __a, const vector unsigned short *__b) { 3495 return (vector unsigned short)__builtin_altivec_lvx(__a, __b); 3496} 3497 3498static __inline__ vector unsigned short __ATTRS_o_ai 3499vec_ld(int __a, const unsigned short *__b) { 3500 return (vector unsigned short)__builtin_altivec_lvx(__a, __b); 3501} 3502 3503static __inline__ vector bool short __ATTRS_o_ai 3504vec_ld(int __a, const vector bool short *__b) { 3505 return (vector bool short)__builtin_altivec_lvx(__a, __b); 3506} 3507 3508static __inline__ vector pixel __ATTRS_o_ai vec_ld(int __a, 3509 const vector pixel *__b) { 3510 return (vector pixel)__builtin_altivec_lvx(__a, __b); 3511} 3512 3513static __inline__ vector int __ATTRS_o_ai vec_ld(int __a, 3514 const vector int *__b) { 3515 return (vector int)__builtin_altivec_lvx(__a, __b); 3516} 3517 3518static __inline__ vector int __ATTRS_o_ai vec_ld(int __a, const int *__b) { 3519 return (vector int)__builtin_altivec_lvx(__a, __b); 3520} 3521 3522static __inline__ vector unsigned int __ATTRS_o_ai 3523vec_ld(int __a, const vector unsigned int *__b) { 3524 return (vector unsigned int)__builtin_altivec_lvx(__a, __b); 3525} 3526 3527static __inline__ vector unsigned int __ATTRS_o_ai 3528vec_ld(int __a, const unsigned int *__b) { 3529 return (vector unsigned int)__builtin_altivec_lvx(__a, __b); 3530} 3531 3532static __inline__ vector bool int __ATTRS_o_ai 3533vec_ld(int __a, const vector bool int *__b) { 3534 return (vector bool int)__builtin_altivec_lvx(__a, __b); 3535} 3536 3537static __inline__ vector float __ATTRS_o_ai vec_ld(int __a, 3538 const vector float *__b) { 3539 return (vector float)__builtin_altivec_lvx(__a, __b); 3540} 3541 3542static __inline__ vector float __ATTRS_o_ai vec_ld(int __a, const float *__b) { 3543 return (vector float)__builtin_altivec_lvx(__a, __b); 3544} 3545 3546/* vec_lvx */ 3547 3548static __inline__ vector signed char __ATTRS_o_ai 3549vec_lvx(int __a, const vector signed char *__b) { 3550 return (vector signed char)__builtin_altivec_lvx(__a, __b); 3551} 3552 3553static __inline__ vector signed char __ATTRS_o_ai 3554vec_lvx(int __a, const signed char *__b) { 3555 return (vector signed char)__builtin_altivec_lvx(__a, __b); 3556} 3557 3558static __inline__ vector unsigned char __ATTRS_o_ai 3559vec_lvx(int __a, const vector unsigned char *__b) { 3560 return (vector unsigned char)__builtin_altivec_lvx(__a, __b); 3561} 3562 3563static __inline__ vector unsigned char __ATTRS_o_ai 3564vec_lvx(int __a, const unsigned char *__b) { 3565 return (vector unsigned char)__builtin_altivec_lvx(__a, __b); 3566} 3567 3568static __inline__ vector bool char __ATTRS_o_ai 3569vec_lvx(int __a, const vector bool char *__b) { 3570 return (vector bool char)__builtin_altivec_lvx(__a, __b); 3571} 3572 3573static __inline__ vector short __ATTRS_o_ai vec_lvx(int __a, 3574 const vector short *__b) { 3575 return (vector short)__builtin_altivec_lvx(__a, __b); 3576} 3577 3578static __inline__ vector short __ATTRS_o_ai vec_lvx(int __a, const short *__b) { 3579 return (vector short)__builtin_altivec_lvx(__a, __b); 3580} 3581 3582static __inline__ vector unsigned short __ATTRS_o_ai 3583vec_lvx(int __a, const vector unsigned short *__b) { 3584 return (vector unsigned short)__builtin_altivec_lvx(__a, __b); 3585} 3586 3587static __inline__ vector unsigned short __ATTRS_o_ai 3588vec_lvx(int __a, const unsigned short *__b) { 3589 return (vector unsigned short)__builtin_altivec_lvx(__a, __b); 3590} 3591 3592static __inline__ vector bool short __ATTRS_o_ai 3593vec_lvx(int __a, const vector bool short *__b) { 3594 return (vector bool short)__builtin_altivec_lvx(__a, __b); 3595} 3596 3597static __inline__ vector pixel __ATTRS_o_ai vec_lvx(int __a, 3598 const vector pixel *__b) { 3599 return (vector pixel)__builtin_altivec_lvx(__a, __b); 3600} 3601 3602static __inline__ vector int __ATTRS_o_ai vec_lvx(int __a, 3603 const vector int *__b) { 3604 return (vector int)__builtin_altivec_lvx(__a, __b); 3605} 3606 3607static __inline__ vector int __ATTRS_o_ai vec_lvx(int __a, const int *__b) { 3608 return (vector int)__builtin_altivec_lvx(__a, __b); 3609} 3610 3611static __inline__ vector unsigned int __ATTRS_o_ai 3612vec_lvx(int __a, const vector unsigned int *__b) { 3613 return (vector unsigned int)__builtin_altivec_lvx(__a, __b); 3614} 3615 3616static __inline__ vector unsigned int __ATTRS_o_ai 3617vec_lvx(int __a, const unsigned int *__b) { 3618 return (vector unsigned int)__builtin_altivec_lvx(__a, __b); 3619} 3620 3621static __inline__ vector bool int __ATTRS_o_ai 3622vec_lvx(int __a, const vector bool int *__b) { 3623 return (vector bool int)__builtin_altivec_lvx(__a, __b); 3624} 3625 3626static __inline__ vector float __ATTRS_o_ai vec_lvx(int __a, 3627 const vector float *__b) { 3628 return (vector float)__builtin_altivec_lvx(__a, __b); 3629} 3630 3631static __inline__ vector float __ATTRS_o_ai vec_lvx(int __a, const float *__b) { 3632 return (vector float)__builtin_altivec_lvx(__a, __b); 3633} 3634 3635/* vec_lde */ 3636 3637static __inline__ vector signed char __ATTRS_o_ai 3638vec_lde(int __a, const signed char *__b) { 3639 return (vector signed char)__builtin_altivec_lvebx(__a, __b); 3640} 3641 3642static __inline__ vector unsigned char __ATTRS_o_ai 3643vec_lde(int __a, const unsigned char *__b) { 3644 return (vector unsigned char)__builtin_altivec_lvebx(__a, __b); 3645} 3646 3647static __inline__ vector short __ATTRS_o_ai vec_lde(int __a, const short *__b) { 3648 return (vector short)__builtin_altivec_lvehx(__a, __b); 3649} 3650 3651static __inline__ vector unsigned short __ATTRS_o_ai 3652vec_lde(int __a, const unsigned short *__b) { 3653 return (vector unsigned short)__builtin_altivec_lvehx(__a, __b); 3654} 3655 3656static __inline__ vector int __ATTRS_o_ai vec_lde(int __a, const int *__b) { 3657 return (vector int)__builtin_altivec_lvewx(__a, __b); 3658} 3659 3660static __inline__ vector unsigned int __ATTRS_o_ai 3661vec_lde(int __a, const unsigned int *__b) { 3662 return (vector unsigned int)__builtin_altivec_lvewx(__a, __b); 3663} 3664 3665static __inline__ vector float __ATTRS_o_ai vec_lde(int __a, const float *__b) { 3666 return (vector float)__builtin_altivec_lvewx(__a, __b); 3667} 3668 3669/* vec_lvebx */ 3670 3671static __inline__ vector signed char __ATTRS_o_ai 3672vec_lvebx(int __a, const signed char *__b) { 3673 return (vector signed char)__builtin_altivec_lvebx(__a, __b); 3674} 3675 3676static __inline__ vector unsigned char __ATTRS_o_ai 3677vec_lvebx(int __a, const unsigned char *__b) { 3678 return (vector unsigned char)__builtin_altivec_lvebx(__a, __b); 3679} 3680 3681/* vec_lvehx */ 3682 3683static __inline__ vector short __ATTRS_o_ai vec_lvehx(int __a, 3684 const short *__b) { 3685 return (vector short)__builtin_altivec_lvehx(__a, __b); 3686} 3687 3688static __inline__ vector unsigned short __ATTRS_o_ai 3689vec_lvehx(int __a, const unsigned short *__b) { 3690 return (vector unsigned short)__builtin_altivec_lvehx(__a, __b); 3691} 3692 3693/* vec_lvewx */ 3694 3695static __inline__ vector int __ATTRS_o_ai vec_lvewx(int __a, const int *__b) { 3696 return (vector int)__builtin_altivec_lvewx(__a, __b); 3697} 3698 3699static __inline__ vector unsigned int __ATTRS_o_ai 3700vec_lvewx(int __a, const unsigned int *__b) { 3701 return (vector unsigned int)__builtin_altivec_lvewx(__a, __b); 3702} 3703 3704static __inline__ vector float __ATTRS_o_ai vec_lvewx(int __a, 3705 const float *__b) { 3706 return (vector float)__builtin_altivec_lvewx(__a, __b); 3707} 3708 3709/* vec_ldl */ 3710 3711static __inline__ vector signed char __ATTRS_o_ai 3712vec_ldl(int __a, const vector signed char *__b) { 3713 return (vector signed char)__builtin_altivec_lvxl(__a, __b); 3714} 3715 3716static __inline__ vector signed char __ATTRS_o_ai 3717vec_ldl(int __a, const signed char *__b) { 3718 return (vector signed char)__builtin_altivec_lvxl(__a, __b); 3719} 3720 3721static __inline__ vector unsigned char __ATTRS_o_ai 3722vec_ldl(int __a, const vector unsigned char *__b) { 3723 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); 3724} 3725 3726static __inline__ vector unsigned char __ATTRS_o_ai 3727vec_ldl(int __a, const unsigned char *__b) { 3728 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); 3729} 3730 3731static __inline__ vector bool char __ATTRS_o_ai 3732vec_ldl(int __a, const vector bool char *__b) { 3733 return (vector bool char)__builtin_altivec_lvxl(__a, __b); 3734} 3735 3736static __inline__ vector short __ATTRS_o_ai vec_ldl(int __a, 3737 const vector short *__b) { 3738 return (vector short)__builtin_altivec_lvxl(__a, __b); 3739} 3740 3741static __inline__ vector short __ATTRS_o_ai vec_ldl(int __a, const short *__b) { 3742 return (vector short)__builtin_altivec_lvxl(__a, __b); 3743} 3744 3745static __inline__ vector unsigned short __ATTRS_o_ai 3746vec_ldl(int __a, const vector unsigned short *__b) { 3747 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); 3748} 3749 3750static __inline__ vector unsigned short __ATTRS_o_ai 3751vec_ldl(int __a, const unsigned short *__b) { 3752 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); 3753} 3754 3755static __inline__ vector bool short __ATTRS_o_ai 3756vec_ldl(int __a, const vector bool short *__b) { 3757 return (vector bool short)__builtin_altivec_lvxl(__a, __b); 3758} 3759 3760static __inline__ vector pixel __ATTRS_o_ai vec_ldl(int __a, 3761 const vector pixel *__b) { 3762 return (vector pixel short)__builtin_altivec_lvxl(__a, __b); 3763} 3764 3765static __inline__ vector int __ATTRS_o_ai vec_ldl(int __a, 3766 const vector int *__b) { 3767 return (vector int)__builtin_altivec_lvxl(__a, __b); 3768} 3769 3770static __inline__ vector int __ATTRS_o_ai vec_ldl(int __a, const int *__b) { 3771 return (vector int)__builtin_altivec_lvxl(__a, __b); 3772} 3773 3774static __inline__ vector unsigned int __ATTRS_o_ai 3775vec_ldl(int __a, const vector unsigned int *__b) { 3776 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); 3777} 3778 3779static __inline__ vector unsigned int __ATTRS_o_ai 3780vec_ldl(int __a, const unsigned int *__b) { 3781 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); 3782} 3783 3784static __inline__ vector bool int __ATTRS_o_ai 3785vec_ldl(int __a, const vector bool int *__b) { 3786 return (vector bool int)__builtin_altivec_lvxl(__a, __b); 3787} 3788 3789static __inline__ vector float __ATTRS_o_ai vec_ldl(int __a, 3790 const vector float *__b) { 3791 return (vector float)__builtin_altivec_lvxl(__a, __b); 3792} 3793 3794static __inline__ vector float __ATTRS_o_ai vec_ldl(int __a, const float *__b) { 3795 return (vector float)__builtin_altivec_lvxl(__a, __b); 3796} 3797 3798/* vec_lvxl */ 3799 3800static __inline__ vector signed char __ATTRS_o_ai 3801vec_lvxl(int __a, const vector signed char *__b) { 3802 return (vector signed char)__builtin_altivec_lvxl(__a, __b); 3803} 3804 3805static __inline__ vector signed char __ATTRS_o_ai 3806vec_lvxl(int __a, const signed char *__b) { 3807 return (vector signed char)__builtin_altivec_lvxl(__a, __b); 3808} 3809 3810static __inline__ vector unsigned char __ATTRS_o_ai 3811vec_lvxl(int __a, const vector unsigned char *__b) { 3812 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); 3813} 3814 3815static __inline__ vector unsigned char __ATTRS_o_ai 3816vec_lvxl(int __a, const unsigned char *__b) { 3817 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); 3818} 3819 3820static __inline__ vector bool char __ATTRS_o_ai 3821vec_lvxl(int __a, const vector bool char *__b) { 3822 return (vector bool char)__builtin_altivec_lvxl(__a, __b); 3823} 3824 3825static __inline__ vector short __ATTRS_o_ai vec_lvxl(int __a, 3826 const vector short *__b) { 3827 return (vector short)__builtin_altivec_lvxl(__a, __b); 3828} 3829 3830static __inline__ vector short __ATTRS_o_ai vec_lvxl(int __a, 3831 const short *__b) { 3832 return (vector short)__builtin_altivec_lvxl(__a, __b); 3833} 3834 3835static __inline__ vector unsigned short __ATTRS_o_ai 3836vec_lvxl(int __a, const vector unsigned short *__b) { 3837 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); 3838} 3839 3840static __inline__ vector unsigned short __ATTRS_o_ai 3841vec_lvxl(int __a, const unsigned short *__b) { 3842 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); 3843} 3844 3845static __inline__ vector bool short __ATTRS_o_ai 3846vec_lvxl(int __a, const vector bool short *__b) { 3847 return (vector bool short)__builtin_altivec_lvxl(__a, __b); 3848} 3849 3850static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(int __a, 3851 const vector pixel *__b) { 3852 return (vector pixel)__builtin_altivec_lvxl(__a, __b); 3853} 3854 3855static __inline__ vector int __ATTRS_o_ai vec_lvxl(int __a, 3856 const vector int *__b) { 3857 return (vector int)__builtin_altivec_lvxl(__a, __b); 3858} 3859 3860static __inline__ vector int __ATTRS_o_ai vec_lvxl(int __a, const int *__b) { 3861 return (vector int)__builtin_altivec_lvxl(__a, __b); 3862} 3863 3864static __inline__ vector unsigned int __ATTRS_o_ai 3865vec_lvxl(int __a, const vector unsigned int *__b) { 3866 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); 3867} 3868 3869static __inline__ vector unsigned int __ATTRS_o_ai 3870vec_lvxl(int __a, const unsigned int *__b) { 3871 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); 3872} 3873 3874static __inline__ vector bool int __ATTRS_o_ai 3875vec_lvxl(int __a, const vector bool int *__b) { 3876 return (vector bool int)__builtin_altivec_lvxl(__a, __b); 3877} 3878 3879static __inline__ vector float __ATTRS_o_ai vec_lvxl(int __a, 3880 const vector float *__b) { 3881 return (vector float)__builtin_altivec_lvxl(__a, __b); 3882} 3883 3884static __inline__ vector float __ATTRS_o_ai vec_lvxl(int __a, 3885 const float *__b) { 3886 return (vector float)__builtin_altivec_lvxl(__a, __b); 3887} 3888 3889/* vec_loge */ 3890 3891static __inline__ vector float __attribute__((__always_inline__)) 3892vec_loge(vector float __a) { 3893 return __builtin_altivec_vlogefp(__a); 3894} 3895 3896/* vec_vlogefp */ 3897 3898static __inline__ vector float __attribute__((__always_inline__)) 3899vec_vlogefp(vector float __a) { 3900 return __builtin_altivec_vlogefp(__a); 3901} 3902 3903/* vec_lvsl */ 3904 3905#ifdef __LITTLE_ENDIAN__ 3906static __inline__ vector unsigned char __ATTRS_o_ai 3907 __attribute__((__deprecated__("use assignment for unaligned little endian \ 3908loads/stores"))) vec_lvsl(int __a, const signed char *__b) { 3909 vector unsigned char mask = 3910 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3911 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 3912 7, 6, 5, 4, 3, 2, 1, 0}; 3913 return vec_perm(mask, mask, reverse); 3914} 3915#else 3916static __inline__ vector unsigned char __ATTRS_o_ai 3917vec_lvsl(int __a, const signed char *__b) { 3918 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3919} 3920#endif 3921 3922#ifdef __LITTLE_ENDIAN__ 3923static __inline__ vector unsigned char __ATTRS_o_ai 3924 __attribute__((__deprecated__("use assignment for unaligned little endian \ 3925loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) { 3926 vector unsigned char mask = 3927 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3928 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 3929 7, 6, 5, 4, 3, 2, 1, 0}; 3930 return vec_perm(mask, mask, reverse); 3931} 3932#else 3933static __inline__ vector unsigned char __ATTRS_o_ai 3934vec_lvsl(int __a, const unsigned char *__b) { 3935 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3936} 3937#endif 3938 3939#ifdef __LITTLE_ENDIAN__ 3940static __inline__ vector unsigned char __ATTRS_o_ai 3941 __attribute__((__deprecated__("use assignment for unaligned little endian \ 3942loads/stores"))) vec_lvsl(int __a, const short *__b) { 3943 vector unsigned char mask = 3944 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3945 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 3946 7, 6, 5, 4, 3, 2, 1, 0}; 3947 return vec_perm(mask, mask, reverse); 3948} 3949#else 3950static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, 3951 const short *__b) { 3952 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3953} 3954#endif 3955 3956#ifdef __LITTLE_ENDIAN__ 3957static __inline__ vector unsigned char __ATTRS_o_ai 3958 __attribute__((__deprecated__("use assignment for unaligned little endian \ 3959loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) { 3960 vector unsigned char mask = 3961 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3962 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 3963 7, 6, 5, 4, 3, 2, 1, 0}; 3964 return vec_perm(mask, mask, reverse); 3965} 3966#else 3967static __inline__ vector unsigned char __ATTRS_o_ai 3968vec_lvsl(int __a, const unsigned short *__b) { 3969 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3970} 3971#endif 3972 3973#ifdef __LITTLE_ENDIAN__ 3974static __inline__ vector unsigned char __ATTRS_o_ai 3975 __attribute__((__deprecated__("use assignment for unaligned little endian \ 3976loads/stores"))) vec_lvsl(int __a, const int *__b) { 3977 vector unsigned char mask = 3978 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3979 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 3980 7, 6, 5, 4, 3, 2, 1, 0}; 3981 return vec_perm(mask, mask, reverse); 3982} 3983#else 3984static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, 3985 const int *__b) { 3986 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3987} 3988#endif 3989 3990#ifdef __LITTLE_ENDIAN__ 3991static __inline__ vector unsigned char __ATTRS_o_ai 3992 __attribute__((__deprecated__("use assignment for unaligned little endian \ 3993loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) { 3994 vector unsigned char mask = 3995 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 3996 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 3997 7, 6, 5, 4, 3, 2, 1, 0}; 3998 return vec_perm(mask, mask, reverse); 3999} 4000#else 4001static __inline__ vector unsigned char __ATTRS_o_ai 4002vec_lvsl(int __a, const unsigned int *__b) { 4003 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 4004} 4005#endif 4006 4007#ifdef __LITTLE_ENDIAN__ 4008static __inline__ vector unsigned char __ATTRS_o_ai 4009 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4010loads/stores"))) vec_lvsl(int __a, const float *__b) { 4011 vector unsigned char mask = 4012 (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 4013 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4014 7, 6, 5, 4, 3, 2, 1, 0}; 4015 return vec_perm(mask, mask, reverse); 4016} 4017#else 4018static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a, 4019 const float *__b) { 4020 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); 4021} 4022#endif 4023 4024/* vec_lvsr */ 4025 4026#ifdef __LITTLE_ENDIAN__ 4027static __inline__ vector unsigned char __ATTRS_o_ai 4028 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4029loads/stores"))) vec_lvsr(int __a, const signed char *__b) { 4030 vector unsigned char mask = 4031 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4032 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4033 7, 6, 5, 4, 3, 2, 1, 0}; 4034 return vec_perm(mask, mask, reverse); 4035} 4036#else 4037static __inline__ vector unsigned char __ATTRS_o_ai 4038vec_lvsr(int __a, const signed char *__b) { 4039 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4040} 4041#endif 4042 4043#ifdef __LITTLE_ENDIAN__ 4044static __inline__ vector unsigned char __ATTRS_o_ai 4045 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4046loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) { 4047 vector unsigned char mask = 4048 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4049 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4050 7, 6, 5, 4, 3, 2, 1, 0}; 4051 return vec_perm(mask, mask, reverse); 4052} 4053#else 4054static __inline__ vector unsigned char __ATTRS_o_ai 4055vec_lvsr(int __a, const unsigned char *__b) { 4056 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4057} 4058#endif 4059 4060#ifdef __LITTLE_ENDIAN__ 4061static __inline__ vector unsigned char __ATTRS_o_ai 4062 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4063loads/stores"))) vec_lvsr(int __a, const short *__b) { 4064 vector unsigned char mask = 4065 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4066 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4067 7, 6, 5, 4, 3, 2, 1, 0}; 4068 return vec_perm(mask, mask, reverse); 4069} 4070#else 4071static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, 4072 const short *__b) { 4073 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4074} 4075#endif 4076 4077#ifdef __LITTLE_ENDIAN__ 4078static __inline__ vector unsigned char __ATTRS_o_ai 4079 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4080loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) { 4081 vector unsigned char mask = 4082 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4083 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4084 7, 6, 5, 4, 3, 2, 1, 0}; 4085 return vec_perm(mask, mask, reverse); 4086} 4087#else 4088static __inline__ vector unsigned char __ATTRS_o_ai 4089vec_lvsr(int __a, const unsigned short *__b) { 4090 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4091} 4092#endif 4093 4094#ifdef __LITTLE_ENDIAN__ 4095static __inline__ vector unsigned char __ATTRS_o_ai 4096 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4097loads/stores"))) vec_lvsr(int __a, const int *__b) { 4098 vector unsigned char mask = 4099 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4100 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4101 7, 6, 5, 4, 3, 2, 1, 0}; 4102 return vec_perm(mask, mask, reverse); 4103} 4104#else 4105static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, 4106 const int *__b) { 4107 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4108} 4109#endif 4110 4111#ifdef __LITTLE_ENDIAN__ 4112static __inline__ vector unsigned char __ATTRS_o_ai 4113 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4114loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) { 4115 vector unsigned char mask = 4116 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4117 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4118 7, 6, 5, 4, 3, 2, 1, 0}; 4119 return vec_perm(mask, mask, reverse); 4120} 4121#else 4122static __inline__ vector unsigned char __ATTRS_o_ai 4123vec_lvsr(int __a, const unsigned int *__b) { 4124 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4125} 4126#endif 4127 4128#ifdef __LITTLE_ENDIAN__ 4129static __inline__ vector unsigned char __ATTRS_o_ai 4130 __attribute__((__deprecated__("use assignment for unaligned little endian \ 4131loads/stores"))) vec_lvsr(int __a, const float *__b) { 4132 vector unsigned char mask = 4133 (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4134 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8, 4135 7, 6, 5, 4, 3, 2, 1, 0}; 4136 return vec_perm(mask, mask, reverse); 4137} 4138#else 4139static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a, 4140 const float *__b) { 4141 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); 4142} 4143#endif 4144 4145/* vec_madd */ 4146static __inline__ vector signed short __ATTRS_o_ai 4147vec_mladd(vector signed short, vector signed short, vector signed short); 4148static __inline__ vector signed short __ATTRS_o_ai 4149vec_mladd(vector signed short, vector unsigned short, vector unsigned short); 4150static __inline__ vector signed short __ATTRS_o_ai 4151vec_mladd(vector unsigned short, vector signed short, vector signed short); 4152static __inline__ vector unsigned short __ATTRS_o_ai 4153vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short); 4154 4155static __inline__ vector signed short __ATTRS_o_ai vec_madd( 4156 vector signed short __a, vector signed short __b, vector signed short __c) { 4157 return vec_mladd(__a, __b, __c); 4158} 4159 4160static __inline__ vector signed short __ATTRS_o_ai 4161vec_madd(vector signed short __a, vector unsigned short __b, 4162 vector unsigned short __c) { 4163 return vec_mladd(__a, __b, __c); 4164} 4165 4166static __inline__ vector signed short __ATTRS_o_ai 4167vec_madd(vector unsigned short __a, vector signed short __b, 4168 vector signed short __c) { 4169 return vec_mladd(__a, __b, __c); 4170} 4171 4172static __inline__ vector unsigned short __ATTRS_o_ai 4173vec_madd(vector unsigned short __a, vector unsigned short __b, 4174 vector unsigned short __c) { 4175 return vec_mladd(__a, __b, __c); 4176} 4177 4178static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a, 4179 vector float __b, 4180 vector float __c) { 4181#ifdef __VSX__ 4182 return __builtin_vsx_xvmaddasp(__a, __b, __c); 4183#else 4184 return __builtin_altivec_vmaddfp(__a, __b, __c); 4185#endif 4186} 4187 4188#ifdef __VSX__ 4189static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a, 4190 vector double __b, 4191 vector double __c) { 4192 return __builtin_vsx_xvmaddadp(__a, __b, __c); 4193} 4194#endif 4195 4196/* vec_vmaddfp */ 4197 4198static __inline__ vector float __attribute__((__always_inline__)) 4199vec_vmaddfp(vector float __a, vector float __b, vector float __c) { 4200 return __builtin_altivec_vmaddfp(__a, __b, __c); 4201} 4202 4203/* vec_madds */ 4204 4205static __inline__ vector signed short __attribute__((__always_inline__)) 4206vec_madds(vector signed short __a, vector signed short __b, 4207 vector signed short __c) { 4208 return __builtin_altivec_vmhaddshs(__a, __b, __c); 4209} 4210 4211/* vec_vmhaddshs */ 4212static __inline__ vector signed short __attribute__((__always_inline__)) 4213vec_vmhaddshs(vector signed short __a, vector signed short __b, 4214 vector signed short __c) { 4215 return __builtin_altivec_vmhaddshs(__a, __b, __c); 4216} 4217 4218/* vec_msub */ 4219 4220#ifdef __VSX__ 4221static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a, 4222 vector float __b, 4223 vector float __c) { 4224 return __builtin_vsx_xvmsubasp(__a, __b, __c); 4225} 4226 4227static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a, 4228 vector double __b, 4229 vector double __c) { 4230 return __builtin_vsx_xvmsubadp(__a, __b, __c); 4231} 4232#endif 4233 4234/* vec_max */ 4235 4236static __inline__ vector signed char __ATTRS_o_ai 4237vec_max(vector signed char __a, vector signed char __b) { 4238 return __builtin_altivec_vmaxsb(__a, __b); 4239} 4240 4241static __inline__ vector signed char __ATTRS_o_ai 4242vec_max(vector bool char __a, vector signed char __b) { 4243 return __builtin_altivec_vmaxsb((vector signed char)__a, __b); 4244} 4245 4246static __inline__ vector signed char __ATTRS_o_ai 4247vec_max(vector signed char __a, vector bool char __b) { 4248 return __builtin_altivec_vmaxsb(__a, (vector signed char)__b); 4249} 4250 4251static __inline__ vector unsigned char __ATTRS_o_ai 4252vec_max(vector unsigned char __a, vector unsigned char __b) { 4253 return __builtin_altivec_vmaxub(__a, __b); 4254} 4255 4256static __inline__ vector unsigned char __ATTRS_o_ai 4257vec_max(vector bool char __a, vector unsigned char __b) { 4258 return __builtin_altivec_vmaxub((vector unsigned char)__a, __b); 4259} 4260 4261static __inline__ vector unsigned char __ATTRS_o_ai 4262vec_max(vector unsigned char __a, vector bool char __b) { 4263 return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b); 4264} 4265 4266static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a, 4267 vector short __b) { 4268 return __builtin_altivec_vmaxsh(__a, __b); 4269} 4270 4271static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a, 4272 vector short __b) { 4273 return __builtin_altivec_vmaxsh((vector short)__a, __b); 4274} 4275 4276static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a, 4277 vector bool short __b) { 4278 return __builtin_altivec_vmaxsh(__a, (vector short)__b); 4279} 4280 4281static __inline__ vector unsigned short __ATTRS_o_ai 4282vec_max(vector unsigned short __a, vector unsigned short __b) { 4283 return __builtin_altivec_vmaxuh(__a, __b); 4284} 4285 4286static __inline__ vector unsigned short __ATTRS_o_ai 4287vec_max(vector bool short __a, vector unsigned short __b) { 4288 return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b); 4289} 4290 4291static __inline__ vector unsigned short __ATTRS_o_ai 4292vec_max(vector unsigned short __a, vector bool short __b) { 4293 return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b); 4294} 4295 4296static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a, 4297 vector int __b) { 4298 return __builtin_altivec_vmaxsw(__a, __b); 4299} 4300 4301static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a, 4302 vector int __b) { 4303 return __builtin_altivec_vmaxsw((vector int)__a, __b); 4304} 4305 4306static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a, 4307 vector bool int __b) { 4308 return __builtin_altivec_vmaxsw(__a, (vector int)__b); 4309} 4310 4311static __inline__ vector unsigned int __ATTRS_o_ai 4312vec_max(vector unsigned int __a, vector unsigned int __b) { 4313 return __builtin_altivec_vmaxuw(__a, __b); 4314} 4315 4316static __inline__ vector unsigned int __ATTRS_o_ai 4317vec_max(vector bool int __a, vector unsigned int __b) { 4318 return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b); 4319} 4320 4321static __inline__ vector unsigned int __ATTRS_o_ai 4322vec_max(vector unsigned int __a, vector bool int __b) { 4323 return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b); 4324} 4325 4326#ifdef __POWER8_VECTOR__ 4327static __inline__ vector signed long long __ATTRS_o_ai 4328vec_max(vector signed long long __a, vector signed long long __b) { 4329 return __builtin_altivec_vmaxsd(__a, __b); 4330} 4331 4332static __inline__ vector signed long long __ATTRS_o_ai 4333vec_max(vector bool long long __a, vector signed long long __b) { 4334 return __builtin_altivec_vmaxsd((vector signed long long)__a, __b); 4335} 4336 4337static __inline__ vector signed long long __ATTRS_o_ai 4338vec_max(vector signed long long __a, vector bool long long __b) { 4339 return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b); 4340} 4341 4342static __inline__ vector unsigned long long __ATTRS_o_ai 4343vec_max(vector unsigned long long __a, vector unsigned long long __b) { 4344 return __builtin_altivec_vmaxud(__a, __b); 4345} 4346 4347static __inline__ vector unsigned long long __ATTRS_o_ai 4348vec_max(vector bool long long __a, vector unsigned long long __b) { 4349 return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b); 4350} 4351 4352static __inline__ vector unsigned long long __ATTRS_o_ai 4353vec_max(vector unsigned long long __a, vector bool long long __b) { 4354 return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b); 4355} 4356#endif 4357 4358static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a, 4359 vector float __b) { 4360#ifdef __VSX__ 4361 return __builtin_vsx_xvmaxsp(__a, __b); 4362#else 4363 return __builtin_altivec_vmaxfp(__a, __b); 4364#endif 4365} 4366 4367#ifdef __VSX__ 4368static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a, 4369 vector double __b) { 4370 return __builtin_vsx_xvmaxdp(__a, __b); 4371} 4372#endif 4373 4374/* vec_vmaxsb */ 4375 4376static __inline__ vector signed char __ATTRS_o_ai 4377vec_vmaxsb(vector signed char __a, vector signed char __b) { 4378 return __builtin_altivec_vmaxsb(__a, __b); 4379} 4380 4381static __inline__ vector signed char __ATTRS_o_ai 4382vec_vmaxsb(vector bool char __a, vector signed char __b) { 4383 return __builtin_altivec_vmaxsb((vector signed char)__a, __b); 4384} 4385 4386static __inline__ vector signed char __ATTRS_o_ai 4387vec_vmaxsb(vector signed char __a, vector bool char __b) { 4388 return __builtin_altivec_vmaxsb(__a, (vector signed char)__b); 4389} 4390 4391/* vec_vmaxub */ 4392 4393static __inline__ vector unsigned char __ATTRS_o_ai 4394vec_vmaxub(vector unsigned char __a, vector unsigned char __b) { 4395 return __builtin_altivec_vmaxub(__a, __b); 4396} 4397 4398static __inline__ vector unsigned char __ATTRS_o_ai 4399vec_vmaxub(vector bool char __a, vector unsigned char __b) { 4400 return __builtin_altivec_vmaxub((vector unsigned char)__a, __b); 4401} 4402 4403static __inline__ vector unsigned char __ATTRS_o_ai 4404vec_vmaxub(vector unsigned char __a, vector bool char __b) { 4405 return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b); 4406} 4407 4408/* vec_vmaxsh */ 4409 4410static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a, 4411 vector short __b) { 4412 return __builtin_altivec_vmaxsh(__a, __b); 4413} 4414 4415static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a, 4416 vector short __b) { 4417 return __builtin_altivec_vmaxsh((vector short)__a, __b); 4418} 4419 4420static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a, 4421 vector bool short __b) { 4422 return __builtin_altivec_vmaxsh(__a, (vector short)__b); 4423} 4424 4425/* vec_vmaxuh */ 4426 4427static __inline__ vector unsigned short __ATTRS_o_ai 4428vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) { 4429 return __builtin_altivec_vmaxuh(__a, __b); 4430} 4431 4432static __inline__ vector unsigned short __ATTRS_o_ai 4433vec_vmaxuh(vector bool short __a, vector unsigned short __b) { 4434 return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b); 4435} 4436 4437static __inline__ vector unsigned short __ATTRS_o_ai 4438vec_vmaxuh(vector unsigned short __a, vector bool short __b) { 4439 return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b); 4440} 4441 4442/* vec_vmaxsw */ 4443 4444static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a, 4445 vector int __b) { 4446 return __builtin_altivec_vmaxsw(__a, __b); 4447} 4448 4449static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a, 4450 vector int __b) { 4451 return __builtin_altivec_vmaxsw((vector int)__a, __b); 4452} 4453 4454static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a, 4455 vector bool int __b) { 4456 return __builtin_altivec_vmaxsw(__a, (vector int)__b); 4457} 4458 4459/* vec_vmaxuw */ 4460 4461static __inline__ vector unsigned int __ATTRS_o_ai 4462vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) { 4463 return __builtin_altivec_vmaxuw(__a, __b); 4464} 4465 4466static __inline__ vector unsigned int __ATTRS_o_ai 4467vec_vmaxuw(vector bool int __a, vector unsigned int __b) { 4468 return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b); 4469} 4470 4471static __inline__ vector unsigned int __ATTRS_o_ai 4472vec_vmaxuw(vector unsigned int __a, vector bool int __b) { 4473 return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b); 4474} 4475 4476/* vec_vmaxfp */ 4477 4478static __inline__ vector float __attribute__((__always_inline__)) 4479vec_vmaxfp(vector float __a, vector float __b) { 4480#ifdef __VSX__ 4481 return __builtin_vsx_xvmaxsp(__a, __b); 4482#else 4483 return __builtin_altivec_vmaxfp(__a, __b); 4484#endif 4485} 4486 4487/* vec_mergeh */ 4488 4489static __inline__ vector signed char __ATTRS_o_ai 4490vec_mergeh(vector signed char __a, vector signed char __b) { 4491 return vec_perm(__a, __b, 4492 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 4493 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, 4494 0x06, 0x16, 0x07, 0x17)); 4495} 4496 4497static __inline__ vector unsigned char __ATTRS_o_ai 4498vec_mergeh(vector unsigned char __a, vector unsigned char __b) { 4499 return vec_perm(__a, __b, 4500 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 4501 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, 4502 0x06, 0x16, 0x07, 0x17)); 4503} 4504 4505static __inline__ vector bool char __ATTRS_o_ai 4506vec_mergeh(vector bool char __a, vector bool char __b) { 4507 return vec_perm(__a, __b, 4508 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 4509 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, 4510 0x06, 0x16, 0x07, 0x17)); 4511} 4512 4513static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a, 4514 vector short __b) { 4515 return vec_perm(__a, __b, 4516 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4517 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4518 0x06, 0x07, 0x16, 0x17)); 4519} 4520 4521static __inline__ vector unsigned short __ATTRS_o_ai 4522vec_mergeh(vector unsigned short __a, vector unsigned short __b) { 4523 return vec_perm(__a, __b, 4524 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4525 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4526 0x06, 0x07, 0x16, 0x17)); 4527} 4528 4529static __inline__ vector bool short __ATTRS_o_ai 4530vec_mergeh(vector bool short __a, vector bool short __b) { 4531 return vec_perm(__a, __b, 4532 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4533 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4534 0x06, 0x07, 0x16, 0x17)); 4535} 4536 4537static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a, 4538 vector pixel __b) { 4539 return vec_perm(__a, __b, 4540 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4541 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4542 0x06, 0x07, 0x16, 0x17)); 4543} 4544 4545static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a, 4546 vector int __b) { 4547 return vec_perm(__a, __b, 4548 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4549 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4550 0x14, 0x15, 0x16, 0x17)); 4551} 4552 4553static __inline__ vector unsigned int __ATTRS_o_ai 4554vec_mergeh(vector unsigned int __a, vector unsigned int __b) { 4555 return vec_perm(__a, __b, 4556 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4557 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4558 0x14, 0x15, 0x16, 0x17)); 4559} 4560 4561static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a, 4562 vector bool int __b) { 4563 return vec_perm(__a, __b, 4564 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4565 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4566 0x14, 0x15, 0x16, 0x17)); 4567} 4568 4569static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a, 4570 vector float __b) { 4571 return vec_perm(__a, __b, 4572 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4573 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4574 0x14, 0x15, 0x16, 0x17)); 4575} 4576 4577#ifdef __VSX__ 4578static __inline__ vector signed long long __ATTRS_o_ai 4579vec_mergeh(vector signed long long __a, vector signed long long __b) { 4580 return vec_perm(__a, __b, 4581 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4582 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4583 0x14, 0x15, 0x16, 0x17)); 4584} 4585 4586static __inline__ vector signed long long __ATTRS_o_ai 4587vec_mergeh(vector signed long long __a, vector bool long long __b) { 4588 return vec_perm(__a, (vector signed long long)__b, 4589 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4590 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4591 0x14, 0x15, 0x16, 0x17)); 4592} 4593 4594static __inline__ vector signed long long __ATTRS_o_ai 4595vec_mergeh(vector bool long long __a, vector signed long long __b) { 4596 return vec_perm((vector signed long long)__a, __b, 4597 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4598 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4599 0x14, 0x15, 0x16, 0x17)); 4600} 4601 4602static __inline__ vector unsigned long long __ATTRS_o_ai 4603vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) { 4604 return vec_perm(__a, __b, 4605 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4606 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4607 0x14, 0x15, 0x16, 0x17)); 4608} 4609 4610static __inline__ vector unsigned long long __ATTRS_o_ai 4611vec_mergeh(vector unsigned long long __a, vector bool long long __b) { 4612 return vec_perm(__a, (vector unsigned long long)__b, 4613 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4614 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4615 0x14, 0x15, 0x16, 0x17)); 4616} 4617 4618static __inline__ vector unsigned long long __ATTRS_o_ai 4619vec_mergeh(vector bool long long __a, vector unsigned long long __b) { 4620 return vec_perm((vector unsigned long long)__a, __b, 4621 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4622 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4623 0x14, 0x15, 0x16, 0x17)); 4624} 4625 4626static __inline__ vector bool long long __ATTRS_o_ai 4627vec_mergeh(vector bool long long __a, vector bool long long __b) { 4628 return vec_perm(__a, __b, 4629 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4630 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4631 0x14, 0x15, 0x16, 0x17)); 4632} 4633 4634static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a, 4635 vector double __b) { 4636 return vec_perm(__a, __b, 4637 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4638 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4639 0x14, 0x15, 0x16, 0x17)); 4640} 4641static __inline__ vector double __ATTRS_o_ai 4642vec_mergeh(vector double __a, vector bool long long __b) { 4643 return vec_perm(__a, (vector double)__b, 4644 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4645 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4646 0x14, 0x15, 0x16, 0x17)); 4647} 4648static __inline__ vector double __ATTRS_o_ai 4649vec_mergeh(vector bool long long __a, vector double __b) { 4650 return vec_perm((vector double)__a, __b, 4651 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 4652 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 4653 0x14, 0x15, 0x16, 0x17)); 4654} 4655#endif 4656 4657/* vec_vmrghb */ 4658 4659#define __builtin_altivec_vmrghb vec_vmrghb 4660 4661static __inline__ vector signed char __ATTRS_o_ai 4662vec_vmrghb(vector signed char __a, vector signed char __b) { 4663 return vec_perm(__a, __b, 4664 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 4665 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, 4666 0x06, 0x16, 0x07, 0x17)); 4667} 4668 4669static __inline__ vector unsigned char __ATTRS_o_ai 4670vec_vmrghb(vector unsigned char __a, vector unsigned char __b) { 4671 return vec_perm(__a, __b, 4672 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 4673 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, 4674 0x06, 0x16, 0x07, 0x17)); 4675} 4676 4677static __inline__ vector bool char __ATTRS_o_ai 4678vec_vmrghb(vector bool char __a, vector bool char __b) { 4679 return vec_perm(__a, __b, 4680 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 4681 0x03, 0x13, 0x04, 0x14, 0x05, 0x15, 4682 0x06, 0x16, 0x07, 0x17)); 4683} 4684 4685/* vec_vmrghh */ 4686 4687#define __builtin_altivec_vmrghh vec_vmrghh 4688 4689static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a, 4690 vector short __b) { 4691 return vec_perm(__a, __b, 4692 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4693 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4694 0x06, 0x07, 0x16, 0x17)); 4695} 4696 4697static __inline__ vector unsigned short __ATTRS_o_ai 4698vec_vmrghh(vector unsigned short __a, vector unsigned short __b) { 4699 return vec_perm(__a, __b, 4700 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4701 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4702 0x06, 0x07, 0x16, 0x17)); 4703} 4704 4705static __inline__ vector bool short __ATTRS_o_ai 4706vec_vmrghh(vector bool short __a, vector bool short __b) { 4707 return vec_perm(__a, __b, 4708 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4709 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4710 0x06, 0x07, 0x16, 0x17)); 4711} 4712 4713static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a, 4714 vector pixel __b) { 4715 return vec_perm(__a, __b, 4716 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 4717 0x12, 0x13, 0x04, 0x05, 0x14, 0x15, 4718 0x06, 0x07, 0x16, 0x17)); 4719} 4720 4721/* vec_vmrghw */ 4722 4723#define __builtin_altivec_vmrghw vec_vmrghw 4724 4725static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a, 4726 vector int __b) { 4727 return vec_perm(__a, __b, 4728 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4729 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4730 0x14, 0x15, 0x16, 0x17)); 4731} 4732 4733static __inline__ vector unsigned int __ATTRS_o_ai 4734vec_vmrghw(vector unsigned int __a, vector unsigned int __b) { 4735 return vec_perm(__a, __b, 4736 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4737 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4738 0x14, 0x15, 0x16, 0x17)); 4739} 4740 4741static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a, 4742 vector bool int __b) { 4743 return vec_perm(__a, __b, 4744 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4745 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4746 0x14, 0x15, 0x16, 0x17)); 4747} 4748 4749static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a, 4750 vector float __b) { 4751 return vec_perm(__a, __b, 4752 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 4753 0x12, 0x13, 0x04, 0x05, 0x06, 0x07, 4754 0x14, 0x15, 0x16, 0x17)); 4755} 4756 4757/* vec_mergel */ 4758 4759static __inline__ vector signed char __ATTRS_o_ai 4760vec_mergel(vector signed char __a, vector signed char __b) { 4761 return vec_perm(__a, __b, 4762 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 4763 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, 4764 0x0E, 0x1E, 0x0F, 0x1F)); 4765} 4766 4767static __inline__ vector unsigned char __ATTRS_o_ai 4768vec_mergel(vector unsigned char __a, vector unsigned char __b) { 4769 return vec_perm(__a, __b, 4770 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 4771 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, 4772 0x0E, 0x1E, 0x0F, 0x1F)); 4773} 4774 4775static __inline__ vector bool char __ATTRS_o_ai 4776vec_mergel(vector bool char __a, vector bool char __b) { 4777 return vec_perm(__a, __b, 4778 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 4779 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, 4780 0x0E, 0x1E, 0x0F, 0x1F)); 4781} 4782 4783static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a, 4784 vector short __b) { 4785 return vec_perm(__a, __b, 4786 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4787 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4788 0x0E, 0x0F, 0x1E, 0x1F)); 4789} 4790 4791static __inline__ vector unsigned short __ATTRS_o_ai 4792vec_mergel(vector unsigned short __a, vector unsigned short __b) { 4793 return vec_perm(__a, __b, 4794 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4795 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4796 0x0E, 0x0F, 0x1E, 0x1F)); 4797} 4798 4799static __inline__ vector bool short __ATTRS_o_ai 4800vec_mergel(vector bool short __a, vector bool short __b) { 4801 return vec_perm(__a, __b, 4802 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4803 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4804 0x0E, 0x0F, 0x1E, 0x1F)); 4805} 4806 4807static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a, 4808 vector pixel __b) { 4809 return vec_perm(__a, __b, 4810 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4811 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4812 0x0E, 0x0F, 0x1E, 0x1F)); 4813} 4814 4815static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a, 4816 vector int __b) { 4817 return vec_perm(__a, __b, 4818 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 4819 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 4820 0x1C, 0x1D, 0x1E, 0x1F)); 4821} 4822 4823static __inline__ vector unsigned int __ATTRS_o_ai 4824vec_mergel(vector unsigned int __a, vector unsigned int __b) { 4825 return vec_perm(__a, __b, 4826 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 4827 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 4828 0x1C, 0x1D, 0x1E, 0x1F)); 4829} 4830 4831static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a, 4832 vector bool int __b) { 4833 return vec_perm(__a, __b, 4834 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 4835 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 4836 0x1C, 0x1D, 0x1E, 0x1F)); 4837} 4838 4839static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a, 4840 vector float __b) { 4841 return vec_perm(__a, __b, 4842 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 4843 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 4844 0x1C, 0x1D, 0x1E, 0x1F)); 4845} 4846 4847#ifdef __VSX__ 4848static __inline__ vector signed long long __ATTRS_o_ai 4849vec_mergel(vector signed long long __a, vector signed long long __b) { 4850 return vec_perm(__a, __b, 4851 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4852 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4853 0x1C, 0x1D, 0x1E, 0x1F)); 4854} 4855static __inline__ vector signed long long __ATTRS_o_ai 4856vec_mergel(vector signed long long __a, vector bool long long __b) { 4857 return vec_perm(__a, (vector signed long long)__b, 4858 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4859 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4860 0x1C, 0x1D, 0x1E, 0x1F)); 4861} 4862static __inline__ vector signed long long __ATTRS_o_ai 4863vec_mergel(vector bool long long __a, vector signed long long __b) { 4864 return vec_perm((vector signed long long)__a, __b, 4865 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4866 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4867 0x1C, 0x1D, 0x1E, 0x1F)); 4868} 4869static __inline__ vector unsigned long long __ATTRS_o_ai 4870vec_mergel(vector unsigned long long __a, vector unsigned long long __b) { 4871 return vec_perm(__a, __b, 4872 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4873 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4874 0x1C, 0x1D, 0x1E, 0x1F)); 4875} 4876static __inline__ vector unsigned long long __ATTRS_o_ai 4877vec_mergel(vector unsigned long long __a, vector bool long long __b) { 4878 return vec_perm(__a, (vector unsigned long long)__b, 4879 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4880 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4881 0x1C, 0x1D, 0x1E, 0x1F)); 4882} 4883static __inline__ vector unsigned long long __ATTRS_o_ai 4884vec_mergel(vector bool long long __a, vector unsigned long long __b) { 4885 return vec_perm((vector unsigned long long)__a, __b, 4886 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4887 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4888 0x1C, 0x1D, 0x1E, 0x1F)); 4889} 4890static __inline__ vector bool long long __ATTRS_o_ai 4891vec_mergel(vector bool long long __a, vector bool long long __b) { 4892 return vec_perm(__a, __b, 4893 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4894 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4895 0x1C, 0x1D, 0x1E, 0x1F)); 4896} 4897static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a, 4898 vector double __b) { 4899 return vec_perm(__a, __b, 4900 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4901 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4902 0x1C, 0x1D, 0x1E, 0x1F)); 4903} 4904static __inline__ vector double __ATTRS_o_ai 4905vec_mergel(vector double __a, vector bool long long __b) { 4906 return vec_perm(__a, (vector double)__b, 4907 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4908 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4909 0x1C, 0x1D, 0x1E, 0x1F)); 4910} 4911static __inline__ vector double __ATTRS_o_ai 4912vec_mergel(vector bool long long __a, vector double __b) { 4913 return vec_perm((vector double)__a, __b, 4914 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 4915 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B, 4916 0x1C, 0x1D, 0x1E, 0x1F)); 4917} 4918#endif 4919 4920/* vec_vmrglb */ 4921 4922#define __builtin_altivec_vmrglb vec_vmrglb 4923 4924static __inline__ vector signed char __ATTRS_o_ai 4925vec_vmrglb(vector signed char __a, vector signed char __b) { 4926 return vec_perm(__a, __b, 4927 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 4928 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, 4929 0x0E, 0x1E, 0x0F, 0x1F)); 4930} 4931 4932static __inline__ vector unsigned char __ATTRS_o_ai 4933vec_vmrglb(vector unsigned char __a, vector unsigned char __b) { 4934 return vec_perm(__a, __b, 4935 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 4936 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, 4937 0x0E, 0x1E, 0x0F, 0x1F)); 4938} 4939 4940static __inline__ vector bool char __ATTRS_o_ai 4941vec_vmrglb(vector bool char __a, vector bool char __b) { 4942 return vec_perm(__a, __b, 4943 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 4944 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D, 4945 0x0E, 0x1E, 0x0F, 0x1F)); 4946} 4947 4948/* vec_vmrglh */ 4949 4950#define __builtin_altivec_vmrglh vec_vmrglh 4951 4952static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a, 4953 vector short __b) { 4954 return vec_perm(__a, __b, 4955 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4956 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4957 0x0E, 0x0F, 0x1E, 0x1F)); 4958} 4959 4960static __inline__ vector unsigned short __ATTRS_o_ai 4961vec_vmrglh(vector unsigned short __a, vector unsigned short __b) { 4962 return vec_perm(__a, __b, 4963 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4964 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4965 0x0E, 0x0F, 0x1E, 0x1F)); 4966} 4967 4968static __inline__ vector bool short __ATTRS_o_ai 4969vec_vmrglh(vector bool short __a, vector bool short __b) { 4970 return vec_perm(__a, __b, 4971 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4972 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4973 0x0E, 0x0F, 0x1E, 0x1F)); 4974} 4975 4976static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a, 4977 vector pixel __b) { 4978 return vec_perm(__a, __b, 4979 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 4980 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D, 4981 0x0E, 0x0F, 0x1E, 0x1F)); 4982} 4983 4984/* vec_vmrglw */ 4985 4986#define __builtin_altivec_vmrglw vec_vmrglw 4987 4988static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a, 4989 vector int __b) { 4990 return vec_perm(__a, __b, 4991 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 4992 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 4993 0x1C, 0x1D, 0x1E, 0x1F)); 4994} 4995 4996static __inline__ vector unsigned int __ATTRS_o_ai 4997vec_vmrglw(vector unsigned int __a, vector unsigned int __b) { 4998 return vec_perm(__a, __b, 4999 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 5000 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 5001 0x1C, 0x1D, 0x1E, 0x1F)); 5002} 5003 5004static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a, 5005 vector bool int __b) { 5006 return vec_perm(__a, __b, 5007 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 5008 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 5009 0x1C, 0x1D, 0x1E, 0x1F)); 5010} 5011 5012static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a, 5013 vector float __b) { 5014 return vec_perm(__a, __b, 5015 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 5016 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F, 5017 0x1C, 0x1D, 0x1E, 0x1F)); 5018} 5019 5020#ifdef __POWER8_VECTOR__ 5021/* vec_mergee */ 5022 5023static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a, 5024 vector bool int __b) { 5025 return vec_perm(__a, __b, 5026 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 5027 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B, 5028 0x18, 0x19, 0x1A, 0x1B)); 5029} 5030 5031static __inline__ vector signed int __ATTRS_o_ai 5032vec_mergee(vector signed int __a, vector signed int __b) { 5033 return vec_perm(__a, __b, 5034 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 5035 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B, 5036 0x18, 0x19, 0x1A, 0x1B)); 5037} 5038 5039static __inline__ vector unsigned int __ATTRS_o_ai 5040vec_mergee(vector unsigned int __a, vector unsigned int __b) { 5041 return vec_perm(__a, __b, 5042 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 5043 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B, 5044 0x18, 0x19, 0x1A, 0x1B)); 5045} 5046 5047static __inline__ vector bool long long __ATTRS_o_ai 5048vec_mergee(vector bool long long __a, vector bool long long __b) { 5049 return vec_mergeh(__a, __b); 5050} 5051 5052static __inline__ vector signed long long __ATTRS_o_ai 5053vec_mergee(vector signed long long __a, vector signed long long __b) { 5054 return vec_mergeh(__a, __b); 5055} 5056 5057static __inline__ vector unsigned long long __ATTRS_o_ai 5058vec_mergee(vector unsigned long long __a, vector unsigned long long __b) { 5059 return vec_mergeh(__a, __b); 5060} 5061 5062static __inline__ vector float __ATTRS_o_ai 5063vec_mergee(vector float __a, vector float __b) { 5064 return vec_perm(__a, __b, 5065 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 5066 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B, 5067 0x18, 0x19, 0x1A, 0x1B)); 5068} 5069 5070static __inline__ vector double __ATTRS_o_ai 5071vec_mergee(vector double __a, vector double __b) { 5072 return vec_mergeh(__a, __b); 5073} 5074 5075/* vec_mergeo */ 5076 5077static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a, 5078 vector bool int __b) { 5079 return vec_perm(__a, __b, 5080 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 5081 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F, 5082 0x1C, 0x1D, 0x1E, 0x1F)); 5083} 5084 5085static __inline__ vector signed int __ATTRS_o_ai 5086vec_mergeo(vector signed int __a, vector signed int __b) { 5087 return vec_perm(__a, __b, 5088 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 5089 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F, 5090 0x1C, 0x1D, 0x1E, 0x1F)); 5091} 5092 5093static __inline__ vector unsigned int __ATTRS_o_ai 5094vec_mergeo(vector unsigned int __a, vector unsigned int __b) { 5095 return vec_perm(__a, __b, 5096 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 5097 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F, 5098 0x1C, 0x1D, 0x1E, 0x1F)); 5099} 5100 5101static __inline__ vector bool long long __ATTRS_o_ai 5102vec_mergeo(vector bool long long __a, vector bool long long __b) { 5103 return vec_mergel(__a, __b); 5104} 5105 5106static __inline__ vector signed long long __ATTRS_o_ai 5107vec_mergeo(vector signed long long __a, vector signed long long __b) { 5108 return vec_mergel(__a, __b); 5109} 5110 5111static __inline__ vector unsigned long long __ATTRS_o_ai 5112vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) { 5113 return vec_mergel(__a, __b); 5114} 5115 5116static __inline__ vector float __ATTRS_o_ai 5117vec_mergeo(vector float __a, vector float __b) { 5118 return vec_perm(__a, __b, 5119 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 5120 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F, 5121 0x1C, 0x1D, 0x1E, 0x1F)); 5122} 5123 5124static __inline__ vector double __ATTRS_o_ai 5125vec_mergeo(vector double __a, vector double __b) { 5126 return vec_mergel(__a, __b); 5127} 5128 5129#endif 5130 5131/* vec_mfvscr */ 5132 5133static __inline__ vector unsigned short __attribute__((__always_inline__)) 5134vec_mfvscr(void) { 5135 return __builtin_altivec_mfvscr(); 5136} 5137 5138/* vec_min */ 5139 5140static __inline__ vector signed char __ATTRS_o_ai 5141vec_min(vector signed char __a, vector signed char __b) { 5142 return __builtin_altivec_vminsb(__a, __b); 5143} 5144 5145static __inline__ vector signed char __ATTRS_o_ai 5146vec_min(vector bool char __a, vector signed char __b) { 5147 return __builtin_altivec_vminsb((vector signed char)__a, __b); 5148} 5149 5150static __inline__ vector signed char __ATTRS_o_ai 5151vec_min(vector signed char __a, vector bool char __b) { 5152 return __builtin_altivec_vminsb(__a, (vector signed char)__b); 5153} 5154 5155static __inline__ vector unsigned char __ATTRS_o_ai 5156vec_min(vector unsigned char __a, vector unsigned char __b) { 5157 return __builtin_altivec_vminub(__a, __b); 5158} 5159 5160static __inline__ vector unsigned char __ATTRS_o_ai 5161vec_min(vector bool char __a, vector unsigned char __b) { 5162 return __builtin_altivec_vminub((vector unsigned char)__a, __b); 5163} 5164 5165static __inline__ vector unsigned char __ATTRS_o_ai 5166vec_min(vector unsigned char __a, vector bool char __b) { 5167 return __builtin_altivec_vminub(__a, (vector unsigned char)__b); 5168} 5169 5170static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a, 5171 vector short __b) { 5172 return __builtin_altivec_vminsh(__a, __b); 5173} 5174 5175static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a, 5176 vector short __b) { 5177 return __builtin_altivec_vminsh((vector short)__a, __b); 5178} 5179 5180static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a, 5181 vector bool short __b) { 5182 return __builtin_altivec_vminsh(__a, (vector short)__b); 5183} 5184 5185static __inline__ vector unsigned short __ATTRS_o_ai 5186vec_min(vector unsigned short __a, vector unsigned short __b) { 5187 return __builtin_altivec_vminuh(__a, __b); 5188} 5189 5190static __inline__ vector unsigned short __ATTRS_o_ai 5191vec_min(vector bool short __a, vector unsigned short __b) { 5192 return __builtin_altivec_vminuh((vector unsigned short)__a, __b); 5193} 5194 5195static __inline__ vector unsigned short __ATTRS_o_ai 5196vec_min(vector unsigned short __a, vector bool short __b) { 5197 return __builtin_altivec_vminuh(__a, (vector unsigned short)__b); 5198} 5199 5200static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a, 5201 vector int __b) { 5202 return __builtin_altivec_vminsw(__a, __b); 5203} 5204 5205static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a, 5206 vector int __b) { 5207 return __builtin_altivec_vminsw((vector int)__a, __b); 5208} 5209 5210static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a, 5211 vector bool int __b) { 5212 return __builtin_altivec_vminsw(__a, (vector int)__b); 5213} 5214 5215static __inline__ vector unsigned int __ATTRS_o_ai 5216vec_min(vector unsigned int __a, vector unsigned int __b) { 5217 return __builtin_altivec_vminuw(__a, __b); 5218} 5219 5220static __inline__ vector unsigned int __ATTRS_o_ai 5221vec_min(vector bool int __a, vector unsigned int __b) { 5222 return __builtin_altivec_vminuw((vector unsigned int)__a, __b); 5223} 5224 5225static __inline__ vector unsigned int __ATTRS_o_ai 5226vec_min(vector unsigned int __a, vector bool int __b) { 5227 return __builtin_altivec_vminuw(__a, (vector unsigned int)__b); 5228} 5229 5230#ifdef __POWER8_VECTOR__ 5231static __inline__ vector signed long long __ATTRS_o_ai 5232vec_min(vector signed long long __a, vector signed long long __b) { 5233 return __builtin_altivec_vminsd(__a, __b); 5234} 5235 5236static __inline__ vector signed long long __ATTRS_o_ai 5237vec_min(vector bool long long __a, vector signed long long __b) { 5238 return __builtin_altivec_vminsd((vector signed long long)__a, __b); 5239} 5240 5241static __inline__ vector signed long long __ATTRS_o_ai 5242vec_min(vector signed long long __a, vector bool long long __b) { 5243 return __builtin_altivec_vminsd(__a, (vector signed long long)__b); 5244} 5245 5246static __inline__ vector unsigned long long __ATTRS_o_ai 5247vec_min(vector unsigned long long __a, vector unsigned long long __b) { 5248 return __builtin_altivec_vminud(__a, __b); 5249} 5250 5251static __inline__ vector unsigned long long __ATTRS_o_ai 5252vec_min(vector bool long long __a, vector unsigned long long __b) { 5253 return __builtin_altivec_vminud((vector unsigned long long)__a, __b); 5254} 5255 5256static __inline__ vector unsigned long long __ATTRS_o_ai 5257vec_min(vector unsigned long long __a, vector bool long long __b) { 5258 return __builtin_altivec_vminud(__a, (vector unsigned long long)__b); 5259} 5260#endif 5261 5262static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a, 5263 vector float __b) { 5264#ifdef __VSX__ 5265 return __builtin_vsx_xvminsp(__a, __b); 5266#else 5267 return __builtin_altivec_vminfp(__a, __b); 5268#endif 5269} 5270 5271#ifdef __VSX__ 5272static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a, 5273 vector double __b) { 5274 return __builtin_vsx_xvmindp(__a, __b); 5275} 5276#endif 5277 5278/* vec_vminsb */ 5279 5280static __inline__ vector signed char __ATTRS_o_ai 5281vec_vminsb(vector signed char __a, vector signed char __b) { 5282 return __builtin_altivec_vminsb(__a, __b); 5283} 5284 5285static __inline__ vector signed char __ATTRS_o_ai 5286vec_vminsb(vector bool char __a, vector signed char __b) { 5287 return __builtin_altivec_vminsb((vector signed char)__a, __b); 5288} 5289 5290static __inline__ vector signed char __ATTRS_o_ai 5291vec_vminsb(vector signed char __a, vector bool char __b) { 5292 return __builtin_altivec_vminsb(__a, (vector signed char)__b); 5293} 5294 5295/* vec_vminub */ 5296 5297static __inline__ vector unsigned char __ATTRS_o_ai 5298vec_vminub(vector unsigned char __a, vector unsigned char __b) { 5299 return __builtin_altivec_vminub(__a, __b); 5300} 5301 5302static __inline__ vector unsigned char __ATTRS_o_ai 5303vec_vminub(vector bool char __a, vector unsigned char __b) { 5304 return __builtin_altivec_vminub((vector unsigned char)__a, __b); 5305} 5306 5307static __inline__ vector unsigned char __ATTRS_o_ai 5308vec_vminub(vector unsigned char __a, vector bool char __b) { 5309 return __builtin_altivec_vminub(__a, (vector unsigned char)__b); 5310} 5311 5312/* vec_vminsh */ 5313 5314static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a, 5315 vector short __b) { 5316 return __builtin_altivec_vminsh(__a, __b); 5317} 5318 5319static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a, 5320 vector short __b) { 5321 return __builtin_altivec_vminsh((vector short)__a, __b); 5322} 5323 5324static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a, 5325 vector bool short __b) { 5326 return __builtin_altivec_vminsh(__a, (vector short)__b); 5327} 5328 5329/* vec_vminuh */ 5330 5331static __inline__ vector unsigned short __ATTRS_o_ai 5332vec_vminuh(vector unsigned short __a, vector unsigned short __b) { 5333 return __builtin_altivec_vminuh(__a, __b); 5334} 5335 5336static __inline__ vector unsigned short __ATTRS_o_ai 5337vec_vminuh(vector bool short __a, vector unsigned short __b) { 5338 return __builtin_altivec_vminuh((vector unsigned short)__a, __b); 5339} 5340 5341static __inline__ vector unsigned short __ATTRS_o_ai 5342vec_vminuh(vector unsigned short __a, vector bool short __b) { 5343 return __builtin_altivec_vminuh(__a, (vector unsigned short)__b); 5344} 5345 5346/* vec_vminsw */ 5347 5348static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a, 5349 vector int __b) { 5350 return __builtin_altivec_vminsw(__a, __b); 5351} 5352 5353static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a, 5354 vector int __b) { 5355 return __builtin_altivec_vminsw((vector int)__a, __b); 5356} 5357 5358static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a, 5359 vector bool int __b) { 5360 return __builtin_altivec_vminsw(__a, (vector int)__b); 5361} 5362 5363/* vec_vminuw */ 5364 5365static __inline__ vector unsigned int __ATTRS_o_ai 5366vec_vminuw(vector unsigned int __a, vector unsigned int __b) { 5367 return __builtin_altivec_vminuw(__a, __b); 5368} 5369 5370static __inline__ vector unsigned int __ATTRS_o_ai 5371vec_vminuw(vector bool int __a, vector unsigned int __b) { 5372 return __builtin_altivec_vminuw((vector unsigned int)__a, __b); 5373} 5374 5375static __inline__ vector unsigned int __ATTRS_o_ai 5376vec_vminuw(vector unsigned int __a, vector bool int __b) { 5377 return __builtin_altivec_vminuw(__a, (vector unsigned int)__b); 5378} 5379 5380/* vec_vminfp */ 5381 5382static __inline__ vector float __attribute__((__always_inline__)) 5383vec_vminfp(vector float __a, vector float __b) { 5384#ifdef __VSX__ 5385 return __builtin_vsx_xvminsp(__a, __b); 5386#else 5387 return __builtin_altivec_vminfp(__a, __b); 5388#endif 5389} 5390 5391/* vec_mladd */ 5392 5393#define __builtin_altivec_vmladduhm vec_mladd 5394 5395static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a, 5396 vector short __b, 5397 vector short __c) { 5398 return __a * __b + __c; 5399} 5400 5401static __inline__ vector short __ATTRS_o_ai vec_mladd( 5402 vector short __a, vector unsigned short __b, vector unsigned short __c) { 5403 return __a * (vector short)__b + (vector short)__c; 5404} 5405 5406static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a, 5407 vector short __b, 5408 vector short __c) { 5409 return (vector short)__a * __b + __c; 5410} 5411 5412static __inline__ vector unsigned short __ATTRS_o_ai 5413vec_mladd(vector unsigned short __a, vector unsigned short __b, 5414 vector unsigned short __c) { 5415 return __a * __b + __c; 5416} 5417 5418/* vec_vmladduhm */ 5419 5420static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a, 5421 vector short __b, 5422 vector short __c) { 5423 return __a * __b + __c; 5424} 5425 5426static __inline__ vector short __ATTRS_o_ai vec_vmladduhm( 5427 vector short __a, vector unsigned short __b, vector unsigned short __c) { 5428 return __a * (vector short)__b + (vector short)__c; 5429} 5430 5431static __inline__ vector short __ATTRS_o_ai 5432vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) { 5433 return (vector short)__a * __b + __c; 5434} 5435 5436static __inline__ vector unsigned short __ATTRS_o_ai 5437vec_vmladduhm(vector unsigned short __a, vector unsigned short __b, 5438 vector unsigned short __c) { 5439 return __a * __b + __c; 5440} 5441 5442/* vec_mradds */ 5443 5444static __inline__ vector short __attribute__((__always_inline__)) 5445vec_mradds(vector short __a, vector short __b, vector short __c) { 5446 return __builtin_altivec_vmhraddshs(__a, __b, __c); 5447} 5448 5449/* vec_vmhraddshs */ 5450 5451static __inline__ vector short __attribute__((__always_inline__)) 5452vec_vmhraddshs(vector short __a, vector short __b, vector short __c) { 5453 return __builtin_altivec_vmhraddshs(__a, __b, __c); 5454} 5455 5456/* vec_msum */ 5457 5458static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a, 5459 vector unsigned char __b, 5460 vector int __c) { 5461 return __builtin_altivec_vmsummbm(__a, __b, __c); 5462} 5463 5464static __inline__ vector unsigned int __ATTRS_o_ai 5465vec_msum(vector unsigned char __a, vector unsigned char __b, 5466 vector unsigned int __c) { 5467 return __builtin_altivec_vmsumubm(__a, __b, __c); 5468} 5469 5470static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a, 5471 vector short __b, 5472 vector int __c) { 5473 return __builtin_altivec_vmsumshm(__a, __b, __c); 5474} 5475 5476static __inline__ vector unsigned int __ATTRS_o_ai 5477vec_msum(vector unsigned short __a, vector unsigned short __b, 5478 vector unsigned int __c) { 5479 return __builtin_altivec_vmsumuhm(__a, __b, __c); 5480} 5481 5482/* vec_vmsummbm */ 5483 5484static __inline__ vector int __attribute__((__always_inline__)) 5485vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) { 5486 return __builtin_altivec_vmsummbm(__a, __b, __c); 5487} 5488 5489/* vec_vmsumubm */ 5490 5491static __inline__ vector unsigned int __attribute__((__always_inline__)) 5492vec_vmsumubm(vector unsigned char __a, vector unsigned char __b, 5493 vector unsigned int __c) { 5494 return __builtin_altivec_vmsumubm(__a, __b, __c); 5495} 5496 5497/* vec_vmsumshm */ 5498 5499static __inline__ vector int __attribute__((__always_inline__)) 5500vec_vmsumshm(vector short __a, vector short __b, vector int __c) { 5501 return __builtin_altivec_vmsumshm(__a, __b, __c); 5502} 5503 5504/* vec_vmsumuhm */ 5505 5506static __inline__ vector unsigned int __attribute__((__always_inline__)) 5507vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b, 5508 vector unsigned int __c) { 5509 return __builtin_altivec_vmsumuhm(__a, __b, __c); 5510} 5511 5512/* vec_msums */ 5513 5514static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a, 5515 vector short __b, 5516 vector int __c) { 5517 return __builtin_altivec_vmsumshs(__a, __b, __c); 5518} 5519 5520static __inline__ vector unsigned int __ATTRS_o_ai 5521vec_msums(vector unsigned short __a, vector unsigned short __b, 5522 vector unsigned int __c) { 5523 return __builtin_altivec_vmsumuhs(__a, __b, __c); 5524} 5525 5526/* vec_vmsumshs */ 5527 5528static __inline__ vector int __attribute__((__always_inline__)) 5529vec_vmsumshs(vector short __a, vector short __b, vector int __c) { 5530 return __builtin_altivec_vmsumshs(__a, __b, __c); 5531} 5532 5533/* vec_vmsumuhs */ 5534 5535static __inline__ vector unsigned int __attribute__((__always_inline__)) 5536vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b, 5537 vector unsigned int __c) { 5538 return __builtin_altivec_vmsumuhs(__a, __b, __c); 5539} 5540 5541/* vec_mtvscr */ 5542 5543static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) { 5544 __builtin_altivec_mtvscr((vector int)__a); 5545} 5546 5547static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) { 5548 __builtin_altivec_mtvscr((vector int)__a); 5549} 5550 5551static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) { 5552 __builtin_altivec_mtvscr((vector int)__a); 5553} 5554 5555static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) { 5556 __builtin_altivec_mtvscr((vector int)__a); 5557} 5558 5559static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) { 5560 __builtin_altivec_mtvscr((vector int)__a); 5561} 5562 5563static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) { 5564 __builtin_altivec_mtvscr((vector int)__a); 5565} 5566 5567static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) { 5568 __builtin_altivec_mtvscr((vector int)__a); 5569} 5570 5571static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) { 5572 __builtin_altivec_mtvscr((vector int)__a); 5573} 5574 5575static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) { 5576 __builtin_altivec_mtvscr((vector int)__a); 5577} 5578 5579static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) { 5580 __builtin_altivec_mtvscr((vector int)__a); 5581} 5582 5583static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) { 5584 __builtin_altivec_mtvscr((vector int)__a); 5585} 5586 5587/* vec_mul */ 5588 5589/* Integer vector multiplication will involve multiplication of the odd/even 5590 elements separately, then truncating the results and moving to the 5591 result vector. 5592*/ 5593static __inline__ vector signed char __ATTRS_o_ai 5594vec_mul(vector signed char __a, vector signed char __b) { 5595 return __a * __b; 5596} 5597 5598static __inline__ vector unsigned char __ATTRS_o_ai 5599vec_mul(vector unsigned char __a, vector unsigned char __b) { 5600 return __a * __b; 5601} 5602 5603static __inline__ vector signed short __ATTRS_o_ai 5604vec_mul(vector signed short __a, vector signed short __b) { 5605 return __a * __b; 5606} 5607 5608static __inline__ vector unsigned short __ATTRS_o_ai 5609vec_mul(vector unsigned short __a, vector unsigned short __b) { 5610 return __a * __b; 5611} 5612 5613static __inline__ vector signed int __ATTRS_o_ai 5614vec_mul(vector signed int __a, vector signed int __b) { 5615 return __a * __b; 5616} 5617 5618static __inline__ vector unsigned int __ATTRS_o_ai 5619vec_mul(vector unsigned int __a, vector unsigned int __b) { 5620 return __a * __b; 5621} 5622 5623#ifdef __VSX__ 5624static __inline__ vector signed long long __ATTRS_o_ai 5625vec_mul(vector signed long long __a, vector signed long long __b) { 5626 return __a * __b; 5627} 5628 5629static __inline__ vector unsigned long long __ATTRS_o_ai 5630vec_mul(vector unsigned long long __a, vector unsigned long long __b) { 5631 return __a * __b; 5632} 5633#endif 5634 5635static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a, 5636 vector float __b) { 5637 return __a * __b; 5638} 5639 5640#ifdef __VSX__ 5641static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a, 5642 vector double __b) { 5643 return __a * __b; 5644} 5645#endif 5646 5647/* The vmulos* and vmules* instructions have a big endian bias, so 5648 we must reverse the meaning of "even" and "odd" for little endian. */ 5649 5650/* vec_mule */ 5651 5652static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a, 5653 vector signed char __b) { 5654#ifdef __LITTLE_ENDIAN__ 5655 return __builtin_altivec_vmulosb(__a, __b); 5656#else 5657 return __builtin_altivec_vmulesb(__a, __b); 5658#endif 5659} 5660 5661static __inline__ vector unsigned short __ATTRS_o_ai 5662vec_mule(vector unsigned char __a, vector unsigned char __b) { 5663#ifdef __LITTLE_ENDIAN__ 5664 return __builtin_altivec_vmuloub(__a, __b); 5665#else 5666 return __builtin_altivec_vmuleub(__a, __b); 5667#endif 5668} 5669 5670static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a, 5671 vector short __b) { 5672#ifdef __LITTLE_ENDIAN__ 5673 return __builtin_altivec_vmulosh(__a, __b); 5674#else 5675 return __builtin_altivec_vmulesh(__a, __b); 5676#endif 5677} 5678 5679static __inline__ vector unsigned int __ATTRS_o_ai 5680vec_mule(vector unsigned short __a, vector unsigned short __b) { 5681#ifdef __LITTLE_ENDIAN__ 5682 return __builtin_altivec_vmulouh(__a, __b); 5683#else 5684 return __builtin_altivec_vmuleuh(__a, __b); 5685#endif 5686} 5687 5688#ifdef __POWER8_VECTOR__ 5689static __inline__ vector signed long long __ATTRS_o_ai 5690vec_mule(vector signed int __a, vector signed int __b) { 5691#ifdef __LITTLE_ENDIAN__ 5692 return __builtin_altivec_vmulosw(__a, __b); 5693#else 5694 return __builtin_altivec_vmulesw(__a, __b); 5695#endif 5696} 5697 5698static __inline__ vector unsigned long long __ATTRS_o_ai 5699vec_mule(vector unsigned int __a, vector unsigned int __b) { 5700#ifdef __LITTLE_ENDIAN__ 5701 return __builtin_altivec_vmulouw(__a, __b); 5702#else 5703 return __builtin_altivec_vmuleuw(__a, __b); 5704#endif 5705} 5706#endif 5707 5708/* vec_vmulesb */ 5709 5710static __inline__ vector short __attribute__((__always_inline__)) 5711vec_vmulesb(vector signed char __a, vector signed char __b) { 5712#ifdef __LITTLE_ENDIAN__ 5713 return __builtin_altivec_vmulosb(__a, __b); 5714#else 5715 return __builtin_altivec_vmulesb(__a, __b); 5716#endif 5717} 5718 5719/* vec_vmuleub */ 5720 5721static __inline__ vector unsigned short __attribute__((__always_inline__)) 5722vec_vmuleub(vector unsigned char __a, vector unsigned char __b) { 5723#ifdef __LITTLE_ENDIAN__ 5724 return __builtin_altivec_vmuloub(__a, __b); 5725#else 5726 return __builtin_altivec_vmuleub(__a, __b); 5727#endif 5728} 5729 5730/* vec_vmulesh */ 5731 5732static __inline__ vector int __attribute__((__always_inline__)) 5733vec_vmulesh(vector short __a, vector short __b) { 5734#ifdef __LITTLE_ENDIAN__ 5735 return __builtin_altivec_vmulosh(__a, __b); 5736#else 5737 return __builtin_altivec_vmulesh(__a, __b); 5738#endif 5739} 5740 5741/* vec_vmuleuh */ 5742 5743static __inline__ vector unsigned int __attribute__((__always_inline__)) 5744vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) { 5745#ifdef __LITTLE_ENDIAN__ 5746 return __builtin_altivec_vmulouh(__a, __b); 5747#else 5748 return __builtin_altivec_vmuleuh(__a, __b); 5749#endif 5750} 5751 5752/* vec_mulo */ 5753 5754static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a, 5755 vector signed char __b) { 5756#ifdef __LITTLE_ENDIAN__ 5757 return __builtin_altivec_vmulesb(__a, __b); 5758#else 5759 return __builtin_altivec_vmulosb(__a, __b); 5760#endif 5761} 5762 5763static __inline__ vector unsigned short __ATTRS_o_ai 5764vec_mulo(vector unsigned char __a, vector unsigned char __b) { 5765#ifdef __LITTLE_ENDIAN__ 5766 return __builtin_altivec_vmuleub(__a, __b); 5767#else 5768 return __builtin_altivec_vmuloub(__a, __b); 5769#endif 5770} 5771 5772static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a, 5773 vector short __b) { 5774#ifdef __LITTLE_ENDIAN__ 5775 return __builtin_altivec_vmulesh(__a, __b); 5776#else 5777 return __builtin_altivec_vmulosh(__a, __b); 5778#endif 5779} 5780 5781static __inline__ vector unsigned int __ATTRS_o_ai 5782vec_mulo(vector unsigned short __a, vector unsigned short __b) { 5783#ifdef __LITTLE_ENDIAN__ 5784 return __builtin_altivec_vmuleuh(__a, __b); 5785#else 5786 return __builtin_altivec_vmulouh(__a, __b); 5787#endif 5788} 5789 5790#ifdef __POWER8_VECTOR__ 5791static __inline__ vector signed long long __ATTRS_o_ai 5792vec_mulo(vector signed int __a, vector signed int __b) { 5793#ifdef __LITTLE_ENDIAN__ 5794 return __builtin_altivec_vmulesw(__a, __b); 5795#else 5796 return __builtin_altivec_vmulosw(__a, __b); 5797#endif 5798} 5799 5800static __inline__ vector unsigned long long __ATTRS_o_ai 5801vec_mulo(vector unsigned int __a, vector unsigned int __b) { 5802#ifdef __LITTLE_ENDIAN__ 5803 return __builtin_altivec_vmuleuw(__a, __b); 5804#else 5805 return __builtin_altivec_vmulouw(__a, __b); 5806#endif 5807} 5808#endif 5809 5810/* vec_vmulosb */ 5811 5812static __inline__ vector short __attribute__((__always_inline__)) 5813vec_vmulosb(vector signed char __a, vector signed char __b) { 5814#ifdef __LITTLE_ENDIAN__ 5815 return __builtin_altivec_vmulesb(__a, __b); 5816#else 5817 return __builtin_altivec_vmulosb(__a, __b); 5818#endif 5819} 5820 5821/* vec_vmuloub */ 5822 5823static __inline__ vector unsigned short __attribute__((__always_inline__)) 5824vec_vmuloub(vector unsigned char __a, vector unsigned char __b) { 5825#ifdef __LITTLE_ENDIAN__ 5826 return __builtin_altivec_vmuleub(__a, __b); 5827#else 5828 return __builtin_altivec_vmuloub(__a, __b); 5829#endif 5830} 5831 5832/* vec_vmulosh */ 5833 5834static __inline__ vector int __attribute__((__always_inline__)) 5835vec_vmulosh(vector short __a, vector short __b) { 5836#ifdef __LITTLE_ENDIAN__ 5837 return __builtin_altivec_vmulesh(__a, __b); 5838#else 5839 return __builtin_altivec_vmulosh(__a, __b); 5840#endif 5841} 5842 5843/* vec_vmulouh */ 5844 5845static __inline__ vector unsigned int __attribute__((__always_inline__)) 5846vec_vmulouh(vector unsigned short __a, vector unsigned short __b) { 5847#ifdef __LITTLE_ENDIAN__ 5848 return __builtin_altivec_vmuleuh(__a, __b); 5849#else 5850 return __builtin_altivec_vmulouh(__a, __b); 5851#endif 5852} 5853 5854/* vec_nand */ 5855 5856#ifdef __POWER8_VECTOR__ 5857static __inline__ vector signed char __ATTRS_o_ai 5858vec_nand(vector signed char __a, vector signed char __b) { 5859 return ~(__a & __b); 5860} 5861 5862static __inline__ vector signed char __ATTRS_o_ai 5863vec_nand(vector signed char __a, vector bool char __b) { 5864 return ~(__a & __b); 5865} 5866 5867static __inline__ vector signed char __ATTRS_o_ai 5868vec_nand(vector bool char __a, vector signed char __b) { 5869 return ~(__a & __b); 5870} 5871 5872static __inline__ vector unsigned char __ATTRS_o_ai 5873vec_nand(vector unsigned char __a, vector unsigned char __b) { 5874 return ~(__a & __b); 5875} 5876 5877static __inline__ vector unsigned char __ATTRS_o_ai 5878vec_nand(vector unsigned char __a, vector bool char __b) { 5879 return ~(__a & __b); 5880} 5881 5882static __inline__ vector unsigned char __ATTRS_o_ai 5883vec_nand(vector bool char __a, vector unsigned char __b) { 5884 return ~(__a & __b); 5885} 5886 5887static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a, 5888 vector bool char __b) { 5889 return ~(__a & __b); 5890} 5891 5892static __inline__ vector signed short __ATTRS_o_ai 5893vec_nand(vector signed short __a, vector signed short __b) { 5894 return ~(__a & __b); 5895} 5896 5897static __inline__ vector signed short __ATTRS_o_ai 5898vec_nand(vector signed short __a, vector bool short __b) { 5899 return ~(__a & __b); 5900} 5901 5902static __inline__ vector signed short __ATTRS_o_ai 5903vec_nand(vector bool short __a, vector signed short __b) { 5904 return ~(__a & __b); 5905} 5906 5907static __inline__ vector unsigned short __ATTRS_o_ai 5908vec_nand(vector unsigned short __a, vector unsigned short __b) { 5909 return ~(__a & __b); 5910} 5911 5912static __inline__ vector unsigned short __ATTRS_o_ai 5913vec_nand(vector unsigned short __a, vector bool short __b) { 5914 return ~(__a & __b); 5915} 5916 5917static __inline__ vector bool short __ATTRS_o_ai 5918vec_nand(vector bool short __a, vector bool short __b) { 5919 return ~(__a & __b); 5920} 5921 5922static __inline__ vector signed int __ATTRS_o_ai 5923vec_nand(vector signed int __a, vector signed int __b) { 5924 return ~(__a & __b); 5925} 5926 5927static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a, 5928 vector bool int __b) { 5929 return ~(__a & __b); 5930} 5931 5932static __inline__ vector signed int __ATTRS_o_ai 5933vec_nand(vector bool int __a, vector signed int __b) { 5934 return ~(__a & __b); 5935} 5936 5937static __inline__ vector unsigned int __ATTRS_o_ai 5938vec_nand(vector unsigned int __a, vector unsigned int __b) { 5939 return ~(__a & __b); 5940} 5941 5942static __inline__ vector unsigned int __ATTRS_o_ai 5943vec_nand(vector unsigned int __a, vector bool int __b) { 5944 return ~(__a & __b); 5945} 5946 5947static __inline__ vector unsigned int __ATTRS_o_ai 5948vec_nand(vector bool int __a, vector unsigned int __b) { 5949 return ~(__a & __b); 5950} 5951 5952static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a, 5953 vector bool int __b) { 5954 return ~(__a & __b); 5955} 5956 5957static __inline__ vector float __ATTRS_o_ai 5958vec_nand(vector float __a, vector float __b) { 5959 return (vector float)(~((vector unsigned int)__a & 5960 (vector unsigned int)__b)); 5961} 5962 5963static __inline__ vector signed long long __ATTRS_o_ai 5964vec_nand(vector signed long long __a, vector signed long long __b) { 5965 return ~(__a & __b); 5966} 5967 5968static __inline__ vector signed long long __ATTRS_o_ai 5969vec_nand(vector signed long long __a, vector bool long long __b) { 5970 return ~(__a & __b); 5971} 5972 5973static __inline__ vector signed long long __ATTRS_o_ai 5974vec_nand(vector bool long long __a, vector signed long long __b) { 5975 return ~(__a & __b); 5976} 5977 5978static __inline__ vector unsigned long long __ATTRS_o_ai 5979vec_nand(vector unsigned long long __a, vector unsigned long long __b) { 5980 return ~(__a & __b); 5981} 5982 5983static __inline__ vector unsigned long long __ATTRS_o_ai 5984vec_nand(vector unsigned long long __a, vector bool long long __b) { 5985 return ~(__a & __b); 5986} 5987 5988static __inline__ vector unsigned long long __ATTRS_o_ai 5989vec_nand(vector bool long long __a, vector unsigned long long __b) { 5990 return ~(__a & __b); 5991} 5992 5993static __inline__ vector bool long long __ATTRS_o_ai 5994vec_nand(vector bool long long __a, vector bool long long __b) { 5995 return ~(__a & __b); 5996} 5997 5998static __inline__ vector double __ATTRS_o_ai 5999vec_nand(vector double __a, vector double __b) { 6000 return (vector double)(~((vector unsigned long long)__a & 6001 (vector unsigned long long)__b)); 6002} 6003 6004#endif 6005 6006/* vec_nmadd */ 6007 6008#ifdef __VSX__ 6009static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a, 6010 vector float __b, 6011 vector float __c) { 6012 return __builtin_vsx_xvnmaddasp(__a, __b, __c); 6013} 6014 6015static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a, 6016 vector double __b, 6017 vector double __c) { 6018 return __builtin_vsx_xvnmaddadp(__a, __b, __c); 6019} 6020#endif 6021 6022/* vec_nmsub */ 6023 6024static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a, 6025 vector float __b, 6026 vector float __c) { 6027#ifdef __VSX__ 6028 return __builtin_vsx_xvnmsubasp(__a, __b, __c); 6029#else 6030 return __builtin_altivec_vnmsubfp(__a, __b, __c); 6031#endif 6032} 6033 6034#ifdef __VSX__ 6035static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a, 6036 vector double __b, 6037 vector double __c) { 6038 return __builtin_vsx_xvnmsubadp(__a, __b, __c); 6039} 6040#endif 6041 6042/* vec_vnmsubfp */ 6043 6044static __inline__ vector float __attribute__((__always_inline__)) 6045vec_vnmsubfp(vector float __a, vector float __b, vector float __c) { 6046 return __builtin_altivec_vnmsubfp(__a, __b, __c); 6047} 6048 6049/* vec_nor */ 6050 6051#define __builtin_altivec_vnor vec_nor 6052 6053static __inline__ vector signed char __ATTRS_o_ai 6054vec_nor(vector signed char __a, vector signed char __b) { 6055 return ~(__a | __b); 6056} 6057 6058static __inline__ vector unsigned char __ATTRS_o_ai 6059vec_nor(vector unsigned char __a, vector unsigned char __b) { 6060 return ~(__a | __b); 6061} 6062 6063static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a, 6064 vector bool char __b) { 6065 return ~(__a | __b); 6066} 6067 6068static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a, 6069 vector short __b) { 6070 return ~(__a | __b); 6071} 6072 6073static __inline__ vector unsigned short __ATTRS_o_ai 6074vec_nor(vector unsigned short __a, vector unsigned short __b) { 6075 return ~(__a | __b); 6076} 6077 6078static __inline__ vector bool short __ATTRS_o_ai 6079vec_nor(vector bool short __a, vector bool short __b) { 6080 return ~(__a | __b); 6081} 6082 6083static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a, 6084 vector int __b) { 6085 return ~(__a | __b); 6086} 6087 6088static __inline__ vector unsigned int __ATTRS_o_ai 6089vec_nor(vector unsigned int __a, vector unsigned int __b) { 6090 return ~(__a | __b); 6091} 6092 6093static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a, 6094 vector bool int __b) { 6095 return ~(__a | __b); 6096} 6097 6098static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a, 6099 vector float __b) { 6100 vector unsigned int __res = 6101 ~((vector unsigned int)__a | (vector unsigned int)__b); 6102 return (vector float)__res; 6103} 6104 6105#ifdef __VSX__ 6106static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a, 6107 vector double __b) { 6108 vector unsigned long long __res = 6109 ~((vector unsigned long long)__a | (vector unsigned long long)__b); 6110 return (vector double)__res; 6111} 6112#endif 6113 6114/* vec_vnor */ 6115 6116static __inline__ vector signed char __ATTRS_o_ai 6117vec_vnor(vector signed char __a, vector signed char __b) { 6118 return ~(__a | __b); 6119} 6120 6121static __inline__ vector unsigned char __ATTRS_o_ai 6122vec_vnor(vector unsigned char __a, vector unsigned char __b) { 6123 return ~(__a | __b); 6124} 6125 6126static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a, 6127 vector bool char __b) { 6128 return ~(__a | __b); 6129} 6130 6131static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a, 6132 vector short __b) { 6133 return ~(__a | __b); 6134} 6135 6136static __inline__ vector unsigned short __ATTRS_o_ai 6137vec_vnor(vector unsigned short __a, vector unsigned short __b) { 6138 return ~(__a | __b); 6139} 6140 6141static __inline__ vector bool short __ATTRS_o_ai 6142vec_vnor(vector bool short __a, vector bool short __b) { 6143 return ~(__a | __b); 6144} 6145 6146static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a, 6147 vector int __b) { 6148 return ~(__a | __b); 6149} 6150 6151static __inline__ vector unsigned int __ATTRS_o_ai 6152vec_vnor(vector unsigned int __a, vector unsigned int __b) { 6153 return ~(__a | __b); 6154} 6155 6156static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a, 6157 vector bool int __b) { 6158 return ~(__a | __b); 6159} 6160 6161static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a, 6162 vector float __b) { 6163 vector unsigned int __res = 6164 ~((vector unsigned int)__a | (vector unsigned int)__b); 6165 return (vector float)__res; 6166} 6167 6168#ifdef __VSX__ 6169static __inline__ vector signed long long __ATTRS_o_ai 6170vec_nor(vector signed long long __a, vector signed long long __b) { 6171 return ~(__a | __b); 6172} 6173 6174static __inline__ vector unsigned long long __ATTRS_o_ai 6175vec_nor(vector unsigned long long __a, vector unsigned long long __b) { 6176 return ~(__a | __b); 6177} 6178 6179static __inline__ vector bool long long __ATTRS_o_ai 6180vec_nor(vector bool long long __a, vector bool long long __b) { 6181 return ~(__a | __b); 6182} 6183#endif 6184 6185/* vec_or */ 6186 6187#define __builtin_altivec_vor vec_or 6188 6189static __inline__ vector signed char __ATTRS_o_ai 6190vec_or(vector signed char __a, vector signed char __b) { 6191 return __a | __b; 6192} 6193 6194static __inline__ vector signed char __ATTRS_o_ai 6195vec_or(vector bool char __a, vector signed char __b) { 6196 return (vector signed char)__a | __b; 6197} 6198 6199static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a, 6200 vector bool char __b) { 6201 return __a | (vector signed char)__b; 6202} 6203 6204static __inline__ vector unsigned char __ATTRS_o_ai 6205vec_or(vector unsigned char __a, vector unsigned char __b) { 6206 return __a | __b; 6207} 6208 6209static __inline__ vector unsigned char __ATTRS_o_ai 6210vec_or(vector bool char __a, vector unsigned char __b) { 6211 return (vector unsigned char)__a | __b; 6212} 6213 6214static __inline__ vector unsigned char __ATTRS_o_ai 6215vec_or(vector unsigned char __a, vector bool char __b) { 6216 return __a | (vector unsigned char)__b; 6217} 6218 6219static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a, 6220 vector bool char __b) { 6221 return __a | __b; 6222} 6223 6224static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a, 6225 vector short __b) { 6226 return __a | __b; 6227} 6228 6229static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a, 6230 vector short __b) { 6231 return (vector short)__a | __b; 6232} 6233 6234static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a, 6235 vector bool short __b) { 6236 return __a | (vector short)__b; 6237} 6238 6239static __inline__ vector unsigned short __ATTRS_o_ai 6240vec_or(vector unsigned short __a, vector unsigned short __b) { 6241 return __a | __b; 6242} 6243 6244static __inline__ vector unsigned short __ATTRS_o_ai 6245vec_or(vector bool short __a, vector unsigned short __b) { 6246 return (vector unsigned short)__a | __b; 6247} 6248 6249static __inline__ vector unsigned short __ATTRS_o_ai 6250vec_or(vector unsigned short __a, vector bool short __b) { 6251 return __a | (vector unsigned short)__b; 6252} 6253 6254static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a, 6255 vector bool short __b) { 6256 return __a | __b; 6257} 6258 6259static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a, 6260 vector int __b) { 6261 return __a | __b; 6262} 6263 6264static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a, 6265 vector int __b) { 6266 return (vector int)__a | __b; 6267} 6268 6269static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a, 6270 vector bool int __b) { 6271 return __a | (vector int)__b; 6272} 6273 6274static __inline__ vector unsigned int __ATTRS_o_ai 6275vec_or(vector unsigned int __a, vector unsigned int __b) { 6276 return __a | __b; 6277} 6278 6279static __inline__ vector unsigned int __ATTRS_o_ai 6280vec_or(vector bool int __a, vector unsigned int __b) { 6281 return (vector unsigned int)__a | __b; 6282} 6283 6284static __inline__ vector unsigned int __ATTRS_o_ai 6285vec_or(vector unsigned int __a, vector bool int __b) { 6286 return __a | (vector unsigned int)__b; 6287} 6288 6289static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a, 6290 vector bool int __b) { 6291 return __a | __b; 6292} 6293 6294static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a, 6295 vector float __b) { 6296 vector unsigned int __res = 6297 (vector unsigned int)__a | (vector unsigned int)__b; 6298 return (vector float)__res; 6299} 6300 6301static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a, 6302 vector float __b) { 6303 vector unsigned int __res = 6304 (vector unsigned int)__a | (vector unsigned int)__b; 6305 return (vector float)__res; 6306} 6307 6308static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a, 6309 vector bool int __b) { 6310 vector unsigned int __res = 6311 (vector unsigned int)__a | (vector unsigned int)__b; 6312 return (vector float)__res; 6313} 6314 6315#ifdef __VSX__ 6316static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a, 6317 vector double __b) { 6318 return (vector unsigned long long)__a | (vector unsigned long long)__b; 6319} 6320 6321static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a, 6322 vector bool long long __b) { 6323 return (vector unsigned long long)__a | (vector unsigned long long)__b; 6324} 6325 6326static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a, 6327 vector double __b) { 6328 vector unsigned long long __res = 6329 (vector unsigned long long)__a | (vector unsigned long long)__b; 6330 return (vector double)__res; 6331} 6332 6333static __inline__ vector signed long long __ATTRS_o_ai 6334vec_or(vector signed long long __a, vector signed long long __b) { 6335 return __a | __b; 6336} 6337 6338static __inline__ vector signed long long __ATTRS_o_ai 6339vec_or(vector bool long long __a, vector signed long long __b) { 6340 return (vector signed long long)__a | __b; 6341} 6342 6343static __inline__ vector signed long long __ATTRS_o_ai 6344vec_or(vector signed long long __a, vector bool long long __b) { 6345 return __a | (vector signed long long)__b; 6346} 6347 6348static __inline__ vector unsigned long long __ATTRS_o_ai 6349vec_or(vector unsigned long long __a, vector unsigned long long __b) { 6350 return __a | __b; 6351} 6352 6353static __inline__ vector unsigned long long __ATTRS_o_ai 6354vec_or(vector bool long long __a, vector unsigned long long __b) { 6355 return (vector unsigned long long)__a | __b; 6356} 6357 6358static __inline__ vector unsigned long long __ATTRS_o_ai 6359vec_or(vector unsigned long long __a, vector bool long long __b) { 6360 return __a | (vector unsigned long long)__b; 6361} 6362 6363static __inline__ vector bool long long __ATTRS_o_ai 6364vec_or(vector bool long long __a, vector bool long long __b) { 6365 return __a | __b; 6366} 6367#endif 6368 6369#ifdef __POWER8_VECTOR__ 6370static __inline__ vector signed char __ATTRS_o_ai 6371vec_orc(vector signed char __a, vector signed char __b) { 6372 return __a | ~__b; 6373} 6374 6375static __inline__ vector signed char __ATTRS_o_ai 6376vec_orc(vector signed char __a, vector bool char __b) { 6377 return __a | ~__b; 6378} 6379 6380static __inline__ vector signed char __ATTRS_o_ai 6381vec_orc(vector bool char __a, vector signed char __b) { 6382 return __a | ~__b; 6383} 6384 6385static __inline__ vector unsigned char __ATTRS_o_ai 6386vec_orc(vector unsigned char __a, vector unsigned char __b) { 6387 return __a | ~__b; 6388} 6389 6390static __inline__ vector unsigned char __ATTRS_o_ai 6391vec_orc(vector unsigned char __a, vector bool char __b) { 6392 return __a | ~__b; 6393} 6394 6395static __inline__ vector unsigned char __ATTRS_o_ai 6396vec_orc(vector bool char __a, vector unsigned char __b) { 6397 return __a | ~__b; 6398} 6399 6400static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a, 6401 vector bool char __b) { 6402 return __a | ~__b; 6403} 6404 6405static __inline__ vector signed short __ATTRS_o_ai 6406vec_orc(vector signed short __a, vector signed short __b) { 6407 return __a | ~__b; 6408} 6409 6410static __inline__ vector signed short __ATTRS_o_ai 6411vec_orc(vector signed short __a, vector bool short __b) { 6412 return __a | ~__b; 6413} 6414 6415static __inline__ vector signed short __ATTRS_o_ai 6416vec_orc(vector bool short __a, vector signed short __b) { 6417 return __a | ~__b; 6418} 6419 6420static __inline__ vector unsigned short __ATTRS_o_ai 6421vec_orc(vector unsigned short __a, vector unsigned short __b) { 6422 return __a | ~__b; 6423} 6424 6425static __inline__ vector unsigned short __ATTRS_o_ai 6426vec_orc(vector unsigned short __a, vector bool short __b) { 6427 return __a | ~__b; 6428} 6429 6430static __inline__ vector unsigned short __ATTRS_o_ai 6431vec_orc(vector bool short __a, vector unsigned short __b) { 6432 return __a | ~__b; 6433} 6434 6435static __inline__ vector bool short __ATTRS_o_ai 6436vec_orc(vector bool short __a, vector bool short __b) { 6437 return __a | ~__b; 6438} 6439 6440static __inline__ vector signed int __ATTRS_o_ai 6441vec_orc(vector signed int __a, vector signed int __b) { 6442 return __a | ~__b; 6443} 6444 6445static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a, 6446 vector bool int __b) { 6447 return __a | ~__b; 6448} 6449 6450static __inline__ vector signed int __ATTRS_o_ai 6451vec_orc(vector bool int __a, vector signed int __b) { 6452 return __a | ~__b; 6453} 6454 6455static __inline__ vector unsigned int __ATTRS_o_ai 6456vec_orc(vector unsigned int __a, vector unsigned int __b) { 6457 return __a | ~__b; 6458} 6459 6460static __inline__ vector unsigned int __ATTRS_o_ai 6461vec_orc(vector unsigned int __a, vector bool int __b) { 6462 return __a | ~__b; 6463} 6464 6465static __inline__ vector unsigned int __ATTRS_o_ai 6466vec_orc(vector bool int __a, vector unsigned int __b) { 6467 return __a | ~__b; 6468} 6469 6470static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a, 6471 vector bool int __b) { 6472 return __a | ~__b; 6473} 6474 6475static __inline__ vector float __ATTRS_o_ai 6476vec_orc(vector bool int __a, vector float __b) { 6477 return (vector float)(__a | ~(vector unsigned int)__b); 6478} 6479 6480static __inline__ vector float __ATTRS_o_ai 6481vec_orc(vector float __a, vector bool int __b) { 6482 return (vector float)((vector unsigned int)__a | ~__b); 6483} 6484 6485static __inline__ vector signed long long __ATTRS_o_ai 6486vec_orc(vector signed long long __a, vector signed long long __b) { 6487 return __a | ~__b; 6488} 6489 6490static __inline__ vector signed long long __ATTRS_o_ai 6491vec_orc(vector signed long long __a, vector bool long long __b) { 6492 return __a | ~__b; 6493} 6494 6495static __inline__ vector signed long long __ATTRS_o_ai 6496vec_orc(vector bool long long __a, vector signed long long __b) { 6497 return __a | ~__b; 6498} 6499 6500static __inline__ vector unsigned long long __ATTRS_o_ai 6501vec_orc(vector unsigned long long __a, vector unsigned long long __b) { 6502 return __a | ~__b; 6503} 6504 6505static __inline__ vector unsigned long long __ATTRS_o_ai 6506vec_orc(vector unsigned long long __a, vector bool long long __b) { 6507 return __a | ~__b; 6508} 6509 6510static __inline__ vector unsigned long long __ATTRS_o_ai 6511vec_orc(vector bool long long __a, vector unsigned long long __b) { 6512 return __a | ~__b; 6513} 6514 6515static __inline__ vector bool long long __ATTRS_o_ai 6516vec_orc(vector bool long long __a, vector bool long long __b) { 6517 return __a | ~__b; 6518} 6519 6520static __inline__ vector double __ATTRS_o_ai 6521vec_orc(vector double __a, vector bool long long __b) { 6522 return (vector double)((vector unsigned long long)__a | ~__b); 6523} 6524 6525static __inline__ vector double __ATTRS_o_ai 6526vec_orc(vector bool long long __a, vector double __b) { 6527 return (vector double)(__a | ~(vector unsigned long long)__b); 6528} 6529#endif 6530 6531/* vec_vor */ 6532 6533static __inline__ vector signed char __ATTRS_o_ai 6534vec_vor(vector signed char __a, vector signed char __b) { 6535 return __a | __b; 6536} 6537 6538static __inline__ vector signed char __ATTRS_o_ai 6539vec_vor(vector bool char __a, vector signed char __b) { 6540 return (vector signed char)__a | __b; 6541} 6542 6543static __inline__ vector signed char __ATTRS_o_ai 6544vec_vor(vector signed char __a, vector bool char __b) { 6545 return __a | (vector signed char)__b; 6546} 6547 6548static __inline__ vector unsigned char __ATTRS_o_ai 6549vec_vor(vector unsigned char __a, vector unsigned char __b) { 6550 return __a | __b; 6551} 6552 6553static __inline__ vector unsigned char __ATTRS_o_ai 6554vec_vor(vector bool char __a, vector unsigned char __b) { 6555 return (vector unsigned char)__a | __b; 6556} 6557 6558static __inline__ vector unsigned char __ATTRS_o_ai 6559vec_vor(vector unsigned char __a, vector bool char __b) { 6560 return __a | (vector unsigned char)__b; 6561} 6562 6563static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a, 6564 vector bool char __b) { 6565 return __a | __b; 6566} 6567 6568static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a, 6569 vector short __b) { 6570 return __a | __b; 6571} 6572 6573static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a, 6574 vector short __b) { 6575 return (vector short)__a | __b; 6576} 6577 6578static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a, 6579 vector bool short __b) { 6580 return __a | (vector short)__b; 6581} 6582 6583static __inline__ vector unsigned short __ATTRS_o_ai 6584vec_vor(vector unsigned short __a, vector unsigned short __b) { 6585 return __a | __b; 6586} 6587 6588static __inline__ vector unsigned short __ATTRS_o_ai 6589vec_vor(vector bool short __a, vector unsigned short __b) { 6590 return (vector unsigned short)__a | __b; 6591} 6592 6593static __inline__ vector unsigned short __ATTRS_o_ai 6594vec_vor(vector unsigned short __a, vector bool short __b) { 6595 return __a | (vector unsigned short)__b; 6596} 6597 6598static __inline__ vector bool short __ATTRS_o_ai 6599vec_vor(vector bool short __a, vector bool short __b) { 6600 return __a | __b; 6601} 6602 6603static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a, 6604 vector int __b) { 6605 return __a | __b; 6606} 6607 6608static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a, 6609 vector int __b) { 6610 return (vector int)__a | __b; 6611} 6612 6613static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a, 6614 vector bool int __b) { 6615 return __a | (vector int)__b; 6616} 6617 6618static __inline__ vector unsigned int __ATTRS_o_ai 6619vec_vor(vector unsigned int __a, vector unsigned int __b) { 6620 return __a | __b; 6621} 6622 6623static __inline__ vector unsigned int __ATTRS_o_ai 6624vec_vor(vector bool int __a, vector unsigned int __b) { 6625 return (vector unsigned int)__a | __b; 6626} 6627 6628static __inline__ vector unsigned int __ATTRS_o_ai 6629vec_vor(vector unsigned int __a, vector bool int __b) { 6630 return __a | (vector unsigned int)__b; 6631} 6632 6633static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a, 6634 vector bool int __b) { 6635 return __a | __b; 6636} 6637 6638static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a, 6639 vector float __b) { 6640 vector unsigned int __res = 6641 (vector unsigned int)__a | (vector unsigned int)__b; 6642 return (vector float)__res; 6643} 6644 6645static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a, 6646 vector float __b) { 6647 vector unsigned int __res = 6648 (vector unsigned int)__a | (vector unsigned int)__b; 6649 return (vector float)__res; 6650} 6651 6652static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a, 6653 vector bool int __b) { 6654 vector unsigned int __res = 6655 (vector unsigned int)__a | (vector unsigned int)__b; 6656 return (vector float)__res; 6657} 6658 6659#ifdef __VSX__ 6660static __inline__ vector signed long long __ATTRS_o_ai 6661vec_vor(vector signed long long __a, vector signed long long __b) { 6662 return __a | __b; 6663} 6664 6665static __inline__ vector signed long long __ATTRS_o_ai 6666vec_vor(vector bool long long __a, vector signed long long __b) { 6667 return (vector signed long long)__a | __b; 6668} 6669 6670static __inline__ vector signed long long __ATTRS_o_ai 6671vec_vor(vector signed long long __a, vector bool long long __b) { 6672 return __a | (vector signed long long)__b; 6673} 6674 6675static __inline__ vector unsigned long long __ATTRS_o_ai 6676vec_vor(vector unsigned long long __a, vector unsigned long long __b) { 6677 return __a | __b; 6678} 6679 6680static __inline__ vector unsigned long long __ATTRS_o_ai 6681vec_vor(vector bool long long __a, vector unsigned long long __b) { 6682 return (vector unsigned long long)__a | __b; 6683} 6684 6685static __inline__ vector unsigned long long __ATTRS_o_ai 6686vec_vor(vector unsigned long long __a, vector bool long long __b) { 6687 return __a | (vector unsigned long long)__b; 6688} 6689 6690static __inline__ vector bool long long __ATTRS_o_ai 6691vec_vor(vector bool long long __a, vector bool long long __b) { 6692 return __a | __b; 6693} 6694#endif 6695 6696/* vec_pack */ 6697 6698/* The various vector pack instructions have a big-endian bias, so for 6699 little endian we must handle reversed element numbering. */ 6700 6701static __inline__ vector signed char __ATTRS_o_ai 6702vec_pack(vector signed short __a, vector signed short __b) { 6703#ifdef __LITTLE_ENDIAN__ 6704 return (vector signed char)vec_perm( 6705 __a, __b, 6706 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 6707 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); 6708#else 6709 return (vector signed char)vec_perm( 6710 __a, __b, 6711 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 6712 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); 6713#endif 6714} 6715 6716static __inline__ vector unsigned char __ATTRS_o_ai 6717vec_pack(vector unsigned short __a, vector unsigned short __b) { 6718#ifdef __LITTLE_ENDIAN__ 6719 return (vector unsigned char)vec_perm( 6720 __a, __b, 6721 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 6722 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); 6723#else 6724 return (vector unsigned char)vec_perm( 6725 __a, __b, 6726 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 6727 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); 6728#endif 6729} 6730 6731static __inline__ vector bool char __ATTRS_o_ai 6732vec_pack(vector bool short __a, vector bool short __b) { 6733#ifdef __LITTLE_ENDIAN__ 6734 return (vector bool char)vec_perm( 6735 __a, __b, 6736 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 6737 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); 6738#else 6739 return (vector bool char)vec_perm( 6740 __a, __b, 6741 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 6742 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); 6743#endif 6744} 6745 6746static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a, 6747 vector int __b) { 6748#ifdef __LITTLE_ENDIAN__ 6749 return (vector short)vec_perm( 6750 __a, __b, 6751 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, 6752 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); 6753#else 6754 return (vector short)vec_perm( 6755 __a, __b, 6756 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, 6757 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); 6758#endif 6759} 6760 6761static __inline__ vector unsigned short __ATTRS_o_ai 6762vec_pack(vector unsigned int __a, vector unsigned int __b) { 6763#ifdef __LITTLE_ENDIAN__ 6764 return (vector unsigned short)vec_perm( 6765 __a, __b, 6766 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, 6767 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); 6768#else 6769 return (vector unsigned short)vec_perm( 6770 __a, __b, 6771 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, 6772 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); 6773#endif 6774} 6775 6776static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a, 6777 vector bool int __b) { 6778#ifdef __LITTLE_ENDIAN__ 6779 return (vector bool short)vec_perm( 6780 __a, __b, 6781 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, 6782 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); 6783#else 6784 return (vector bool short)vec_perm( 6785 __a, __b, 6786 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, 6787 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); 6788#endif 6789} 6790 6791#ifdef __VSX__ 6792static __inline__ vector signed int __ATTRS_o_ai 6793vec_pack(vector signed long long __a, vector signed long long __b) { 6794#ifdef __LITTLE_ENDIAN__ 6795 return (vector signed int)vec_perm( 6796 __a, __b, 6797 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, 6798 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); 6799#else 6800 return (vector signed int)vec_perm( 6801 __a, __b, 6802 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, 6803 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); 6804#endif 6805} 6806static __inline__ vector unsigned int __ATTRS_o_ai 6807vec_pack(vector unsigned long long __a, vector unsigned long long __b) { 6808#ifdef __LITTLE_ENDIAN__ 6809 return (vector unsigned int)vec_perm( 6810 __a, __b, 6811 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, 6812 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); 6813#else 6814 return (vector unsigned int)vec_perm( 6815 __a, __b, 6816 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, 6817 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); 6818#endif 6819} 6820 6821static __inline__ vector bool int __ATTRS_o_ai 6822vec_pack(vector bool long long __a, vector bool long long __b) { 6823#ifdef __LITTLE_ENDIAN__ 6824 return (vector bool int)vec_perm( 6825 __a, __b, 6826 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, 6827 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); 6828#else 6829 return (vector bool int)vec_perm( 6830 __a, __b, 6831 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, 6832 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); 6833#endif 6834} 6835 6836static __inline__ vector float __ATTRS_o_ai 6837vec_pack(vector double __a, vector double __b) { 6838 return (vector float) (__a[0], __a[1], __b[0], __b[1]); 6839} 6840#endif 6841 6842#ifdef __POWER9_VECTOR__ 6843static __inline__ vector unsigned short __ATTRS_o_ai 6844vec_pack_to_short_fp32(vector float __a, vector float __b) { 6845 vector float __resa = __builtin_vsx_xvcvsphp(__a); 6846 vector float __resb = __builtin_vsx_xvcvsphp(__b); 6847#ifdef __LITTLE_ENDIAN__ 6848 return (vector unsigned short)vec_mergee(__resa, __resb); 6849#else 6850 return (vector unsigned short)vec_mergeo(__resa, __resb); 6851#endif 6852} 6853 6854#endif 6855/* vec_vpkuhum */ 6856 6857#define __builtin_altivec_vpkuhum vec_vpkuhum 6858 6859static __inline__ vector signed char __ATTRS_o_ai 6860vec_vpkuhum(vector signed short __a, vector signed short __b) { 6861#ifdef __LITTLE_ENDIAN__ 6862 return (vector signed char)vec_perm( 6863 __a, __b, 6864 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 6865 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); 6866#else 6867 return (vector signed char)vec_perm( 6868 __a, __b, 6869 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 6870 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); 6871#endif 6872} 6873 6874static __inline__ vector unsigned char __ATTRS_o_ai 6875vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) { 6876#ifdef __LITTLE_ENDIAN__ 6877 return (vector unsigned char)vec_perm( 6878 __a, __b, 6879 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 6880 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); 6881#else 6882 return (vector unsigned char)vec_perm( 6883 __a, __b, 6884 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 6885 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); 6886#endif 6887} 6888 6889static __inline__ vector bool char __ATTRS_o_ai 6890vec_vpkuhum(vector bool short __a, vector bool short __b) { 6891#ifdef __LITTLE_ENDIAN__ 6892 return (vector bool char)vec_perm( 6893 __a, __b, 6894 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 6895 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E)); 6896#else 6897 return (vector bool char)vec_perm( 6898 __a, __b, 6899 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 6900 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); 6901#endif 6902} 6903 6904/* vec_vpkuwum */ 6905 6906#define __builtin_altivec_vpkuwum vec_vpkuwum 6907 6908static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a, 6909 vector int __b) { 6910#ifdef __LITTLE_ENDIAN__ 6911 return (vector short)vec_perm( 6912 __a, __b, 6913 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, 6914 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); 6915#else 6916 return (vector short)vec_perm( 6917 __a, __b, 6918 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, 6919 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); 6920#endif 6921} 6922 6923static __inline__ vector unsigned short __ATTRS_o_ai 6924vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) { 6925#ifdef __LITTLE_ENDIAN__ 6926 return (vector unsigned short)vec_perm( 6927 __a, __b, 6928 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, 6929 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); 6930#else 6931 return (vector unsigned short)vec_perm( 6932 __a, __b, 6933 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, 6934 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); 6935#endif 6936} 6937 6938static __inline__ vector bool short __ATTRS_o_ai 6939vec_vpkuwum(vector bool int __a, vector bool int __b) { 6940#ifdef __LITTLE_ENDIAN__ 6941 return (vector bool short)vec_perm( 6942 __a, __b, 6943 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D, 6944 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D)); 6945#else 6946 return (vector bool short)vec_perm( 6947 __a, __b, 6948 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, 6949 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); 6950#endif 6951} 6952 6953/* vec_vpkudum */ 6954 6955#ifdef __POWER8_VECTOR__ 6956#define __builtin_altivec_vpkudum vec_vpkudum 6957 6958static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a, 6959 vector long long __b) { 6960#ifdef __LITTLE_ENDIAN__ 6961 return (vector int)vec_perm( 6962 __a, __b, 6963 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, 6964 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); 6965#else 6966 return (vector int)vec_perm( 6967 __a, __b, 6968 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, 6969 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); 6970#endif 6971} 6972 6973static __inline__ vector unsigned int __ATTRS_o_ai 6974vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) { 6975#ifdef __LITTLE_ENDIAN__ 6976 return (vector unsigned int)vec_perm( 6977 __a, __b, 6978 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, 6979 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); 6980#else 6981 return (vector unsigned int)vec_perm( 6982 __a, __b, 6983 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, 6984 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); 6985#endif 6986} 6987 6988static __inline__ vector bool int __ATTRS_o_ai 6989vec_vpkudum(vector bool long long __a, vector bool long long __b) { 6990#ifdef __LITTLE_ENDIAN__ 6991 return (vector bool int)vec_perm( 6992 (vector long long)__a, (vector long long)__b, 6993 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B, 6994 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B)); 6995#else 6996 return (vector bool int)vec_perm( 6997 (vector long long)__a, (vector long long)__b, 6998 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F, 6999 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F)); 7000#endif 7001} 7002#endif 7003 7004/* vec_packpx */ 7005 7006static __inline__ vector pixel __attribute__((__always_inline__)) 7007vec_packpx(vector unsigned int __a, vector unsigned int __b) { 7008#ifdef __LITTLE_ENDIAN__ 7009 return (vector pixel)__builtin_altivec_vpkpx(__b, __a); 7010#else 7011 return (vector pixel)__builtin_altivec_vpkpx(__a, __b); 7012#endif 7013} 7014 7015/* vec_vpkpx */ 7016 7017static __inline__ vector pixel __attribute__((__always_inline__)) 7018vec_vpkpx(vector unsigned int __a, vector unsigned int __b) { 7019#ifdef __LITTLE_ENDIAN__ 7020 return (vector pixel)__builtin_altivec_vpkpx(__b, __a); 7021#else 7022 return (vector pixel)__builtin_altivec_vpkpx(__a, __b); 7023#endif 7024} 7025 7026/* vec_packs */ 7027 7028static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a, 7029 vector short __b) { 7030#ifdef __LITTLE_ENDIAN__ 7031 return __builtin_altivec_vpkshss(__b, __a); 7032#else 7033 return __builtin_altivec_vpkshss(__a, __b); 7034#endif 7035} 7036 7037static __inline__ vector unsigned char __ATTRS_o_ai 7038vec_packs(vector unsigned short __a, vector unsigned short __b) { 7039#ifdef __LITTLE_ENDIAN__ 7040 return __builtin_altivec_vpkuhus(__b, __a); 7041#else 7042 return __builtin_altivec_vpkuhus(__a, __b); 7043#endif 7044} 7045 7046static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a, 7047 vector int __b) { 7048#ifdef __LITTLE_ENDIAN__ 7049 return __builtin_altivec_vpkswss(__b, __a); 7050#else 7051 return __builtin_altivec_vpkswss(__a, __b); 7052#endif 7053} 7054 7055static __inline__ vector unsigned short __ATTRS_o_ai 7056vec_packs(vector unsigned int __a, vector unsigned int __b) { 7057#ifdef __LITTLE_ENDIAN__ 7058 return __builtin_altivec_vpkuwus(__b, __a); 7059#else 7060 return __builtin_altivec_vpkuwus(__a, __b); 7061#endif 7062} 7063 7064#ifdef __POWER8_VECTOR__ 7065static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a, 7066 vector long long __b) { 7067#ifdef __LITTLE_ENDIAN__ 7068 return __builtin_altivec_vpksdss(__b, __a); 7069#else 7070 return __builtin_altivec_vpksdss(__a, __b); 7071#endif 7072} 7073 7074static __inline__ vector unsigned int __ATTRS_o_ai 7075vec_packs(vector unsigned long long __a, vector unsigned long long __b) { 7076#ifdef __LITTLE_ENDIAN__ 7077 return __builtin_altivec_vpkudus(__b, __a); 7078#else 7079 return __builtin_altivec_vpkudus(__a, __b); 7080#endif 7081} 7082#endif 7083 7084/* vec_vpkshss */ 7085 7086static __inline__ vector signed char __attribute__((__always_inline__)) 7087vec_vpkshss(vector short __a, vector short __b) { 7088#ifdef __LITTLE_ENDIAN__ 7089 return __builtin_altivec_vpkshss(__b, __a); 7090#else 7091 return __builtin_altivec_vpkshss(__a, __b); 7092#endif 7093} 7094 7095/* vec_vpksdss */ 7096 7097#ifdef __POWER8_VECTOR__ 7098static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a, 7099 vector long long __b) { 7100#ifdef __LITTLE_ENDIAN__ 7101 return __builtin_altivec_vpksdss(__b, __a); 7102#else 7103 return __builtin_altivec_vpksdss(__a, __b); 7104#endif 7105} 7106#endif 7107 7108/* vec_vpkuhus */ 7109 7110static __inline__ vector unsigned char __attribute__((__always_inline__)) 7111vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) { 7112#ifdef __LITTLE_ENDIAN__ 7113 return __builtin_altivec_vpkuhus(__b, __a); 7114#else 7115 return __builtin_altivec_vpkuhus(__a, __b); 7116#endif 7117} 7118 7119/* vec_vpkudus */ 7120 7121#ifdef __POWER8_VECTOR__ 7122static __inline__ vector unsigned int __attribute__((__always_inline__)) 7123vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) { 7124#ifdef __LITTLE_ENDIAN__ 7125 return __builtin_altivec_vpkudus(__b, __a); 7126#else 7127 return __builtin_altivec_vpkudus(__a, __b); 7128#endif 7129} 7130#endif 7131 7132/* vec_vpkswss */ 7133 7134static __inline__ vector signed short __attribute__((__always_inline__)) 7135vec_vpkswss(vector int __a, vector int __b) { 7136#ifdef __LITTLE_ENDIAN__ 7137 return __builtin_altivec_vpkswss(__b, __a); 7138#else 7139 return __builtin_altivec_vpkswss(__a, __b); 7140#endif 7141} 7142 7143/* vec_vpkuwus */ 7144 7145static __inline__ vector unsigned short __attribute__((__always_inline__)) 7146vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) { 7147#ifdef __LITTLE_ENDIAN__ 7148 return __builtin_altivec_vpkuwus(__b, __a); 7149#else 7150 return __builtin_altivec_vpkuwus(__a, __b); 7151#endif 7152} 7153 7154/* vec_packsu */ 7155 7156static __inline__ vector unsigned char __ATTRS_o_ai 7157vec_packsu(vector short __a, vector short __b) { 7158#ifdef __LITTLE_ENDIAN__ 7159 return __builtin_altivec_vpkshus(__b, __a); 7160#else 7161 return __builtin_altivec_vpkshus(__a, __b); 7162#endif 7163} 7164 7165static __inline__ vector unsigned char __ATTRS_o_ai 7166vec_packsu(vector unsigned short __a, vector unsigned short __b) { 7167#ifdef __LITTLE_ENDIAN__ 7168 return __builtin_altivec_vpkuhus(__b, __a); 7169#else 7170 return __builtin_altivec_vpkuhus(__a, __b); 7171#endif 7172} 7173 7174static __inline__ vector unsigned short __ATTRS_o_ai 7175vec_packsu(vector int __a, vector int __b) { 7176#ifdef __LITTLE_ENDIAN__ 7177 return __builtin_altivec_vpkswus(__b, __a); 7178#else 7179 return __builtin_altivec_vpkswus(__a, __b); 7180#endif 7181} 7182 7183static __inline__ vector unsigned short __ATTRS_o_ai 7184vec_packsu(vector unsigned int __a, vector unsigned int __b) { 7185#ifdef __LITTLE_ENDIAN__ 7186 return __builtin_altivec_vpkuwus(__b, __a); 7187#else 7188 return __builtin_altivec_vpkuwus(__a, __b); 7189#endif 7190} 7191 7192#ifdef __POWER8_VECTOR__ 7193static __inline__ vector unsigned int __ATTRS_o_ai 7194vec_packsu(vector long long __a, vector long long __b) { 7195#ifdef __LITTLE_ENDIAN__ 7196 return __builtin_altivec_vpksdus(__b, __a); 7197#else 7198 return __builtin_altivec_vpksdus(__a, __b); 7199#endif 7200} 7201 7202static __inline__ vector unsigned int __ATTRS_o_ai 7203vec_packsu(vector unsigned long long __a, vector unsigned long long __b) { 7204#ifdef __LITTLE_ENDIAN__ 7205 return __builtin_altivec_vpkudus(__b, __a); 7206#else 7207 return __builtin_altivec_vpkudus(__a, __b); 7208#endif 7209} 7210#endif 7211 7212/* vec_vpkshus */ 7213 7214static __inline__ vector unsigned char __ATTRS_o_ai 7215vec_vpkshus(vector short __a, vector short __b) { 7216#ifdef __LITTLE_ENDIAN__ 7217 return __builtin_altivec_vpkshus(__b, __a); 7218#else 7219 return __builtin_altivec_vpkshus(__a, __b); 7220#endif 7221} 7222 7223static __inline__ vector unsigned char __ATTRS_o_ai 7224vec_vpkshus(vector unsigned short __a, vector unsigned short __b) { 7225#ifdef __LITTLE_ENDIAN__ 7226 return __builtin_altivec_vpkuhus(__b, __a); 7227#else 7228 return __builtin_altivec_vpkuhus(__a, __b); 7229#endif 7230} 7231 7232/* vec_vpkswus */ 7233 7234static __inline__ vector unsigned short __ATTRS_o_ai 7235vec_vpkswus(vector int __a, vector int __b) { 7236#ifdef __LITTLE_ENDIAN__ 7237 return __builtin_altivec_vpkswus(__b, __a); 7238#else 7239 return __builtin_altivec_vpkswus(__a, __b); 7240#endif 7241} 7242 7243static __inline__ vector unsigned short __ATTRS_o_ai 7244vec_vpkswus(vector unsigned int __a, vector unsigned int __b) { 7245#ifdef __LITTLE_ENDIAN__ 7246 return __builtin_altivec_vpkuwus(__b, __a); 7247#else 7248 return __builtin_altivec_vpkuwus(__a, __b); 7249#endif 7250} 7251 7252/* vec_vpksdus */ 7253 7254#ifdef __POWER8_VECTOR__ 7255static __inline__ vector unsigned int __ATTRS_o_ai 7256vec_vpksdus(vector long long __a, vector long long __b) { 7257#ifdef __LITTLE_ENDIAN__ 7258 return __builtin_altivec_vpksdus(__b, __a); 7259#else 7260 return __builtin_altivec_vpksdus(__a, __b); 7261#endif 7262} 7263#endif 7264 7265/* vec_perm */ 7266 7267// The vperm instruction is defined architecturally with a big-endian bias. 7268// For little endian, we swap the input operands and invert the permute 7269// control vector. Only the rightmost 5 bits matter, so we could use 7270// a vector of all 31s instead of all 255s to perform the inversion. 7271// However, when the PCV is not a constant, using 255 has an advantage 7272// in that the vec_xor can be recognized as a vec_nor (and for P8 and 7273// later, possibly a vec_nand). 7274 7275static __inline__ vector signed char __ATTRS_o_ai vec_perm( 7276 vector signed char __a, vector signed char __b, vector unsigned char __c) { 7277#ifdef __LITTLE_ENDIAN__ 7278 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7279 255, 255, 255, 255, 255, 255, 255, 255}; 7280 __d = vec_xor(__c, __d); 7281 return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b, 7282 (vector int)__a, __d); 7283#else 7284 return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a, 7285 (vector int)__b, __c); 7286#endif 7287} 7288 7289static __inline__ vector unsigned char __ATTRS_o_ai 7290vec_perm(vector unsigned char __a, vector unsigned char __b, 7291 vector unsigned char __c) { 7292#ifdef __LITTLE_ENDIAN__ 7293 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7294 255, 255, 255, 255, 255, 255, 255, 255}; 7295 __d = vec_xor(__c, __d); 7296 return (vector unsigned char)__builtin_altivec_vperm_4si( 7297 (vector int)__b, (vector int)__a, __d); 7298#else 7299 return (vector unsigned char)__builtin_altivec_vperm_4si( 7300 (vector int)__a, (vector int)__b, __c); 7301#endif 7302} 7303 7304static __inline__ vector bool char __ATTRS_o_ai 7305vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) { 7306#ifdef __LITTLE_ENDIAN__ 7307 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7308 255, 255, 255, 255, 255, 255, 255, 255}; 7309 __d = vec_xor(__c, __d); 7310 return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b, 7311 (vector int)__a, __d); 7312#else 7313 return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a, 7314 (vector int)__b, __c); 7315#endif 7316} 7317 7318static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a, 7319 vector signed short __b, 7320 vector unsigned char __c) { 7321#ifdef __LITTLE_ENDIAN__ 7322 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7323 255, 255, 255, 255, 255, 255, 255, 255}; 7324 __d = vec_xor(__c, __d); 7325 return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b, 7326 (vector int)__a, __d); 7327#else 7328 return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a, 7329 (vector int)__b, __c); 7330#endif 7331} 7332 7333static __inline__ vector unsigned short __ATTRS_o_ai 7334vec_perm(vector unsigned short __a, vector unsigned short __b, 7335 vector unsigned char __c) { 7336#ifdef __LITTLE_ENDIAN__ 7337 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7338 255, 255, 255, 255, 255, 255, 255, 255}; 7339 __d = vec_xor(__c, __d); 7340 return (vector unsigned short)__builtin_altivec_vperm_4si( 7341 (vector int)__b, (vector int)__a, __d); 7342#else 7343 return (vector unsigned short)__builtin_altivec_vperm_4si( 7344 (vector int)__a, (vector int)__b, __c); 7345#endif 7346} 7347 7348static __inline__ vector bool short __ATTRS_o_ai vec_perm( 7349 vector bool short __a, vector bool short __b, vector unsigned char __c) { 7350#ifdef __LITTLE_ENDIAN__ 7351 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7352 255, 255, 255, 255, 255, 255, 255, 255}; 7353 __d = vec_xor(__c, __d); 7354 return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b, 7355 (vector int)__a, __d); 7356#else 7357 return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a, 7358 (vector int)__b, __c); 7359#endif 7360} 7361 7362static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a, 7363 vector pixel __b, 7364 vector unsigned char __c) { 7365#ifdef __LITTLE_ENDIAN__ 7366 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7367 255, 255, 255, 255, 255, 255, 255, 255}; 7368 __d = vec_xor(__c, __d); 7369 return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b, 7370 (vector int)__a, __d); 7371#else 7372 return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a, 7373 (vector int)__b, __c); 7374#endif 7375} 7376 7377static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a, 7378 vector signed int __b, 7379 vector unsigned char __c) { 7380#ifdef __LITTLE_ENDIAN__ 7381 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7382 255, 255, 255, 255, 255, 255, 255, 255}; 7383 __d = vec_xor(__c, __d); 7384 return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d); 7385#else 7386 return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c); 7387#endif 7388} 7389 7390static __inline__ vector unsigned int __ATTRS_o_ai 7391vec_perm(vector unsigned int __a, vector unsigned int __b, 7392 vector unsigned char __c) { 7393#ifdef __LITTLE_ENDIAN__ 7394 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7395 255, 255, 255, 255, 255, 255, 255, 255}; 7396 __d = vec_xor(__c, __d); 7397 return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b, 7398 (vector int)__a, __d); 7399#else 7400 return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a, 7401 (vector int)__b, __c); 7402#endif 7403} 7404 7405static __inline__ vector bool int __ATTRS_o_ai 7406vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) { 7407#ifdef __LITTLE_ENDIAN__ 7408 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7409 255, 255, 255, 255, 255, 255, 255, 255}; 7410 __d = vec_xor(__c, __d); 7411 return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b, 7412 (vector int)__a, __d); 7413#else 7414 return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a, 7415 (vector int)__b, __c); 7416#endif 7417} 7418 7419static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a, 7420 vector float __b, 7421 vector unsigned char __c) { 7422#ifdef __LITTLE_ENDIAN__ 7423 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7424 255, 255, 255, 255, 255, 255, 255, 255}; 7425 __d = vec_xor(__c, __d); 7426 return (vector float)__builtin_altivec_vperm_4si((vector int)__b, 7427 (vector int)__a, __d); 7428#else 7429 return (vector float)__builtin_altivec_vperm_4si((vector int)__a, 7430 (vector int)__b, __c); 7431#endif 7432} 7433 7434#ifdef __VSX__ 7435static __inline__ vector long long __ATTRS_o_ai 7436vec_perm(vector signed long long __a, vector signed long long __b, 7437 vector unsigned char __c) { 7438#ifdef __LITTLE_ENDIAN__ 7439 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7440 255, 255, 255, 255, 255, 255, 255, 255}; 7441 __d = vec_xor(__c, __d); 7442 return (vector signed long long)__builtin_altivec_vperm_4si( 7443 (vector int)__b, (vector int)__a, __d); 7444#else 7445 return (vector signed long long)__builtin_altivec_vperm_4si( 7446 (vector int)__a, (vector int)__b, __c); 7447#endif 7448} 7449 7450static __inline__ vector unsigned long long __ATTRS_o_ai 7451vec_perm(vector unsigned long long __a, vector unsigned long long __b, 7452 vector unsigned char __c) { 7453#ifdef __LITTLE_ENDIAN__ 7454 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7455 255, 255, 255, 255, 255, 255, 255, 255}; 7456 __d = vec_xor(__c, __d); 7457 return (vector unsigned long long)__builtin_altivec_vperm_4si( 7458 (vector int)__b, (vector int)__a, __d); 7459#else 7460 return (vector unsigned long long)__builtin_altivec_vperm_4si( 7461 (vector int)__a, (vector int)__b, __c); 7462#endif 7463} 7464 7465static __inline__ vector bool long long __ATTRS_o_ai 7466vec_perm(vector bool long long __a, vector bool long long __b, 7467 vector unsigned char __c) { 7468#ifdef __LITTLE_ENDIAN__ 7469 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7470 255, 255, 255, 255, 255, 255, 255, 255}; 7471 __d = vec_xor(__c, __d); 7472 return (vector bool long long)__builtin_altivec_vperm_4si( 7473 (vector int)__b, (vector int)__a, __d); 7474#else 7475 return (vector bool long long)__builtin_altivec_vperm_4si( 7476 (vector int)__a, (vector int)__b, __c); 7477#endif 7478} 7479 7480static __inline__ vector double __ATTRS_o_ai 7481vec_perm(vector double __a, vector double __b, vector unsigned char __c) { 7482#ifdef __LITTLE_ENDIAN__ 7483 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255, 7484 255, 255, 255, 255, 255, 255, 255, 255}; 7485 __d = vec_xor(__c, __d); 7486 return (vector double)__builtin_altivec_vperm_4si((vector int)__b, 7487 (vector int)__a, __d); 7488#else 7489 return (vector double)__builtin_altivec_vperm_4si((vector int)__a, 7490 (vector int)__b, __c); 7491#endif 7492} 7493#endif 7494 7495/* vec_vperm */ 7496 7497static __inline__ vector signed char __ATTRS_o_ai vec_vperm( 7498 vector signed char __a, vector signed char __b, vector unsigned char __c) { 7499 return vec_perm(__a, __b, __c); 7500} 7501 7502static __inline__ vector unsigned char __ATTRS_o_ai 7503vec_vperm(vector unsigned char __a, vector unsigned char __b, 7504 vector unsigned char __c) { 7505 return vec_perm(__a, __b, __c); 7506} 7507 7508static __inline__ vector bool char __ATTRS_o_ai vec_vperm( 7509 vector bool char __a, vector bool char __b, vector unsigned char __c) { 7510 return vec_perm(__a, __b, __c); 7511} 7512 7513static __inline__ vector short __ATTRS_o_ai 7514vec_vperm(vector short __a, vector short __b, vector unsigned char __c) { 7515 return vec_perm(__a, __b, __c); 7516} 7517 7518static __inline__ vector unsigned short __ATTRS_o_ai 7519vec_vperm(vector unsigned short __a, vector unsigned short __b, 7520 vector unsigned char __c) { 7521 return vec_perm(__a, __b, __c); 7522} 7523 7524static __inline__ vector bool short __ATTRS_o_ai vec_vperm( 7525 vector bool short __a, vector bool short __b, vector unsigned char __c) { 7526 return vec_perm(__a, __b, __c); 7527} 7528 7529static __inline__ vector pixel __ATTRS_o_ai 7530vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) { 7531 return vec_perm(__a, __b, __c); 7532} 7533 7534static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a, 7535 vector int __b, 7536 vector unsigned char __c) { 7537 return vec_perm(__a, __b, __c); 7538} 7539 7540static __inline__ vector unsigned int __ATTRS_o_ai 7541vec_vperm(vector unsigned int __a, vector unsigned int __b, 7542 vector unsigned char __c) { 7543 return vec_perm(__a, __b, __c); 7544} 7545 7546static __inline__ vector bool int __ATTRS_o_ai 7547vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) { 7548 return vec_perm(__a, __b, __c); 7549} 7550 7551static __inline__ vector float __ATTRS_o_ai 7552vec_vperm(vector float __a, vector float __b, vector unsigned char __c) { 7553 return vec_perm(__a, __b, __c); 7554} 7555 7556#ifdef __VSX__ 7557static __inline__ vector long long __ATTRS_o_ai vec_vperm( 7558 vector long long __a, vector long long __b, vector unsigned char __c) { 7559 return vec_perm(__a, __b, __c); 7560} 7561 7562static __inline__ vector unsigned long long __ATTRS_o_ai 7563vec_vperm(vector unsigned long long __a, vector unsigned long long __b, 7564 vector unsigned char __c) { 7565 return vec_perm(__a, __b, __c); 7566} 7567 7568static __inline__ vector double __ATTRS_o_ai 7569vec_vperm(vector double __a, vector double __b, vector unsigned char __c) { 7570 return vec_perm(__a, __b, __c); 7571} 7572#endif 7573 7574/* vec_re */ 7575 7576static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) { 7577#ifdef __VSX__ 7578 return __builtin_vsx_xvresp(__a); 7579#else 7580 return __builtin_altivec_vrefp(__a); 7581#endif 7582} 7583 7584#ifdef __VSX__ 7585static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) { 7586 return __builtin_vsx_xvredp(__a); 7587} 7588#endif 7589 7590/* vec_vrefp */ 7591 7592static __inline__ vector float __attribute__((__always_inline__)) 7593vec_vrefp(vector float __a) { 7594 return __builtin_altivec_vrefp(__a); 7595} 7596 7597/* vec_rl */ 7598 7599static __inline__ vector signed char __ATTRS_o_ai 7600vec_rl(vector signed char __a, vector unsigned char __b) { 7601 return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b); 7602} 7603 7604static __inline__ vector unsigned char __ATTRS_o_ai 7605vec_rl(vector unsigned char __a, vector unsigned char __b) { 7606 return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b); 7607} 7608 7609static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a, 7610 vector unsigned short __b) { 7611 return __builtin_altivec_vrlh(__a, __b); 7612} 7613 7614static __inline__ vector unsigned short __ATTRS_o_ai 7615vec_rl(vector unsigned short __a, vector unsigned short __b) { 7616 return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b); 7617} 7618 7619static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a, 7620 vector unsigned int __b) { 7621 return __builtin_altivec_vrlw(__a, __b); 7622} 7623 7624static __inline__ vector unsigned int __ATTRS_o_ai 7625vec_rl(vector unsigned int __a, vector unsigned int __b) { 7626 return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b); 7627} 7628 7629#ifdef __POWER8_VECTOR__ 7630static __inline__ vector signed long long __ATTRS_o_ai 7631vec_rl(vector signed long long __a, vector unsigned long long __b) { 7632 return __builtin_altivec_vrld(__a, __b); 7633} 7634 7635static __inline__ vector unsigned long long __ATTRS_o_ai 7636vec_rl(vector unsigned long long __a, vector unsigned long long __b) { 7637 return __builtin_altivec_vrld(__a, __b); 7638} 7639#endif 7640 7641/* vec_rlmi */ 7642#ifdef __POWER9_VECTOR__ 7643static __inline__ vector unsigned int __ATTRS_o_ai 7644vec_rlmi(vector unsigned int __a, vector unsigned int __b, 7645 vector unsigned int __c) { 7646 return __builtin_altivec_vrlwmi(__a, __c, __b); 7647} 7648 7649static __inline__ vector unsigned long long __ATTRS_o_ai 7650vec_rlmi(vector unsigned long long __a, vector unsigned long long __b, 7651 vector unsigned long long __c) { 7652 return __builtin_altivec_vrldmi(__a, __c, __b); 7653} 7654 7655/* vec_rlnm */ 7656static __inline__ vector unsigned int __ATTRS_o_ai 7657vec_rlnm(vector unsigned int __a, vector unsigned int __b, 7658 vector unsigned int __c) { 7659 vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 }; 7660 return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b)); 7661} 7662 7663static __inline__ vector unsigned long long __ATTRS_o_ai 7664vec_rlnm(vector unsigned long long __a, vector unsigned long long __b, 7665 vector unsigned long long __c) { 7666 vector unsigned long long OneByte = { 0x8, 0x8 }; 7667 return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b)); 7668} 7669#endif 7670 7671/* vec_vrlb */ 7672 7673static __inline__ vector signed char __ATTRS_o_ai 7674vec_vrlb(vector signed char __a, vector unsigned char __b) { 7675 return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b); 7676} 7677 7678static __inline__ vector unsigned char __ATTRS_o_ai 7679vec_vrlb(vector unsigned char __a, vector unsigned char __b) { 7680 return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b); 7681} 7682 7683/* vec_vrlh */ 7684 7685static __inline__ vector short __ATTRS_o_ai 7686vec_vrlh(vector short __a, vector unsigned short __b) { 7687 return __builtin_altivec_vrlh(__a, __b); 7688} 7689 7690static __inline__ vector unsigned short __ATTRS_o_ai 7691vec_vrlh(vector unsigned short __a, vector unsigned short __b) { 7692 return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b); 7693} 7694 7695/* vec_vrlw */ 7696 7697static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a, 7698 vector unsigned int __b) { 7699 return __builtin_altivec_vrlw(__a, __b); 7700} 7701 7702static __inline__ vector unsigned int __ATTRS_o_ai 7703vec_vrlw(vector unsigned int __a, vector unsigned int __b) { 7704 return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b); 7705} 7706 7707/* vec_round */ 7708 7709static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) { 7710#ifdef __VSX__ 7711 return __builtin_vsx_xvrspi(__a); 7712#else 7713 return __builtin_altivec_vrfin(__a); 7714#endif 7715} 7716 7717#ifdef __VSX__ 7718static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) { 7719 return __builtin_vsx_xvrdpi(__a); 7720} 7721 7722/* vec_rint */ 7723 7724static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) { 7725 return __builtin_vsx_xvrspic(__a); 7726} 7727 7728static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) { 7729 return __builtin_vsx_xvrdpic(__a); 7730} 7731 7732/* vec_nearbyint */ 7733 7734static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) { 7735 return __builtin_vsx_xvrspi(__a); 7736} 7737 7738static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) { 7739 return __builtin_vsx_xvrdpi(__a); 7740} 7741#endif 7742 7743/* vec_vrfin */ 7744 7745static __inline__ vector float __attribute__((__always_inline__)) 7746vec_vrfin(vector float __a) { 7747 return __builtin_altivec_vrfin(__a); 7748} 7749 7750/* vec_sqrt */ 7751 7752#ifdef __VSX__ 7753static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) { 7754 return __builtin_vsx_xvsqrtsp(__a); 7755} 7756 7757static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) { 7758 return __builtin_vsx_xvsqrtdp(__a); 7759} 7760#endif 7761 7762/* vec_rsqrte */ 7763 7764static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) { 7765#ifdef __VSX__ 7766 return __builtin_vsx_xvrsqrtesp(__a); 7767#else 7768 return __builtin_altivec_vrsqrtefp(__a); 7769#endif 7770} 7771 7772#ifdef __VSX__ 7773static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) { 7774 return __builtin_vsx_xvrsqrtedp(__a); 7775} 7776#endif 7777 7778/* vec_vrsqrtefp */ 7779 7780static __inline__ __vector float __attribute__((__always_inline__)) 7781vec_vrsqrtefp(vector float __a) { 7782 return __builtin_altivec_vrsqrtefp(__a); 7783} 7784 7785/* vec_sel */ 7786 7787#define __builtin_altivec_vsel_4si vec_sel 7788 7789static __inline__ vector signed char __ATTRS_o_ai vec_sel( 7790 vector signed char __a, vector signed char __b, vector unsigned char __c) { 7791 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); 7792} 7793 7794static __inline__ vector signed char __ATTRS_o_ai 7795vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) { 7796 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); 7797} 7798 7799static __inline__ vector unsigned char __ATTRS_o_ai 7800vec_sel(vector unsigned char __a, vector unsigned char __b, 7801 vector unsigned char __c) { 7802 return (__a & ~__c) | (__b & __c); 7803} 7804 7805static __inline__ vector unsigned char __ATTRS_o_ai vec_sel( 7806 vector unsigned char __a, vector unsigned char __b, vector bool char __c) { 7807 return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c); 7808} 7809 7810static __inline__ vector bool char __ATTRS_o_ai 7811vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) { 7812 return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c); 7813} 7814 7815static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a, 7816 vector bool char __b, 7817 vector bool char __c) { 7818 return (__a & ~__c) | (__b & __c); 7819} 7820 7821static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a, 7822 vector short __b, 7823 vector unsigned short __c) { 7824 return (__a & ~(vector short)__c) | (__b & (vector short)__c); 7825} 7826 7827static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a, 7828 vector short __b, 7829 vector bool short __c) { 7830 return (__a & ~(vector short)__c) | (__b & (vector short)__c); 7831} 7832 7833static __inline__ vector unsigned short __ATTRS_o_ai 7834vec_sel(vector unsigned short __a, vector unsigned short __b, 7835 vector unsigned short __c) { 7836 return (__a & ~__c) | (__b & __c); 7837} 7838 7839static __inline__ vector unsigned short __ATTRS_o_ai 7840vec_sel(vector unsigned short __a, vector unsigned short __b, 7841 vector bool short __c) { 7842 return (__a & ~(vector unsigned short)__c) | 7843 (__b & (vector unsigned short)__c); 7844} 7845 7846static __inline__ vector bool short __ATTRS_o_ai vec_sel( 7847 vector bool short __a, vector bool short __b, vector unsigned short __c) { 7848 return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c); 7849} 7850 7851static __inline__ vector bool short __ATTRS_o_ai 7852vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) { 7853 return (__a & ~__c) | (__b & __c); 7854} 7855 7856static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a, 7857 vector int __b, 7858 vector unsigned int __c) { 7859 return (__a & ~(vector int)__c) | (__b & (vector int)__c); 7860} 7861 7862static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a, 7863 vector int __b, 7864 vector bool int __c) { 7865 return (__a & ~(vector int)__c) | (__b & (vector int)__c); 7866} 7867 7868static __inline__ vector unsigned int __ATTRS_o_ai vec_sel( 7869 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) { 7870 return (__a & ~__c) | (__b & __c); 7871} 7872 7873static __inline__ vector unsigned int __ATTRS_o_ai 7874vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) { 7875 return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c); 7876} 7877 7878static __inline__ vector bool int __ATTRS_o_ai 7879vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) { 7880 return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c); 7881} 7882 7883static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a, 7884 vector bool int __b, 7885 vector bool int __c) { 7886 return (__a & ~__c) | (__b & __c); 7887} 7888 7889static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a, 7890 vector float __b, 7891 vector unsigned int __c) { 7892 vector int __res = ((vector int)__a & ~(vector int)__c) | 7893 ((vector int)__b & (vector int)__c); 7894 return (vector float)__res; 7895} 7896 7897static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a, 7898 vector float __b, 7899 vector bool int __c) { 7900 vector int __res = ((vector int)__a & ~(vector int)__c) | 7901 ((vector int)__b & (vector int)__c); 7902 return (vector float)__res; 7903} 7904 7905#ifdef __VSX__ 7906static __inline__ vector double __ATTRS_o_ai 7907vec_sel(vector double __a, vector double __b, vector bool long long __c) { 7908 vector long long __res = ((vector long long)__a & ~(vector long long)__c) | 7909 ((vector long long)__b & (vector long long)__c); 7910 return (vector double)__res; 7911} 7912 7913static __inline__ vector double __ATTRS_o_ai 7914vec_sel(vector double __a, vector double __b, vector unsigned long long __c) { 7915 vector long long __res = ((vector long long)__a & ~(vector long long)__c) | 7916 ((vector long long)__b & (vector long long)__c); 7917 return (vector double)__res; 7918} 7919#endif 7920 7921/* vec_vsel */ 7922 7923static __inline__ vector signed char __ATTRS_o_ai vec_vsel( 7924 vector signed char __a, vector signed char __b, vector unsigned char __c) { 7925 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); 7926} 7927 7928static __inline__ vector signed char __ATTRS_o_ai 7929vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) { 7930 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); 7931} 7932 7933static __inline__ vector unsigned char __ATTRS_o_ai 7934vec_vsel(vector unsigned char __a, vector unsigned char __b, 7935 vector unsigned char __c) { 7936 return (__a & ~__c) | (__b & __c); 7937} 7938 7939static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel( 7940 vector unsigned char __a, vector unsigned char __b, vector bool char __c) { 7941 return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c); 7942} 7943 7944static __inline__ vector bool char __ATTRS_o_ai 7945vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) { 7946 return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c); 7947} 7948 7949static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a, 7950 vector bool char __b, 7951 vector bool char __c) { 7952 return (__a & ~__c) | (__b & __c); 7953} 7954 7955static __inline__ vector short __ATTRS_o_ai 7956vec_vsel(vector short __a, vector short __b, vector unsigned short __c) { 7957 return (__a & ~(vector short)__c) | (__b & (vector short)__c); 7958} 7959 7960static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a, 7961 vector short __b, 7962 vector bool short __c) { 7963 return (__a & ~(vector short)__c) | (__b & (vector short)__c); 7964} 7965 7966static __inline__ vector unsigned short __ATTRS_o_ai 7967vec_vsel(vector unsigned short __a, vector unsigned short __b, 7968 vector unsigned short __c) { 7969 return (__a & ~__c) | (__b & __c); 7970} 7971 7972static __inline__ vector unsigned short __ATTRS_o_ai 7973vec_vsel(vector unsigned short __a, vector unsigned short __b, 7974 vector bool short __c) { 7975 return (__a & ~(vector unsigned short)__c) | 7976 (__b & (vector unsigned short)__c); 7977} 7978 7979static __inline__ vector bool short __ATTRS_o_ai vec_vsel( 7980 vector bool short __a, vector bool short __b, vector unsigned short __c) { 7981 return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c); 7982} 7983 7984static __inline__ vector bool short __ATTRS_o_ai 7985vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) { 7986 return (__a & ~__c) | (__b & __c); 7987} 7988 7989static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a, 7990 vector int __b, 7991 vector unsigned int __c) { 7992 return (__a & ~(vector int)__c) | (__b & (vector int)__c); 7993} 7994 7995static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a, 7996 vector int __b, 7997 vector bool int __c) { 7998 return (__a & ~(vector int)__c) | (__b & (vector int)__c); 7999} 8000 8001static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel( 8002 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) { 8003 return (__a & ~__c) | (__b & __c); 8004} 8005 8006static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel( 8007 vector unsigned int __a, vector unsigned int __b, vector bool int __c) { 8008 return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c); 8009} 8010 8011static __inline__ vector bool int __ATTRS_o_ai 8012vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) { 8013 return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c); 8014} 8015 8016static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a, 8017 vector bool int __b, 8018 vector bool int __c) { 8019 return (__a & ~__c) | (__b & __c); 8020} 8021 8022static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a, 8023 vector float __b, 8024 vector unsigned int __c) { 8025 vector int __res = ((vector int)__a & ~(vector int)__c) | 8026 ((vector int)__b & (vector int)__c); 8027 return (vector float)__res; 8028} 8029 8030static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a, 8031 vector float __b, 8032 vector bool int __c) { 8033 vector int __res = ((vector int)__a & ~(vector int)__c) | 8034 ((vector int)__b & (vector int)__c); 8035 return (vector float)__res; 8036} 8037 8038/* vec_sl */ 8039 8040// vec_sl does modulo arithmetic on __b first, so __b is allowed to be more 8041// than the length of __a. 8042static __inline__ vector unsigned char __ATTRS_o_ai 8043vec_sl(vector unsigned char __a, vector unsigned char __b) { 8044 return __a << (__b % 8045 (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__)); 8046} 8047 8048static __inline__ vector signed char __ATTRS_o_ai 8049vec_sl(vector signed char __a, vector unsigned char __b) { 8050 return (vector signed char)vec_sl((vector unsigned char)__a, __b); 8051} 8052 8053static __inline__ vector unsigned short __ATTRS_o_ai 8054vec_sl(vector unsigned short __a, vector unsigned short __b) { 8055 return __a << (__b % (vector unsigned short)(sizeof(unsigned short) * 8056 __CHAR_BIT__)); 8057} 8058 8059static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a, 8060 vector unsigned short __b) { 8061 return (vector short)vec_sl((vector unsigned short)__a, __b); 8062} 8063 8064static __inline__ vector unsigned int __ATTRS_o_ai 8065vec_sl(vector unsigned int __a, vector unsigned int __b) { 8066 return __a << (__b % 8067 (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__)); 8068} 8069 8070static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a, 8071 vector unsigned int __b) { 8072 return (vector int)vec_sl((vector unsigned int)__a, __b); 8073} 8074 8075#ifdef __POWER8_VECTOR__ 8076static __inline__ vector unsigned long long __ATTRS_o_ai 8077vec_sl(vector unsigned long long __a, vector unsigned long long __b) { 8078 return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) * 8079 __CHAR_BIT__)); 8080} 8081 8082static __inline__ vector long long __ATTRS_o_ai 8083vec_sl(vector long long __a, vector unsigned long long __b) { 8084 return (vector long long)vec_sl((vector unsigned long long)__a, __b); 8085} 8086#endif 8087 8088/* vec_vslb */ 8089 8090#define __builtin_altivec_vslb vec_vslb 8091 8092static __inline__ vector signed char __ATTRS_o_ai 8093vec_vslb(vector signed char __a, vector unsigned char __b) { 8094 return vec_sl(__a, __b); 8095} 8096 8097static __inline__ vector unsigned char __ATTRS_o_ai 8098vec_vslb(vector unsigned char __a, vector unsigned char __b) { 8099 return vec_sl(__a, __b); 8100} 8101 8102/* vec_vslh */ 8103 8104#define __builtin_altivec_vslh vec_vslh 8105 8106static __inline__ vector short __ATTRS_o_ai 8107vec_vslh(vector short __a, vector unsigned short __b) { 8108 return vec_sl(__a, __b); 8109} 8110 8111static __inline__ vector unsigned short __ATTRS_o_ai 8112vec_vslh(vector unsigned short __a, vector unsigned short __b) { 8113 return vec_sl(__a, __b); 8114} 8115 8116/* vec_vslw */ 8117 8118#define __builtin_altivec_vslw vec_vslw 8119 8120static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a, 8121 vector unsigned int __b) { 8122 return vec_sl(__a, __b); 8123} 8124 8125static __inline__ vector unsigned int __ATTRS_o_ai 8126vec_vslw(vector unsigned int __a, vector unsigned int __b) { 8127 return vec_sl(__a, __b); 8128} 8129 8130/* vec_sld */ 8131 8132#define __builtin_altivec_vsldoi_4si vec_sld 8133 8134static __inline__ vector signed char __ATTRS_o_ai vec_sld( 8135 vector signed char __a, vector signed char __b, unsigned const int __c) { 8136 unsigned char __d = __c & 0x0F; 8137#ifdef __LITTLE_ENDIAN__ 8138 return vec_perm( 8139 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8140 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8141 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8142 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8143#else 8144 return vec_perm( 8145 __a, __b, 8146 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8147 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8148 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8149#endif 8150} 8151 8152static __inline__ vector unsigned char __ATTRS_o_ai 8153vec_sld(vector unsigned char __a, vector unsigned char __b, 8154 unsigned const int __c) { 8155 unsigned char __d = __c & 0x0F; 8156#ifdef __LITTLE_ENDIAN__ 8157 return vec_perm( 8158 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8159 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8160 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8161 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8162#else 8163 return vec_perm( 8164 __a, __b, 8165 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8166 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8167 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8168#endif 8169} 8170 8171static __inline__ vector bool char __ATTRS_o_ai 8172vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) { 8173 unsigned char __d = __c & 0x0F; 8174#ifdef __LITTLE_ENDIAN__ 8175 return vec_perm( 8176 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8177 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8178 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8179 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8180#else 8181 return vec_perm( 8182 __a, __b, 8183 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8184 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8185 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8186#endif 8187} 8188 8189static __inline__ vector signed short __ATTRS_o_ai vec_sld( 8190 vector signed short __a, vector signed short __b, unsigned const int __c) { 8191 unsigned char __d = __c & 0x0F; 8192#ifdef __LITTLE_ENDIAN__ 8193 return vec_perm( 8194 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8195 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8196 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8197 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8198#else 8199 return vec_perm( 8200 __a, __b, 8201 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8202 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8203 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8204#endif 8205} 8206 8207static __inline__ vector unsigned short __ATTRS_o_ai 8208vec_sld(vector unsigned short __a, vector unsigned short __b, 8209 unsigned const int __c) { 8210 unsigned char __d = __c & 0x0F; 8211#ifdef __LITTLE_ENDIAN__ 8212 return vec_perm( 8213 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8214 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8215 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8216 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8217#else 8218 return vec_perm( 8219 __a, __b, 8220 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8221 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8222 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8223#endif 8224} 8225 8226static __inline__ vector bool short __ATTRS_o_ai 8227vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) { 8228 unsigned char __d = __c & 0x0F; 8229#ifdef __LITTLE_ENDIAN__ 8230 return vec_perm( 8231 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8232 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8233 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8234 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8235#else 8236 return vec_perm( 8237 __a, __b, 8238 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8239 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8240 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8241#endif 8242} 8243 8244static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a, 8245 vector pixel __b, 8246 unsigned const int __c) { 8247 unsigned char __d = __c & 0x0F; 8248#ifdef __LITTLE_ENDIAN__ 8249 return vec_perm( 8250 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8251 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8252 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8253 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8254#else 8255 return vec_perm( 8256 __a, __b, 8257 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8258 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8259 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8260#endif 8261} 8262 8263static __inline__ vector signed int __ATTRS_o_ai 8264vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) { 8265 unsigned char __d = __c & 0x0F; 8266#ifdef __LITTLE_ENDIAN__ 8267 return vec_perm( 8268 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8269 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8270 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8271 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8272#else 8273 return vec_perm( 8274 __a, __b, 8275 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8276 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8277 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8278#endif 8279} 8280 8281static __inline__ vector unsigned int __ATTRS_o_ai vec_sld( 8282 vector unsigned int __a, vector unsigned int __b, unsigned const int __c) { 8283 unsigned char __d = __c & 0x0F; 8284#ifdef __LITTLE_ENDIAN__ 8285 return vec_perm( 8286 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8287 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8288 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8289 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8290#else 8291 return vec_perm( 8292 __a, __b, 8293 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8294 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8295 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8296#endif 8297} 8298 8299static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a, 8300 vector bool int __b, 8301 unsigned const int __c) { 8302 unsigned char __d = __c & 0x0F; 8303#ifdef __LITTLE_ENDIAN__ 8304 return vec_perm( 8305 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8306 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8307 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8308 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8309#else 8310 return vec_perm( 8311 __a, __b, 8312 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8313 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8314 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8315#endif 8316} 8317 8318static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a, 8319 vector float __b, 8320 unsigned const int __c) { 8321 unsigned char __d = __c & 0x0F; 8322#ifdef __LITTLE_ENDIAN__ 8323 return vec_perm( 8324 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8325 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8326 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8327 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8328#else 8329 return vec_perm( 8330 __a, __b, 8331 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8332 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8333 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8334#endif 8335} 8336 8337#ifdef __VSX__ 8338static __inline__ vector bool long long __ATTRS_o_ai 8339vec_sld(vector bool long long __a, vector bool long long __b, 8340 unsigned const int __c) { 8341 unsigned char __d = __c & 0x0F; 8342#ifdef __LITTLE_ENDIAN__ 8343 return vec_perm( 8344 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8345 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8346 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8347 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8348#else 8349 return vec_perm( 8350 __a, __b, 8351 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8352 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8353 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8354#endif 8355} 8356 8357static __inline__ vector signed long long __ATTRS_o_ai 8358vec_sld(vector signed long long __a, vector signed long long __b, 8359 unsigned const int __c) { 8360 unsigned char __d = __c & 0x0F; 8361#ifdef __LITTLE_ENDIAN__ 8362 return vec_perm( 8363 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8364 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8365 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8366 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8367#else 8368 return vec_perm( 8369 __a, __b, 8370 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8371 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8372 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8373#endif 8374} 8375 8376static __inline__ vector unsigned long long __ATTRS_o_ai 8377vec_sld(vector unsigned long long __a, vector unsigned long long __b, 8378 unsigned const int __c) { 8379 unsigned char __d = __c & 0x0F; 8380#ifdef __LITTLE_ENDIAN__ 8381 return vec_perm( 8382 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8383 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8384 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8385 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8386#else 8387 return vec_perm( 8388 __a, __b, 8389 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8390 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8391 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8392#endif 8393} 8394 8395static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a, 8396 vector double __b, 8397 unsigned const int __c) { 8398 unsigned char __d = __c & 0x0F; 8399#ifdef __LITTLE_ENDIAN__ 8400 return vec_perm( 8401 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8402 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8403 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8404 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8405#else 8406 return vec_perm( 8407 __a, __b, 8408 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8409 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8410 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8411#endif 8412} 8413#endif 8414 8415/* vec_sldw */ 8416static __inline__ vector signed char __ATTRS_o_ai vec_sldw( 8417 vector signed char __a, vector signed char __b, unsigned const int __c) { 8418 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8419} 8420 8421static __inline__ vector unsigned char __ATTRS_o_ai 8422vec_sldw(vector unsigned char __a, vector unsigned char __b, 8423 unsigned const int __c) { 8424 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8425} 8426 8427static __inline__ vector signed short __ATTRS_o_ai vec_sldw( 8428 vector signed short __a, vector signed short __b, unsigned const int __c) { 8429 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8430} 8431 8432static __inline__ vector unsigned short __ATTRS_o_ai 8433vec_sldw(vector unsigned short __a, vector unsigned short __b, 8434 unsigned const int __c) { 8435 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8436} 8437 8438static __inline__ vector signed int __ATTRS_o_ai 8439vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) { 8440 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8441} 8442 8443static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw( 8444 vector unsigned int __a, vector unsigned int __b, unsigned const int __c) { 8445 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8446} 8447 8448#ifdef __VSX__ 8449static __inline__ vector signed long long __ATTRS_o_ai 8450vec_sldw(vector signed long long __a, vector signed long long __b, 8451 unsigned const int __c) { 8452 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8453} 8454 8455static __inline__ vector unsigned long long __ATTRS_o_ai 8456vec_sldw(vector unsigned long long __a, vector unsigned long long __b, 8457 unsigned const int __c) { 8458 return vec_sld(__a, __b, ((__c << 2) & 0x0F)); 8459} 8460#endif 8461 8462#ifdef __POWER9_VECTOR__ 8463/* vec_slv */ 8464static __inline__ vector unsigned char __ATTRS_o_ai 8465vec_slv(vector unsigned char __a, vector unsigned char __b) { 8466 return __builtin_altivec_vslv(__a, __b); 8467} 8468 8469/* vec_srv */ 8470static __inline__ vector unsigned char __ATTRS_o_ai 8471vec_srv(vector unsigned char __a, vector unsigned char __b) { 8472 return __builtin_altivec_vsrv(__a, __b); 8473} 8474#endif 8475 8476/* vec_vsldoi */ 8477 8478static __inline__ vector signed char __ATTRS_o_ai 8479vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) { 8480 unsigned char __d = __c & 0x0F; 8481#ifdef __LITTLE_ENDIAN__ 8482 return vec_perm( 8483 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8484 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8485 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8486 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8487#else 8488 return vec_perm( 8489 __a, __b, 8490 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8491 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8492 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8493#endif 8494} 8495 8496static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi( 8497 vector unsigned char __a, vector unsigned char __b, unsigned char __c) { 8498 unsigned char __d = __c & 0x0F; 8499#ifdef __LITTLE_ENDIAN__ 8500 return vec_perm( 8501 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8502 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8503 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8504 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8505#else 8506 return vec_perm( 8507 __a, __b, 8508 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8509 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8510 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8511#endif 8512} 8513 8514static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a, 8515 vector short __b, 8516 unsigned char __c) { 8517 unsigned char __d = __c & 0x0F; 8518#ifdef __LITTLE_ENDIAN__ 8519 return vec_perm( 8520 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8521 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8522 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8523 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8524#else 8525 return vec_perm( 8526 __a, __b, 8527 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8528 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8529 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8530#endif 8531} 8532 8533static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi( 8534 vector unsigned short __a, vector unsigned short __b, unsigned char __c) { 8535 unsigned char __d = __c & 0x0F; 8536#ifdef __LITTLE_ENDIAN__ 8537 return vec_perm( 8538 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8539 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8540 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8541 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8542#else 8543 return vec_perm( 8544 __a, __b, 8545 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8546 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8547 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8548#endif 8549} 8550 8551static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a, 8552 vector pixel __b, 8553 unsigned char __c) { 8554 unsigned char __d = __c & 0x0F; 8555#ifdef __LITTLE_ENDIAN__ 8556 return vec_perm( 8557 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8558 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8559 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8560 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8561#else 8562 return vec_perm( 8563 __a, __b, 8564 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8565 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8566 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8567#endif 8568} 8569 8570static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a, 8571 vector int __b, 8572 unsigned char __c) { 8573 unsigned char __d = __c & 0x0F; 8574#ifdef __LITTLE_ENDIAN__ 8575 return vec_perm( 8576 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8577 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8578 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8579 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8580#else 8581 return vec_perm( 8582 __a, __b, 8583 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8584 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8585 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8586#endif 8587} 8588 8589static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi( 8590 vector unsigned int __a, vector unsigned int __b, unsigned char __c) { 8591 unsigned char __d = __c & 0x0F; 8592#ifdef __LITTLE_ENDIAN__ 8593 return vec_perm( 8594 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8595 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8596 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8597 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8598#else 8599 return vec_perm( 8600 __a, __b, 8601 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8602 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8603 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8604#endif 8605} 8606 8607static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a, 8608 vector float __b, 8609 unsigned char __c) { 8610 unsigned char __d = __c & 0x0F; 8611#ifdef __LITTLE_ENDIAN__ 8612 return vec_perm( 8613 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d, 8614 20 - __d, 21 - __d, 22 - __d, 23 - __d, 8615 24 - __d, 25 - __d, 26 - __d, 27 - __d, 8616 28 - __d, 29 - __d, 30 - __d, 31 - __d)); 8617#else 8618 return vec_perm( 8619 __a, __b, 8620 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5, 8621 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10, 8622 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15)); 8623#endif 8624} 8625 8626/* vec_sll */ 8627 8628static __inline__ vector signed char __ATTRS_o_ai 8629vec_sll(vector signed char __a, vector unsigned char __b) { 8630 return (vector signed char)__builtin_altivec_vsl((vector int)__a, 8631 (vector int)__b); 8632} 8633 8634static __inline__ vector signed char __ATTRS_o_ai 8635vec_sll(vector signed char __a, vector unsigned short __b) { 8636 return (vector signed char)__builtin_altivec_vsl((vector int)__a, 8637 (vector int)__b); 8638} 8639 8640static __inline__ vector signed char __ATTRS_o_ai 8641vec_sll(vector signed char __a, vector unsigned int __b) { 8642 return (vector signed char)__builtin_altivec_vsl((vector int)__a, 8643 (vector int)__b); 8644} 8645 8646static __inline__ vector unsigned char __ATTRS_o_ai 8647vec_sll(vector unsigned char __a, vector unsigned char __b) { 8648 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, 8649 (vector int)__b); 8650} 8651 8652static __inline__ vector unsigned char __ATTRS_o_ai 8653vec_sll(vector unsigned char __a, vector unsigned short __b) { 8654 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, 8655 (vector int)__b); 8656} 8657 8658static __inline__ vector unsigned char __ATTRS_o_ai 8659vec_sll(vector unsigned char __a, vector unsigned int __b) { 8660 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, 8661 (vector int)__b); 8662} 8663 8664static __inline__ vector bool char __ATTRS_o_ai 8665vec_sll(vector bool char __a, vector unsigned char __b) { 8666 return (vector bool char)__builtin_altivec_vsl((vector int)__a, 8667 (vector int)__b); 8668} 8669 8670static __inline__ vector bool char __ATTRS_o_ai 8671vec_sll(vector bool char __a, vector unsigned short __b) { 8672 return (vector bool char)__builtin_altivec_vsl((vector int)__a, 8673 (vector int)__b); 8674} 8675 8676static __inline__ vector bool char __ATTRS_o_ai 8677vec_sll(vector bool char __a, vector unsigned int __b) { 8678 return (vector bool char)__builtin_altivec_vsl((vector int)__a, 8679 (vector int)__b); 8680} 8681 8682static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a, 8683 vector unsigned char __b) { 8684 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8685} 8686 8687static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a, 8688 vector unsigned short __b) { 8689 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8690} 8691 8692static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a, 8693 vector unsigned int __b) { 8694 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8695} 8696 8697static __inline__ vector unsigned short __ATTRS_o_ai 8698vec_sll(vector unsigned short __a, vector unsigned char __b) { 8699 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, 8700 (vector int)__b); 8701} 8702 8703static __inline__ vector unsigned short __ATTRS_o_ai 8704vec_sll(vector unsigned short __a, vector unsigned short __b) { 8705 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, 8706 (vector int)__b); 8707} 8708 8709static __inline__ vector unsigned short __ATTRS_o_ai 8710vec_sll(vector unsigned short __a, vector unsigned int __b) { 8711 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, 8712 (vector int)__b); 8713} 8714 8715static __inline__ vector bool short __ATTRS_o_ai 8716vec_sll(vector bool short __a, vector unsigned char __b) { 8717 return (vector bool short)__builtin_altivec_vsl((vector int)__a, 8718 (vector int)__b); 8719} 8720 8721static __inline__ vector bool short __ATTRS_o_ai 8722vec_sll(vector bool short __a, vector unsigned short __b) { 8723 return (vector bool short)__builtin_altivec_vsl((vector int)__a, 8724 (vector int)__b); 8725} 8726 8727static __inline__ vector bool short __ATTRS_o_ai 8728vec_sll(vector bool short __a, vector unsigned int __b) { 8729 return (vector bool short)__builtin_altivec_vsl((vector int)__a, 8730 (vector int)__b); 8731} 8732 8733static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a, 8734 vector unsigned char __b) { 8735 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8736} 8737 8738static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a, 8739 vector unsigned short __b) { 8740 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8741} 8742 8743static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a, 8744 vector unsigned int __b) { 8745 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8746} 8747 8748static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a, 8749 vector unsigned char __b) { 8750 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); 8751} 8752 8753static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a, 8754 vector unsigned short __b) { 8755 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); 8756} 8757 8758static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a, 8759 vector unsigned int __b) { 8760 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); 8761} 8762 8763static __inline__ vector unsigned int __ATTRS_o_ai 8764vec_sll(vector unsigned int __a, vector unsigned char __b) { 8765 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, 8766 (vector int)__b); 8767} 8768 8769static __inline__ vector unsigned int __ATTRS_o_ai 8770vec_sll(vector unsigned int __a, vector unsigned short __b) { 8771 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, 8772 (vector int)__b); 8773} 8774 8775static __inline__ vector unsigned int __ATTRS_o_ai 8776vec_sll(vector unsigned int __a, vector unsigned int __b) { 8777 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, 8778 (vector int)__b); 8779} 8780 8781static __inline__ vector bool int __ATTRS_o_ai 8782vec_sll(vector bool int __a, vector unsigned char __b) { 8783 return (vector bool int)__builtin_altivec_vsl((vector int)__a, 8784 (vector int)__b); 8785} 8786 8787static __inline__ vector bool int __ATTRS_o_ai 8788vec_sll(vector bool int __a, vector unsigned short __b) { 8789 return (vector bool int)__builtin_altivec_vsl((vector int)__a, 8790 (vector int)__b); 8791} 8792 8793static __inline__ vector bool int __ATTRS_o_ai 8794vec_sll(vector bool int __a, vector unsigned int __b) { 8795 return (vector bool int)__builtin_altivec_vsl((vector int)__a, 8796 (vector int)__b); 8797} 8798 8799#ifdef __VSX__ 8800static __inline__ vector signed long long __ATTRS_o_ai 8801vec_sll(vector signed long long __a, vector unsigned char __b) { 8802 return (vector signed long long)__builtin_altivec_vsl((vector int)__a, 8803 (vector int)__b); 8804} 8805 8806static __inline__ vector unsigned long long __ATTRS_o_ai 8807vec_sll(vector unsigned long long __a, vector unsigned char __b) { 8808 return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a, 8809 (vector int)__b); 8810} 8811#endif 8812 8813/* vec_vsl */ 8814 8815static __inline__ vector signed char __ATTRS_o_ai 8816vec_vsl(vector signed char __a, vector unsigned char __b) { 8817 return (vector signed char)__builtin_altivec_vsl((vector int)__a, 8818 (vector int)__b); 8819} 8820 8821static __inline__ vector signed char __ATTRS_o_ai 8822vec_vsl(vector signed char __a, vector unsigned short __b) { 8823 return (vector signed char)__builtin_altivec_vsl((vector int)__a, 8824 (vector int)__b); 8825} 8826 8827static __inline__ vector signed char __ATTRS_o_ai 8828vec_vsl(vector signed char __a, vector unsigned int __b) { 8829 return (vector signed char)__builtin_altivec_vsl((vector int)__a, 8830 (vector int)__b); 8831} 8832 8833static __inline__ vector unsigned char __ATTRS_o_ai 8834vec_vsl(vector unsigned char __a, vector unsigned char __b) { 8835 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, 8836 (vector int)__b); 8837} 8838 8839static __inline__ vector unsigned char __ATTRS_o_ai 8840vec_vsl(vector unsigned char __a, vector unsigned short __b) { 8841 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, 8842 (vector int)__b); 8843} 8844 8845static __inline__ vector unsigned char __ATTRS_o_ai 8846vec_vsl(vector unsigned char __a, vector unsigned int __b) { 8847 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a, 8848 (vector int)__b); 8849} 8850 8851static __inline__ vector bool char __ATTRS_o_ai 8852vec_vsl(vector bool char __a, vector unsigned char __b) { 8853 return (vector bool char)__builtin_altivec_vsl((vector int)__a, 8854 (vector int)__b); 8855} 8856 8857static __inline__ vector bool char __ATTRS_o_ai 8858vec_vsl(vector bool char __a, vector unsigned short __b) { 8859 return (vector bool char)__builtin_altivec_vsl((vector int)__a, 8860 (vector int)__b); 8861} 8862 8863static __inline__ vector bool char __ATTRS_o_ai 8864vec_vsl(vector bool char __a, vector unsigned int __b) { 8865 return (vector bool char)__builtin_altivec_vsl((vector int)__a, 8866 (vector int)__b); 8867} 8868 8869static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a, 8870 vector unsigned char __b) { 8871 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8872} 8873 8874static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a, 8875 vector unsigned short __b) { 8876 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8877} 8878 8879static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a, 8880 vector unsigned int __b) { 8881 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8882} 8883 8884static __inline__ vector unsigned short __ATTRS_o_ai 8885vec_vsl(vector unsigned short __a, vector unsigned char __b) { 8886 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, 8887 (vector int)__b); 8888} 8889 8890static __inline__ vector unsigned short __ATTRS_o_ai 8891vec_vsl(vector unsigned short __a, vector unsigned short __b) { 8892 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, 8893 (vector int)__b); 8894} 8895 8896static __inline__ vector unsigned short __ATTRS_o_ai 8897vec_vsl(vector unsigned short __a, vector unsigned int __b) { 8898 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a, 8899 (vector int)__b); 8900} 8901 8902static __inline__ vector bool short __ATTRS_o_ai 8903vec_vsl(vector bool short __a, vector unsigned char __b) { 8904 return (vector bool short)__builtin_altivec_vsl((vector int)__a, 8905 (vector int)__b); 8906} 8907 8908static __inline__ vector bool short __ATTRS_o_ai 8909vec_vsl(vector bool short __a, vector unsigned short __b) { 8910 return (vector bool short)__builtin_altivec_vsl((vector int)__a, 8911 (vector int)__b); 8912} 8913 8914static __inline__ vector bool short __ATTRS_o_ai 8915vec_vsl(vector bool short __a, vector unsigned int __b) { 8916 return (vector bool short)__builtin_altivec_vsl((vector int)__a, 8917 (vector int)__b); 8918} 8919 8920static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a, 8921 vector unsigned char __b) { 8922 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8923} 8924 8925static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a, 8926 vector unsigned short __b) { 8927 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8928} 8929 8930static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a, 8931 vector unsigned int __b) { 8932 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); 8933} 8934 8935static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a, 8936 vector unsigned char __b) { 8937 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); 8938} 8939 8940static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a, 8941 vector unsigned short __b) { 8942 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); 8943} 8944 8945static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a, 8946 vector unsigned int __b) { 8947 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); 8948} 8949 8950static __inline__ vector unsigned int __ATTRS_o_ai 8951vec_vsl(vector unsigned int __a, vector unsigned char __b) { 8952 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, 8953 (vector int)__b); 8954} 8955 8956static __inline__ vector unsigned int __ATTRS_o_ai 8957vec_vsl(vector unsigned int __a, vector unsigned short __b) { 8958 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, 8959 (vector int)__b); 8960} 8961 8962static __inline__ vector unsigned int __ATTRS_o_ai 8963vec_vsl(vector unsigned int __a, vector unsigned int __b) { 8964 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a, 8965 (vector int)__b); 8966} 8967 8968static __inline__ vector bool int __ATTRS_o_ai 8969vec_vsl(vector bool int __a, vector unsigned char __b) { 8970 return (vector bool int)__builtin_altivec_vsl((vector int)__a, 8971 (vector int)__b); 8972} 8973 8974static __inline__ vector bool int __ATTRS_o_ai 8975vec_vsl(vector bool int __a, vector unsigned short __b) { 8976 return (vector bool int)__builtin_altivec_vsl((vector int)__a, 8977 (vector int)__b); 8978} 8979 8980static __inline__ vector bool int __ATTRS_o_ai 8981vec_vsl(vector bool int __a, vector unsigned int __b) { 8982 return (vector bool int)__builtin_altivec_vsl((vector int)__a, 8983 (vector int)__b); 8984} 8985 8986/* vec_slo */ 8987 8988static __inline__ vector signed char __ATTRS_o_ai 8989vec_slo(vector signed char __a, vector signed char __b) { 8990 return (vector signed char)__builtin_altivec_vslo((vector int)__a, 8991 (vector int)__b); 8992} 8993 8994static __inline__ vector signed char __ATTRS_o_ai 8995vec_slo(vector signed char __a, vector unsigned char __b) { 8996 return (vector signed char)__builtin_altivec_vslo((vector int)__a, 8997 (vector int)__b); 8998} 8999 9000static __inline__ vector unsigned char __ATTRS_o_ai 9001vec_slo(vector unsigned char __a, vector signed char __b) { 9002 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, 9003 (vector int)__b); 9004} 9005 9006static __inline__ vector unsigned char __ATTRS_o_ai 9007vec_slo(vector unsigned char __a, vector unsigned char __b) { 9008 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, 9009 (vector int)__b); 9010} 9011 9012static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a, 9013 vector signed char __b) { 9014 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9015} 9016 9017static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a, 9018 vector unsigned char __b) { 9019 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9020} 9021 9022static __inline__ vector unsigned short __ATTRS_o_ai 9023vec_slo(vector unsigned short __a, vector signed char __b) { 9024 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, 9025 (vector int)__b); 9026} 9027 9028static __inline__ vector unsigned short __ATTRS_o_ai 9029vec_slo(vector unsigned short __a, vector unsigned char __b) { 9030 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, 9031 (vector int)__b); 9032} 9033 9034static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a, 9035 vector signed char __b) { 9036 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9037} 9038 9039static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a, 9040 vector unsigned char __b) { 9041 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9042} 9043 9044static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a, 9045 vector signed char __b) { 9046 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); 9047} 9048 9049static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a, 9050 vector unsigned char __b) { 9051 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); 9052} 9053 9054static __inline__ vector unsigned int __ATTRS_o_ai 9055vec_slo(vector unsigned int __a, vector signed char __b) { 9056 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, 9057 (vector int)__b); 9058} 9059 9060static __inline__ vector unsigned int __ATTRS_o_ai 9061vec_slo(vector unsigned int __a, vector unsigned char __b) { 9062 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, 9063 (vector int)__b); 9064} 9065 9066static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a, 9067 vector signed char __b) { 9068 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9069} 9070 9071static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a, 9072 vector unsigned char __b) { 9073 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9074} 9075 9076#ifdef __VSX__ 9077static __inline__ vector signed long long __ATTRS_o_ai 9078vec_slo(vector signed long long __a, vector signed char __b) { 9079 return (vector signed long long)__builtin_altivec_vslo((vector int)__a, 9080 (vector int)__b); 9081} 9082 9083static __inline__ vector signed long long __ATTRS_o_ai 9084vec_slo(vector signed long long __a, vector unsigned char __b) { 9085 return (vector signed long long)__builtin_altivec_vslo((vector int)__a, 9086 (vector int)__b); 9087} 9088 9089static __inline__ vector unsigned long long __ATTRS_o_ai 9090vec_slo(vector unsigned long long __a, vector signed char __b) { 9091 return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a, 9092 (vector int)__b); 9093} 9094 9095static __inline__ vector unsigned long long __ATTRS_o_ai 9096vec_slo(vector unsigned long long __a, vector unsigned char __b) { 9097 return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a, 9098 (vector int)__b); 9099} 9100#endif 9101 9102/* vec_vslo */ 9103 9104static __inline__ vector signed char __ATTRS_o_ai 9105vec_vslo(vector signed char __a, vector signed char __b) { 9106 return (vector signed char)__builtin_altivec_vslo((vector int)__a, 9107 (vector int)__b); 9108} 9109 9110static __inline__ vector signed char __ATTRS_o_ai 9111vec_vslo(vector signed char __a, vector unsigned char __b) { 9112 return (vector signed char)__builtin_altivec_vslo((vector int)__a, 9113 (vector int)__b); 9114} 9115 9116static __inline__ vector unsigned char __ATTRS_o_ai 9117vec_vslo(vector unsigned char __a, vector signed char __b) { 9118 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, 9119 (vector int)__b); 9120} 9121 9122static __inline__ vector unsigned char __ATTRS_o_ai 9123vec_vslo(vector unsigned char __a, vector unsigned char __b) { 9124 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a, 9125 (vector int)__b); 9126} 9127 9128static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a, 9129 vector signed char __b) { 9130 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9131} 9132 9133static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a, 9134 vector unsigned char __b) { 9135 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9136} 9137 9138static __inline__ vector unsigned short __ATTRS_o_ai 9139vec_vslo(vector unsigned short __a, vector signed char __b) { 9140 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, 9141 (vector int)__b); 9142} 9143 9144static __inline__ vector unsigned short __ATTRS_o_ai 9145vec_vslo(vector unsigned short __a, vector unsigned char __b) { 9146 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a, 9147 (vector int)__b); 9148} 9149 9150static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a, 9151 vector signed char __b) { 9152 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9153} 9154 9155static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a, 9156 vector unsigned char __b) { 9157 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9158} 9159 9160static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a, 9161 vector signed char __b) { 9162 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); 9163} 9164 9165static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a, 9166 vector unsigned char __b) { 9167 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); 9168} 9169 9170static __inline__ vector unsigned int __ATTRS_o_ai 9171vec_vslo(vector unsigned int __a, vector signed char __b) { 9172 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, 9173 (vector int)__b); 9174} 9175 9176static __inline__ vector unsigned int __ATTRS_o_ai 9177vec_vslo(vector unsigned int __a, vector unsigned char __b) { 9178 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a, 9179 (vector int)__b); 9180} 9181 9182static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a, 9183 vector signed char __b) { 9184 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9185} 9186 9187static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a, 9188 vector unsigned char __b) { 9189 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); 9190} 9191 9192/* vec_splat */ 9193 9194static __inline__ vector signed char __ATTRS_o_ai 9195vec_splat(vector signed char __a, unsigned const int __b) { 9196 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F)); 9197} 9198 9199static __inline__ vector unsigned char __ATTRS_o_ai 9200vec_splat(vector unsigned char __a, unsigned const int __b) { 9201 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F)); 9202} 9203 9204static __inline__ vector bool char __ATTRS_o_ai 9205vec_splat(vector bool char __a, unsigned const int __b) { 9206 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F)); 9207} 9208 9209static __inline__ vector signed short __ATTRS_o_ai 9210vec_splat(vector signed short __a, unsigned const int __b) { 9211 unsigned char b0 = (__b & 0x07) * 2; 9212 unsigned char b1 = b0 + 1; 9213 return vec_perm(__a, __a, 9214 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1, 9215 b0, b1, b0, b1, b0, b1)); 9216} 9217 9218static __inline__ vector unsigned short __ATTRS_o_ai 9219vec_splat(vector unsigned short __a, unsigned const int __b) { 9220 unsigned char b0 = (__b & 0x07) * 2; 9221 unsigned char b1 = b0 + 1; 9222 return vec_perm(__a, __a, 9223 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1, 9224 b0, b1, b0, b1, b0, b1)); 9225} 9226 9227static __inline__ vector bool short __ATTRS_o_ai 9228vec_splat(vector bool short __a, unsigned const int __b) { 9229 unsigned char b0 = (__b & 0x07) * 2; 9230 unsigned char b1 = b0 + 1; 9231 return vec_perm(__a, __a, 9232 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1, 9233 b0, b1, b0, b1, b0, b1)); 9234} 9235 9236static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a, 9237 unsigned const int __b) { 9238 unsigned char b0 = (__b & 0x07) * 2; 9239 unsigned char b1 = b0 + 1; 9240 return vec_perm(__a, __a, 9241 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1, 9242 b0, b1, b0, b1, b0, b1)); 9243} 9244 9245static __inline__ vector signed int __ATTRS_o_ai 9246vec_splat(vector signed int __a, unsigned const int __b) { 9247 unsigned char b0 = (__b & 0x03) * 4; 9248 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; 9249 return vec_perm(__a, __a, 9250 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1, 9251 b2, b3, b0, b1, b2, b3)); 9252} 9253 9254static __inline__ vector unsigned int __ATTRS_o_ai 9255vec_splat(vector unsigned int __a, unsigned const int __b) { 9256 unsigned char b0 = (__b & 0x03) * 4; 9257 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; 9258 return vec_perm(__a, __a, 9259 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1, 9260 b2, b3, b0, b1, b2, b3)); 9261} 9262 9263static __inline__ vector bool int __ATTRS_o_ai 9264vec_splat(vector bool int __a, unsigned const int __b) { 9265 unsigned char b0 = (__b & 0x03) * 4; 9266 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; 9267 return vec_perm(__a, __a, 9268 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1, 9269 b2, b3, b0, b1, b2, b3)); 9270} 9271 9272static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a, 9273 unsigned const int __b) { 9274 unsigned char b0 = (__b & 0x03) * 4; 9275 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3; 9276 return vec_perm(__a, __a, 9277 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1, 9278 b2, b3, b0, b1, b2, b3)); 9279} 9280 9281#ifdef __VSX__ 9282static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a, 9283 unsigned const int __b) { 9284 unsigned char b0 = (__b & 0x01) * 8; 9285 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5, 9286 b6 = b0 + 6, b7 = b0 + 7; 9287 return vec_perm(__a, __a, 9288 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1, 9289 b2, b3, b4, b5, b6, b7)); 9290} 9291static __inline__ vector bool long long __ATTRS_o_ai 9292vec_splat(vector bool long long __a, unsigned const int __b) { 9293 unsigned char b0 = (__b & 0x01) * 8; 9294 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5, 9295 b6 = b0 + 6, b7 = b0 + 7; 9296 return vec_perm(__a, __a, 9297 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1, 9298 b2, b3, b4, b5, b6, b7)); 9299} 9300static __inline__ vector signed long long __ATTRS_o_ai 9301vec_splat(vector signed long long __a, unsigned const int __b) { 9302 unsigned char b0 = (__b & 0x01) * 8; 9303 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5, 9304 b6 = b0 + 6, b7 = b0 + 7; 9305 return vec_perm(__a, __a, 9306 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1, 9307 b2, b3, b4, b5, b6, b7)); 9308} 9309static __inline__ vector unsigned long long __ATTRS_o_ai 9310vec_splat(vector unsigned long long __a, unsigned const int __b) { 9311 unsigned char b0 = (__b & 0x01) * 8; 9312 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5, 9313 b6 = b0 + 6, b7 = b0 + 7; 9314 return vec_perm(__a, __a, 9315 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1, 9316 b2, b3, b4, b5, b6, b7)); 9317} 9318#endif 9319 9320/* vec_vspltb */ 9321 9322#define __builtin_altivec_vspltb vec_vspltb 9323 9324static __inline__ vector signed char __ATTRS_o_ai 9325vec_vspltb(vector signed char __a, unsigned char __b) { 9326 return vec_perm(__a, __a, (vector unsigned char)(__b)); 9327} 9328 9329static __inline__ vector unsigned char __ATTRS_o_ai 9330vec_vspltb(vector unsigned char __a, unsigned char __b) { 9331 return vec_perm(__a, __a, (vector unsigned char)(__b)); 9332} 9333 9334static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a, 9335 unsigned char __b) { 9336 return vec_perm(__a, __a, (vector unsigned char)(__b)); 9337} 9338 9339/* vec_vsplth */ 9340 9341#define __builtin_altivec_vsplth vec_vsplth 9342 9343static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a, 9344 unsigned char __b) { 9345 __b *= 2; 9346 unsigned char b1 = __b + 1; 9347 return vec_perm(__a, __a, 9348 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, 9349 __b, b1, __b, b1, __b, b1, __b, b1)); 9350} 9351 9352static __inline__ vector unsigned short __ATTRS_o_ai 9353vec_vsplth(vector unsigned short __a, unsigned char __b) { 9354 __b *= 2; 9355 unsigned char b1 = __b + 1; 9356 return vec_perm(__a, __a, 9357 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, 9358 __b, b1, __b, b1, __b, b1, __b, b1)); 9359} 9360 9361static __inline__ vector bool short __ATTRS_o_ai 9362vec_vsplth(vector bool short __a, unsigned char __b) { 9363 __b *= 2; 9364 unsigned char b1 = __b + 1; 9365 return vec_perm(__a, __a, 9366 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, 9367 __b, b1, __b, b1, __b, b1, __b, b1)); 9368} 9369 9370static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a, 9371 unsigned char __b) { 9372 __b *= 2; 9373 unsigned char b1 = __b + 1; 9374 return vec_perm(__a, __a, 9375 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1, 9376 __b, b1, __b, b1, __b, b1, __b, b1)); 9377} 9378 9379/* vec_vspltw */ 9380 9381#define __builtin_altivec_vspltw vec_vspltw 9382 9383static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a, 9384 unsigned char __b) { 9385 __b *= 4; 9386 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; 9387 return vec_perm(__a, __a, 9388 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, 9389 b1, b2, b3, __b, b1, b2, b3)); 9390} 9391 9392static __inline__ vector unsigned int __ATTRS_o_ai 9393vec_vspltw(vector unsigned int __a, unsigned char __b) { 9394 __b *= 4; 9395 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; 9396 return vec_perm(__a, __a, 9397 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, 9398 b1, b2, b3, __b, b1, b2, b3)); 9399} 9400 9401static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a, 9402 unsigned char __b) { 9403 __b *= 4; 9404 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; 9405 return vec_perm(__a, __a, 9406 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, 9407 b1, b2, b3, __b, b1, b2, b3)); 9408} 9409 9410static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a, 9411 unsigned char __b) { 9412 __b *= 4; 9413 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3; 9414 return vec_perm(__a, __a, 9415 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b, 9416 b1, b2, b3, __b, b1, b2, b3)); 9417} 9418 9419/* vec_splat_s8 */ 9420 9421#define __builtin_altivec_vspltisb vec_splat_s8 9422 9423// FIXME: parameter should be treated as 5-bit signed literal 9424static __inline__ vector signed char __ATTRS_o_ai 9425vec_splat_s8(signed char __a) { 9426 return (vector signed char)(__a); 9427} 9428 9429/* vec_vspltisb */ 9430 9431// FIXME: parameter should be treated as 5-bit signed literal 9432static __inline__ vector signed char __ATTRS_o_ai 9433vec_vspltisb(signed char __a) { 9434 return (vector signed char)(__a); 9435} 9436 9437/* vec_splat_s16 */ 9438 9439#define __builtin_altivec_vspltish vec_splat_s16 9440 9441// FIXME: parameter should be treated as 5-bit signed literal 9442static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) { 9443 return (vector short)(__a); 9444} 9445 9446/* vec_vspltish */ 9447 9448// FIXME: parameter should be treated as 5-bit signed literal 9449static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) { 9450 return (vector short)(__a); 9451} 9452 9453/* vec_splat_s32 */ 9454 9455#define __builtin_altivec_vspltisw vec_splat_s32 9456 9457// FIXME: parameter should be treated as 5-bit signed literal 9458static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) { 9459 return (vector int)(__a); 9460} 9461 9462/* vec_vspltisw */ 9463 9464// FIXME: parameter should be treated as 5-bit signed literal 9465static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) { 9466 return (vector int)(__a); 9467} 9468 9469/* vec_splat_u8 */ 9470 9471// FIXME: parameter should be treated as 5-bit signed literal 9472static __inline__ vector unsigned char __ATTRS_o_ai 9473vec_splat_u8(unsigned char __a) { 9474 return (vector unsigned char)(__a); 9475} 9476 9477/* vec_splat_u16 */ 9478 9479// FIXME: parameter should be treated as 5-bit signed literal 9480static __inline__ vector unsigned short __ATTRS_o_ai 9481vec_splat_u16(signed char __a) { 9482 return (vector unsigned short)(__a); 9483} 9484 9485/* vec_splat_u32 */ 9486 9487// FIXME: parameter should be treated as 5-bit signed literal 9488static __inline__ vector unsigned int __ATTRS_o_ai 9489vec_splat_u32(signed char __a) { 9490 return (vector unsigned int)(__a); 9491} 9492 9493/* vec_sr */ 9494 9495static __inline__ vector signed char __ATTRS_o_ai 9496vec_sr(vector signed char __a, vector unsigned char __b) { 9497 vector unsigned char __res = (vector unsigned char)__a >> __b; 9498 return (vector signed char)__res; 9499} 9500 9501static __inline__ vector unsigned char __ATTRS_o_ai 9502vec_sr(vector unsigned char __a, vector unsigned char __b) { 9503 return __a >> __b; 9504} 9505 9506static __inline__ vector signed short __ATTRS_o_ai 9507vec_sr(vector signed short __a, vector unsigned short __b) { 9508 vector unsigned short __res = (vector unsigned short)__a >> __b; 9509 return (vector signed short)__res; 9510} 9511 9512static __inline__ vector unsigned short __ATTRS_o_ai 9513vec_sr(vector unsigned short __a, vector unsigned short __b) { 9514 return __a >> __b; 9515} 9516 9517static __inline__ vector signed int __ATTRS_o_ai 9518vec_sr(vector signed int __a, vector unsigned int __b) { 9519 vector unsigned int __res = (vector unsigned int)__a >> __b; 9520 return (vector signed int)__res; 9521} 9522 9523static __inline__ vector unsigned int __ATTRS_o_ai 9524vec_sr(vector unsigned int __a, vector unsigned int __b) { 9525 return __a >> __b; 9526} 9527 9528#ifdef __POWER8_VECTOR__ 9529static __inline__ vector signed long long __ATTRS_o_ai 9530vec_sr(vector signed long long __a, vector unsigned long long __b) { 9531 vector unsigned long long __res = (vector unsigned long long)__a >> __b; 9532 return (vector signed long long)__res; 9533} 9534 9535static __inline__ vector unsigned long long __ATTRS_o_ai 9536vec_sr(vector unsigned long long __a, vector unsigned long long __b) { 9537 return __a >> __b; 9538} 9539#endif 9540 9541/* vec_vsrb */ 9542 9543#define __builtin_altivec_vsrb vec_vsrb 9544 9545static __inline__ vector signed char __ATTRS_o_ai 9546vec_vsrb(vector signed char __a, vector unsigned char __b) { 9547 return __a >> (vector signed char)__b; 9548} 9549 9550static __inline__ vector unsigned char __ATTRS_o_ai 9551vec_vsrb(vector unsigned char __a, vector unsigned char __b) { 9552 return __a >> __b; 9553} 9554 9555/* vec_vsrh */ 9556 9557#define __builtin_altivec_vsrh vec_vsrh 9558 9559static __inline__ vector short __ATTRS_o_ai 9560vec_vsrh(vector short __a, vector unsigned short __b) { 9561 return __a >> (vector short)__b; 9562} 9563 9564static __inline__ vector unsigned short __ATTRS_o_ai 9565vec_vsrh(vector unsigned short __a, vector unsigned short __b) { 9566 return __a >> __b; 9567} 9568 9569/* vec_vsrw */ 9570 9571#define __builtin_altivec_vsrw vec_vsrw 9572 9573static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a, 9574 vector unsigned int __b) { 9575 return __a >> (vector int)__b; 9576} 9577 9578static __inline__ vector unsigned int __ATTRS_o_ai 9579vec_vsrw(vector unsigned int __a, vector unsigned int __b) { 9580 return __a >> __b; 9581} 9582 9583/* vec_sra */ 9584 9585static __inline__ vector signed char __ATTRS_o_ai 9586vec_sra(vector signed char __a, vector unsigned char __b) { 9587 return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b); 9588} 9589 9590static __inline__ vector unsigned char __ATTRS_o_ai 9591vec_sra(vector unsigned char __a, vector unsigned char __b) { 9592 return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b); 9593} 9594 9595static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a, 9596 vector unsigned short __b) { 9597 return __builtin_altivec_vsrah(__a, (vector unsigned short)__b); 9598} 9599 9600static __inline__ vector unsigned short __ATTRS_o_ai 9601vec_sra(vector unsigned short __a, vector unsigned short __b) { 9602 return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b); 9603} 9604 9605static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a, 9606 vector unsigned int __b) { 9607 return __builtin_altivec_vsraw(__a, __b); 9608} 9609 9610static __inline__ vector unsigned int __ATTRS_o_ai 9611vec_sra(vector unsigned int __a, vector unsigned int __b) { 9612 return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b); 9613} 9614 9615#ifdef __POWER8_VECTOR__ 9616static __inline__ vector signed long long __ATTRS_o_ai 9617vec_sra(vector signed long long __a, vector unsigned long long __b) { 9618 return __a >> __b; 9619} 9620 9621static __inline__ vector unsigned long long __ATTRS_o_ai 9622vec_sra(vector unsigned long long __a, vector unsigned long long __b) { 9623 return (vector unsigned long long)((vector signed long long)__a >> __b); 9624} 9625#endif 9626 9627/* vec_vsrab */ 9628 9629static __inline__ vector signed char __ATTRS_o_ai 9630vec_vsrab(vector signed char __a, vector unsigned char __b) { 9631 return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b); 9632} 9633 9634static __inline__ vector unsigned char __ATTRS_o_ai 9635vec_vsrab(vector unsigned char __a, vector unsigned char __b) { 9636 return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b); 9637} 9638 9639/* vec_vsrah */ 9640 9641static __inline__ vector short __ATTRS_o_ai 9642vec_vsrah(vector short __a, vector unsigned short __b) { 9643 return __builtin_altivec_vsrah(__a, (vector unsigned short)__b); 9644} 9645 9646static __inline__ vector unsigned short __ATTRS_o_ai 9647vec_vsrah(vector unsigned short __a, vector unsigned short __b) { 9648 return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b); 9649} 9650 9651/* vec_vsraw */ 9652 9653static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a, 9654 vector unsigned int __b) { 9655 return __builtin_altivec_vsraw(__a, __b); 9656} 9657 9658static __inline__ vector unsigned int __ATTRS_o_ai 9659vec_vsraw(vector unsigned int __a, vector unsigned int __b) { 9660 return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b); 9661} 9662 9663/* vec_srl */ 9664 9665static __inline__ vector signed char __ATTRS_o_ai 9666vec_srl(vector signed char __a, vector unsigned char __b) { 9667 return (vector signed char)__builtin_altivec_vsr((vector int)__a, 9668 (vector int)__b); 9669} 9670 9671static __inline__ vector signed char __ATTRS_o_ai 9672vec_srl(vector signed char __a, vector unsigned short __b) { 9673 return (vector signed char)__builtin_altivec_vsr((vector int)__a, 9674 (vector int)__b); 9675} 9676 9677static __inline__ vector signed char __ATTRS_o_ai 9678vec_srl(vector signed char __a, vector unsigned int __b) { 9679 return (vector signed char)__builtin_altivec_vsr((vector int)__a, 9680 (vector int)__b); 9681} 9682 9683static __inline__ vector unsigned char __ATTRS_o_ai 9684vec_srl(vector unsigned char __a, vector unsigned char __b) { 9685 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, 9686 (vector int)__b); 9687} 9688 9689static __inline__ vector unsigned char __ATTRS_o_ai 9690vec_srl(vector unsigned char __a, vector unsigned short __b) { 9691 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, 9692 (vector int)__b); 9693} 9694 9695static __inline__ vector unsigned char __ATTRS_o_ai 9696vec_srl(vector unsigned char __a, vector unsigned int __b) { 9697 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, 9698 (vector int)__b); 9699} 9700 9701static __inline__ vector bool char __ATTRS_o_ai 9702vec_srl(vector bool char __a, vector unsigned char __b) { 9703 return (vector bool char)__builtin_altivec_vsr((vector int)__a, 9704 (vector int)__b); 9705} 9706 9707static __inline__ vector bool char __ATTRS_o_ai 9708vec_srl(vector bool char __a, vector unsigned short __b) { 9709 return (vector bool char)__builtin_altivec_vsr((vector int)__a, 9710 (vector int)__b); 9711} 9712 9713static __inline__ vector bool char __ATTRS_o_ai 9714vec_srl(vector bool char __a, vector unsigned int __b) { 9715 return (vector bool char)__builtin_altivec_vsr((vector int)__a, 9716 (vector int)__b); 9717} 9718 9719static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a, 9720 vector unsigned char __b) { 9721 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9722} 9723 9724static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a, 9725 vector unsigned short __b) { 9726 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9727} 9728 9729static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a, 9730 vector unsigned int __b) { 9731 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9732} 9733 9734static __inline__ vector unsigned short __ATTRS_o_ai 9735vec_srl(vector unsigned short __a, vector unsigned char __b) { 9736 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, 9737 (vector int)__b); 9738} 9739 9740static __inline__ vector unsigned short __ATTRS_o_ai 9741vec_srl(vector unsigned short __a, vector unsigned short __b) { 9742 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, 9743 (vector int)__b); 9744} 9745 9746static __inline__ vector unsigned short __ATTRS_o_ai 9747vec_srl(vector unsigned short __a, vector unsigned int __b) { 9748 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, 9749 (vector int)__b); 9750} 9751 9752static __inline__ vector bool short __ATTRS_o_ai 9753vec_srl(vector bool short __a, vector unsigned char __b) { 9754 return (vector bool short)__builtin_altivec_vsr((vector int)__a, 9755 (vector int)__b); 9756} 9757 9758static __inline__ vector bool short __ATTRS_o_ai 9759vec_srl(vector bool short __a, vector unsigned short __b) { 9760 return (vector bool short)__builtin_altivec_vsr((vector int)__a, 9761 (vector int)__b); 9762} 9763 9764static __inline__ vector bool short __ATTRS_o_ai 9765vec_srl(vector bool short __a, vector unsigned int __b) { 9766 return (vector bool short)__builtin_altivec_vsr((vector int)__a, 9767 (vector int)__b); 9768} 9769 9770static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a, 9771 vector unsigned char __b) { 9772 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9773} 9774 9775static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a, 9776 vector unsigned short __b) { 9777 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9778} 9779 9780static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a, 9781 vector unsigned int __b) { 9782 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9783} 9784 9785static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a, 9786 vector unsigned char __b) { 9787 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); 9788} 9789 9790static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a, 9791 vector unsigned short __b) { 9792 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); 9793} 9794 9795static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a, 9796 vector unsigned int __b) { 9797 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); 9798} 9799 9800static __inline__ vector unsigned int __ATTRS_o_ai 9801vec_srl(vector unsigned int __a, vector unsigned char __b) { 9802 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, 9803 (vector int)__b); 9804} 9805 9806static __inline__ vector unsigned int __ATTRS_o_ai 9807vec_srl(vector unsigned int __a, vector unsigned short __b) { 9808 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, 9809 (vector int)__b); 9810} 9811 9812static __inline__ vector unsigned int __ATTRS_o_ai 9813vec_srl(vector unsigned int __a, vector unsigned int __b) { 9814 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, 9815 (vector int)__b); 9816} 9817 9818static __inline__ vector bool int __ATTRS_o_ai 9819vec_srl(vector bool int __a, vector unsigned char __b) { 9820 return (vector bool int)__builtin_altivec_vsr((vector int)__a, 9821 (vector int)__b); 9822} 9823 9824static __inline__ vector bool int __ATTRS_o_ai 9825vec_srl(vector bool int __a, vector unsigned short __b) { 9826 return (vector bool int)__builtin_altivec_vsr((vector int)__a, 9827 (vector int)__b); 9828} 9829 9830static __inline__ vector bool int __ATTRS_o_ai 9831vec_srl(vector bool int __a, vector unsigned int __b) { 9832 return (vector bool int)__builtin_altivec_vsr((vector int)__a, 9833 (vector int)__b); 9834} 9835 9836#ifdef __VSX__ 9837static __inline__ vector signed long long __ATTRS_o_ai 9838vec_srl(vector signed long long __a, vector unsigned char __b) { 9839 return (vector signed long long)__builtin_altivec_vsr((vector int)__a, 9840 (vector int)__b); 9841} 9842 9843static __inline__ vector unsigned long long __ATTRS_o_ai 9844vec_srl(vector unsigned long long __a, vector unsigned char __b) { 9845 return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a, 9846 (vector int)__b); 9847} 9848#endif 9849 9850/* vec_vsr */ 9851 9852static __inline__ vector signed char __ATTRS_o_ai 9853vec_vsr(vector signed char __a, vector unsigned char __b) { 9854 return (vector signed char)__builtin_altivec_vsr((vector int)__a, 9855 (vector int)__b); 9856} 9857 9858static __inline__ vector signed char __ATTRS_o_ai 9859vec_vsr(vector signed char __a, vector unsigned short __b) { 9860 return (vector signed char)__builtin_altivec_vsr((vector int)__a, 9861 (vector int)__b); 9862} 9863 9864static __inline__ vector signed char __ATTRS_o_ai 9865vec_vsr(vector signed char __a, vector unsigned int __b) { 9866 return (vector signed char)__builtin_altivec_vsr((vector int)__a, 9867 (vector int)__b); 9868} 9869 9870static __inline__ vector unsigned char __ATTRS_o_ai 9871vec_vsr(vector unsigned char __a, vector unsigned char __b) { 9872 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, 9873 (vector int)__b); 9874} 9875 9876static __inline__ vector unsigned char __ATTRS_o_ai 9877vec_vsr(vector unsigned char __a, vector unsigned short __b) { 9878 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, 9879 (vector int)__b); 9880} 9881 9882static __inline__ vector unsigned char __ATTRS_o_ai 9883vec_vsr(vector unsigned char __a, vector unsigned int __b) { 9884 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a, 9885 (vector int)__b); 9886} 9887 9888static __inline__ vector bool char __ATTRS_o_ai 9889vec_vsr(vector bool char __a, vector unsigned char __b) { 9890 return (vector bool char)__builtin_altivec_vsr((vector int)__a, 9891 (vector int)__b); 9892} 9893 9894static __inline__ vector bool char __ATTRS_o_ai 9895vec_vsr(vector bool char __a, vector unsigned short __b) { 9896 return (vector bool char)__builtin_altivec_vsr((vector int)__a, 9897 (vector int)__b); 9898} 9899 9900static __inline__ vector bool char __ATTRS_o_ai 9901vec_vsr(vector bool char __a, vector unsigned int __b) { 9902 return (vector bool char)__builtin_altivec_vsr((vector int)__a, 9903 (vector int)__b); 9904} 9905 9906static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a, 9907 vector unsigned char __b) { 9908 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9909} 9910 9911static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a, 9912 vector unsigned short __b) { 9913 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9914} 9915 9916static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a, 9917 vector unsigned int __b) { 9918 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9919} 9920 9921static __inline__ vector unsigned short __ATTRS_o_ai 9922vec_vsr(vector unsigned short __a, vector unsigned char __b) { 9923 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, 9924 (vector int)__b); 9925} 9926 9927static __inline__ vector unsigned short __ATTRS_o_ai 9928vec_vsr(vector unsigned short __a, vector unsigned short __b) { 9929 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, 9930 (vector int)__b); 9931} 9932 9933static __inline__ vector unsigned short __ATTRS_o_ai 9934vec_vsr(vector unsigned short __a, vector unsigned int __b) { 9935 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a, 9936 (vector int)__b); 9937} 9938 9939static __inline__ vector bool short __ATTRS_o_ai 9940vec_vsr(vector bool short __a, vector unsigned char __b) { 9941 return (vector bool short)__builtin_altivec_vsr((vector int)__a, 9942 (vector int)__b); 9943} 9944 9945static __inline__ vector bool short __ATTRS_o_ai 9946vec_vsr(vector bool short __a, vector unsigned short __b) { 9947 return (vector bool short)__builtin_altivec_vsr((vector int)__a, 9948 (vector int)__b); 9949} 9950 9951static __inline__ vector bool short __ATTRS_o_ai 9952vec_vsr(vector bool short __a, vector unsigned int __b) { 9953 return (vector bool short)__builtin_altivec_vsr((vector int)__a, 9954 (vector int)__b); 9955} 9956 9957static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a, 9958 vector unsigned char __b) { 9959 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9960} 9961 9962static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a, 9963 vector unsigned short __b) { 9964 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9965} 9966 9967static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a, 9968 vector unsigned int __b) { 9969 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); 9970} 9971 9972static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a, 9973 vector unsigned char __b) { 9974 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); 9975} 9976 9977static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a, 9978 vector unsigned short __b) { 9979 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); 9980} 9981 9982static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a, 9983 vector unsigned int __b) { 9984 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); 9985} 9986 9987static __inline__ vector unsigned int __ATTRS_o_ai 9988vec_vsr(vector unsigned int __a, vector unsigned char __b) { 9989 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, 9990 (vector int)__b); 9991} 9992 9993static __inline__ vector unsigned int __ATTRS_o_ai 9994vec_vsr(vector unsigned int __a, vector unsigned short __b) { 9995 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, 9996 (vector int)__b); 9997} 9998 9999static __inline__ vector unsigned int __ATTRS_o_ai 10000vec_vsr(vector unsigned int __a, vector unsigned int __b) { 10001 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a, 10002 (vector int)__b); 10003} 10004 10005static __inline__ vector bool int __ATTRS_o_ai 10006vec_vsr(vector bool int __a, vector unsigned char __b) { 10007 return (vector bool int)__builtin_altivec_vsr((vector int)__a, 10008 (vector int)__b); 10009} 10010 10011static __inline__ vector bool int __ATTRS_o_ai 10012vec_vsr(vector bool int __a, vector unsigned short __b) { 10013 return (vector bool int)__builtin_altivec_vsr((vector int)__a, 10014 (vector int)__b); 10015} 10016 10017static __inline__ vector bool int __ATTRS_o_ai 10018vec_vsr(vector bool int __a, vector unsigned int __b) { 10019 return (vector bool int)__builtin_altivec_vsr((vector int)__a, 10020 (vector int)__b); 10021} 10022 10023/* vec_sro */ 10024 10025static __inline__ vector signed char __ATTRS_o_ai 10026vec_sro(vector signed char __a, vector signed char __b) { 10027 return (vector signed char)__builtin_altivec_vsro((vector int)__a, 10028 (vector int)__b); 10029} 10030 10031static __inline__ vector signed char __ATTRS_o_ai 10032vec_sro(vector signed char __a, vector unsigned char __b) { 10033 return (vector signed char)__builtin_altivec_vsro((vector int)__a, 10034 (vector int)__b); 10035} 10036 10037static __inline__ vector unsigned char __ATTRS_o_ai 10038vec_sro(vector unsigned char __a, vector signed char __b) { 10039 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, 10040 (vector int)__b); 10041} 10042 10043static __inline__ vector unsigned char __ATTRS_o_ai 10044vec_sro(vector unsigned char __a, vector unsigned char __b) { 10045 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, 10046 (vector int)__b); 10047} 10048 10049static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a, 10050 vector signed char __b) { 10051 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10052} 10053 10054static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a, 10055 vector unsigned char __b) { 10056 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10057} 10058 10059static __inline__ vector unsigned short __ATTRS_o_ai 10060vec_sro(vector unsigned short __a, vector signed char __b) { 10061 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, 10062 (vector int)__b); 10063} 10064 10065static __inline__ vector unsigned short __ATTRS_o_ai 10066vec_sro(vector unsigned short __a, vector unsigned char __b) { 10067 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, 10068 (vector int)__b); 10069} 10070 10071static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a, 10072 vector signed char __b) { 10073 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10074} 10075 10076static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a, 10077 vector unsigned char __b) { 10078 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10079} 10080 10081static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a, 10082 vector signed char __b) { 10083 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); 10084} 10085 10086static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a, 10087 vector unsigned char __b) { 10088 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); 10089} 10090 10091static __inline__ vector unsigned int __ATTRS_o_ai 10092vec_sro(vector unsigned int __a, vector signed char __b) { 10093 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, 10094 (vector int)__b); 10095} 10096 10097static __inline__ vector unsigned int __ATTRS_o_ai 10098vec_sro(vector unsigned int __a, vector unsigned char __b) { 10099 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, 10100 (vector int)__b); 10101} 10102 10103static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a, 10104 vector signed char __b) { 10105 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10106} 10107 10108static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a, 10109 vector unsigned char __b) { 10110 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10111} 10112 10113#ifdef __VSX__ 10114static __inline__ vector signed long long __ATTRS_o_ai 10115vec_sro(vector signed long long __a, vector signed char __b) { 10116 return (vector signed long long)__builtin_altivec_vsro((vector int)__a, 10117 (vector int)__b); 10118} 10119 10120static __inline__ vector signed long long __ATTRS_o_ai 10121vec_sro(vector signed long long __a, vector unsigned char __b) { 10122 return (vector signed long long)__builtin_altivec_vsro((vector int)__a, 10123 (vector int)__b); 10124} 10125 10126static __inline__ vector unsigned long long __ATTRS_o_ai 10127vec_sro(vector unsigned long long __a, vector signed char __b) { 10128 return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a, 10129 (vector int)__b); 10130} 10131 10132static __inline__ vector unsigned long long __ATTRS_o_ai 10133vec_sro(vector unsigned long long __a, vector unsigned char __b) { 10134 return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a, 10135 (vector int)__b); 10136} 10137#endif 10138 10139/* vec_vsro */ 10140 10141static __inline__ vector signed char __ATTRS_o_ai 10142vec_vsro(vector signed char __a, vector signed char __b) { 10143 return (vector signed char)__builtin_altivec_vsro((vector int)__a, 10144 (vector int)__b); 10145} 10146 10147static __inline__ vector signed char __ATTRS_o_ai 10148vec_vsro(vector signed char __a, vector unsigned char __b) { 10149 return (vector signed char)__builtin_altivec_vsro((vector int)__a, 10150 (vector int)__b); 10151} 10152 10153static __inline__ vector unsigned char __ATTRS_o_ai 10154vec_vsro(vector unsigned char __a, vector signed char __b) { 10155 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, 10156 (vector int)__b); 10157} 10158 10159static __inline__ vector unsigned char __ATTRS_o_ai 10160vec_vsro(vector unsigned char __a, vector unsigned char __b) { 10161 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a, 10162 (vector int)__b); 10163} 10164 10165static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a, 10166 vector signed char __b) { 10167 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10168} 10169 10170static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a, 10171 vector unsigned char __b) { 10172 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10173} 10174 10175static __inline__ vector unsigned short __ATTRS_o_ai 10176vec_vsro(vector unsigned short __a, vector signed char __b) { 10177 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, 10178 (vector int)__b); 10179} 10180 10181static __inline__ vector unsigned short __ATTRS_o_ai 10182vec_vsro(vector unsigned short __a, vector unsigned char __b) { 10183 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a, 10184 (vector int)__b); 10185} 10186 10187static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a, 10188 vector signed char __b) { 10189 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10190} 10191 10192static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a, 10193 vector unsigned char __b) { 10194 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10195} 10196 10197static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a, 10198 vector signed char __b) { 10199 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); 10200} 10201 10202static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a, 10203 vector unsigned char __b) { 10204 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); 10205} 10206 10207static __inline__ vector unsigned int __ATTRS_o_ai 10208vec_vsro(vector unsigned int __a, vector signed char __b) { 10209 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, 10210 (vector int)__b); 10211} 10212 10213static __inline__ vector unsigned int __ATTRS_o_ai 10214vec_vsro(vector unsigned int __a, vector unsigned char __b) { 10215 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a, 10216 (vector int)__b); 10217} 10218 10219static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a, 10220 vector signed char __b) { 10221 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10222} 10223 10224static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a, 10225 vector unsigned char __b) { 10226 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); 10227} 10228 10229/* vec_st */ 10230 10231static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, int __b, 10232 vector signed char *__c) { 10233 __builtin_altivec_stvx((vector int)__a, __b, __c); 10234} 10235 10236static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, int __b, 10237 signed char *__c) { 10238 __builtin_altivec_stvx((vector int)__a, __b, __c); 10239} 10240 10241static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b, 10242 vector unsigned char *__c) { 10243 __builtin_altivec_stvx((vector int)__a, __b, __c); 10244} 10245 10246static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b, 10247 unsigned char *__c) { 10248 __builtin_altivec_stvx((vector int)__a, __b, __c); 10249} 10250 10251static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b, 10252 signed char *__c) { 10253 __builtin_altivec_stvx((vector int)__a, __b, __c); 10254} 10255 10256static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b, 10257 unsigned char *__c) { 10258 __builtin_altivec_stvx((vector int)__a, __b, __c); 10259} 10260 10261static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b, 10262 vector bool char *__c) { 10263 __builtin_altivec_stvx((vector int)__a, __b, __c); 10264} 10265 10266static __inline__ void __ATTRS_o_ai vec_st(vector short __a, int __b, 10267 vector short *__c) { 10268 __builtin_altivec_stvx((vector int)__a, __b, __c); 10269} 10270 10271static __inline__ void __ATTRS_o_ai vec_st(vector short __a, int __b, 10272 short *__c) { 10273 __builtin_altivec_stvx((vector int)__a, __b, __c); 10274} 10275 10276static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b, 10277 vector unsigned short *__c) { 10278 __builtin_altivec_stvx((vector int)__a, __b, __c); 10279} 10280 10281static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b, 10282 unsigned short *__c) { 10283 __builtin_altivec_stvx((vector int)__a, __b, __c); 10284} 10285 10286static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b, 10287 short *__c) { 10288 __builtin_altivec_stvx((vector int)__a, __b, __c); 10289} 10290 10291static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b, 10292 unsigned short *__c) { 10293 __builtin_altivec_stvx((vector int)__a, __b, __c); 10294} 10295 10296static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b, 10297 vector bool short *__c) { 10298 __builtin_altivec_stvx((vector int)__a, __b, __c); 10299} 10300 10301static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b, 10302 short *__c) { 10303 __builtin_altivec_stvx((vector int)__a, __b, __c); 10304} 10305 10306static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b, 10307 unsigned short *__c) { 10308 __builtin_altivec_stvx((vector int)__a, __b, __c); 10309} 10310 10311static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b, 10312 vector pixel *__c) { 10313 __builtin_altivec_stvx((vector int)__a, __b, __c); 10314} 10315 10316static __inline__ void __ATTRS_o_ai vec_st(vector int __a, int __b, 10317 vector int *__c) { 10318 __builtin_altivec_stvx(__a, __b, __c); 10319} 10320 10321static __inline__ void __ATTRS_o_ai vec_st(vector int __a, int __b, int *__c) { 10322 __builtin_altivec_stvx(__a, __b, __c); 10323} 10324 10325static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b, 10326 vector unsigned int *__c) { 10327 __builtin_altivec_stvx((vector int)__a, __b, __c); 10328} 10329 10330static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b, 10331 unsigned int *__c) { 10332 __builtin_altivec_stvx((vector int)__a, __b, __c); 10333} 10334 10335static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b, 10336 int *__c) { 10337 __builtin_altivec_stvx((vector int)__a, __b, __c); 10338} 10339 10340static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b, 10341 unsigned int *__c) { 10342 __builtin_altivec_stvx((vector int)__a, __b, __c); 10343} 10344 10345static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b, 10346 vector bool int *__c) { 10347 __builtin_altivec_stvx((vector int)__a, __b, __c); 10348} 10349 10350static __inline__ void __ATTRS_o_ai vec_st(vector float __a, int __b, 10351 vector float *__c) { 10352 __builtin_altivec_stvx((vector int)__a, __b, __c); 10353} 10354 10355static __inline__ void __ATTRS_o_ai vec_st(vector float __a, int __b, 10356 float *__c) { 10357 __builtin_altivec_stvx((vector int)__a, __b, __c); 10358} 10359 10360/* vec_stvx */ 10361 10362static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b, 10363 vector signed char *__c) { 10364 __builtin_altivec_stvx((vector int)__a, __b, __c); 10365} 10366 10367static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b, 10368 signed char *__c) { 10369 __builtin_altivec_stvx((vector int)__a, __b, __c); 10370} 10371 10372static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b, 10373 vector unsigned char *__c) { 10374 __builtin_altivec_stvx((vector int)__a, __b, __c); 10375} 10376 10377static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b, 10378 unsigned char *__c) { 10379 __builtin_altivec_stvx((vector int)__a, __b, __c); 10380} 10381 10382static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b, 10383 signed char *__c) { 10384 __builtin_altivec_stvx((vector int)__a, __b, __c); 10385} 10386 10387static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b, 10388 unsigned char *__c) { 10389 __builtin_altivec_stvx((vector int)__a, __b, __c); 10390} 10391 10392static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b, 10393 vector bool char *__c) { 10394 __builtin_altivec_stvx((vector int)__a, __b, __c); 10395} 10396 10397static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, int __b, 10398 vector short *__c) { 10399 __builtin_altivec_stvx((vector int)__a, __b, __c); 10400} 10401 10402static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, int __b, 10403 short *__c) { 10404 __builtin_altivec_stvx((vector int)__a, __b, __c); 10405} 10406 10407static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b, 10408 vector unsigned short *__c) { 10409 __builtin_altivec_stvx((vector int)__a, __b, __c); 10410} 10411 10412static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b, 10413 unsigned short *__c) { 10414 __builtin_altivec_stvx((vector int)__a, __b, __c); 10415} 10416 10417static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b, 10418 short *__c) { 10419 __builtin_altivec_stvx((vector int)__a, __b, __c); 10420} 10421 10422static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b, 10423 unsigned short *__c) { 10424 __builtin_altivec_stvx((vector int)__a, __b, __c); 10425} 10426 10427static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b, 10428 vector bool short *__c) { 10429 __builtin_altivec_stvx((vector int)__a, __b, __c); 10430} 10431 10432static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b, 10433 short *__c) { 10434 __builtin_altivec_stvx((vector int)__a, __b, __c); 10435} 10436 10437static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b, 10438 unsigned short *__c) { 10439 __builtin_altivec_stvx((vector int)__a, __b, __c); 10440} 10441 10442static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b, 10443 vector pixel *__c) { 10444 __builtin_altivec_stvx((vector int)__a, __b, __c); 10445} 10446 10447static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, int __b, 10448 vector int *__c) { 10449 __builtin_altivec_stvx(__a, __b, __c); 10450} 10451 10452static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, int __b, 10453 int *__c) { 10454 __builtin_altivec_stvx(__a, __b, __c); 10455} 10456 10457static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b, 10458 vector unsigned int *__c) { 10459 __builtin_altivec_stvx((vector int)__a, __b, __c); 10460} 10461 10462static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b, 10463 unsigned int *__c) { 10464 __builtin_altivec_stvx((vector int)__a, __b, __c); 10465} 10466 10467static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b, 10468 int *__c) { 10469 __builtin_altivec_stvx((vector int)__a, __b, __c); 10470} 10471 10472static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b, 10473 unsigned int *__c) { 10474 __builtin_altivec_stvx((vector int)__a, __b, __c); 10475} 10476 10477static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b, 10478 vector bool int *__c) { 10479 __builtin_altivec_stvx((vector int)__a, __b, __c); 10480} 10481 10482static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, int __b, 10483 vector float *__c) { 10484 __builtin_altivec_stvx((vector int)__a, __b, __c); 10485} 10486 10487static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, int __b, 10488 float *__c) { 10489 __builtin_altivec_stvx((vector int)__a, __b, __c); 10490} 10491 10492/* vec_ste */ 10493 10494static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, int __b, 10495 signed char *__c) { 10496 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10497} 10498 10499static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, int __b, 10500 unsigned char *__c) { 10501 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10502} 10503 10504static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, int __b, 10505 signed char *__c) { 10506 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10507} 10508 10509static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, int __b, 10510 unsigned char *__c) { 10511 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10512} 10513 10514static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, int __b, 10515 short *__c) { 10516 __builtin_altivec_stvehx(__a, __b, __c); 10517} 10518 10519static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, int __b, 10520 unsigned short *__c) { 10521 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10522} 10523 10524static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, int __b, 10525 short *__c) { 10526 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10527} 10528 10529static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, int __b, 10530 unsigned short *__c) { 10531 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10532} 10533 10534static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, int __b, 10535 short *__c) { 10536 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10537} 10538 10539static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, int __b, 10540 unsigned short *__c) { 10541 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10542} 10543 10544static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, int __b, int *__c) { 10545 __builtin_altivec_stvewx(__a, __b, __c); 10546} 10547 10548static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, int __b, 10549 unsigned int *__c) { 10550 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10551} 10552 10553static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, int __b, 10554 int *__c) { 10555 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10556} 10557 10558static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, int __b, 10559 unsigned int *__c) { 10560 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10561} 10562 10563static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, int __b, 10564 float *__c) { 10565 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10566} 10567 10568/* vec_stvebx */ 10569 10570static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, int __b, 10571 signed char *__c) { 10572 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10573} 10574 10575static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a, 10576 int __b, unsigned char *__c) { 10577 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10578} 10579 10580static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b, 10581 signed char *__c) { 10582 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10583} 10584 10585static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b, 10586 unsigned char *__c) { 10587 __builtin_altivec_stvebx((vector char)__a, __b, __c); 10588} 10589 10590/* vec_stvehx */ 10591 10592static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, int __b, 10593 short *__c) { 10594 __builtin_altivec_stvehx(__a, __b, __c); 10595} 10596 10597static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a, 10598 int __b, unsigned short *__c) { 10599 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10600} 10601 10602static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b, 10603 short *__c) { 10604 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10605} 10606 10607static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b, 10608 unsigned short *__c) { 10609 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10610} 10611 10612static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b, 10613 short *__c) { 10614 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10615} 10616 10617static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b, 10618 unsigned short *__c) { 10619 __builtin_altivec_stvehx((vector short)__a, __b, __c); 10620} 10621 10622/* vec_stvewx */ 10623 10624static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, int __b, 10625 int *__c) { 10626 __builtin_altivec_stvewx(__a, __b, __c); 10627} 10628 10629static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, int __b, 10630 unsigned int *__c) { 10631 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10632} 10633 10634static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b, 10635 int *__c) { 10636 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10637} 10638 10639static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b, 10640 unsigned int *__c) { 10641 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10642} 10643 10644static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, int __b, 10645 float *__c) { 10646 __builtin_altivec_stvewx((vector int)__a, __b, __c); 10647} 10648 10649/* vec_stl */ 10650 10651static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b, 10652 vector signed char *__c) { 10653 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10654} 10655 10656static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b, 10657 signed char *__c) { 10658 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10659} 10660 10661static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b, 10662 vector unsigned char *__c) { 10663 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10664} 10665 10666static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b, 10667 unsigned char *__c) { 10668 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10669} 10670 10671static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b, 10672 signed char *__c) { 10673 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10674} 10675 10676static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b, 10677 unsigned char *__c) { 10678 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10679} 10680 10681static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b, 10682 vector bool char *__c) { 10683 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10684} 10685 10686static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b, 10687 vector short *__c) { 10688 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10689} 10690 10691static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b, 10692 short *__c) { 10693 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10694} 10695 10696static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b, 10697 vector unsigned short *__c) { 10698 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10699} 10700 10701static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b, 10702 unsigned short *__c) { 10703 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10704} 10705 10706static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b, 10707 short *__c) { 10708 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10709} 10710 10711static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b, 10712 unsigned short *__c) { 10713 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10714} 10715 10716static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b, 10717 vector bool short *__c) { 10718 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10719} 10720 10721static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b, 10722 short *__c) { 10723 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10724} 10725 10726static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b, 10727 unsigned short *__c) { 10728 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10729} 10730 10731static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b, 10732 vector pixel *__c) { 10733 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10734} 10735 10736static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, 10737 vector int *__c) { 10738 __builtin_altivec_stvxl(__a, __b, __c); 10739} 10740 10741static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) { 10742 __builtin_altivec_stvxl(__a, __b, __c); 10743} 10744 10745static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b, 10746 vector unsigned int *__c) { 10747 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10748} 10749 10750static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b, 10751 unsigned int *__c) { 10752 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10753} 10754 10755static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b, 10756 int *__c) { 10757 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10758} 10759 10760static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b, 10761 unsigned int *__c) { 10762 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10763} 10764 10765static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b, 10766 vector bool int *__c) { 10767 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10768} 10769 10770static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b, 10771 vector float *__c) { 10772 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10773} 10774 10775static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b, 10776 float *__c) { 10777 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10778} 10779 10780/* vec_stvxl */ 10781 10782static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b, 10783 vector signed char *__c) { 10784 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10785} 10786 10787static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b, 10788 signed char *__c) { 10789 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10790} 10791 10792static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b, 10793 vector unsigned char *__c) { 10794 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10795} 10796 10797static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b, 10798 unsigned char *__c) { 10799 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10800} 10801 10802static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b, 10803 signed char *__c) { 10804 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10805} 10806 10807static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b, 10808 unsigned char *__c) { 10809 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10810} 10811 10812static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b, 10813 vector bool char *__c) { 10814 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10815} 10816 10817static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b, 10818 vector short *__c) { 10819 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10820} 10821 10822static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b, 10823 short *__c) { 10824 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10825} 10826 10827static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a, 10828 int __b, 10829 vector unsigned short *__c) { 10830 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10831} 10832 10833static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a, 10834 int __b, unsigned short *__c) { 10835 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10836} 10837 10838static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b, 10839 short *__c) { 10840 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10841} 10842 10843static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b, 10844 unsigned short *__c) { 10845 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10846} 10847 10848static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b, 10849 vector bool short *__c) { 10850 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10851} 10852 10853static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b, 10854 short *__c) { 10855 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10856} 10857 10858static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b, 10859 unsigned short *__c) { 10860 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10861} 10862 10863static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b, 10864 vector pixel *__c) { 10865 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10866} 10867 10868static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b, 10869 vector int *__c) { 10870 __builtin_altivec_stvxl(__a, __b, __c); 10871} 10872 10873static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b, 10874 int *__c) { 10875 __builtin_altivec_stvxl(__a, __b, __c); 10876} 10877 10878static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b, 10879 vector unsigned int *__c) { 10880 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10881} 10882 10883static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b, 10884 unsigned int *__c) { 10885 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10886} 10887 10888static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b, 10889 int *__c) { 10890 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10891} 10892 10893static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b, 10894 unsigned int *__c) { 10895 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10896} 10897 10898static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b, 10899 vector bool int *__c) { 10900 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10901} 10902 10903static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b, 10904 vector float *__c) { 10905 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10906} 10907 10908static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b, 10909 float *__c) { 10910 __builtin_altivec_stvxl((vector int)__a, __b, __c); 10911} 10912 10913/* vec_sub */ 10914 10915static __inline__ vector signed char __ATTRS_o_ai 10916vec_sub(vector signed char __a, vector signed char __b) { 10917 return __a - __b; 10918} 10919 10920static __inline__ vector signed char __ATTRS_o_ai 10921vec_sub(vector bool char __a, vector signed char __b) { 10922 return (vector signed char)__a - __b; 10923} 10924 10925static __inline__ vector signed char __ATTRS_o_ai 10926vec_sub(vector signed char __a, vector bool char __b) { 10927 return __a - (vector signed char)__b; 10928} 10929 10930static __inline__ vector unsigned char __ATTRS_o_ai 10931vec_sub(vector unsigned char __a, vector unsigned char __b) { 10932 return __a - __b; 10933} 10934 10935static __inline__ vector unsigned char __ATTRS_o_ai 10936vec_sub(vector bool char __a, vector unsigned char __b) { 10937 return (vector unsigned char)__a - __b; 10938} 10939 10940static __inline__ vector unsigned char __ATTRS_o_ai 10941vec_sub(vector unsigned char __a, vector bool char __b) { 10942 return __a - (vector unsigned char)__b; 10943} 10944 10945static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a, 10946 vector short __b) { 10947 return __a - __b; 10948} 10949 10950static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a, 10951 vector short __b) { 10952 return (vector short)__a - __b; 10953} 10954 10955static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a, 10956 vector bool short __b) { 10957 return __a - (vector short)__b; 10958} 10959 10960static __inline__ vector unsigned short __ATTRS_o_ai 10961vec_sub(vector unsigned short __a, vector unsigned short __b) { 10962 return __a - __b; 10963} 10964 10965static __inline__ vector unsigned short __ATTRS_o_ai 10966vec_sub(vector bool short __a, vector unsigned short __b) { 10967 return (vector unsigned short)__a - __b; 10968} 10969 10970static __inline__ vector unsigned short __ATTRS_o_ai 10971vec_sub(vector unsigned short __a, vector bool short __b) { 10972 return __a - (vector unsigned short)__b; 10973} 10974 10975static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a, 10976 vector int __b) { 10977 return __a - __b; 10978} 10979 10980static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a, 10981 vector int __b) { 10982 return (vector int)__a - __b; 10983} 10984 10985static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a, 10986 vector bool int __b) { 10987 return __a - (vector int)__b; 10988} 10989 10990static __inline__ vector unsigned int __ATTRS_o_ai 10991vec_sub(vector unsigned int __a, vector unsigned int __b) { 10992 return __a - __b; 10993} 10994 10995static __inline__ vector unsigned int __ATTRS_o_ai 10996vec_sub(vector bool int __a, vector unsigned int __b) { 10997 return (vector unsigned int)__a - __b; 10998} 10999 11000static __inline__ vector unsigned int __ATTRS_o_ai 11001vec_sub(vector unsigned int __a, vector bool int __b) { 11002 return __a - (vector unsigned int)__b; 11003} 11004 11005#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 11006static __inline__ vector signed __int128 __ATTRS_o_ai 11007vec_sub(vector signed __int128 __a, vector signed __int128 __b) { 11008 return __a - __b; 11009} 11010 11011static __inline__ vector unsigned __int128 __ATTRS_o_ai 11012vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) { 11013 return __a - __b; 11014} 11015#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) 11016 11017#ifdef __VSX__ 11018static __inline__ vector signed long long __ATTRS_o_ai 11019vec_sub(vector signed long long __a, vector signed long long __b) { 11020 return __a - __b; 11021} 11022 11023static __inline__ vector unsigned long long __ATTRS_o_ai 11024vec_sub(vector unsigned long long __a, vector unsigned long long __b) { 11025 return __a - __b; 11026} 11027 11028static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a, 11029 vector double __b) { 11030 return __a - __b; 11031} 11032#endif 11033 11034static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a, 11035 vector float __b) { 11036 return __a - __b; 11037} 11038 11039/* vec_vsububm */ 11040 11041#define __builtin_altivec_vsububm vec_vsububm 11042 11043static __inline__ vector signed char __ATTRS_o_ai 11044vec_vsububm(vector signed char __a, vector signed char __b) { 11045 return __a - __b; 11046} 11047 11048static __inline__ vector signed char __ATTRS_o_ai 11049vec_vsububm(vector bool char __a, vector signed char __b) { 11050 return (vector signed char)__a - __b; 11051} 11052 11053static __inline__ vector signed char __ATTRS_o_ai 11054vec_vsububm(vector signed char __a, vector bool char __b) { 11055 return __a - (vector signed char)__b; 11056} 11057 11058static __inline__ vector unsigned char __ATTRS_o_ai 11059vec_vsububm(vector unsigned char __a, vector unsigned char __b) { 11060 return __a - __b; 11061} 11062 11063static __inline__ vector unsigned char __ATTRS_o_ai 11064vec_vsububm(vector bool char __a, vector unsigned char __b) { 11065 return (vector unsigned char)__a - __b; 11066} 11067 11068static __inline__ vector unsigned char __ATTRS_o_ai 11069vec_vsububm(vector unsigned char __a, vector bool char __b) { 11070 return __a - (vector unsigned char)__b; 11071} 11072 11073/* vec_vsubuhm */ 11074 11075#define __builtin_altivec_vsubuhm vec_vsubuhm 11076 11077static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a, 11078 vector short __b) { 11079 return __a - __b; 11080} 11081 11082static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a, 11083 vector short __b) { 11084 return (vector short)__a - __b; 11085} 11086 11087static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a, 11088 vector bool short __b) { 11089 return __a - (vector short)__b; 11090} 11091 11092static __inline__ vector unsigned short __ATTRS_o_ai 11093vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) { 11094 return __a - __b; 11095} 11096 11097static __inline__ vector unsigned short __ATTRS_o_ai 11098vec_vsubuhm(vector bool short __a, vector unsigned short __b) { 11099 return (vector unsigned short)__a - __b; 11100} 11101 11102static __inline__ vector unsigned short __ATTRS_o_ai 11103vec_vsubuhm(vector unsigned short __a, vector bool short __b) { 11104 return __a - (vector unsigned short)__b; 11105} 11106 11107/* vec_vsubuwm */ 11108 11109#define __builtin_altivec_vsubuwm vec_vsubuwm 11110 11111static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a, 11112 vector int __b) { 11113 return __a - __b; 11114} 11115 11116static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a, 11117 vector int __b) { 11118 return (vector int)__a - __b; 11119} 11120 11121static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a, 11122 vector bool int __b) { 11123 return __a - (vector int)__b; 11124} 11125 11126static __inline__ vector unsigned int __ATTRS_o_ai 11127vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) { 11128 return __a - __b; 11129} 11130 11131static __inline__ vector unsigned int __ATTRS_o_ai 11132vec_vsubuwm(vector bool int __a, vector unsigned int __b) { 11133 return (vector unsigned int)__a - __b; 11134} 11135 11136static __inline__ vector unsigned int __ATTRS_o_ai 11137vec_vsubuwm(vector unsigned int __a, vector bool int __b) { 11138 return __a - (vector unsigned int)__b; 11139} 11140 11141/* vec_vsubfp */ 11142 11143#define __builtin_altivec_vsubfp vec_vsubfp 11144 11145static __inline__ vector float __attribute__((__always_inline__)) 11146vec_vsubfp(vector float __a, vector float __b) { 11147 return __a - __b; 11148} 11149 11150/* vec_subc */ 11151 11152static __inline__ vector signed int __ATTRS_o_ai 11153vec_subc(vector signed int __a, vector signed int __b) { 11154 return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a, 11155 (vector unsigned int) __b); 11156} 11157 11158static __inline__ vector unsigned int __ATTRS_o_ai 11159vec_subc(vector unsigned int __a, vector unsigned int __b) { 11160 return __builtin_altivec_vsubcuw(__a, __b); 11161} 11162 11163#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 11164static __inline__ vector unsigned __int128 __ATTRS_o_ai 11165vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) { 11166 return __builtin_altivec_vsubcuq(__a, __b); 11167} 11168 11169static __inline__ vector signed __int128 __ATTRS_o_ai 11170vec_subc(vector signed __int128 __a, vector signed __int128 __b) { 11171 return __builtin_altivec_vsubcuq(__a, __b); 11172} 11173#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) 11174 11175/* vec_vsubcuw */ 11176 11177static __inline__ vector unsigned int __attribute__((__always_inline__)) 11178vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) { 11179 return __builtin_altivec_vsubcuw(__a, __b); 11180} 11181 11182/* vec_subs */ 11183 11184static __inline__ vector signed char __ATTRS_o_ai 11185vec_subs(vector signed char __a, vector signed char __b) { 11186 return __builtin_altivec_vsubsbs(__a, __b); 11187} 11188 11189static __inline__ vector signed char __ATTRS_o_ai 11190vec_subs(vector bool char __a, vector signed char __b) { 11191 return __builtin_altivec_vsubsbs((vector signed char)__a, __b); 11192} 11193 11194static __inline__ vector signed char __ATTRS_o_ai 11195vec_subs(vector signed char __a, vector bool char __b) { 11196 return __builtin_altivec_vsubsbs(__a, (vector signed char)__b); 11197} 11198 11199static __inline__ vector unsigned char __ATTRS_o_ai 11200vec_subs(vector unsigned char __a, vector unsigned char __b) { 11201 return __builtin_altivec_vsububs(__a, __b); 11202} 11203 11204static __inline__ vector unsigned char __ATTRS_o_ai 11205vec_subs(vector bool char __a, vector unsigned char __b) { 11206 return __builtin_altivec_vsububs((vector unsigned char)__a, __b); 11207} 11208 11209static __inline__ vector unsigned char __ATTRS_o_ai 11210vec_subs(vector unsigned char __a, vector bool char __b) { 11211 return __builtin_altivec_vsububs(__a, (vector unsigned char)__b); 11212} 11213 11214static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a, 11215 vector short __b) { 11216 return __builtin_altivec_vsubshs(__a, __b); 11217} 11218 11219static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a, 11220 vector short __b) { 11221 return __builtin_altivec_vsubshs((vector short)__a, __b); 11222} 11223 11224static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a, 11225 vector bool short __b) { 11226 return __builtin_altivec_vsubshs(__a, (vector short)__b); 11227} 11228 11229static __inline__ vector unsigned short __ATTRS_o_ai 11230vec_subs(vector unsigned short __a, vector unsigned short __b) { 11231 return __builtin_altivec_vsubuhs(__a, __b); 11232} 11233 11234static __inline__ vector unsigned short __ATTRS_o_ai 11235vec_subs(vector bool short __a, vector unsigned short __b) { 11236 return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b); 11237} 11238 11239static __inline__ vector unsigned short __ATTRS_o_ai 11240vec_subs(vector unsigned short __a, vector bool short __b) { 11241 return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b); 11242} 11243 11244static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a, 11245 vector int __b) { 11246 return __builtin_altivec_vsubsws(__a, __b); 11247} 11248 11249static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a, 11250 vector int __b) { 11251 return __builtin_altivec_vsubsws((vector int)__a, __b); 11252} 11253 11254static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a, 11255 vector bool int __b) { 11256 return __builtin_altivec_vsubsws(__a, (vector int)__b); 11257} 11258 11259static __inline__ vector unsigned int __ATTRS_o_ai 11260vec_subs(vector unsigned int __a, vector unsigned int __b) { 11261 return __builtin_altivec_vsubuws(__a, __b); 11262} 11263 11264static __inline__ vector unsigned int __ATTRS_o_ai 11265vec_subs(vector bool int __a, vector unsigned int __b) { 11266 return __builtin_altivec_vsubuws((vector unsigned int)__a, __b); 11267} 11268 11269static __inline__ vector unsigned int __ATTRS_o_ai 11270vec_subs(vector unsigned int __a, vector bool int __b) { 11271 return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b); 11272} 11273 11274/* vec_vsubsbs */ 11275 11276static __inline__ vector signed char __ATTRS_o_ai 11277vec_vsubsbs(vector signed char __a, vector signed char __b) { 11278 return __builtin_altivec_vsubsbs(__a, __b); 11279} 11280 11281static __inline__ vector signed char __ATTRS_o_ai 11282vec_vsubsbs(vector bool char __a, vector signed char __b) { 11283 return __builtin_altivec_vsubsbs((vector signed char)__a, __b); 11284} 11285 11286static __inline__ vector signed char __ATTRS_o_ai 11287vec_vsubsbs(vector signed char __a, vector bool char __b) { 11288 return __builtin_altivec_vsubsbs(__a, (vector signed char)__b); 11289} 11290 11291/* vec_vsububs */ 11292 11293static __inline__ vector unsigned char __ATTRS_o_ai 11294vec_vsububs(vector unsigned char __a, vector unsigned char __b) { 11295 return __builtin_altivec_vsububs(__a, __b); 11296} 11297 11298static __inline__ vector unsigned char __ATTRS_o_ai 11299vec_vsububs(vector bool char __a, vector unsigned char __b) { 11300 return __builtin_altivec_vsububs((vector unsigned char)__a, __b); 11301} 11302 11303static __inline__ vector unsigned char __ATTRS_o_ai 11304vec_vsububs(vector unsigned char __a, vector bool char __b) { 11305 return __builtin_altivec_vsububs(__a, (vector unsigned char)__b); 11306} 11307 11308/* vec_vsubshs */ 11309 11310static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a, 11311 vector short __b) { 11312 return __builtin_altivec_vsubshs(__a, __b); 11313} 11314 11315static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a, 11316 vector short __b) { 11317 return __builtin_altivec_vsubshs((vector short)__a, __b); 11318} 11319 11320static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a, 11321 vector bool short __b) { 11322 return __builtin_altivec_vsubshs(__a, (vector short)__b); 11323} 11324 11325/* vec_vsubuhs */ 11326 11327static __inline__ vector unsigned short __ATTRS_o_ai 11328vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) { 11329 return __builtin_altivec_vsubuhs(__a, __b); 11330} 11331 11332static __inline__ vector unsigned short __ATTRS_o_ai 11333vec_vsubuhs(vector bool short __a, vector unsigned short __b) { 11334 return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b); 11335} 11336 11337static __inline__ vector unsigned short __ATTRS_o_ai 11338vec_vsubuhs(vector unsigned short __a, vector bool short __b) { 11339 return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b); 11340} 11341 11342/* vec_vsubsws */ 11343 11344static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a, 11345 vector int __b) { 11346 return __builtin_altivec_vsubsws(__a, __b); 11347} 11348 11349static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a, 11350 vector int __b) { 11351 return __builtin_altivec_vsubsws((vector int)__a, __b); 11352} 11353 11354static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a, 11355 vector bool int __b) { 11356 return __builtin_altivec_vsubsws(__a, (vector int)__b); 11357} 11358 11359/* vec_vsubuws */ 11360 11361static __inline__ vector unsigned int __ATTRS_o_ai 11362vec_vsubuws(vector unsigned int __a, vector unsigned int __b) { 11363 return __builtin_altivec_vsubuws(__a, __b); 11364} 11365 11366static __inline__ vector unsigned int __ATTRS_o_ai 11367vec_vsubuws(vector bool int __a, vector unsigned int __b) { 11368 return __builtin_altivec_vsubuws((vector unsigned int)__a, __b); 11369} 11370 11371static __inline__ vector unsigned int __ATTRS_o_ai 11372vec_vsubuws(vector unsigned int __a, vector bool int __b) { 11373 return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b); 11374} 11375 11376#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 11377/* vec_vsubuqm */ 11378 11379static __inline__ vector signed __int128 __ATTRS_o_ai 11380vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) { 11381 return __a - __b; 11382} 11383 11384static __inline__ vector unsigned __int128 __ATTRS_o_ai 11385vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) { 11386 return __a - __b; 11387} 11388 11389/* vec_vsubeuqm */ 11390 11391 11392static __inline__ vector signed __int128 __ATTRS_o_ai 11393vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b, 11394 vector signed __int128 __c) { 11395 return __builtin_altivec_vsubeuqm(__a, __b, __c); 11396} 11397 11398static __inline__ vector unsigned __int128 __ATTRS_o_ai 11399vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b, 11400 vector unsigned __int128 __c) { 11401 return __builtin_altivec_vsubeuqm(__a, __b, __c); 11402} 11403 11404static __inline__ vector signed __int128 __ATTRS_o_ai 11405vec_sube(vector signed __int128 __a, vector signed __int128 __b, 11406 vector signed __int128 __c) { 11407 return __builtin_altivec_vsubeuqm(__a, __b, __c); 11408} 11409 11410static __inline__ vector unsigned __int128 __ATTRS_o_ai 11411vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b, 11412 vector unsigned __int128 __c) { 11413 return __builtin_altivec_vsubeuqm(__a, __b, __c); 11414} 11415 11416/* vec_vsubcuq */ 11417 11418static __inline__ vector signed __int128 __ATTRS_o_ai 11419vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) { 11420 return __builtin_altivec_vsubcuq(__a, __b); 11421} 11422 11423static __inline__ vector unsigned __int128 __ATTRS_o_ai 11424vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) { 11425 return __builtin_altivec_vsubcuq(__a, __b); 11426} 11427 11428/* vec_vsubecuq */ 11429 11430static __inline__ vector signed __int128 __ATTRS_o_ai 11431vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b, 11432 vector signed __int128 __c) { 11433 return __builtin_altivec_vsubecuq(__a, __b, __c); 11434} 11435 11436static __inline__ vector unsigned __int128 __ATTRS_o_ai 11437vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b, 11438 vector unsigned __int128 __c) { 11439 return __builtin_altivec_vsubecuq(__a, __b, __c); 11440} 11441 11442static __inline__ vector signed int __ATTRS_o_ai 11443vec_subec(vector signed int __a, vector signed int __b, 11444 vector signed int __c) { 11445 return vec_addec(__a, ~__b, __c); 11446} 11447 11448static __inline__ vector unsigned int __ATTRS_o_ai 11449vec_subec(vector unsigned int __a, vector unsigned int __b, 11450 vector unsigned int __c) { 11451 return vec_addec(__a, ~__b, __c); 11452} 11453 11454static __inline__ vector signed __int128 __ATTRS_o_ai 11455vec_subec(vector signed __int128 __a, vector signed __int128 __b, 11456 vector signed __int128 __c) { 11457 return __builtin_altivec_vsubecuq(__a, __b, __c); 11458} 11459 11460static __inline__ vector unsigned __int128 __ATTRS_o_ai 11461vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b, 11462 vector unsigned __int128 __c) { 11463 return __builtin_altivec_vsubecuq(__a, __b, __c); 11464} 11465#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) 11466 11467static __inline__ vector signed int __ATTRS_o_ai 11468vec_sube(vector signed int __a, vector signed int __b, 11469 vector signed int __c) { 11470 vector signed int __mask = {1, 1, 1, 1}; 11471 vector signed int __carry = __c & __mask; 11472 return vec_adde(__a, ~__b, __carry); 11473} 11474 11475static __inline__ vector unsigned int __ATTRS_o_ai 11476vec_sube(vector unsigned int __a, vector unsigned int __b, 11477 vector unsigned int __c) { 11478 vector unsigned int __mask = {1, 1, 1, 1}; 11479 vector unsigned int __carry = __c & __mask; 11480 return vec_adde(__a, ~__b, __carry); 11481} 11482/* vec_sum4s */ 11483 11484static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a, 11485 vector int __b) { 11486 return __builtin_altivec_vsum4sbs(__a, __b); 11487} 11488 11489static __inline__ vector unsigned int __ATTRS_o_ai 11490vec_sum4s(vector unsigned char __a, vector unsigned int __b) { 11491 return __builtin_altivec_vsum4ubs(__a, __b); 11492} 11493 11494static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a, 11495 vector int __b) { 11496 return __builtin_altivec_vsum4shs(__a, __b); 11497} 11498 11499/* vec_vsum4sbs */ 11500 11501static __inline__ vector int __attribute__((__always_inline__)) 11502vec_vsum4sbs(vector signed char __a, vector int __b) { 11503 return __builtin_altivec_vsum4sbs(__a, __b); 11504} 11505 11506/* vec_vsum4ubs */ 11507 11508static __inline__ vector unsigned int __attribute__((__always_inline__)) 11509vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) { 11510 return __builtin_altivec_vsum4ubs(__a, __b); 11511} 11512 11513/* vec_vsum4shs */ 11514 11515static __inline__ vector int __attribute__((__always_inline__)) 11516vec_vsum4shs(vector signed short __a, vector int __b) { 11517 return __builtin_altivec_vsum4shs(__a, __b); 11518} 11519 11520/* vec_sum2s */ 11521 11522/* The vsum2sws instruction has a big-endian bias, so that the second 11523 input vector and the result always reference big-endian elements 11524 1 and 3 (little-endian element 0 and 2). For ease of porting the 11525 programmer wants elements 1 and 3 in both cases, so for little 11526 endian we must perform some permutes. */ 11527 11528static __inline__ vector signed int __attribute__((__always_inline__)) 11529vec_sum2s(vector int __a, vector int __b) { 11530#ifdef __LITTLE_ENDIAN__ 11531 vector int __c = (vector signed int)vec_perm( 11532 __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 11533 8, 9, 10, 11)); 11534 __c = __builtin_altivec_vsum2sws(__a, __c); 11535 return (vector signed int)vec_perm( 11536 __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 11537 8, 9, 10, 11)); 11538#else 11539 return __builtin_altivec_vsum2sws(__a, __b); 11540#endif 11541} 11542 11543/* vec_vsum2sws */ 11544 11545static __inline__ vector signed int __attribute__((__always_inline__)) 11546vec_vsum2sws(vector int __a, vector int __b) { 11547#ifdef __LITTLE_ENDIAN__ 11548 vector int __c = (vector signed int)vec_perm( 11549 __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 11550 8, 9, 10, 11)); 11551 __c = __builtin_altivec_vsum2sws(__a, __c); 11552 return (vector signed int)vec_perm( 11553 __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15, 11554 8, 9, 10, 11)); 11555#else 11556 return __builtin_altivec_vsum2sws(__a, __b); 11557#endif 11558} 11559 11560/* vec_sums */ 11561 11562/* The vsumsws instruction has a big-endian bias, so that the second 11563 input vector and the result always reference big-endian element 3 11564 (little-endian element 0). For ease of porting the programmer 11565 wants element 3 in both cases, so for little endian we must perform 11566 some permutes. */ 11567 11568static __inline__ vector signed int __attribute__((__always_inline__)) 11569vec_sums(vector signed int __a, vector signed int __b) { 11570#ifdef __LITTLE_ENDIAN__ 11571 __b = (vector signed int)vec_splat(__b, 3); 11572 __b = __builtin_altivec_vsumsws(__a, __b); 11573 return (vector signed int)(0, 0, 0, __b[0]); 11574#else 11575 return __builtin_altivec_vsumsws(__a, __b); 11576#endif 11577} 11578 11579/* vec_vsumsws */ 11580 11581static __inline__ vector signed int __attribute__((__always_inline__)) 11582vec_vsumsws(vector signed int __a, vector signed int __b) { 11583#ifdef __LITTLE_ENDIAN__ 11584 __b = (vector signed int)vec_splat(__b, 3); 11585 __b = __builtin_altivec_vsumsws(__a, __b); 11586 return (vector signed int)(0, 0, 0, __b[0]); 11587#else 11588 return __builtin_altivec_vsumsws(__a, __b); 11589#endif 11590} 11591 11592/* vec_trunc */ 11593 11594static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) { 11595#ifdef __VSX__ 11596 return __builtin_vsx_xvrspiz(__a); 11597#else 11598 return __builtin_altivec_vrfiz(__a); 11599#endif 11600} 11601 11602#ifdef __VSX__ 11603static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) { 11604 return __builtin_vsx_xvrdpiz(__a); 11605} 11606#endif 11607 11608/* vec_vrfiz */ 11609 11610static __inline__ vector float __attribute__((__always_inline__)) 11611vec_vrfiz(vector float __a) { 11612 return __builtin_altivec_vrfiz(__a); 11613} 11614 11615/* vec_unpackh */ 11616 11617/* The vector unpack instructions all have a big-endian bias, so for 11618 little endian we must reverse the meanings of "high" and "low." */ 11619 11620static __inline__ vector short __ATTRS_o_ai 11621vec_unpackh(vector signed char __a) { 11622#ifdef __LITTLE_ENDIAN__ 11623 return __builtin_altivec_vupklsb((vector char)__a); 11624#else 11625 return __builtin_altivec_vupkhsb((vector char)__a); 11626#endif 11627} 11628 11629static __inline__ vector bool short __ATTRS_o_ai 11630vec_unpackh(vector bool char __a) { 11631#ifdef __LITTLE_ENDIAN__ 11632 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); 11633#else 11634 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); 11635#endif 11636} 11637 11638static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) { 11639#ifdef __LITTLE_ENDIAN__ 11640 return __builtin_altivec_vupklsh(__a); 11641#else 11642 return __builtin_altivec_vupkhsh(__a); 11643#endif 11644} 11645 11646static __inline__ vector bool int __ATTRS_o_ai 11647vec_unpackh(vector bool short __a) { 11648#ifdef __LITTLE_ENDIAN__ 11649 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); 11650#else 11651 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); 11652#endif 11653} 11654 11655static __inline__ vector unsigned int __ATTRS_o_ai 11656vec_unpackh(vector pixel __a) { 11657#ifdef __LITTLE_ENDIAN__ 11658 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); 11659#else 11660 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); 11661#endif 11662} 11663 11664#ifdef __POWER8_VECTOR__ 11665static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) { 11666#ifdef __LITTLE_ENDIAN__ 11667 return __builtin_altivec_vupklsw(__a); 11668#else 11669 return __builtin_altivec_vupkhsw(__a); 11670#endif 11671} 11672 11673static __inline__ vector bool long long __ATTRS_o_ai 11674vec_unpackh(vector bool int __a) { 11675#ifdef __LITTLE_ENDIAN__ 11676 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); 11677#else 11678 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); 11679#endif 11680} 11681 11682static __inline__ vector double __ATTRS_o_ai 11683vec_unpackh(vector float __a) { 11684 return (vector double)(__a[0], __a[1]); 11685} 11686#endif 11687 11688/* vec_vupkhsb */ 11689 11690static __inline__ vector short __ATTRS_o_ai 11691vec_vupkhsb(vector signed char __a) { 11692#ifdef __LITTLE_ENDIAN__ 11693 return __builtin_altivec_vupklsb((vector char)__a); 11694#else 11695 return __builtin_altivec_vupkhsb((vector char)__a); 11696#endif 11697} 11698 11699static __inline__ vector bool short __ATTRS_o_ai 11700vec_vupkhsb(vector bool char __a) { 11701#ifdef __LITTLE_ENDIAN__ 11702 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); 11703#else 11704 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); 11705#endif 11706} 11707 11708/* vec_vupkhsh */ 11709 11710static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) { 11711#ifdef __LITTLE_ENDIAN__ 11712 return __builtin_altivec_vupklsh(__a); 11713#else 11714 return __builtin_altivec_vupkhsh(__a); 11715#endif 11716} 11717 11718static __inline__ vector bool int __ATTRS_o_ai 11719vec_vupkhsh(vector bool short __a) { 11720#ifdef __LITTLE_ENDIAN__ 11721 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); 11722#else 11723 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); 11724#endif 11725} 11726 11727static __inline__ vector unsigned int __ATTRS_o_ai 11728vec_vupkhsh(vector pixel __a) { 11729#ifdef __LITTLE_ENDIAN__ 11730 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); 11731#else 11732 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); 11733#endif 11734} 11735 11736/* vec_vupkhsw */ 11737 11738#ifdef __POWER8_VECTOR__ 11739static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) { 11740#ifdef __LITTLE_ENDIAN__ 11741 return __builtin_altivec_vupklsw(__a); 11742#else 11743 return __builtin_altivec_vupkhsw(__a); 11744#endif 11745} 11746 11747static __inline__ vector bool long long __ATTRS_o_ai 11748vec_vupkhsw(vector bool int __a) { 11749#ifdef __LITTLE_ENDIAN__ 11750 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); 11751#else 11752 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); 11753#endif 11754} 11755#endif 11756 11757/* vec_unpackl */ 11758 11759static __inline__ vector short __ATTRS_o_ai 11760vec_unpackl(vector signed char __a) { 11761#ifdef __LITTLE_ENDIAN__ 11762 return __builtin_altivec_vupkhsb((vector char)__a); 11763#else 11764 return __builtin_altivec_vupklsb((vector char)__a); 11765#endif 11766} 11767 11768static __inline__ vector bool short __ATTRS_o_ai 11769vec_unpackl(vector bool char __a) { 11770#ifdef __LITTLE_ENDIAN__ 11771 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); 11772#else 11773 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); 11774#endif 11775} 11776 11777static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) { 11778#ifdef __LITTLE_ENDIAN__ 11779 return __builtin_altivec_vupkhsh(__a); 11780#else 11781 return __builtin_altivec_vupklsh(__a); 11782#endif 11783} 11784 11785static __inline__ vector bool int __ATTRS_o_ai 11786vec_unpackl(vector bool short __a) { 11787#ifdef __LITTLE_ENDIAN__ 11788 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); 11789#else 11790 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); 11791#endif 11792} 11793 11794static __inline__ vector unsigned int __ATTRS_o_ai 11795vec_unpackl(vector pixel __a) { 11796#ifdef __LITTLE_ENDIAN__ 11797 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); 11798#else 11799 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); 11800#endif 11801} 11802 11803#ifdef __POWER8_VECTOR__ 11804static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) { 11805#ifdef __LITTLE_ENDIAN__ 11806 return __builtin_altivec_vupkhsw(__a); 11807#else 11808 return __builtin_altivec_vupklsw(__a); 11809#endif 11810} 11811 11812static __inline__ vector bool long long __ATTRS_o_ai 11813vec_unpackl(vector bool int __a) { 11814#ifdef __LITTLE_ENDIAN__ 11815 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); 11816#else 11817 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); 11818#endif 11819} 11820 11821static __inline__ vector double __ATTRS_o_ai 11822vec_unpackl(vector float __a) { 11823 return (vector double)(__a[2], __a[3]); 11824} 11825#endif 11826 11827/* vec_vupklsb */ 11828 11829static __inline__ vector short __ATTRS_o_ai 11830vec_vupklsb(vector signed char __a) { 11831#ifdef __LITTLE_ENDIAN__ 11832 return __builtin_altivec_vupkhsb((vector char)__a); 11833#else 11834 return __builtin_altivec_vupklsb((vector char)__a); 11835#endif 11836} 11837 11838static __inline__ vector bool short __ATTRS_o_ai 11839vec_vupklsb(vector bool char __a) { 11840#ifdef __LITTLE_ENDIAN__ 11841 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); 11842#else 11843 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); 11844#endif 11845} 11846 11847/* vec_vupklsh */ 11848 11849static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) { 11850#ifdef __LITTLE_ENDIAN__ 11851 return __builtin_altivec_vupkhsh(__a); 11852#else 11853 return __builtin_altivec_vupklsh(__a); 11854#endif 11855} 11856 11857static __inline__ vector bool int __ATTRS_o_ai 11858vec_vupklsh(vector bool short __a) { 11859#ifdef __LITTLE_ENDIAN__ 11860 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); 11861#else 11862 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); 11863#endif 11864} 11865 11866static __inline__ vector unsigned int __ATTRS_o_ai 11867vec_vupklsh(vector pixel __a) { 11868#ifdef __LITTLE_ENDIAN__ 11869 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a); 11870#else 11871 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a); 11872#endif 11873} 11874 11875/* vec_vupklsw */ 11876 11877#ifdef __POWER8_VECTOR__ 11878static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) { 11879#ifdef __LITTLE_ENDIAN__ 11880 return __builtin_altivec_vupkhsw(__a); 11881#else 11882 return __builtin_altivec_vupklsw(__a); 11883#endif 11884} 11885 11886static __inline__ vector bool long long __ATTRS_o_ai 11887vec_vupklsw(vector bool int __a) { 11888#ifdef __LITTLE_ENDIAN__ 11889 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a); 11890#else 11891 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a); 11892#endif 11893} 11894#endif 11895 11896/* vec_vsx_ld */ 11897 11898#ifdef __VSX__ 11899 11900static __inline__ vector bool int __ATTRS_o_ai 11901vec_vsx_ld(int __a, const vector bool int *__b) { 11902 return (vector bool int)__builtin_vsx_lxvw4x(__a, __b); 11903} 11904 11905static __inline__ vector signed int __ATTRS_o_ai 11906vec_vsx_ld(int __a, const vector signed int *__b) { 11907 return (vector signed int)__builtin_vsx_lxvw4x(__a, __b); 11908} 11909 11910static __inline__ vector signed int __ATTRS_o_ai 11911vec_vsx_ld(int __a, const signed int *__b) { 11912 return (vector signed int)__builtin_vsx_lxvw4x(__a, __b); 11913} 11914 11915static __inline__ vector unsigned int __ATTRS_o_ai 11916vec_vsx_ld(int __a, const vector unsigned int *__b) { 11917 return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b); 11918} 11919 11920static __inline__ vector unsigned int __ATTRS_o_ai 11921vec_vsx_ld(int __a, const unsigned int *__b) { 11922 return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b); 11923} 11924 11925static __inline__ vector float __ATTRS_o_ai 11926vec_vsx_ld(int __a, const vector float *__b) { 11927 return (vector float)__builtin_vsx_lxvw4x(__a, __b); 11928} 11929 11930static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a, 11931 const float *__b) { 11932 return (vector float)__builtin_vsx_lxvw4x(__a, __b); 11933} 11934 11935static __inline__ vector signed long long __ATTRS_o_ai 11936vec_vsx_ld(int __a, const vector signed long long *__b) { 11937 return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b); 11938} 11939 11940static __inline__ vector unsigned long long __ATTRS_o_ai 11941vec_vsx_ld(int __a, const vector unsigned long long *__b) { 11942 return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b); 11943} 11944 11945static __inline__ vector double __ATTRS_o_ai 11946vec_vsx_ld(int __a, const vector double *__b) { 11947 return (vector double)__builtin_vsx_lxvd2x(__a, __b); 11948} 11949 11950static __inline__ vector double __ATTRS_o_ai 11951vec_vsx_ld(int __a, const double *__b) { 11952 return (vector double)__builtin_vsx_lxvd2x(__a, __b); 11953} 11954 11955static __inline__ vector bool short __ATTRS_o_ai 11956vec_vsx_ld(int __a, const vector bool short *__b) { 11957 return (vector bool short)__builtin_vsx_lxvw4x(__a, __b); 11958} 11959 11960static __inline__ vector signed short __ATTRS_o_ai 11961vec_vsx_ld(int __a, const vector signed short *__b) { 11962 return (vector signed short)__builtin_vsx_lxvw4x(__a, __b); 11963} 11964 11965static __inline__ vector signed short __ATTRS_o_ai 11966vec_vsx_ld(int __a, const signed short *__b) { 11967 return (vector signed short)__builtin_vsx_lxvw4x(__a, __b); 11968} 11969 11970static __inline__ vector unsigned short __ATTRS_o_ai 11971vec_vsx_ld(int __a, const vector unsigned short *__b) { 11972 return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b); 11973} 11974 11975static __inline__ vector unsigned short __ATTRS_o_ai 11976vec_vsx_ld(int __a, const unsigned short *__b) { 11977 return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b); 11978} 11979 11980static __inline__ vector bool char __ATTRS_o_ai 11981vec_vsx_ld(int __a, const vector bool char *__b) { 11982 return (vector bool char)__builtin_vsx_lxvw4x(__a, __b); 11983} 11984 11985static __inline__ vector signed char __ATTRS_o_ai 11986vec_vsx_ld(int __a, const vector signed char *__b) { 11987 return (vector signed char)__builtin_vsx_lxvw4x(__a, __b); 11988} 11989 11990static __inline__ vector signed char __ATTRS_o_ai 11991vec_vsx_ld(int __a, const signed char *__b) { 11992 return (vector signed char)__builtin_vsx_lxvw4x(__a, __b); 11993} 11994 11995static __inline__ vector unsigned char __ATTRS_o_ai 11996vec_vsx_ld(int __a, const vector unsigned char *__b) { 11997 return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b); 11998} 11999 12000static __inline__ vector unsigned char __ATTRS_o_ai 12001vec_vsx_ld(int __a, const unsigned char *__b) { 12002 return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b); 12003} 12004 12005#endif 12006 12007/* vec_vsx_st */ 12008 12009#ifdef __VSX__ 12010 12011static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b, 12012 vector bool int *__c) { 12013 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12014} 12015 12016static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b, 12017 signed int *__c) { 12018 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12019} 12020 12021static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b, 12022 unsigned int *__c) { 12023 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12024} 12025 12026static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b, 12027 vector signed int *__c) { 12028 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12029} 12030 12031static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b, 12032 signed int *__c) { 12033 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12034} 12035 12036static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b, 12037 vector unsigned int *__c) { 12038 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12039} 12040 12041static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b, 12042 unsigned int *__c) { 12043 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12044} 12045 12046static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b, 12047 vector float *__c) { 12048 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12049} 12050 12051static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b, 12052 float *__c) { 12053 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12054} 12055 12056static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a, 12057 int __b, 12058 vector signed long long *__c) { 12059 __builtin_vsx_stxvd2x((vector double)__a, __b, __c); 12060} 12061 12062static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a, 12063 int __b, 12064 vector unsigned long long *__c) { 12065 __builtin_vsx_stxvd2x((vector double)__a, __b, __c); 12066} 12067 12068static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b, 12069 vector double *__c) { 12070 __builtin_vsx_stxvd2x((vector double)__a, __b, __c); 12071} 12072 12073static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b, 12074 double *__c) { 12075 __builtin_vsx_stxvd2x((vector double)__a, __b, __c); 12076} 12077 12078static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b, 12079 vector bool short *__c) { 12080 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12081} 12082 12083static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b, 12084 signed short *__c) { 12085 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12086} 12087 12088static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b, 12089 unsigned short *__c) { 12090 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12091} 12092static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b, 12093 vector signed short *__c) { 12094 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12095} 12096 12097static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b, 12098 signed short *__c) { 12099 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12100} 12101 12102static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a, 12103 int __b, 12104 vector unsigned short *__c) { 12105 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12106} 12107 12108static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a, 12109 int __b, unsigned short *__c) { 12110 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12111} 12112 12113static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b, 12114 vector bool char *__c) { 12115 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12116} 12117 12118static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b, 12119 signed char *__c) { 12120 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12121} 12122 12123static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b, 12124 unsigned char *__c) { 12125 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12126} 12127 12128static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b, 12129 vector signed char *__c) { 12130 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12131} 12132 12133static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b, 12134 signed char *__c) { 12135 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12136} 12137 12138static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a, 12139 int __b, 12140 vector unsigned char *__c) { 12141 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12142} 12143 12144static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a, 12145 int __b, unsigned char *__c) { 12146 __builtin_vsx_stxvw4x((vector int)__a, __b, __c); 12147} 12148 12149#endif 12150 12151#ifdef __VSX__ 12152#define vec_xxpermdi __builtin_vsx_xxpermdi 12153#define vec_xxsldwi __builtin_vsx_xxsldwi 12154#endif 12155 12156/* vec_xor */ 12157 12158#define __builtin_altivec_vxor vec_xor 12159 12160static __inline__ vector signed char __ATTRS_o_ai 12161vec_xor(vector signed char __a, vector signed char __b) { 12162 return __a ^ __b; 12163} 12164 12165static __inline__ vector signed char __ATTRS_o_ai 12166vec_xor(vector bool char __a, vector signed char __b) { 12167 return (vector signed char)__a ^ __b; 12168} 12169 12170static __inline__ vector signed char __ATTRS_o_ai 12171vec_xor(vector signed char __a, vector bool char __b) { 12172 return __a ^ (vector signed char)__b; 12173} 12174 12175static __inline__ vector unsigned char __ATTRS_o_ai 12176vec_xor(vector unsigned char __a, vector unsigned char __b) { 12177 return __a ^ __b; 12178} 12179 12180static __inline__ vector unsigned char __ATTRS_o_ai 12181vec_xor(vector bool char __a, vector unsigned char __b) { 12182 return (vector unsigned char)__a ^ __b; 12183} 12184 12185static __inline__ vector unsigned char __ATTRS_o_ai 12186vec_xor(vector unsigned char __a, vector bool char __b) { 12187 return __a ^ (vector unsigned char)__b; 12188} 12189 12190static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a, 12191 vector bool char __b) { 12192 return __a ^ __b; 12193} 12194 12195static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a, 12196 vector short __b) { 12197 return __a ^ __b; 12198} 12199 12200static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a, 12201 vector short __b) { 12202 return (vector short)__a ^ __b; 12203} 12204 12205static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a, 12206 vector bool short __b) { 12207 return __a ^ (vector short)__b; 12208} 12209 12210static __inline__ vector unsigned short __ATTRS_o_ai 12211vec_xor(vector unsigned short __a, vector unsigned short __b) { 12212 return __a ^ __b; 12213} 12214 12215static __inline__ vector unsigned short __ATTRS_o_ai 12216vec_xor(vector bool short __a, vector unsigned short __b) { 12217 return (vector unsigned short)__a ^ __b; 12218} 12219 12220static __inline__ vector unsigned short __ATTRS_o_ai 12221vec_xor(vector unsigned short __a, vector bool short __b) { 12222 return __a ^ (vector unsigned short)__b; 12223} 12224 12225static __inline__ vector bool short __ATTRS_o_ai 12226vec_xor(vector bool short __a, vector bool short __b) { 12227 return __a ^ __b; 12228} 12229 12230static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a, 12231 vector int __b) { 12232 return __a ^ __b; 12233} 12234 12235static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a, 12236 vector int __b) { 12237 return (vector int)__a ^ __b; 12238} 12239 12240static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a, 12241 vector bool int __b) { 12242 return __a ^ (vector int)__b; 12243} 12244 12245static __inline__ vector unsigned int __ATTRS_o_ai 12246vec_xor(vector unsigned int __a, vector unsigned int __b) { 12247 return __a ^ __b; 12248} 12249 12250static __inline__ vector unsigned int __ATTRS_o_ai 12251vec_xor(vector bool int __a, vector unsigned int __b) { 12252 return (vector unsigned int)__a ^ __b; 12253} 12254 12255static __inline__ vector unsigned int __ATTRS_o_ai 12256vec_xor(vector unsigned int __a, vector bool int __b) { 12257 return __a ^ (vector unsigned int)__b; 12258} 12259 12260static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a, 12261 vector bool int __b) { 12262 return __a ^ __b; 12263} 12264 12265static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a, 12266 vector float __b) { 12267 vector unsigned int __res = 12268 (vector unsigned int)__a ^ (vector unsigned int)__b; 12269 return (vector float)__res; 12270} 12271 12272static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a, 12273 vector float __b) { 12274 vector unsigned int __res = 12275 (vector unsigned int)__a ^ (vector unsigned int)__b; 12276 return (vector float)__res; 12277} 12278 12279static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a, 12280 vector bool int __b) { 12281 vector unsigned int __res = 12282 (vector unsigned int)__a ^ (vector unsigned int)__b; 12283 return (vector float)__res; 12284} 12285 12286#ifdef __VSX__ 12287static __inline__ vector signed long long __ATTRS_o_ai 12288vec_xor(vector signed long long __a, vector signed long long __b) { 12289 return __a ^ __b; 12290} 12291 12292static __inline__ vector signed long long __ATTRS_o_ai 12293vec_xor(vector bool long long __a, vector signed long long __b) { 12294 return (vector signed long long)__a ^ __b; 12295} 12296 12297static __inline__ vector signed long long __ATTRS_o_ai 12298vec_xor(vector signed long long __a, vector bool long long __b) { 12299 return __a ^ (vector signed long long)__b; 12300} 12301 12302static __inline__ vector unsigned long long __ATTRS_o_ai 12303vec_xor(vector unsigned long long __a, vector unsigned long long __b) { 12304 return __a ^ __b; 12305} 12306 12307static __inline__ vector unsigned long long __ATTRS_o_ai 12308vec_xor(vector bool long long __a, vector unsigned long long __b) { 12309 return (vector unsigned long long)__a ^ __b; 12310} 12311 12312static __inline__ vector unsigned long long __ATTRS_o_ai 12313vec_xor(vector unsigned long long __a, vector bool long long __b) { 12314 return __a ^ (vector unsigned long long)__b; 12315} 12316 12317static __inline__ vector bool long long __ATTRS_o_ai 12318vec_xor(vector bool long long __a, vector bool long long __b) { 12319 return __a ^ __b; 12320} 12321 12322static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a, 12323 vector double __b) { 12324 return (vector double)((vector unsigned long long)__a ^ 12325 (vector unsigned long long)__b); 12326} 12327 12328static __inline__ vector double __ATTRS_o_ai 12329vec_xor(vector double __a, vector bool long long __b) { 12330 return (vector double)((vector unsigned long long)__a ^ 12331 (vector unsigned long long)__b); 12332} 12333 12334static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a, 12335 vector double __b) { 12336 return (vector double)((vector unsigned long long)__a ^ 12337 (vector unsigned long long)__b); 12338} 12339#endif 12340 12341/* vec_vxor */ 12342 12343static __inline__ vector signed char __ATTRS_o_ai 12344vec_vxor(vector signed char __a, vector signed char __b) { 12345 return __a ^ __b; 12346} 12347 12348static __inline__ vector signed char __ATTRS_o_ai 12349vec_vxor(vector bool char __a, vector signed char __b) { 12350 return (vector signed char)__a ^ __b; 12351} 12352 12353static __inline__ vector signed char __ATTRS_o_ai 12354vec_vxor(vector signed char __a, vector bool char __b) { 12355 return __a ^ (vector signed char)__b; 12356} 12357 12358static __inline__ vector unsigned char __ATTRS_o_ai 12359vec_vxor(vector unsigned char __a, vector unsigned char __b) { 12360 return __a ^ __b; 12361} 12362 12363static __inline__ vector unsigned char __ATTRS_o_ai 12364vec_vxor(vector bool char __a, vector unsigned char __b) { 12365 return (vector unsigned char)__a ^ __b; 12366} 12367 12368static __inline__ vector unsigned char __ATTRS_o_ai 12369vec_vxor(vector unsigned char __a, vector bool char __b) { 12370 return __a ^ (vector unsigned char)__b; 12371} 12372 12373static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a, 12374 vector bool char __b) { 12375 return __a ^ __b; 12376} 12377 12378static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a, 12379 vector short __b) { 12380 return __a ^ __b; 12381} 12382 12383static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a, 12384 vector short __b) { 12385 return (vector short)__a ^ __b; 12386} 12387 12388static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a, 12389 vector bool short __b) { 12390 return __a ^ (vector short)__b; 12391} 12392 12393static __inline__ vector unsigned short __ATTRS_o_ai 12394vec_vxor(vector unsigned short __a, vector unsigned short __b) { 12395 return __a ^ __b; 12396} 12397 12398static __inline__ vector unsigned short __ATTRS_o_ai 12399vec_vxor(vector bool short __a, vector unsigned short __b) { 12400 return (vector unsigned short)__a ^ __b; 12401} 12402 12403static __inline__ vector unsigned short __ATTRS_o_ai 12404vec_vxor(vector unsigned short __a, vector bool short __b) { 12405 return __a ^ (vector unsigned short)__b; 12406} 12407 12408static __inline__ vector bool short __ATTRS_o_ai 12409vec_vxor(vector bool short __a, vector bool short __b) { 12410 return __a ^ __b; 12411} 12412 12413static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a, 12414 vector int __b) { 12415 return __a ^ __b; 12416} 12417 12418static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a, 12419 vector int __b) { 12420 return (vector int)__a ^ __b; 12421} 12422 12423static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a, 12424 vector bool int __b) { 12425 return __a ^ (vector int)__b; 12426} 12427 12428static __inline__ vector unsigned int __ATTRS_o_ai 12429vec_vxor(vector unsigned int __a, vector unsigned int __b) { 12430 return __a ^ __b; 12431} 12432 12433static __inline__ vector unsigned int __ATTRS_o_ai 12434vec_vxor(vector bool int __a, vector unsigned int __b) { 12435 return (vector unsigned int)__a ^ __b; 12436} 12437 12438static __inline__ vector unsigned int __ATTRS_o_ai 12439vec_vxor(vector unsigned int __a, vector bool int __b) { 12440 return __a ^ (vector unsigned int)__b; 12441} 12442 12443static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a, 12444 vector bool int __b) { 12445 return __a ^ __b; 12446} 12447 12448static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a, 12449 vector float __b) { 12450 vector unsigned int __res = 12451 (vector unsigned int)__a ^ (vector unsigned int)__b; 12452 return (vector float)__res; 12453} 12454 12455static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a, 12456 vector float __b) { 12457 vector unsigned int __res = 12458 (vector unsigned int)__a ^ (vector unsigned int)__b; 12459 return (vector float)__res; 12460} 12461 12462static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a, 12463 vector bool int __b) { 12464 vector unsigned int __res = 12465 (vector unsigned int)__a ^ (vector unsigned int)__b; 12466 return (vector float)__res; 12467} 12468 12469#ifdef __VSX__ 12470static __inline__ vector signed long long __ATTRS_o_ai 12471vec_vxor(vector signed long long __a, vector signed long long __b) { 12472 return __a ^ __b; 12473} 12474 12475static __inline__ vector signed long long __ATTRS_o_ai 12476vec_vxor(vector bool long long __a, vector signed long long __b) { 12477 return (vector signed long long)__a ^ __b; 12478} 12479 12480static __inline__ vector signed long long __ATTRS_o_ai 12481vec_vxor(vector signed long long __a, vector bool long long __b) { 12482 return __a ^ (vector signed long long)__b; 12483} 12484 12485static __inline__ vector unsigned long long __ATTRS_o_ai 12486vec_vxor(vector unsigned long long __a, vector unsigned long long __b) { 12487 return __a ^ __b; 12488} 12489 12490static __inline__ vector unsigned long long __ATTRS_o_ai 12491vec_vxor(vector bool long long __a, vector unsigned long long __b) { 12492 return (vector unsigned long long)__a ^ __b; 12493} 12494 12495static __inline__ vector unsigned long long __ATTRS_o_ai 12496vec_vxor(vector unsigned long long __a, vector bool long long __b) { 12497 return __a ^ (vector unsigned long long)__b; 12498} 12499 12500static __inline__ vector bool long long __ATTRS_o_ai 12501vec_vxor(vector bool long long __a, vector bool long long __b) { 12502 return __a ^ __b; 12503} 12504#endif 12505 12506/* ------------------------ extensions for CBEA ----------------------------- */ 12507 12508/* vec_extract */ 12509 12510static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a, 12511 int __b) { 12512 return __a[__b]; 12513} 12514 12515static __inline__ unsigned char __ATTRS_o_ai 12516vec_extract(vector unsigned char __a, int __b) { 12517 return __a[__b]; 12518} 12519 12520static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a, 12521 int __b) { 12522 return __a[__b]; 12523} 12524 12525static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a, 12526 int __b) { 12527 return __a[__b]; 12528} 12529 12530static __inline__ unsigned short __ATTRS_o_ai 12531vec_extract(vector unsigned short __a, int __b) { 12532 return __a[__b]; 12533} 12534 12535static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a, 12536 int __b) { 12537 return __a[__b]; 12538} 12539 12540static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a, 12541 int __b) { 12542 return __a[__b]; 12543} 12544 12545static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a, 12546 int __b) { 12547 return __a[__b]; 12548} 12549 12550static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a, 12551 int __b) { 12552 return __a[__b]; 12553} 12554 12555#ifdef __VSX__ 12556static __inline__ signed long long __ATTRS_o_ai 12557vec_extract(vector signed long long __a, int __b) { 12558 return __a[__b]; 12559} 12560 12561static __inline__ unsigned long long __ATTRS_o_ai 12562vec_extract(vector unsigned long long __a, int __b) { 12563 return __a[__b]; 12564} 12565 12566static __inline__ unsigned long long __ATTRS_o_ai 12567vec_extract(vector bool long long __a, int __b) { 12568 return __a[__b]; 12569} 12570 12571static __inline__ double __ATTRS_o_ai vec_extract(vector double __a, int __b) { 12572 return __a[__b]; 12573} 12574#endif 12575 12576static __inline__ float __ATTRS_o_ai vec_extract(vector float __a, int __b) { 12577 return __a[__b]; 12578} 12579 12580#ifdef __POWER9_VECTOR__ 12581 12582#define vec_insert4b __builtin_vsx_insertword 12583#define vec_extract4b __builtin_vsx_extractuword 12584 12585/* vec_extract_exp */ 12586 12587static __inline__ vector unsigned int __ATTRS_o_ai 12588vec_extract_exp(vector float __a) { 12589 return __builtin_vsx_xvxexpsp(__a); 12590} 12591 12592static __inline__ vector unsigned long long __ATTRS_o_ai 12593vec_extract_exp(vector double __a) { 12594 return __builtin_vsx_xvxexpdp(__a); 12595} 12596 12597/* vec_extract_sig */ 12598 12599static __inline__ vector unsigned int __ATTRS_o_ai 12600vec_extract_sig(vector float __a) { 12601 return __builtin_vsx_xvxsigsp(__a); 12602} 12603 12604static __inline__ vector unsigned long long __ATTRS_o_ai 12605vec_extract_sig (vector double __a) { 12606 return __builtin_vsx_xvxsigdp(__a); 12607} 12608 12609static __inline__ vector float __ATTRS_o_ai 12610vec_extract_fp32_from_shorth(vector unsigned short __a) { 12611 vector unsigned short __b = 12612#ifdef __LITTLE_ENDIAN__ 12613 __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1); 12614#else 12615 __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3); 12616#endif 12617 return __builtin_vsx_xvcvhpsp(__b); 12618} 12619 12620static __inline__ vector float __ATTRS_o_ai 12621vec_extract_fp32_from_shortl(vector unsigned short __a) { 12622 vector unsigned short __b = 12623#ifdef __LITTLE_ENDIAN__ 12624 __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1); 12625#else 12626 __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7); 12627#endif 12628 return __builtin_vsx_xvcvhpsp(__b); 12629} 12630#endif /* __POWER9_VECTOR__ */ 12631 12632/* vec_insert */ 12633 12634static __inline__ vector signed char __ATTRS_o_ai 12635vec_insert(signed char __a, vector signed char __b, int __c) { 12636 __b[__c] = __a; 12637 return __b; 12638} 12639 12640static __inline__ vector unsigned char __ATTRS_o_ai 12641vec_insert(unsigned char __a, vector unsigned char __b, int __c) { 12642 __b[__c] = __a; 12643 return __b; 12644} 12645 12646static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a, 12647 vector bool char __b, 12648 int __c) { 12649 __b[__c] = __a; 12650 return __b; 12651} 12652 12653static __inline__ vector signed short __ATTRS_o_ai 12654vec_insert(signed short __a, vector signed short __b, int __c) { 12655 __b[__c] = __a; 12656 return __b; 12657} 12658 12659static __inline__ vector unsigned short __ATTRS_o_ai 12660vec_insert(unsigned short __a, vector unsigned short __b, int __c) { 12661 __b[__c] = __a; 12662 return __b; 12663} 12664 12665static __inline__ vector bool short __ATTRS_o_ai 12666vec_insert(unsigned short __a, vector bool short __b, int __c) { 12667 __b[__c] = __a; 12668 return __b; 12669} 12670 12671static __inline__ vector signed int __ATTRS_o_ai 12672vec_insert(signed int __a, vector signed int __b, int __c) { 12673 __b[__c] = __a; 12674 return __b; 12675} 12676 12677static __inline__ vector unsigned int __ATTRS_o_ai 12678vec_insert(unsigned int __a, vector unsigned int __b, int __c) { 12679 __b[__c] = __a; 12680 return __b; 12681} 12682 12683static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a, 12684 vector bool int __b, 12685 int __c) { 12686 __b[__c] = __a; 12687 return __b; 12688} 12689 12690#ifdef __VSX__ 12691static __inline__ vector signed long long __ATTRS_o_ai 12692vec_insert(signed long long __a, vector signed long long __b, int __c) { 12693 __b[__c] = __a; 12694 return __b; 12695} 12696 12697static __inline__ vector unsigned long long __ATTRS_o_ai 12698vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) { 12699 __b[__c] = __a; 12700 return __b; 12701} 12702 12703static __inline__ vector bool long long __ATTRS_o_ai 12704vec_insert(unsigned long long __a, vector bool long long __b, int __c) { 12705 __b[__c] = __a; 12706 return __b; 12707} 12708static __inline__ vector double __ATTRS_o_ai vec_insert(double __a, 12709 vector double __b, 12710 int __c) { 12711 __b[__c] = __a; 12712 return __b; 12713} 12714#endif 12715 12716static __inline__ vector float __ATTRS_o_ai vec_insert(float __a, 12717 vector float __b, 12718 int __c) { 12719 __b[__c] = __a; 12720 return __b; 12721} 12722 12723/* vec_lvlx */ 12724 12725static __inline__ vector signed char __ATTRS_o_ai 12726vec_lvlx(int __a, const signed char *__b) { 12727 return vec_perm(vec_ld(__a, __b), (vector signed char)(0), 12728 vec_lvsl(__a, __b)); 12729} 12730 12731static __inline__ vector signed char __ATTRS_o_ai 12732vec_lvlx(int __a, const vector signed char *__b) { 12733 return vec_perm(vec_ld(__a, __b), (vector signed char)(0), 12734 vec_lvsl(__a, (unsigned char *)__b)); 12735} 12736 12737static __inline__ vector unsigned char __ATTRS_o_ai 12738vec_lvlx(int __a, const unsigned char *__b) { 12739 return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0), 12740 vec_lvsl(__a, __b)); 12741} 12742 12743static __inline__ vector unsigned char __ATTRS_o_ai 12744vec_lvlx(int __a, const vector unsigned char *__b) { 12745 return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0), 12746 vec_lvsl(__a, (unsigned char *)__b)); 12747} 12748 12749static __inline__ vector bool char __ATTRS_o_ai 12750vec_lvlx(int __a, const vector bool char *__b) { 12751 return vec_perm(vec_ld(__a, __b), (vector bool char)(0), 12752 vec_lvsl(__a, (unsigned char *)__b)); 12753} 12754 12755static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a, 12756 const short *__b) { 12757 return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b)); 12758} 12759 12760static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a, 12761 const vector short *__b) { 12762 return vec_perm(vec_ld(__a, __b), (vector short)(0), 12763 vec_lvsl(__a, (unsigned char *)__b)); 12764} 12765 12766static __inline__ vector unsigned short __ATTRS_o_ai 12767vec_lvlx(int __a, const unsigned short *__b) { 12768 return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0), 12769 vec_lvsl(__a, __b)); 12770} 12771 12772static __inline__ vector unsigned short __ATTRS_o_ai 12773vec_lvlx(int __a, const vector unsigned short *__b) { 12774 return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0), 12775 vec_lvsl(__a, (unsigned char *)__b)); 12776} 12777 12778static __inline__ vector bool short __ATTRS_o_ai 12779vec_lvlx(int __a, const vector bool short *__b) { 12780 return vec_perm(vec_ld(__a, __b), (vector bool short)(0), 12781 vec_lvsl(__a, (unsigned char *)__b)); 12782} 12783 12784static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a, 12785 const vector pixel *__b) { 12786 return vec_perm(vec_ld(__a, __b), (vector pixel)(0), 12787 vec_lvsl(__a, (unsigned char *)__b)); 12788} 12789 12790static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) { 12791 return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b)); 12792} 12793 12794static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, 12795 const vector int *__b) { 12796 return vec_perm(vec_ld(__a, __b), (vector int)(0), 12797 vec_lvsl(__a, (unsigned char *)__b)); 12798} 12799 12800static __inline__ vector unsigned int __ATTRS_o_ai 12801vec_lvlx(int __a, const unsigned int *__b) { 12802 return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0), 12803 vec_lvsl(__a, __b)); 12804} 12805 12806static __inline__ vector unsigned int __ATTRS_o_ai 12807vec_lvlx(int __a, const vector unsigned int *__b) { 12808 return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0), 12809 vec_lvsl(__a, (unsigned char *)__b)); 12810} 12811 12812static __inline__ vector bool int __ATTRS_o_ai 12813vec_lvlx(int __a, const vector bool int *__b) { 12814 return vec_perm(vec_ld(__a, __b), (vector bool int)(0), 12815 vec_lvsl(__a, (unsigned char *)__b)); 12816} 12817 12818static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a, 12819 const float *__b) { 12820 return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b)); 12821} 12822 12823static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a, 12824 const vector float *__b) { 12825 return vec_perm(vec_ld(__a, __b), (vector float)(0), 12826 vec_lvsl(__a, (unsigned char *)__b)); 12827} 12828 12829/* vec_lvlxl */ 12830 12831static __inline__ vector signed char __ATTRS_o_ai 12832vec_lvlxl(int __a, const signed char *__b) { 12833 return vec_perm(vec_ldl(__a, __b), (vector signed char)(0), 12834 vec_lvsl(__a, __b)); 12835} 12836 12837static __inline__ vector signed char __ATTRS_o_ai 12838vec_lvlxl(int __a, const vector signed char *__b) { 12839 return vec_perm(vec_ldl(__a, __b), (vector signed char)(0), 12840 vec_lvsl(__a, (unsigned char *)__b)); 12841} 12842 12843static __inline__ vector unsigned char __ATTRS_o_ai 12844vec_lvlxl(int __a, const unsigned char *__b) { 12845 return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0), 12846 vec_lvsl(__a, __b)); 12847} 12848 12849static __inline__ vector unsigned char __ATTRS_o_ai 12850vec_lvlxl(int __a, const vector unsigned char *__b) { 12851 return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0), 12852 vec_lvsl(__a, (unsigned char *)__b)); 12853} 12854 12855static __inline__ vector bool char __ATTRS_o_ai 12856vec_lvlxl(int __a, const vector bool char *__b) { 12857 return vec_perm(vec_ldl(__a, __b), (vector bool char)(0), 12858 vec_lvsl(__a, (unsigned char *)__b)); 12859} 12860 12861static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a, 12862 const short *__b) { 12863 return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b)); 12864} 12865 12866static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a, 12867 const vector short *__b) { 12868 return vec_perm(vec_ldl(__a, __b), (vector short)(0), 12869 vec_lvsl(__a, (unsigned char *)__b)); 12870} 12871 12872static __inline__ vector unsigned short __ATTRS_o_ai 12873vec_lvlxl(int __a, const unsigned short *__b) { 12874 return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0), 12875 vec_lvsl(__a, __b)); 12876} 12877 12878static __inline__ vector unsigned short __ATTRS_o_ai 12879vec_lvlxl(int __a, const vector unsigned short *__b) { 12880 return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0), 12881 vec_lvsl(__a, (unsigned char *)__b)); 12882} 12883 12884static __inline__ vector bool short __ATTRS_o_ai 12885vec_lvlxl(int __a, const vector bool short *__b) { 12886 return vec_perm(vec_ldl(__a, __b), (vector bool short)(0), 12887 vec_lvsl(__a, (unsigned char *)__b)); 12888} 12889 12890static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a, 12891 const vector pixel *__b) { 12892 return vec_perm(vec_ldl(__a, __b), (vector pixel)(0), 12893 vec_lvsl(__a, (unsigned char *)__b)); 12894} 12895 12896static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) { 12897 return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b)); 12898} 12899 12900static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, 12901 const vector int *__b) { 12902 return vec_perm(vec_ldl(__a, __b), (vector int)(0), 12903 vec_lvsl(__a, (unsigned char *)__b)); 12904} 12905 12906static __inline__ vector unsigned int __ATTRS_o_ai 12907vec_lvlxl(int __a, const unsigned int *__b) { 12908 return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0), 12909 vec_lvsl(__a, __b)); 12910} 12911 12912static __inline__ vector unsigned int __ATTRS_o_ai 12913vec_lvlxl(int __a, const vector unsigned int *__b) { 12914 return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0), 12915 vec_lvsl(__a, (unsigned char *)__b)); 12916} 12917 12918static __inline__ vector bool int __ATTRS_o_ai 12919vec_lvlxl(int __a, const vector bool int *__b) { 12920 return vec_perm(vec_ldl(__a, __b), (vector bool int)(0), 12921 vec_lvsl(__a, (unsigned char *)__b)); 12922} 12923 12924static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a, 12925 const float *__b) { 12926 return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b)); 12927} 12928 12929static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a, 12930 vector float *__b) { 12931 return vec_perm(vec_ldl(__a, __b), (vector float)(0), 12932 vec_lvsl(__a, (unsigned char *)__b)); 12933} 12934 12935/* vec_lvrx */ 12936 12937static __inline__ vector signed char __ATTRS_o_ai 12938vec_lvrx(int __a, const signed char *__b) { 12939 return vec_perm((vector signed char)(0), vec_ld(__a, __b), 12940 vec_lvsl(__a, __b)); 12941} 12942 12943static __inline__ vector signed char __ATTRS_o_ai 12944vec_lvrx(int __a, const vector signed char *__b) { 12945 return vec_perm((vector signed char)(0), vec_ld(__a, __b), 12946 vec_lvsl(__a, (unsigned char *)__b)); 12947} 12948 12949static __inline__ vector unsigned char __ATTRS_o_ai 12950vec_lvrx(int __a, const unsigned char *__b) { 12951 return vec_perm((vector unsigned char)(0), vec_ld(__a, __b), 12952 vec_lvsl(__a, __b)); 12953} 12954 12955static __inline__ vector unsigned char __ATTRS_o_ai 12956vec_lvrx(int __a, const vector unsigned char *__b) { 12957 return vec_perm((vector unsigned char)(0), vec_ld(__a, __b), 12958 vec_lvsl(__a, (unsigned char *)__b)); 12959} 12960 12961static __inline__ vector bool char __ATTRS_o_ai 12962vec_lvrx(int __a, const vector bool char *__b) { 12963 return vec_perm((vector bool char)(0), vec_ld(__a, __b), 12964 vec_lvsl(__a, (unsigned char *)__b)); 12965} 12966 12967static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a, 12968 const short *__b) { 12969 return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b)); 12970} 12971 12972static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a, 12973 const vector short *__b) { 12974 return vec_perm((vector short)(0), vec_ld(__a, __b), 12975 vec_lvsl(__a, (unsigned char *)__b)); 12976} 12977 12978static __inline__ vector unsigned short __ATTRS_o_ai 12979vec_lvrx(int __a, const unsigned short *__b) { 12980 return vec_perm((vector unsigned short)(0), vec_ld(__a, __b), 12981 vec_lvsl(__a, __b)); 12982} 12983 12984static __inline__ vector unsigned short __ATTRS_o_ai 12985vec_lvrx(int __a, const vector unsigned short *__b) { 12986 return vec_perm((vector unsigned short)(0), vec_ld(__a, __b), 12987 vec_lvsl(__a, (unsigned char *)__b)); 12988} 12989 12990static __inline__ vector bool short __ATTRS_o_ai 12991vec_lvrx(int __a, const vector bool short *__b) { 12992 return vec_perm((vector bool short)(0), vec_ld(__a, __b), 12993 vec_lvsl(__a, (unsigned char *)__b)); 12994} 12995 12996static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a, 12997 const vector pixel *__b) { 12998 return vec_perm((vector pixel)(0), vec_ld(__a, __b), 12999 vec_lvsl(__a, (unsigned char *)__b)); 13000} 13001 13002static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) { 13003 return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b)); 13004} 13005 13006static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, 13007 const vector int *__b) { 13008 return vec_perm((vector int)(0), vec_ld(__a, __b), 13009 vec_lvsl(__a, (unsigned char *)__b)); 13010} 13011 13012static __inline__ vector unsigned int __ATTRS_o_ai 13013vec_lvrx(int __a, const unsigned int *__b) { 13014 return vec_perm((vector unsigned int)(0), vec_ld(__a, __b), 13015 vec_lvsl(__a, __b)); 13016} 13017 13018static __inline__ vector unsigned int __ATTRS_o_ai 13019vec_lvrx(int __a, const vector unsigned int *__b) { 13020 return vec_perm((vector unsigned int)(0), vec_ld(__a, __b), 13021 vec_lvsl(__a, (unsigned char *)__b)); 13022} 13023 13024static __inline__ vector bool int __ATTRS_o_ai 13025vec_lvrx(int __a, const vector bool int *__b) { 13026 return vec_perm((vector bool int)(0), vec_ld(__a, __b), 13027 vec_lvsl(__a, (unsigned char *)__b)); 13028} 13029 13030static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a, 13031 const float *__b) { 13032 return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b)); 13033} 13034 13035static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a, 13036 const vector float *__b) { 13037 return vec_perm((vector float)(0), vec_ld(__a, __b), 13038 vec_lvsl(__a, (unsigned char *)__b)); 13039} 13040 13041/* vec_lvrxl */ 13042 13043static __inline__ vector signed char __ATTRS_o_ai 13044vec_lvrxl(int __a, const signed char *__b) { 13045 return vec_perm((vector signed char)(0), vec_ldl(__a, __b), 13046 vec_lvsl(__a, __b)); 13047} 13048 13049static __inline__ vector signed char __ATTRS_o_ai 13050vec_lvrxl(int __a, const vector signed char *__b) { 13051 return vec_perm((vector signed char)(0), vec_ldl(__a, __b), 13052 vec_lvsl(__a, (unsigned char *)__b)); 13053} 13054 13055static __inline__ vector unsigned char __ATTRS_o_ai 13056vec_lvrxl(int __a, const unsigned char *__b) { 13057 return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b), 13058 vec_lvsl(__a, __b)); 13059} 13060 13061static __inline__ vector unsigned char __ATTRS_o_ai 13062vec_lvrxl(int __a, const vector unsigned char *__b) { 13063 return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b), 13064 vec_lvsl(__a, (unsigned char *)__b)); 13065} 13066 13067static __inline__ vector bool char __ATTRS_o_ai 13068vec_lvrxl(int __a, const vector bool char *__b) { 13069 return vec_perm((vector bool char)(0), vec_ldl(__a, __b), 13070 vec_lvsl(__a, (unsigned char *)__b)); 13071} 13072 13073static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a, 13074 const short *__b) { 13075 return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b)); 13076} 13077 13078static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a, 13079 const vector short *__b) { 13080 return vec_perm((vector short)(0), vec_ldl(__a, __b), 13081 vec_lvsl(__a, (unsigned char *)__b)); 13082} 13083 13084static __inline__ vector unsigned short __ATTRS_o_ai 13085vec_lvrxl(int __a, const unsigned short *__b) { 13086 return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b), 13087 vec_lvsl(__a, __b)); 13088} 13089 13090static __inline__ vector unsigned short __ATTRS_o_ai 13091vec_lvrxl(int __a, const vector unsigned short *__b) { 13092 return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b), 13093 vec_lvsl(__a, (unsigned char *)__b)); 13094} 13095 13096static __inline__ vector bool short __ATTRS_o_ai 13097vec_lvrxl(int __a, const vector bool short *__b) { 13098 return vec_perm((vector bool short)(0), vec_ldl(__a, __b), 13099 vec_lvsl(__a, (unsigned char *)__b)); 13100} 13101 13102static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a, 13103 const vector pixel *__b) { 13104 return vec_perm((vector pixel)(0), vec_ldl(__a, __b), 13105 vec_lvsl(__a, (unsigned char *)__b)); 13106} 13107 13108static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) { 13109 return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b)); 13110} 13111 13112static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, 13113 const vector int *__b) { 13114 return vec_perm((vector int)(0), vec_ldl(__a, __b), 13115 vec_lvsl(__a, (unsigned char *)__b)); 13116} 13117 13118static __inline__ vector unsigned int __ATTRS_o_ai 13119vec_lvrxl(int __a, const unsigned int *__b) { 13120 return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b), 13121 vec_lvsl(__a, __b)); 13122} 13123 13124static __inline__ vector unsigned int __ATTRS_o_ai 13125vec_lvrxl(int __a, const vector unsigned int *__b) { 13126 return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b), 13127 vec_lvsl(__a, (unsigned char *)__b)); 13128} 13129 13130static __inline__ vector bool int __ATTRS_o_ai 13131vec_lvrxl(int __a, const vector bool int *__b) { 13132 return vec_perm((vector bool int)(0), vec_ldl(__a, __b), 13133 vec_lvsl(__a, (unsigned char *)__b)); 13134} 13135 13136static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a, 13137 const float *__b) { 13138 return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b)); 13139} 13140 13141static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a, 13142 const vector float *__b) { 13143 return vec_perm((vector float)(0), vec_ldl(__a, __b), 13144 vec_lvsl(__a, (unsigned char *)__b)); 13145} 13146 13147/* vec_stvlx */ 13148 13149static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b, 13150 signed char *__c) { 13151 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13152 __c); 13153} 13154 13155static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b, 13156 vector signed char *__c) { 13157 return vec_st( 13158 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13159 __b, __c); 13160} 13161 13162static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b, 13163 unsigned char *__c) { 13164 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13165 __c); 13166} 13167 13168static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b, 13169 vector unsigned char *__c) { 13170 return vec_st( 13171 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13172 __b, __c); 13173} 13174 13175static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b, 13176 vector bool char *__c) { 13177 return vec_st( 13178 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13179 __b, __c); 13180} 13181 13182static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b, 13183 short *__c) { 13184 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13185 __c); 13186} 13187 13188static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b, 13189 vector short *__c) { 13190 return vec_st( 13191 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13192 __b, __c); 13193} 13194 13195static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a, 13196 int __b, unsigned short *__c) { 13197 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13198 __c); 13199} 13200 13201static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a, 13202 int __b, 13203 vector unsigned short *__c) { 13204 return vec_st( 13205 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13206 __b, __c); 13207} 13208 13209static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b, 13210 vector bool short *__c) { 13211 return vec_st( 13212 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13213 __b, __c); 13214} 13215 13216static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b, 13217 vector pixel *__c) { 13218 return vec_st( 13219 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13220 __b, __c); 13221} 13222 13223static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b, 13224 int *__c) { 13225 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13226 __c); 13227} 13228 13229static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b, 13230 vector int *__c) { 13231 return vec_st( 13232 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13233 __b, __c); 13234} 13235 13236static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b, 13237 unsigned int *__c) { 13238 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13239 __c); 13240} 13241 13242static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b, 13243 vector unsigned int *__c) { 13244 return vec_st( 13245 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13246 __b, __c); 13247} 13248 13249static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b, 13250 vector bool int *__c) { 13251 return vec_st( 13252 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13253 __b, __c); 13254} 13255 13256static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b, 13257 vector float *__c) { 13258 return vec_st( 13259 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13260 __b, __c); 13261} 13262 13263/* vec_stvlxl */ 13264 13265static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b, 13266 signed char *__c) { 13267 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13268 __c); 13269} 13270 13271static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b, 13272 vector signed char *__c) { 13273 return vec_stl( 13274 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13275 __b, __c); 13276} 13277 13278static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a, 13279 int __b, unsigned char *__c) { 13280 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13281 __c); 13282} 13283 13284static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a, 13285 int __b, 13286 vector unsigned char *__c) { 13287 return vec_stl( 13288 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13289 __b, __c); 13290} 13291 13292static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b, 13293 vector bool char *__c) { 13294 return vec_stl( 13295 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13296 __b, __c); 13297} 13298 13299static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b, 13300 short *__c) { 13301 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13302 __c); 13303} 13304 13305static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b, 13306 vector short *__c) { 13307 return vec_stl( 13308 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13309 __b, __c); 13310} 13311 13312static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a, 13313 int __b, unsigned short *__c) { 13314 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13315 __c); 13316} 13317 13318static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a, 13319 int __b, 13320 vector unsigned short *__c) { 13321 return vec_stl( 13322 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13323 __b, __c); 13324} 13325 13326static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b, 13327 vector bool short *__c) { 13328 return vec_stl( 13329 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13330 __b, __c); 13331} 13332 13333static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b, 13334 vector pixel *__c) { 13335 return vec_stl( 13336 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13337 __b, __c); 13338} 13339 13340static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b, 13341 int *__c) { 13342 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13343 __c); 13344} 13345 13346static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b, 13347 vector int *__c) { 13348 return vec_stl( 13349 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13350 __b, __c); 13351} 13352 13353static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b, 13354 unsigned int *__c) { 13355 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b, 13356 __c); 13357} 13358 13359static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b, 13360 vector unsigned int *__c) { 13361 return vec_stl( 13362 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13363 __b, __c); 13364} 13365 13366static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b, 13367 vector bool int *__c) { 13368 return vec_stl( 13369 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13370 __b, __c); 13371} 13372 13373static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b, 13374 vector float *__c) { 13375 return vec_stl( 13376 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)), 13377 __b, __c); 13378} 13379 13380/* vec_stvrx */ 13381 13382static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b, 13383 signed char *__c) { 13384 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13385 __c); 13386} 13387 13388static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b, 13389 vector signed char *__c) { 13390 return vec_st( 13391 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13392 __b, __c); 13393} 13394 13395static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b, 13396 unsigned char *__c) { 13397 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13398 __c); 13399} 13400 13401static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b, 13402 vector unsigned char *__c) { 13403 return vec_st( 13404 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13405 __b, __c); 13406} 13407 13408static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b, 13409 vector bool char *__c) { 13410 return vec_st( 13411 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13412 __b, __c); 13413} 13414 13415static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b, 13416 short *__c) { 13417 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13418 __c); 13419} 13420 13421static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b, 13422 vector short *__c) { 13423 return vec_st( 13424 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13425 __b, __c); 13426} 13427 13428static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a, 13429 int __b, unsigned short *__c) { 13430 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13431 __c); 13432} 13433 13434static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a, 13435 int __b, 13436 vector unsigned short *__c) { 13437 return vec_st( 13438 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13439 __b, __c); 13440} 13441 13442static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b, 13443 vector bool short *__c) { 13444 return vec_st( 13445 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13446 __b, __c); 13447} 13448 13449static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b, 13450 vector pixel *__c) { 13451 return vec_st( 13452 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13453 __b, __c); 13454} 13455 13456static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b, 13457 int *__c) { 13458 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13459 __c); 13460} 13461 13462static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b, 13463 vector int *__c) { 13464 return vec_st( 13465 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13466 __b, __c); 13467} 13468 13469static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b, 13470 unsigned int *__c) { 13471 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13472 __c); 13473} 13474 13475static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b, 13476 vector unsigned int *__c) { 13477 return vec_st( 13478 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13479 __b, __c); 13480} 13481 13482static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b, 13483 vector bool int *__c) { 13484 return vec_st( 13485 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13486 __b, __c); 13487} 13488 13489static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b, 13490 vector float *__c) { 13491 return vec_st( 13492 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13493 __b, __c); 13494} 13495 13496/* vec_stvrxl */ 13497 13498static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b, 13499 signed char *__c) { 13500 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13501 __c); 13502} 13503 13504static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b, 13505 vector signed char *__c) { 13506 return vec_stl( 13507 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13508 __b, __c); 13509} 13510 13511static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a, 13512 int __b, unsigned char *__c) { 13513 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13514 __c); 13515} 13516 13517static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a, 13518 int __b, 13519 vector unsigned char *__c) { 13520 return vec_stl( 13521 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13522 __b, __c); 13523} 13524 13525static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b, 13526 vector bool char *__c) { 13527 return vec_stl( 13528 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13529 __b, __c); 13530} 13531 13532static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b, 13533 short *__c) { 13534 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13535 __c); 13536} 13537 13538static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b, 13539 vector short *__c) { 13540 return vec_stl( 13541 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13542 __b, __c); 13543} 13544 13545static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a, 13546 int __b, unsigned short *__c) { 13547 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13548 __c); 13549} 13550 13551static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a, 13552 int __b, 13553 vector unsigned short *__c) { 13554 return vec_stl( 13555 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13556 __b, __c); 13557} 13558 13559static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b, 13560 vector bool short *__c) { 13561 return vec_stl( 13562 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13563 __b, __c); 13564} 13565 13566static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b, 13567 vector pixel *__c) { 13568 return vec_stl( 13569 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13570 __b, __c); 13571} 13572 13573static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b, 13574 int *__c) { 13575 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13576 __c); 13577} 13578 13579static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b, 13580 vector int *__c) { 13581 return vec_stl( 13582 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13583 __b, __c); 13584} 13585 13586static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b, 13587 unsigned int *__c) { 13588 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b, 13589 __c); 13590} 13591 13592static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b, 13593 vector unsigned int *__c) { 13594 return vec_stl( 13595 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13596 __b, __c); 13597} 13598 13599static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b, 13600 vector bool int *__c) { 13601 return vec_stl( 13602 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13603 __b, __c); 13604} 13605 13606static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b, 13607 vector float *__c) { 13608 return vec_stl( 13609 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)), 13610 __b, __c); 13611} 13612 13613/* vec_promote */ 13614 13615static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a, 13616 int __b) { 13617 vector signed char __res = (vector signed char)(0); 13618 __res[__b] = __a; 13619 return __res; 13620} 13621 13622static __inline__ vector unsigned char __ATTRS_o_ai 13623vec_promote(unsigned char __a, int __b) { 13624 vector unsigned char __res = (vector unsigned char)(0); 13625 __res[__b] = __a; 13626 return __res; 13627} 13628 13629static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) { 13630 vector short __res = (vector short)(0); 13631 __res[__b] = __a; 13632 return __res; 13633} 13634 13635static __inline__ vector unsigned short __ATTRS_o_ai 13636vec_promote(unsigned short __a, int __b) { 13637 vector unsigned short __res = (vector unsigned short)(0); 13638 __res[__b] = __a; 13639 return __res; 13640} 13641 13642static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) { 13643 vector int __res = (vector int)(0); 13644 __res[__b] = __a; 13645 return __res; 13646} 13647 13648static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a, 13649 int __b) { 13650 vector unsigned int __res = (vector unsigned int)(0); 13651 __res[__b] = __a; 13652 return __res; 13653} 13654 13655static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) { 13656 vector float __res = (vector float)(0); 13657 __res[__b] = __a; 13658 return __res; 13659} 13660 13661/* vec_splats */ 13662 13663static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) { 13664 return (vector signed char)(__a); 13665} 13666 13667static __inline__ vector unsigned char __ATTRS_o_ai 13668vec_splats(unsigned char __a) { 13669 return (vector unsigned char)(__a); 13670} 13671 13672static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) { 13673 return (vector short)(__a); 13674} 13675 13676static __inline__ vector unsigned short __ATTRS_o_ai 13677vec_splats(unsigned short __a) { 13678 return (vector unsigned short)(__a); 13679} 13680 13681static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) { 13682 return (vector int)(__a); 13683} 13684 13685static __inline__ vector unsigned int __ATTRS_o_ai 13686vec_splats(unsigned int __a) { 13687 return (vector unsigned int)(__a); 13688} 13689 13690#ifdef __VSX__ 13691static __inline__ vector signed long long __ATTRS_o_ai 13692vec_splats(signed long long __a) { 13693 return (vector signed long long)(__a); 13694} 13695 13696static __inline__ vector unsigned long long __ATTRS_o_ai 13697vec_splats(unsigned long long __a) { 13698 return (vector unsigned long long)(__a); 13699} 13700 13701#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 13702static __inline__ vector signed __int128 __ATTRS_o_ai 13703vec_splats(signed __int128 __a) { 13704 return (vector signed __int128)(__a); 13705} 13706 13707static __inline__ vector unsigned __int128 __ATTRS_o_ai 13708vec_splats(unsigned __int128 __a) { 13709 return (vector unsigned __int128)(__a); 13710} 13711 13712#endif 13713 13714static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) { 13715 return (vector double)(__a); 13716} 13717#endif 13718 13719static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) { 13720 return (vector float)(__a); 13721} 13722 13723/* ----------------------------- predicates --------------------------------- */ 13724 13725/* vec_all_eq */ 13726 13727static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a, 13728 vector signed char __b) { 13729 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13730 (vector char)__b); 13731} 13732 13733static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a, 13734 vector bool char __b) { 13735 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13736 (vector char)__b); 13737} 13738 13739static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a, 13740 vector unsigned char __b) { 13741 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13742 (vector char)__b); 13743} 13744 13745static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a, 13746 vector bool char __b) { 13747 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13748 (vector char)__b); 13749} 13750 13751static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a, 13752 vector signed char __b) { 13753 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13754 (vector char)__b); 13755} 13756 13757static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a, 13758 vector unsigned char __b) { 13759 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13760 (vector char)__b); 13761} 13762 13763static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a, 13764 vector bool char __b) { 13765 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, 13766 (vector char)__b); 13767} 13768 13769static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a, 13770 vector short __b) { 13771 return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b); 13772} 13773 13774static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a, 13775 vector bool short __b) { 13776 return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b); 13777} 13778 13779static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a, 13780 vector unsigned short __b) { 13781 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, 13782 (vector short)__b); 13783} 13784 13785static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a, 13786 vector bool short __b) { 13787 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, 13788 (vector short)__b); 13789} 13790 13791static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a, 13792 vector short __b) { 13793 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, 13794 (vector short)__b); 13795} 13796 13797static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a, 13798 vector unsigned short __b) { 13799 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, 13800 (vector short)__b); 13801} 13802 13803static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a, 13804 vector bool short __b) { 13805 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, 13806 (vector short)__b); 13807} 13808 13809static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a, 13810 vector pixel __b) { 13811 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, 13812 (vector short)__b); 13813} 13814 13815static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) { 13816 return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b); 13817} 13818 13819static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, 13820 vector bool int __b) { 13821 return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b); 13822} 13823 13824static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a, 13825 vector unsigned int __b) { 13826 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, 13827 (vector int)__b); 13828} 13829 13830static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a, 13831 vector bool int __b) { 13832 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, 13833 (vector int)__b); 13834} 13835 13836static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a, 13837 vector int __b) { 13838 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, 13839 (vector int)__b); 13840} 13841 13842static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a, 13843 vector unsigned int __b) { 13844 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, 13845 (vector int)__b); 13846} 13847 13848static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a, 13849 vector bool int __b) { 13850 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, 13851 (vector int)__b); 13852} 13853 13854#ifdef __POWER8_VECTOR__ 13855static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a, 13856 vector signed long long __b) { 13857 return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b); 13858} 13859 13860static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a, 13861 vector bool long long __b) { 13862 return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, (vector long long)__b); 13863} 13864 13865static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a, 13866 vector unsigned long long __b) { 13867 return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, 13868 (vector long long)__b); 13869} 13870 13871static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a, 13872 vector bool long long __b) { 13873 return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, 13874 (vector long long)__b); 13875} 13876 13877static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a, 13878 vector long long __b) { 13879 return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, 13880 (vector long long)__b); 13881} 13882 13883static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a, 13884 vector unsigned long long __b) { 13885 return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, 13886 (vector long long)__b); 13887} 13888 13889static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a, 13890 vector bool long long __b) { 13891 return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a, 13892 (vector long long)__b); 13893} 13894#endif 13895 13896static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a, 13897 vector float __b) { 13898#ifdef __VSX__ 13899 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b); 13900#else 13901 return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b); 13902#endif 13903} 13904 13905#ifdef __VSX__ 13906static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a, 13907 vector double __b) { 13908 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b); 13909} 13910#endif 13911 13912/* vec_all_ge */ 13913 13914static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a, 13915 vector signed char __b) { 13916 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a); 13917} 13918 13919static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a, 13920 vector bool char __b) { 13921 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a); 13922} 13923 13924static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a, 13925 vector unsigned char __b) { 13926 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a); 13927} 13928 13929static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a, 13930 vector bool char __b) { 13931 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a); 13932} 13933 13934static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a, 13935 vector signed char __b) { 13936 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, 13937 (vector unsigned char)__a); 13938} 13939 13940static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a, 13941 vector unsigned char __b) { 13942 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a); 13943} 13944 13945static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a, 13946 vector bool char __b) { 13947 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, 13948 (vector unsigned char)__a); 13949} 13950 13951static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a, 13952 vector short __b) { 13953 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a); 13954} 13955 13956static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a, 13957 vector bool short __b) { 13958 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a); 13959} 13960 13961static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a, 13962 vector unsigned short __b) { 13963 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a); 13964} 13965 13966static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a, 13967 vector bool short __b) { 13968 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, 13969 __a); 13970} 13971 13972static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a, 13973 vector short __b) { 13974 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, 13975 (vector unsigned short)__a); 13976} 13977 13978static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a, 13979 vector unsigned short __b) { 13980 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, 13981 (vector unsigned short)__a); 13982} 13983 13984static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a, 13985 vector bool short __b) { 13986 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, 13987 (vector unsigned short)__a); 13988} 13989 13990static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) { 13991 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a); 13992} 13993 13994static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, 13995 vector bool int __b) { 13996 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a); 13997} 13998 13999static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a, 14000 vector unsigned int __b) { 14001 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a); 14002} 14003 14004static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a, 14005 vector bool int __b) { 14006 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a); 14007} 14008 14009static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a, 14010 vector int __b) { 14011 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, 14012 (vector unsigned int)__a); 14013} 14014 14015static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a, 14016 vector unsigned int __b) { 14017 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a); 14018} 14019 14020static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a, 14021 vector bool int __b) { 14022 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, 14023 (vector unsigned int)__a); 14024} 14025 14026#ifdef __POWER8_VECTOR__ 14027static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a, 14028 vector signed long long __b) { 14029 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a); 14030} 14031static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a, 14032 vector bool long long __b) { 14033 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b, 14034 __a); 14035} 14036 14037static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a, 14038 vector unsigned long long __b) { 14039 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a); 14040} 14041 14042static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a, 14043 vector bool long long __b) { 14044 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b, 14045 __a); 14046} 14047 14048static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a, 14049 vector signed long long __b) { 14050 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b, 14051 (vector unsigned long long)__a); 14052} 14053 14054static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a, 14055 vector unsigned long long __b) { 14056 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, 14057 (vector unsigned long long)__a); 14058} 14059 14060static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a, 14061 vector bool long long __b) { 14062 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b, 14063 (vector unsigned long long)__a); 14064} 14065#endif 14066 14067static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a, 14068 vector float __b) { 14069#ifdef __VSX__ 14070 return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b); 14071#else 14072 return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b); 14073#endif 14074} 14075 14076#ifdef __VSX__ 14077static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a, 14078 vector double __b) { 14079 return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b); 14080} 14081#endif 14082 14083/* vec_all_gt */ 14084 14085static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a, 14086 vector signed char __b) { 14087 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b); 14088} 14089 14090static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a, 14091 vector bool char __b) { 14092 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b); 14093} 14094 14095static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a, 14096 vector unsigned char __b) { 14097 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b); 14098} 14099 14100static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a, 14101 vector bool char __b) { 14102 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b); 14103} 14104 14105static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a, 14106 vector signed char __b) { 14107 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, 14108 (vector unsigned char)__b); 14109} 14110 14111static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a, 14112 vector unsigned char __b) { 14113 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b); 14114} 14115 14116static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a, 14117 vector bool char __b) { 14118 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, 14119 (vector unsigned char)__b); 14120} 14121 14122static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a, 14123 vector short __b) { 14124 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b); 14125} 14126 14127static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a, 14128 vector bool short __b) { 14129 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b); 14130} 14131 14132static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a, 14133 vector unsigned short __b) { 14134 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b); 14135} 14136 14137static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a, 14138 vector bool short __b) { 14139 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, 14140 (vector unsigned short)__b); 14141} 14142 14143static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a, 14144 vector short __b) { 14145 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, 14146 (vector unsigned short)__b); 14147} 14148 14149static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a, 14150 vector unsigned short __b) { 14151 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, 14152 __b); 14153} 14154 14155static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a, 14156 vector bool short __b) { 14157 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, 14158 (vector unsigned short)__b); 14159} 14160 14161static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) { 14162 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b); 14163} 14164 14165static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, 14166 vector bool int __b) { 14167 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b); 14168} 14169 14170static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a, 14171 vector unsigned int __b) { 14172 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b); 14173} 14174 14175static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a, 14176 vector bool int __b) { 14177 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b); 14178} 14179 14180static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a, 14181 vector int __b) { 14182 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, 14183 (vector unsigned int)__b); 14184} 14185 14186static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a, 14187 vector unsigned int __b) { 14188 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b); 14189} 14190 14191static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a, 14192 vector bool int __b) { 14193 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, 14194 (vector unsigned int)__b); 14195} 14196 14197#ifdef __POWER8_VECTOR__ 14198static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a, 14199 vector signed long long __b) { 14200 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b); 14201} 14202static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a, 14203 vector bool long long __b) { 14204 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, 14205 (vector signed long long)__b); 14206} 14207 14208static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a, 14209 vector unsigned long long __b) { 14210 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b); 14211} 14212 14213static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a, 14214 vector bool long long __b) { 14215 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, 14216 (vector unsigned long long)__b); 14217} 14218 14219static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a, 14220 vector signed long long __b) { 14221 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a, 14222 (vector unsigned long long)__b); 14223} 14224 14225static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a, 14226 vector unsigned long long __b) { 14227 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a, 14228 __b); 14229} 14230 14231static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a, 14232 vector bool long long __b) { 14233 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a, 14234 (vector unsigned long long)__b); 14235} 14236#endif 14237 14238static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a, 14239 vector float __b) { 14240#ifdef __VSX__ 14241 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b); 14242#else 14243 return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b); 14244#endif 14245} 14246 14247#ifdef __VSX__ 14248static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a, 14249 vector double __b) { 14250 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b); 14251} 14252#endif 14253 14254/* vec_all_in */ 14255 14256static __inline__ int __attribute__((__always_inline__)) 14257vec_all_in(vector float __a, vector float __b) { 14258 return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b); 14259} 14260 14261/* vec_all_le */ 14262 14263static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a, 14264 vector signed char __b) { 14265 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b); 14266} 14267 14268static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a, 14269 vector bool char __b) { 14270 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b); 14271} 14272 14273static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a, 14274 vector unsigned char __b) { 14275 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b); 14276} 14277 14278static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a, 14279 vector bool char __b) { 14280 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b); 14281} 14282 14283static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a, 14284 vector signed char __b) { 14285 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, 14286 (vector unsigned char)__b); 14287} 14288 14289static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a, 14290 vector unsigned char __b) { 14291 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b); 14292} 14293 14294static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a, 14295 vector bool char __b) { 14296 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, 14297 (vector unsigned char)__b); 14298} 14299 14300static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a, 14301 vector short __b) { 14302 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b); 14303} 14304 14305static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a, 14306 vector bool short __b) { 14307 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b); 14308} 14309 14310static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a, 14311 vector unsigned short __b) { 14312 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b); 14313} 14314 14315static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a, 14316 vector bool short __b) { 14317 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, 14318 (vector unsigned short)__b); 14319} 14320 14321static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a, 14322 vector short __b) { 14323 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, 14324 (vector unsigned short)__b); 14325} 14326 14327static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a, 14328 vector unsigned short __b) { 14329 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, 14330 __b); 14331} 14332 14333static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a, 14334 vector bool short __b) { 14335 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, 14336 (vector unsigned short)__b); 14337} 14338 14339static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) { 14340 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b); 14341} 14342 14343static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, 14344 vector bool int __b) { 14345 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b); 14346} 14347 14348static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a, 14349 vector unsigned int __b) { 14350 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b); 14351} 14352 14353static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a, 14354 vector bool int __b) { 14355 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b); 14356} 14357 14358static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a, 14359 vector int __b) { 14360 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, 14361 (vector unsigned int)__b); 14362} 14363 14364static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a, 14365 vector unsigned int __b) { 14366 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b); 14367} 14368 14369static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a, 14370 vector bool int __b) { 14371 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, 14372 (vector unsigned int)__b); 14373} 14374 14375#ifdef __POWER8_VECTOR__ 14376static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a, 14377 vector signed long long __b) { 14378 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b); 14379} 14380 14381static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a, 14382 vector unsigned long long __b) { 14383 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b); 14384} 14385 14386static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a, 14387 vector bool long long __b) { 14388 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, 14389 (vector signed long long)__b); 14390} 14391 14392static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a, 14393 vector bool long long __b) { 14394 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, 14395 (vector unsigned long long)__b); 14396} 14397 14398static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a, 14399 vector signed long long __b) { 14400 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a, 14401 (vector unsigned long long)__b); 14402} 14403 14404static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a, 14405 vector unsigned long long __b) { 14406 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a, 14407 __b); 14408} 14409 14410static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a, 14411 vector bool long long __b) { 14412 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a, 14413 (vector unsigned long long)__b); 14414} 14415#endif 14416 14417static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a, 14418 vector float __b) { 14419#ifdef __VSX__ 14420 return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a); 14421#else 14422 return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a); 14423#endif 14424} 14425 14426#ifdef __VSX__ 14427static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a, 14428 vector double __b) { 14429 return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a); 14430} 14431#endif 14432 14433/* vec_all_lt */ 14434 14435static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a, 14436 vector signed char __b) { 14437 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a); 14438} 14439 14440static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a, 14441 vector bool char __b) { 14442 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a); 14443} 14444 14445static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a, 14446 vector unsigned char __b) { 14447 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a); 14448} 14449 14450static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a, 14451 vector bool char __b) { 14452 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a); 14453} 14454 14455static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a, 14456 vector signed char __b) { 14457 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, 14458 (vector unsigned char)__a); 14459} 14460 14461static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a, 14462 vector unsigned char __b) { 14463 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a); 14464} 14465 14466static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a, 14467 vector bool char __b) { 14468 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, 14469 (vector unsigned char)__a); 14470} 14471 14472static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a, 14473 vector short __b) { 14474 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a); 14475} 14476 14477static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a, 14478 vector bool short __b) { 14479 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a); 14480} 14481 14482static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a, 14483 vector unsigned short __b) { 14484 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a); 14485} 14486 14487static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a, 14488 vector bool short __b) { 14489 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, 14490 __a); 14491} 14492 14493static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a, 14494 vector short __b) { 14495 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, 14496 (vector unsigned short)__a); 14497} 14498 14499static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a, 14500 vector unsigned short __b) { 14501 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, 14502 (vector unsigned short)__a); 14503} 14504 14505static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a, 14506 vector bool short __b) { 14507 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, 14508 (vector unsigned short)__a); 14509} 14510 14511static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) { 14512 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a); 14513} 14514 14515static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, 14516 vector bool int __b) { 14517 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a); 14518} 14519 14520static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a, 14521 vector unsigned int __b) { 14522 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a); 14523} 14524 14525static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a, 14526 vector bool int __b) { 14527 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a); 14528} 14529 14530static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a, 14531 vector int __b) { 14532 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, 14533 (vector unsigned int)__a); 14534} 14535 14536static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a, 14537 vector unsigned int __b) { 14538 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a); 14539} 14540 14541static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a, 14542 vector bool int __b) { 14543 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, 14544 (vector unsigned int)__a); 14545} 14546 14547#ifdef __POWER8_VECTOR__ 14548static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a, 14549 vector signed long long __b) { 14550 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a); 14551} 14552 14553static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a, 14554 vector unsigned long long __b) { 14555 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a); 14556} 14557 14558static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a, 14559 vector bool long long __b) { 14560 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b, 14561 __a); 14562} 14563 14564static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a, 14565 vector bool long long __b) { 14566 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b, 14567 __a); 14568} 14569 14570static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a, 14571 vector signed long long __b) { 14572 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b, 14573 (vector unsigned long long)__a); 14574} 14575 14576static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a, 14577 vector unsigned long long __b) { 14578 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, 14579 (vector unsigned long long)__a); 14580} 14581 14582static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a, 14583 vector bool long long __b) { 14584 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b, 14585 (vector unsigned long long)__a); 14586} 14587#endif 14588 14589static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a, 14590 vector float __b) { 14591#ifdef __VSX__ 14592 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a); 14593#else 14594 return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a); 14595#endif 14596} 14597 14598#ifdef __VSX__ 14599static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a, 14600 vector double __b) { 14601 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a); 14602} 14603#endif 14604 14605/* vec_all_nan */ 14606 14607static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) { 14608#ifdef __VSX__ 14609 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a); 14610#else 14611 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a); 14612#endif 14613} 14614 14615#ifdef __VSX__ 14616static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) { 14617 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a); 14618} 14619#endif 14620 14621/* vec_all_ne */ 14622 14623static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a, 14624 vector signed char __b) { 14625 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14626 (vector char)__b); 14627} 14628 14629static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a, 14630 vector bool char __b) { 14631 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14632 (vector char)__b); 14633} 14634 14635static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a, 14636 vector unsigned char __b) { 14637 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14638 (vector char)__b); 14639} 14640 14641static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a, 14642 vector bool char __b) { 14643 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14644 (vector char)__b); 14645} 14646 14647static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a, 14648 vector signed char __b) { 14649 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14650 (vector char)__b); 14651} 14652 14653static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a, 14654 vector unsigned char __b) { 14655 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14656 (vector char)__b); 14657} 14658 14659static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a, 14660 vector bool char __b) { 14661 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, 14662 (vector char)__b); 14663} 14664 14665static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a, 14666 vector short __b) { 14667 return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b); 14668} 14669 14670static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a, 14671 vector bool short __b) { 14672 return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b); 14673} 14674 14675static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a, 14676 vector unsigned short __b) { 14677 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, 14678 (vector short)__b); 14679} 14680 14681static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a, 14682 vector bool short __b) { 14683 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, 14684 (vector short)__b); 14685} 14686 14687static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a, 14688 vector short __b) { 14689 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, 14690 (vector short)__b); 14691} 14692 14693static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a, 14694 vector unsigned short __b) { 14695 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, 14696 (vector short)__b); 14697} 14698 14699static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a, 14700 vector bool short __b) { 14701 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, 14702 (vector short)__b); 14703} 14704 14705static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a, 14706 vector pixel __b) { 14707 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, 14708 (vector short)__b); 14709} 14710 14711static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) { 14712 return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b); 14713} 14714 14715static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, 14716 vector bool int __b) { 14717 return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b); 14718} 14719 14720static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a, 14721 vector unsigned int __b) { 14722 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, 14723 (vector int)__b); 14724} 14725 14726static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a, 14727 vector bool int __b) { 14728 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, 14729 (vector int)__b); 14730} 14731 14732static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a, 14733 vector int __b) { 14734 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, 14735 (vector int)__b); 14736} 14737 14738static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a, 14739 vector unsigned int __b) { 14740 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, 14741 (vector int)__b); 14742} 14743 14744static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a, 14745 vector bool int __b) { 14746 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, 14747 (vector int)__b); 14748} 14749 14750#ifdef __POWER8_VECTOR__ 14751static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a, 14752 vector signed long long __b) { 14753 return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b); 14754} 14755 14756static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a, 14757 vector unsigned long long __b) { 14758 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a, 14759 (vector long long)__b); 14760} 14761 14762static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a, 14763 vector bool long long __b) { 14764 return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, 14765 (vector signed long long)__b); 14766} 14767 14768static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a, 14769 vector bool long long __b) { 14770 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, 14771 (vector signed long long)__b); 14772} 14773 14774static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a, 14775 vector signed long long __b) { 14776 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, 14777 (vector signed long long)__b); 14778} 14779 14780static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a, 14781 vector unsigned long long __b) { 14782 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, 14783 (vector signed long long)__b); 14784} 14785 14786static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a, 14787 vector bool long long __b) { 14788 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a, 14789 (vector signed long long)__b); 14790} 14791#endif 14792 14793static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a, 14794 vector float __b) { 14795#ifdef __VSX__ 14796 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b); 14797#else 14798 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b); 14799#endif 14800} 14801 14802#ifdef __VSX__ 14803static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a, 14804 vector double __b) { 14805 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b); 14806} 14807#endif 14808 14809/* vec_all_nge */ 14810 14811static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a, 14812 vector float __b) { 14813#ifdef __VSX__ 14814 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b); 14815#else 14816 return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b); 14817#endif 14818} 14819 14820#ifdef __VSX__ 14821static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a, 14822 vector double __b) { 14823 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b); 14824} 14825#endif 14826 14827/* vec_all_ngt */ 14828 14829static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a, 14830 vector float __b) { 14831#ifdef __VSX__ 14832 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b); 14833#else 14834 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b); 14835#endif 14836} 14837 14838#ifdef __VSX__ 14839static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a, 14840 vector double __b) { 14841 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b); 14842} 14843#endif 14844 14845/* vec_all_nle */ 14846 14847static __inline__ int __attribute__((__always_inline__)) 14848vec_all_nle(vector float __a, vector float __b) { 14849 return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a); 14850} 14851 14852/* vec_all_nlt */ 14853 14854static __inline__ int __attribute__((__always_inline__)) 14855vec_all_nlt(vector float __a, vector float __b) { 14856 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a); 14857} 14858 14859/* vec_all_numeric */ 14860 14861static __inline__ int __attribute__((__always_inline__)) 14862vec_all_numeric(vector float __a) { 14863 return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a); 14864} 14865 14866/* vec_any_eq */ 14867 14868static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a, 14869 vector signed char __b) { 14870 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14871 (vector char)__b); 14872} 14873 14874static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a, 14875 vector bool char __b) { 14876 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14877 (vector char)__b); 14878} 14879 14880static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a, 14881 vector unsigned char __b) { 14882 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14883 (vector char)__b); 14884} 14885 14886static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a, 14887 vector bool char __b) { 14888 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14889 (vector char)__b); 14890} 14891 14892static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a, 14893 vector signed char __b) { 14894 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14895 (vector char)__b); 14896} 14897 14898static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a, 14899 vector unsigned char __b) { 14900 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14901 (vector char)__b); 14902} 14903 14904static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a, 14905 vector bool char __b) { 14906 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, 14907 (vector char)__b); 14908} 14909 14910static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a, 14911 vector short __b) { 14912 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b); 14913} 14914 14915static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a, 14916 vector bool short __b) { 14917 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b); 14918} 14919 14920static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a, 14921 vector unsigned short __b) { 14922 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, 14923 (vector short)__b); 14924} 14925 14926static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a, 14927 vector bool short __b) { 14928 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, 14929 (vector short)__b); 14930} 14931 14932static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a, 14933 vector short __b) { 14934 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, 14935 (vector short)__b); 14936} 14937 14938static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a, 14939 vector unsigned short __b) { 14940 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, 14941 (vector short)__b); 14942} 14943 14944static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a, 14945 vector bool short __b) { 14946 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, 14947 (vector short)__b); 14948} 14949 14950static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a, 14951 vector pixel __b) { 14952 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a, 14953 (vector short)__b); 14954} 14955 14956static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) { 14957 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b); 14958} 14959 14960static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, 14961 vector bool int __b) { 14962 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b); 14963} 14964 14965static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a, 14966 vector unsigned int __b) { 14967 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, 14968 (vector int)__b); 14969} 14970 14971static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a, 14972 vector bool int __b) { 14973 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, 14974 (vector int)__b); 14975} 14976 14977static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a, 14978 vector int __b) { 14979 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, 14980 (vector int)__b); 14981} 14982 14983static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a, 14984 vector unsigned int __b) { 14985 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, 14986 (vector int)__b); 14987} 14988 14989static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a, 14990 vector bool int __b) { 14991 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, 14992 (vector int)__b); 14993} 14994 14995#ifdef __POWER8_VECTOR__ 14996static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a, 14997 vector signed long long __b) { 14998 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b); 14999} 15000 15001static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a, 15002 vector unsigned long long __b) { 15003 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a, 15004 (vector long long)__b); 15005} 15006 15007static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a, 15008 vector bool long long __b) { 15009 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, 15010 (vector signed long long)__b); 15011} 15012 15013static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a, 15014 vector bool long long __b) { 15015 return __builtin_altivec_vcmpequd_p( 15016 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); 15017} 15018 15019static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a, 15020 vector signed long long __b) { 15021 return __builtin_altivec_vcmpequd_p( 15022 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); 15023} 15024 15025static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a, 15026 vector unsigned long long __b) { 15027 return __builtin_altivec_vcmpequd_p( 15028 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); 15029} 15030 15031static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a, 15032 vector bool long long __b) { 15033 return __builtin_altivec_vcmpequd_p( 15034 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b); 15035} 15036#endif 15037 15038static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a, 15039 vector float __b) { 15040#ifdef __VSX__ 15041 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b); 15042#else 15043 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b); 15044#endif 15045} 15046 15047#ifdef __VSX__ 15048static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a, 15049 vector double __b) { 15050 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b); 15051} 15052#endif 15053 15054/* vec_any_ge */ 15055 15056static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a, 15057 vector signed char __b) { 15058 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a); 15059} 15060 15061static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a, 15062 vector bool char __b) { 15063 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b, 15064 __a); 15065} 15066 15067static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a, 15068 vector unsigned char __b) { 15069 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a); 15070} 15071 15072static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a, 15073 vector bool char __b) { 15074 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, 15075 __a); 15076} 15077 15078static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a, 15079 vector signed char __b) { 15080 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, 15081 (vector unsigned char)__a); 15082} 15083 15084static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a, 15085 vector unsigned char __b) { 15086 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, 15087 (vector unsigned char)__a); 15088} 15089 15090static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a, 15091 vector bool char __b) { 15092 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, 15093 (vector unsigned char)__a); 15094} 15095 15096static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a, 15097 vector short __b) { 15098 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a); 15099} 15100 15101static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a, 15102 vector bool short __b) { 15103 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a); 15104} 15105 15106static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a, 15107 vector unsigned short __b) { 15108 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a); 15109} 15110 15111static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a, 15112 vector bool short __b) { 15113 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, 15114 __a); 15115} 15116 15117static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a, 15118 vector short __b) { 15119 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, 15120 (vector unsigned short)__a); 15121} 15122 15123static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a, 15124 vector unsigned short __b) { 15125 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, 15126 (vector unsigned short)__a); 15127} 15128 15129static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a, 15130 vector bool short __b) { 15131 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, 15132 (vector unsigned short)__a); 15133} 15134 15135static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) { 15136 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a); 15137} 15138 15139static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, 15140 vector bool int __b) { 15141 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a); 15142} 15143 15144static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a, 15145 vector unsigned int __b) { 15146 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a); 15147} 15148 15149static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a, 15150 vector bool int __b) { 15151 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, 15152 __a); 15153} 15154 15155static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a, 15156 vector int __b) { 15157 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, 15158 (vector unsigned int)__a); 15159} 15160 15161static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a, 15162 vector unsigned int __b) { 15163 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, 15164 (vector unsigned int)__a); 15165} 15166 15167static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a, 15168 vector bool int __b) { 15169 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, 15170 (vector unsigned int)__a); 15171} 15172 15173#ifdef __POWER8_VECTOR__ 15174static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a, 15175 vector signed long long __b) { 15176 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a); 15177} 15178 15179static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a, 15180 vector unsigned long long __b) { 15181 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a); 15182} 15183 15184static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a, 15185 vector bool long long __b) { 15186 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, 15187 (vector signed long long)__b, __a); 15188} 15189 15190static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a, 15191 vector bool long long __b) { 15192 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, 15193 (vector unsigned long long)__b, __a); 15194} 15195 15196static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a, 15197 vector signed long long __b) { 15198 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, 15199 (vector unsigned long long)__b, 15200 (vector unsigned long long)__a); 15201} 15202 15203static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a, 15204 vector unsigned long long __b) { 15205 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, 15206 (vector unsigned long long)__a); 15207} 15208 15209static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a, 15210 vector bool long long __b) { 15211 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, 15212 (vector unsigned long long)__b, 15213 (vector unsigned long long)__a); 15214} 15215#endif 15216 15217static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a, 15218 vector float __b) { 15219#ifdef __VSX__ 15220 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b); 15221#else 15222 return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b); 15223#endif 15224} 15225 15226#ifdef __VSX__ 15227static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a, 15228 vector double __b) { 15229 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b); 15230} 15231#endif 15232 15233/* vec_any_gt */ 15234 15235static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a, 15236 vector signed char __b) { 15237 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b); 15238} 15239 15240static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a, 15241 vector bool char __b) { 15242 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, 15243 (vector signed char)__b); 15244} 15245 15246static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a, 15247 vector unsigned char __b) { 15248 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b); 15249} 15250 15251static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a, 15252 vector bool char __b) { 15253 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, 15254 (vector unsigned char)__b); 15255} 15256 15257static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a, 15258 vector signed char __b) { 15259 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, 15260 (vector unsigned char)__b); 15261} 15262 15263static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a, 15264 vector unsigned char __b) { 15265 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, 15266 __b); 15267} 15268 15269static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a, 15270 vector bool char __b) { 15271 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, 15272 (vector unsigned char)__b); 15273} 15274 15275static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a, 15276 vector short __b) { 15277 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b); 15278} 15279 15280static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a, 15281 vector bool short __b) { 15282 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b); 15283} 15284 15285static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a, 15286 vector unsigned short __b) { 15287 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b); 15288} 15289 15290static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a, 15291 vector bool short __b) { 15292 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, 15293 (vector unsigned short)__b); 15294} 15295 15296static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a, 15297 vector short __b) { 15298 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, 15299 (vector unsigned short)__b); 15300} 15301 15302static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a, 15303 vector unsigned short __b) { 15304 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, 15305 __b); 15306} 15307 15308static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a, 15309 vector bool short __b) { 15310 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, 15311 (vector unsigned short)__b); 15312} 15313 15314static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) { 15315 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b); 15316} 15317 15318static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, 15319 vector bool int __b) { 15320 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b); 15321} 15322 15323static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a, 15324 vector unsigned int __b) { 15325 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b); 15326} 15327 15328static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a, 15329 vector bool int __b) { 15330 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, 15331 (vector unsigned int)__b); 15332} 15333 15334static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a, 15335 vector int __b) { 15336 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, 15337 (vector unsigned int)__b); 15338} 15339 15340static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a, 15341 vector unsigned int __b) { 15342 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, 15343 __b); 15344} 15345 15346static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a, 15347 vector bool int __b) { 15348 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, 15349 (vector unsigned int)__b); 15350} 15351 15352#ifdef __POWER8_VECTOR__ 15353static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a, 15354 vector signed long long __b) { 15355 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b); 15356} 15357 15358static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a, 15359 vector unsigned long long __b) { 15360 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b); 15361} 15362 15363static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a, 15364 vector bool long long __b) { 15365 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, 15366 (vector signed long long)__b); 15367} 15368 15369static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a, 15370 vector bool long long __b) { 15371 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, 15372 (vector unsigned long long)__b); 15373} 15374 15375static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a, 15376 vector signed long long __b) { 15377 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, 15378 (vector unsigned long long)__a, 15379 (vector unsigned long long)__b); 15380} 15381 15382static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a, 15383 vector unsigned long long __b) { 15384 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, 15385 (vector unsigned long long)__a, __b); 15386} 15387 15388static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a, 15389 vector bool long long __b) { 15390 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, 15391 (vector unsigned long long)__a, 15392 (vector unsigned long long)__b); 15393} 15394#endif 15395 15396static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a, 15397 vector float __b) { 15398#ifdef __VSX__ 15399 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b); 15400#else 15401 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b); 15402#endif 15403} 15404 15405#ifdef __VSX__ 15406static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a, 15407 vector double __b) { 15408 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b); 15409} 15410#endif 15411 15412/* vec_any_le */ 15413 15414static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a, 15415 vector signed char __b) { 15416 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b); 15417} 15418 15419static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a, 15420 vector bool char __b) { 15421 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, 15422 (vector signed char)__b); 15423} 15424 15425static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a, 15426 vector unsigned char __b) { 15427 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b); 15428} 15429 15430static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a, 15431 vector bool char __b) { 15432 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, 15433 (vector unsigned char)__b); 15434} 15435 15436static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a, 15437 vector signed char __b) { 15438 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, 15439 (vector unsigned char)__b); 15440} 15441 15442static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a, 15443 vector unsigned char __b) { 15444 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, 15445 __b); 15446} 15447 15448static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a, 15449 vector bool char __b) { 15450 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, 15451 (vector unsigned char)__b); 15452} 15453 15454static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a, 15455 vector short __b) { 15456 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b); 15457} 15458 15459static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a, 15460 vector bool short __b) { 15461 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b); 15462} 15463 15464static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a, 15465 vector unsigned short __b) { 15466 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b); 15467} 15468 15469static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a, 15470 vector bool short __b) { 15471 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, 15472 (vector unsigned short)__b); 15473} 15474 15475static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a, 15476 vector short __b) { 15477 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, 15478 (vector unsigned short)__b); 15479} 15480 15481static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a, 15482 vector unsigned short __b) { 15483 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, 15484 __b); 15485} 15486 15487static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a, 15488 vector bool short __b) { 15489 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, 15490 (vector unsigned short)__b); 15491} 15492 15493static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) { 15494 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b); 15495} 15496 15497static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, 15498 vector bool int __b) { 15499 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b); 15500} 15501 15502static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a, 15503 vector unsigned int __b) { 15504 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b); 15505} 15506 15507static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a, 15508 vector bool int __b) { 15509 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, 15510 (vector unsigned int)__b); 15511} 15512 15513static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a, 15514 vector int __b) { 15515 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, 15516 (vector unsigned int)__b); 15517} 15518 15519static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a, 15520 vector unsigned int __b) { 15521 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, 15522 __b); 15523} 15524 15525static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a, 15526 vector bool int __b) { 15527 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, 15528 (vector unsigned int)__b); 15529} 15530 15531#ifdef __POWER8_VECTOR__ 15532static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a, 15533 vector signed long long __b) { 15534 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b); 15535} 15536 15537static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a, 15538 vector unsigned long long __b) { 15539 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b); 15540} 15541 15542static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a, 15543 vector bool long long __b) { 15544 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, 15545 (vector signed long long)__b); 15546} 15547 15548static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a, 15549 vector bool long long __b) { 15550 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, 15551 (vector unsigned long long)__b); 15552} 15553 15554static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a, 15555 vector signed long long __b) { 15556 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, 15557 (vector unsigned long long)__a, 15558 (vector unsigned long long)__b); 15559} 15560 15561static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a, 15562 vector unsigned long long __b) { 15563 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, 15564 (vector unsigned long long)__a, __b); 15565} 15566 15567static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a, 15568 vector bool long long __b) { 15569 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, 15570 (vector unsigned long long)__a, 15571 (vector unsigned long long)__b); 15572} 15573#endif 15574 15575static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a, 15576 vector float __b) { 15577#ifdef __VSX__ 15578 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a); 15579#else 15580 return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a); 15581#endif 15582} 15583 15584#ifdef __VSX__ 15585static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a, 15586 vector double __b) { 15587 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a); 15588} 15589#endif 15590 15591/* vec_any_lt */ 15592 15593static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a, 15594 vector signed char __b) { 15595 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a); 15596} 15597 15598static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a, 15599 vector bool char __b) { 15600 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b, 15601 __a); 15602} 15603 15604static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a, 15605 vector unsigned char __b) { 15606 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a); 15607} 15608 15609static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a, 15610 vector bool char __b) { 15611 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, 15612 __a); 15613} 15614 15615static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a, 15616 vector signed char __b) { 15617 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, 15618 (vector unsigned char)__a); 15619} 15620 15621static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a, 15622 vector unsigned char __b) { 15623 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, 15624 (vector unsigned char)__a); 15625} 15626 15627static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a, 15628 vector bool char __b) { 15629 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, 15630 (vector unsigned char)__a); 15631} 15632 15633static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a, 15634 vector short __b) { 15635 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a); 15636} 15637 15638static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a, 15639 vector bool short __b) { 15640 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a); 15641} 15642 15643static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a, 15644 vector unsigned short __b) { 15645 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a); 15646} 15647 15648static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a, 15649 vector bool short __b) { 15650 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, 15651 __a); 15652} 15653 15654static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a, 15655 vector short __b) { 15656 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, 15657 (vector unsigned short)__a); 15658} 15659 15660static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a, 15661 vector unsigned short __b) { 15662 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, 15663 (vector unsigned short)__a); 15664} 15665 15666static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a, 15667 vector bool short __b) { 15668 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, 15669 (vector unsigned short)__a); 15670} 15671 15672static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) { 15673 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a); 15674} 15675 15676static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, 15677 vector bool int __b) { 15678 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a); 15679} 15680 15681static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a, 15682 vector unsigned int __b) { 15683 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a); 15684} 15685 15686static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a, 15687 vector bool int __b) { 15688 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, 15689 __a); 15690} 15691 15692static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a, 15693 vector int __b) { 15694 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, 15695 (vector unsigned int)__a); 15696} 15697 15698static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a, 15699 vector unsigned int __b) { 15700 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, 15701 (vector unsigned int)__a); 15702} 15703 15704static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a, 15705 vector bool int __b) { 15706 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, 15707 (vector unsigned int)__a); 15708} 15709 15710#ifdef __POWER8_VECTOR__ 15711static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a, 15712 vector signed long long __b) { 15713 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a); 15714} 15715 15716static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a, 15717 vector unsigned long long __b) { 15718 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a); 15719} 15720 15721static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a, 15722 vector bool long long __b) { 15723 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, 15724 (vector signed long long)__b, __a); 15725} 15726 15727static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a, 15728 vector bool long long __b) { 15729 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, 15730 (vector unsigned long long)__b, __a); 15731} 15732 15733static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a, 15734 vector signed long long __b) { 15735 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, 15736 (vector unsigned long long)__b, 15737 (vector unsigned long long)__a); 15738} 15739 15740static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a, 15741 vector unsigned long long __b) { 15742 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, 15743 (vector unsigned long long)__a); 15744} 15745 15746static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a, 15747 vector bool long long __b) { 15748 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, 15749 (vector unsigned long long)__b, 15750 (vector unsigned long long)__a); 15751} 15752#endif 15753 15754static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a, 15755 vector float __b) { 15756#ifdef __VSX__ 15757 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a); 15758#else 15759 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a); 15760#endif 15761} 15762 15763#ifdef __VSX__ 15764static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a, 15765 vector double __b) { 15766 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a); 15767} 15768#endif 15769 15770/* vec_any_nan */ 15771 15772static __inline__ int __attribute__((__always_inline__)) 15773vec_any_nan(vector float __a) { 15774 return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a); 15775} 15776 15777/* vec_any_ne */ 15778 15779static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a, 15780 vector signed char __b) { 15781 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15782 (vector char)__b); 15783} 15784 15785static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a, 15786 vector bool char __b) { 15787 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15788 (vector char)__b); 15789} 15790 15791static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a, 15792 vector unsigned char __b) { 15793 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15794 (vector char)__b); 15795} 15796 15797static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a, 15798 vector bool char __b) { 15799 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15800 (vector char)__b); 15801} 15802 15803static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a, 15804 vector signed char __b) { 15805 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15806 (vector char)__b); 15807} 15808 15809static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a, 15810 vector unsigned char __b) { 15811 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15812 (vector char)__b); 15813} 15814 15815static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a, 15816 vector bool char __b) { 15817 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, 15818 (vector char)__b); 15819} 15820 15821static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a, 15822 vector short __b) { 15823 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b); 15824} 15825 15826static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a, 15827 vector bool short __b) { 15828 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b); 15829} 15830 15831static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a, 15832 vector unsigned short __b) { 15833 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, 15834 (vector short)__b); 15835} 15836 15837static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a, 15838 vector bool short __b) { 15839 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, 15840 (vector short)__b); 15841} 15842 15843static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a, 15844 vector short __b) { 15845 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, 15846 (vector short)__b); 15847} 15848 15849static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a, 15850 vector unsigned short __b) { 15851 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, 15852 (vector short)__b); 15853} 15854 15855static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a, 15856 vector bool short __b) { 15857 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, 15858 (vector short)__b); 15859} 15860 15861static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a, 15862 vector pixel __b) { 15863 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a, 15864 (vector short)__b); 15865} 15866 15867static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) { 15868 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b); 15869} 15870 15871static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, 15872 vector bool int __b) { 15873 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b); 15874} 15875 15876static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a, 15877 vector unsigned int __b) { 15878 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, 15879 (vector int)__b); 15880} 15881 15882static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a, 15883 vector bool int __b) { 15884 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, 15885 (vector int)__b); 15886} 15887 15888static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a, 15889 vector int __b) { 15890 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, 15891 (vector int)__b); 15892} 15893 15894static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a, 15895 vector unsigned int __b) { 15896 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, 15897 (vector int)__b); 15898} 15899 15900static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a, 15901 vector bool int __b) { 15902 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, 15903 (vector int)__b); 15904} 15905 15906#ifdef __POWER8_VECTOR__ 15907static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a, 15908 vector signed long long __b) { 15909 return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b); 15910} 15911 15912static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a, 15913 vector unsigned long long __b) { 15914 return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector long long)__a, 15915 (vector long long)__b); 15916} 15917 15918static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a, 15919 vector bool long long __b) { 15920 return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, 15921 (vector signed long long)__b); 15922} 15923 15924static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a, 15925 vector bool long long __b) { 15926 return __builtin_altivec_vcmpequd_p( 15927 __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); 15928} 15929 15930static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a, 15931 vector signed long long __b) { 15932 return __builtin_altivec_vcmpequd_p( 15933 __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); 15934} 15935 15936static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a, 15937 vector unsigned long long __b) { 15938 return __builtin_altivec_vcmpequd_p( 15939 __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); 15940} 15941 15942static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a, 15943 vector bool long long __b) { 15944 return __builtin_altivec_vcmpequd_p( 15945 __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b); 15946} 15947#endif 15948 15949static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a, 15950 vector float __b) { 15951#ifdef __VSX__ 15952 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b); 15953#else 15954 return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b); 15955#endif 15956} 15957 15958#ifdef __VSX__ 15959static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a, 15960 vector double __b) { 15961 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b); 15962} 15963#endif 15964 15965/* vec_any_nge */ 15966 15967static __inline__ int __attribute__((__always_inline__)) 15968vec_any_nge(vector float __a, vector float __b) { 15969 return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b); 15970} 15971 15972/* vec_any_ngt */ 15973 15974static __inline__ int __attribute__((__always_inline__)) 15975vec_any_ngt(vector float __a, vector float __b) { 15976 return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b); 15977} 15978 15979/* vec_any_nle */ 15980 15981static __inline__ int __attribute__((__always_inline__)) 15982vec_any_nle(vector float __a, vector float __b) { 15983 return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a); 15984} 15985 15986/* vec_any_nlt */ 15987 15988static __inline__ int __attribute__((__always_inline__)) 15989vec_any_nlt(vector float __a, vector float __b) { 15990 return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a); 15991} 15992 15993/* vec_any_numeric */ 15994 15995static __inline__ int __attribute__((__always_inline__)) 15996vec_any_numeric(vector float __a) { 15997 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a); 15998} 15999 16000/* vec_any_out */ 16001 16002static __inline__ int __attribute__((__always_inline__)) 16003vec_any_out(vector float __a, vector float __b) { 16004 return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b); 16005} 16006 16007/* Power 8 Crypto functions 16008Note: We diverge from the current GCC implementation with regard 16009to cryptography and related functions as follows: 16010- Only the SHA and AES instructions and builtins are disabled by -mno-crypto 16011- The remaining ones are only available on Power8 and up so 16012 require -mpower8-vector 16013The justification for this is that export requirements require that 16014Category:Vector.Crypto is optional (i.e. compliant hardware may not provide 16015support). As a result, we need to be able to turn off support for those. 16016The remaining ones (currently controlled by -mcrypto for GCC) still 16017need to be provided on compliant hardware even if Vector.Crypto is not 16018provided. 16019*/ 16020#ifdef __CRYPTO__ 16021#define vec_sbox_be __builtin_altivec_crypto_vsbox 16022#define vec_cipher_be __builtin_altivec_crypto_vcipher 16023#define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast 16024#define vec_ncipher_be __builtin_altivec_crypto_vncipher 16025#define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast 16026 16027static __inline__ vector unsigned long long __attribute__((__always_inline__)) 16028__builtin_crypto_vsbox(vector unsigned long long __a) { 16029 return __builtin_altivec_crypto_vsbox(__a); 16030} 16031 16032static __inline__ vector unsigned long long __attribute__((__always_inline__)) 16033__builtin_crypto_vcipher(vector unsigned long long __a, 16034 vector unsigned long long __b) { 16035 return __builtin_altivec_crypto_vcipher(__a, __b); 16036} 16037 16038static __inline__ vector unsigned long long __attribute__((__always_inline__)) 16039__builtin_crypto_vcipherlast(vector unsigned long long __a, 16040 vector unsigned long long __b) { 16041 return __builtin_altivec_crypto_vcipherlast(__a, __b); 16042} 16043 16044static __inline__ vector unsigned long long __attribute__((__always_inline__)) 16045__builtin_crypto_vncipher(vector unsigned long long __a, 16046 vector unsigned long long __b) { 16047 return __builtin_altivec_crypto_vncipher(__a, __b); 16048} 16049 16050static __inline__ vector unsigned long long __attribute__((__always_inline__)) 16051__builtin_crypto_vncipherlast(vector unsigned long long __a, 16052 vector unsigned long long __b) { 16053 return __builtin_altivec_crypto_vncipherlast(__a, __b); 16054} 16055 16056#define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad 16057#define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw 16058 16059#define vec_shasigma_be(X, Y, Z) \ 16060 _Generic((X), vector unsigned int \ 16061 : __builtin_crypto_vshasigmaw, vector unsigned long long \ 16062 : __builtin_crypto_vshasigmad)((X), (Y), (Z)) 16063#endif 16064 16065#ifdef __POWER8_VECTOR__ 16066static __inline__ vector bool char __ATTRS_o_ai 16067vec_permxor(vector bool char __a, vector bool char __b, 16068 vector bool char __c) { 16069 return __builtin_altivec_crypto_vpermxor(__a, __b, __c); 16070} 16071 16072static __inline__ vector signed char __ATTRS_o_ai 16073vec_permxor(vector signed char __a, vector signed char __b, 16074 vector signed char __c) { 16075 return __builtin_altivec_crypto_vpermxor(__a, __b, __c); 16076} 16077 16078static __inline__ vector unsigned char __ATTRS_o_ai 16079vec_permxor(vector unsigned char __a, vector unsigned char __b, 16080 vector unsigned char __c) { 16081 return __builtin_altivec_crypto_vpermxor(__a, __b, __c); 16082} 16083 16084static __inline__ vector unsigned char __ATTRS_o_ai 16085__builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b, 16086 vector unsigned char __c) { 16087 return __builtin_altivec_crypto_vpermxor(__a, __b, __c); 16088} 16089 16090static __inline__ vector unsigned short __ATTRS_o_ai 16091__builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b, 16092 vector unsigned short __c) { 16093 return (vector unsigned short)__builtin_altivec_crypto_vpermxor( 16094 (vector unsigned char)__a, (vector unsigned char)__b, 16095 (vector unsigned char)__c); 16096} 16097 16098static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor( 16099 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) { 16100 return (vector unsigned int)__builtin_altivec_crypto_vpermxor( 16101 (vector unsigned char)__a, (vector unsigned char)__b, 16102 (vector unsigned char)__c); 16103} 16104 16105static __inline__ vector unsigned long long __ATTRS_o_ai 16106__builtin_crypto_vpermxor(vector unsigned long long __a, 16107 vector unsigned long long __b, 16108 vector unsigned long long __c) { 16109 return (vector unsigned long long)__builtin_altivec_crypto_vpermxor( 16110 (vector unsigned char)__a, (vector unsigned char)__b, 16111 (vector unsigned char)__c); 16112} 16113 16114static __inline__ vector unsigned char __ATTRS_o_ai 16115__builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) { 16116 return __builtin_altivec_crypto_vpmsumb(__a, __b); 16117} 16118 16119static __inline__ vector unsigned short __ATTRS_o_ai 16120__builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) { 16121 return __builtin_altivec_crypto_vpmsumh(__a, __b); 16122} 16123 16124static __inline__ vector unsigned int __ATTRS_o_ai 16125__builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) { 16126 return __builtin_altivec_crypto_vpmsumw(__a, __b); 16127} 16128 16129static __inline__ vector unsigned long long __ATTRS_o_ai 16130__builtin_crypto_vpmsumb(vector unsigned long long __a, 16131 vector unsigned long long __b) { 16132 return __builtin_altivec_crypto_vpmsumd(__a, __b); 16133} 16134 16135static __inline__ vector signed char __ATTRS_o_ai 16136vec_vgbbd(vector signed char __a) { 16137 return __builtin_altivec_vgbbd((vector unsigned char)__a); 16138} 16139 16140#define vec_pmsum_be __builtin_crypto_vpmsumb 16141#define vec_gb __builtin_altivec_vgbbd 16142 16143static __inline__ vector unsigned char __ATTRS_o_ai 16144vec_vgbbd(vector unsigned char __a) { 16145 return __builtin_altivec_vgbbd(__a); 16146} 16147 16148static __inline__ vector long long __ATTRS_o_ai 16149vec_vbpermq(vector signed char __a, vector signed char __b) { 16150 return __builtin_altivec_vbpermq((vector unsigned char)__a, 16151 (vector unsigned char)__b); 16152} 16153 16154static __inline__ vector long long __ATTRS_o_ai 16155vec_vbpermq(vector unsigned char __a, vector unsigned char __b) { 16156 return __builtin_altivec_vbpermq(__a, __b); 16157} 16158 16159#ifdef __powerpc64__ 16160static __inline__ vector unsigned long long __attribute__((__always_inline__)) 16161vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) { 16162 return __builtin_altivec_vbpermq((vector unsigned char)__a, 16163 (vector unsigned char)__b); 16164} 16165#endif 16166#endif 16167 16168 16169/* vec_reve */ 16170 16171static inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) { 16172 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 16173 5, 4, 3, 2, 1, 0); 16174} 16175 16176static inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) { 16177 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 16178 5, 4, 3, 2, 1, 0); 16179} 16180 16181static inline __ATTRS_o_ai vector unsigned char 16182vec_reve(vector unsigned char __a) { 16183 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 16184 5, 4, 3, 2, 1, 0); 16185} 16186 16187static inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) { 16188 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); 16189} 16190 16191static inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) { 16192 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); 16193} 16194 16195static inline __ATTRS_o_ai vector unsigned int 16196vec_reve(vector unsigned int __a) { 16197 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); 16198} 16199 16200static inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) { 16201 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0); 16202} 16203 16204static inline __ATTRS_o_ai vector signed short 16205vec_reve(vector signed short __a) { 16206 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0); 16207} 16208 16209static inline __ATTRS_o_ai vector unsigned short 16210vec_reve(vector unsigned short __a) { 16211 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0); 16212} 16213 16214static inline __ATTRS_o_ai vector float vec_reve(vector float __a) { 16215 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); 16216} 16217 16218#ifdef __VSX__ 16219static inline __ATTRS_o_ai vector bool long long 16220vec_reve(vector bool long long __a) { 16221 return __builtin_shufflevector(__a, __a, 1, 0); 16222} 16223 16224static inline __ATTRS_o_ai vector signed long long 16225vec_reve(vector signed long long __a) { 16226 return __builtin_shufflevector(__a, __a, 1, 0); 16227} 16228 16229static inline __ATTRS_o_ai vector unsigned long long 16230vec_reve(vector unsigned long long __a) { 16231 return __builtin_shufflevector(__a, __a, 1, 0); 16232} 16233 16234static inline __ATTRS_o_ai vector double vec_reve(vector double __a) { 16235 return __builtin_shufflevector(__a, __a, 1, 0); 16236} 16237#endif 16238 16239/* vec_revb */ 16240static __inline__ vector bool char __ATTRS_o_ai 16241vec_revb(vector bool char __a) { 16242 return __a; 16243} 16244 16245static __inline__ vector signed char __ATTRS_o_ai 16246vec_revb(vector signed char __a) { 16247 return __a; 16248} 16249 16250static __inline__ vector unsigned char __ATTRS_o_ai 16251vec_revb(vector unsigned char __a) { 16252 return __a; 16253} 16254 16255static __inline__ vector bool short __ATTRS_o_ai 16256vec_revb(vector bool short __a) { 16257 vector unsigned char __indices = 16258 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 }; 16259 return vec_perm(__a, __a, __indices); 16260} 16261 16262static __inline__ vector signed short __ATTRS_o_ai 16263vec_revb(vector signed short __a) { 16264 vector unsigned char __indices = 16265 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 }; 16266 return vec_perm(__a, __a, __indices); 16267} 16268 16269static __inline__ vector unsigned short __ATTRS_o_ai 16270vec_revb(vector unsigned short __a) { 16271 vector unsigned char __indices = 16272 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 }; 16273 return vec_perm(__a, __a, __indices); 16274} 16275 16276static __inline__ vector bool int __ATTRS_o_ai 16277vec_revb(vector bool int __a) { 16278 vector unsigned char __indices = 16279 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 }; 16280 return vec_perm(__a, __a, __indices); 16281} 16282 16283static __inline__ vector signed int __ATTRS_o_ai 16284vec_revb(vector signed int __a) { 16285 vector unsigned char __indices = 16286 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 }; 16287 return vec_perm(__a, __a, __indices); 16288} 16289 16290static __inline__ vector unsigned int __ATTRS_o_ai 16291vec_revb(vector unsigned int __a) { 16292 vector unsigned char __indices = 16293 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 }; 16294 return vec_perm(__a, __a, __indices); 16295} 16296 16297static __inline__ vector float __ATTRS_o_ai 16298vec_revb(vector float __a) { 16299 vector unsigned char __indices = 16300 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 }; 16301 return vec_perm(__a, __a, __indices); 16302} 16303 16304#ifdef __VSX__ 16305static __inline__ vector bool long long __ATTRS_o_ai 16306vec_revb(vector bool long long __a) { 16307 vector unsigned char __indices = 16308 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 }; 16309 return vec_perm(__a, __a, __indices); 16310} 16311 16312static __inline__ vector signed long long __ATTRS_o_ai 16313vec_revb(vector signed long long __a) { 16314 vector unsigned char __indices = 16315 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 }; 16316 return vec_perm(__a, __a, __indices); 16317} 16318 16319static __inline__ vector unsigned long long __ATTRS_o_ai 16320vec_revb(vector unsigned long long __a) { 16321 vector unsigned char __indices = 16322 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 }; 16323 return vec_perm(__a, __a, __indices); 16324} 16325 16326static __inline__ vector double __ATTRS_o_ai 16327vec_revb(vector double __a) { 16328 vector unsigned char __indices = 16329 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 }; 16330 return vec_perm(__a, __a, __indices); 16331} 16332#endif /* End __VSX__ */ 16333 16334#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16335static __inline__ vector signed __int128 __ATTRS_o_ai 16336vec_revb(vector signed __int128 __a) { 16337 vector unsigned char __indices = 16338 { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; 16339 return (vector signed __int128)vec_perm((vector signed int)__a, 16340 (vector signed int)__a, 16341 __indices); 16342} 16343 16344static __inline__ vector unsigned __int128 __ATTRS_o_ai 16345vec_revb(vector unsigned __int128 __a) { 16346 vector unsigned char __indices = 16347 { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; 16348 return (vector unsigned __int128)vec_perm((vector signed int)__a, 16349 (vector signed int)__a, 16350 __indices); 16351} 16352#endif /* END __POWER8_VECTOR__ && __powerpc64__ */ 16353 16354/* vec_xl */ 16355 16356static inline __ATTRS_o_ai vector signed char vec_xl(signed long long __offset, 16357 signed char *__ptr) { 16358 return *(vector signed char *)(__ptr + __offset); 16359} 16360 16361static inline __ATTRS_o_ai vector unsigned char 16362vec_xl(signed long long __offset, unsigned char *__ptr) { 16363 return *(vector unsigned char *)(__ptr + __offset); 16364} 16365 16366static inline __ATTRS_o_ai vector signed short vec_xl(signed long long __offset, 16367 signed short *__ptr) { 16368 return *(vector signed short *)(__ptr + __offset); 16369} 16370 16371static inline __ATTRS_o_ai vector unsigned short 16372vec_xl(signed long long __offset, unsigned short *__ptr) { 16373 return *(vector unsigned short *)(__ptr + __offset); 16374} 16375 16376static inline __ATTRS_o_ai vector signed int vec_xl(signed long long __offset, 16377 signed int *__ptr) { 16378 return *(vector signed int *)(__ptr + __offset); 16379} 16380 16381static inline __ATTRS_o_ai vector unsigned int vec_xl(signed long long __offset, 16382 unsigned int *__ptr) { 16383 return *(vector unsigned int *)(__ptr + __offset); 16384} 16385 16386static inline __ATTRS_o_ai vector float vec_xl(signed long long __offset, 16387 float *__ptr) { 16388 return *(vector float *)(__ptr + __offset); 16389} 16390 16391#ifdef __VSX__ 16392static inline __ATTRS_o_ai vector signed long long 16393vec_xl(signed long long __offset, signed long long *__ptr) { 16394 return *(vector signed long long *)(__ptr + __offset); 16395} 16396 16397static inline __ATTRS_o_ai vector unsigned long long 16398vec_xl(signed long long __offset, unsigned long long *__ptr) { 16399 return *(vector unsigned long long *)(__ptr + __offset); 16400} 16401 16402static inline __ATTRS_o_ai vector double vec_xl(signed long long __offset, 16403 double *__ptr) { 16404 return *(vector double *)(__ptr + __offset); 16405} 16406#endif 16407 16408#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16409static inline __ATTRS_o_ai vector signed __int128 16410vec_xl(signed long long __offset, signed __int128 *__ptr) { 16411 return *(vector signed __int128 *)(__ptr + __offset); 16412} 16413 16414static inline __ATTRS_o_ai vector unsigned __int128 16415vec_xl(signed long long __offset, unsigned __int128 *__ptr) { 16416 return *(vector unsigned __int128 *)(__ptr + __offset); 16417} 16418#endif 16419 16420/* vec_xl_be */ 16421 16422#ifdef __LITTLE_ENDIAN__ 16423static __inline__ vector signed char __ATTRS_o_ai 16424vec_xl_be(signed long long __offset, signed char *__ptr) { 16425 vector signed char __vec = __builtin_vsx_lxvd2x_be(__offset, __ptr); 16426 return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 16427 13, 12, 11, 10, 9, 8); 16428} 16429 16430static __inline__ vector unsigned char __ATTRS_o_ai 16431vec_xl_be(signed long long __offset, unsigned char *__ptr) { 16432 vector unsigned char __vec = __builtin_vsx_lxvd2x_be(__offset, __ptr); 16433 return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 16434 13, 12, 11, 10, 9, 8); 16435} 16436 16437static __inline__ vector signed short __ATTRS_o_ai 16438vec_xl_be(signed long long __offset, signed short *__ptr) { 16439 vector signed short __vec = __builtin_vsx_lxvd2x_be(__offset, __ptr); 16440 return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4); 16441} 16442 16443static __inline__ vector unsigned short __ATTRS_o_ai 16444vec_xl_be(signed long long __offset, unsigned short *__ptr) { 16445 vector unsigned short __vec = __builtin_vsx_lxvd2x_be(__offset, __ptr); 16446 return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4); 16447} 16448 16449static __inline__ vector signed int __ATTRS_o_ai 16450vec_xl_be(signed long long __offset, signed int *__ptr) { 16451 return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr); 16452} 16453 16454static __inline__ vector unsigned int __ATTRS_o_ai 16455vec_xl_be(signed long long __offset, unsigned int *__ptr) { 16456 return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr); 16457} 16458 16459static __inline__ vector float __ATTRS_o_ai 16460vec_xl_be(signed long long __offset, float *__ptr) { 16461 return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr); 16462} 16463 16464#ifdef __VSX__ 16465static __inline__ vector signed long long __ATTRS_o_ai 16466vec_xl_be(signed long long __offset, signed long long *__ptr) { 16467 return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr); 16468} 16469 16470static __inline__ vector unsigned long long __ATTRS_o_ai 16471vec_xl_be(signed long long __offset, unsigned long long *__ptr) { 16472 return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr); 16473} 16474 16475static __inline__ vector double __ATTRS_o_ai 16476vec_xl_be(signed long long __offset, double *__ptr) { 16477 return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr); 16478} 16479#endif 16480 16481#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16482static __inline__ vector signed __int128 __ATTRS_o_ai 16483vec_xl_be(signed long long __offset, signed __int128 *__ptr) { 16484 return vec_xl(__offset, __ptr); 16485} 16486 16487static __inline__ vector unsigned __int128 __ATTRS_o_ai 16488vec_xl_be(signed long long __offset, unsigned __int128 *__ptr) { 16489 return vec_xl(__offset, __ptr); 16490} 16491#endif 16492#else 16493 #define vec_xl_be vec_xl 16494#endif 16495 16496/* vec_xst */ 16497 16498static inline __ATTRS_o_ai void vec_xst(vector signed char __vec, 16499 signed long long __offset, 16500 signed char *__ptr) { 16501 *(vector signed char *)(__ptr + __offset) = __vec; 16502} 16503 16504static inline __ATTRS_o_ai void vec_xst(vector unsigned char __vec, 16505 signed long long __offset, 16506 unsigned char *__ptr) { 16507 *(vector unsigned char *)(__ptr + __offset) = __vec; 16508} 16509 16510static inline __ATTRS_o_ai void vec_xst(vector signed short __vec, 16511 signed long long __offset, 16512 signed short *__ptr) { 16513 *(vector signed short *)(__ptr + __offset) = __vec; 16514} 16515 16516static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec, 16517 signed long long __offset, 16518 unsigned short *__ptr) { 16519 *(vector unsigned short *)(__ptr + __offset) = __vec; 16520} 16521 16522static inline __ATTRS_o_ai void vec_xst(vector signed int __vec, 16523 signed long long __offset, 16524 signed int *__ptr) { 16525 *(vector signed int *)(__ptr + __offset) = __vec; 16526} 16527 16528static inline __ATTRS_o_ai void vec_xst(vector unsigned int __vec, 16529 signed long long __offset, 16530 unsigned int *__ptr) { 16531 *(vector unsigned int *)(__ptr + __offset) = __vec; 16532} 16533 16534static inline __ATTRS_o_ai void vec_xst(vector float __vec, 16535 signed long long __offset, 16536 float *__ptr) { 16537 *(vector float *)(__ptr + __offset) = __vec; 16538} 16539 16540#ifdef __VSX__ 16541static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec, 16542 signed long long __offset, 16543 signed long long *__ptr) { 16544 *(vector signed long long *)(__ptr + __offset) = __vec; 16545} 16546 16547static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec, 16548 signed long long __offset, 16549 unsigned long long *__ptr) { 16550 *(vector unsigned long long *)(__ptr + __offset) = __vec; 16551} 16552 16553static inline __ATTRS_o_ai void vec_xst(vector double __vec, 16554 signed long long __offset, 16555 double *__ptr) { 16556 *(vector double *)(__ptr + __offset) = __vec; 16557} 16558#endif 16559 16560#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16561static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec, 16562 signed long long __offset, 16563 signed __int128 *__ptr) { 16564 *(vector signed __int128 *)(__ptr + __offset) = __vec; 16565} 16566 16567static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec, 16568 signed long long __offset, 16569 unsigned __int128 *__ptr) { 16570 *(vector unsigned __int128 *)(__ptr + __offset) = __vec; 16571} 16572#endif 16573 16574/* vec_xst_be */ 16575 16576#ifdef __LITTLE_ENDIAN__ 16577static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec, 16578 signed long long __offset, 16579 signed char *__ptr) { 16580 vector signed char __tmp = 16581 __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 16582 13, 12, 11, 10, 9, 8); 16583 __builtin_vsx_stxvd2x_be(__tmp, __offset, __ptr); 16584} 16585 16586static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec, 16587 signed long long __offset, 16588 unsigned char *__ptr) { 16589 vector unsigned char __tmp = 16590 __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 16591 13, 12, 11, 10, 9, 8); 16592 __builtin_vsx_stxvd2x_be(__tmp, __offset, __ptr); 16593} 16594 16595static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec, 16596 signed long long __offset, 16597 signed short *__ptr) { 16598 vector signed short __tmp = 16599 __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4); 16600 __builtin_vsx_stxvd2x_be(__tmp, __offset, __ptr); 16601} 16602 16603static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec, 16604 signed long long __offset, 16605 unsigned short *__ptr) { 16606 vector unsigned short __tmp = 16607 __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4); 16608 __builtin_vsx_stxvd2x_be(__tmp, __offset, __ptr); 16609} 16610 16611static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec, 16612 signed long long __offset, 16613 signed int *__ptr) { 16614 __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr); 16615} 16616 16617static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec, 16618 signed long long __offset, 16619 unsigned int *__ptr) { 16620 __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr); 16621} 16622 16623static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec, 16624 signed long long __offset, 16625 float *__ptr) { 16626 __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr); 16627} 16628 16629#ifdef __VSX__ 16630static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec, 16631 signed long long __offset, 16632 signed long long *__ptr) { 16633 __builtin_vsx_stxvd2x_be(__vec, __offset, __ptr); 16634} 16635 16636static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec, 16637 signed long long __offset, 16638 unsigned long long *__ptr) { 16639 __builtin_vsx_stxvd2x_be(__vec, __offset, __ptr); 16640} 16641 16642static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec, 16643 signed long long __offset, 16644 double *__ptr) { 16645 __builtin_vsx_stxvd2x_be(__vec, __offset, __ptr); 16646} 16647#endif 16648 16649#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16650static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec, 16651 signed long long __offset, 16652 signed __int128 *__ptr) { 16653 vec_xst(__vec, __offset, __ptr); 16654} 16655 16656static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec, 16657 signed long long __offset, 16658 unsigned __int128 *__ptr) { 16659 vec_xst(__vec, __offset, __ptr); 16660} 16661#endif 16662#else 16663 #define vec_xst_be vec_xst 16664#endif 16665 16666#ifdef __POWER9_VECTOR__ 16667#define vec_test_data_class(__a, __b) \ 16668 _Generic((__a), \ 16669 vector float: \ 16670 (vector bool int)__builtin_vsx_xvtstdcsp((__a), (__b)), \ 16671 vector double: \ 16672 (vector bool long long)__builtin_vsx_xvtstdcdp((__a), (__b)) \ 16673 ) 16674 16675#endif /* #ifdef __POWER9_VECTOR__ */ 16676 16677static vector float __ATTRS_o_ai vec_neg(vector float __a) { 16678 return -__a; 16679} 16680 16681#ifdef __VSX__ 16682static vector double __ATTRS_o_ai vec_neg(vector double __a) { 16683 return -__a; 16684} 16685 16686#endif 16687 16688#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16689static vector long long __ATTRS_o_ai vec_neg(vector long long __a) { 16690 return -__a; 16691} 16692#endif 16693 16694static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) { 16695 return -__a; 16696} 16697 16698static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) { 16699 return -__a; 16700} 16701 16702static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) { 16703 return -__a; 16704} 16705 16706static vector float __ATTRS_o_ai vec_nabs(vector float __a) { 16707 return - vec_abs(__a); 16708} 16709 16710#ifdef __VSX__ 16711static vector double __ATTRS_o_ai vec_nabs(vector double __a) { 16712 return - vec_abs(__a); 16713} 16714 16715#endif 16716 16717#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) 16718static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) { 16719 return __builtin_altivec_vminsd(__a, -__a); 16720} 16721#endif 16722 16723static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) { 16724 return __builtin_altivec_vminsw(__a, -__a); 16725} 16726 16727static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) { 16728 return __builtin_altivec_vminsh(__a, -__a); 16729} 16730 16731static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) { 16732 return __builtin_altivec_vminsb(__a, -__a); 16733} 16734#undef __ATTRS_o_ai 16735 16736#endif /* __ALTIVEC_H */ 16737