19365 lines · c
1/*===---- altivec.h - Standard header for type generic math ---------------===*\2 *3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4 * See https://llvm.org/LICENSE.txt for license information.5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6 *7\*===----------------------------------------------------------------------===*/8 9#ifndef __ALTIVEC_H10#define __ALTIVEC_H11 12#ifndef __ALTIVEC__13#error "AltiVec support not enabled"14#endif15 16/* Constants for mapping CR6 bits to predicate result. */17 18#define __CR6_EQ 019#define __CR6_EQ_REV 120#define __CR6_LT 221#define __CR6_LT_REV 322#define __CR6_GT 423#define __CR6_GT_REV 524#define __CR6_SO 625#define __CR6_SO_REV 726 27/* Constants for vec_test_data_class */28#define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)29#define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)30#define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \31 __VEC_CLASS_FP_SUBNORMAL_N)32#define __VEC_CLASS_FP_ZERO_N (1<<2)33#define __VEC_CLASS_FP_ZERO_P (1<<3)34#define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P | \35 __VEC_CLASS_FP_ZERO_N)36#define __VEC_CLASS_FP_INFINITY_N (1<<4)37#define __VEC_CLASS_FP_INFINITY_P (1<<5)38#define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P | \39 __VEC_CLASS_FP_INFINITY_N)40#define __VEC_CLASS_FP_NAN (1<<6)41#define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN | \42 __VEC_CLASS_FP_SUBNORMAL | \43 __VEC_CLASS_FP_ZERO | \44 __VEC_CLASS_FP_INFINITY)45 46#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))47 48#include <stddef.h>49 50static __inline__ vector signed char __ATTRS_o_ai vec_perm(51 vector signed char __a, vector signed char __b, vector unsigned char __c);52 53static __inline__ vector unsigned char __ATTRS_o_ai54vec_perm(vector unsigned char __a, vector unsigned char __b,55 vector unsigned char __c);56 57static __inline__ vector bool char __ATTRS_o_ai58vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);59 60static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,61 vector signed short __b,62 vector unsigned char __c);63 64static __inline__ vector unsigned short __ATTRS_o_ai65vec_perm(vector unsigned short __a, vector unsigned short __b,66 vector unsigned char __c);67 68static __inline__ vector bool short __ATTRS_o_ai vec_perm(69 vector bool short __a, vector bool short __b, vector unsigned char __c);70 71static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,72 vector pixel __b,73 vector unsigned char __c);74 75static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,76 vector signed int __b,77 vector unsigned char __c);78 79static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(80 vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);81 82static __inline__ vector bool int __ATTRS_o_ai83vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);84 85static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,86 vector float __b,87 vector unsigned char __c);88 89#ifdef __VSX__90static __inline__ vector long long __ATTRS_o_ai91vec_perm(vector signed long long __a, vector signed long long __b,92 vector unsigned char __c);93 94static __inline__ vector unsigned long long __ATTRS_o_ai95vec_perm(vector unsigned long long __a, vector unsigned long long __b,96 vector unsigned char __c);97 98static __inline__ vector bool long long __ATTRS_o_ai99vec_perm(vector bool long long __a, vector bool long long __b,100 vector unsigned char __c);101 102static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,103 vector double __b,104 vector unsigned char __c);105#endif106 107static __inline__ vector unsigned char __ATTRS_o_ai108vec_xor(vector unsigned char __a, vector unsigned char __b);109 110/* vec_abs */111 112#define __builtin_altivec_abs_v16qi vec_abs113#define __builtin_altivec_abs_v8hi vec_abs114#define __builtin_altivec_abs_v4si vec_abs115 116static __inline__ vector signed char __ATTRS_o_ai117vec_abs(vector signed char __a) {118 return __builtin_altivec_vmaxsb(__a, -__a);119}120 121static __inline__ vector signed short __ATTRS_o_ai122vec_abs(vector signed short __a) {123 return __builtin_altivec_vmaxsh(__a, -__a);124}125 126static __inline__ vector signed int __ATTRS_o_ai127vec_abs(vector signed int __a) {128 return __builtin_altivec_vmaxsw(__a, -__a);129}130 131#ifdef __POWER8_VECTOR__132static __inline__ vector signed long long __ATTRS_o_ai133vec_abs(vector signed long long __a) {134 return __builtin_altivec_vmaxsd(__a, -__a);135}136#endif137 138static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {139#ifdef __VSX__140 return __builtin_vsx_xvabssp(__a);141#else142 vector unsigned int __res =143 (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);144 return (vector float)__res;145#endif146}147 148#ifdef __VSX__149static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {150 return __builtin_vsx_xvabsdp(__a);151}152#endif153 154/* vec_abss */155#define __builtin_altivec_abss_v16qi vec_abss156#define __builtin_altivec_abss_v8hi vec_abss157#define __builtin_altivec_abss_v4si vec_abss158 159static __inline__ vector signed char __ATTRS_o_ai160vec_abss(vector signed char __a) {161 return __builtin_altivec_vmaxsb(162 __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));163}164 165static __inline__ vector signed short __ATTRS_o_ai166vec_abss(vector signed short __a) {167 return __builtin_altivec_vmaxsh(168 __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));169}170 171static __inline__ vector signed int __ATTRS_o_ai172vec_abss(vector signed int __a) {173 return __builtin_altivec_vmaxsw(174 __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));175}176 177/* vec_absd */178#if defined(__POWER9_VECTOR__)179 180static __inline__ vector unsigned char __ATTRS_o_ai181vec_absd(vector unsigned char __a, vector unsigned char __b) {182 return __builtin_altivec_vabsdub(__a, __b);183}184 185static __inline__ vector unsigned short __ATTRS_o_ai186vec_absd(vector unsigned short __a, vector unsigned short __b) {187 return __builtin_altivec_vabsduh(__a, __b);188}189 190static __inline__ vector unsigned int __ATTRS_o_ai191vec_absd(vector unsigned int __a, vector unsigned int __b) {192 return __builtin_altivec_vabsduw(__a, __b);193}194 195#endif /* End __POWER9_VECTOR__ */196 197/* vec_add */198 199static __inline__ vector signed char __ATTRS_o_ai200vec_add(vector signed char __a, vector signed char __b) {201 return __a + __b;202}203 204static __inline__ vector signed char __ATTRS_o_ai205vec_add(vector bool char __a, vector signed char __b) {206 return (vector signed char)__a + __b;207}208 209static __inline__ vector signed char __ATTRS_o_ai210vec_add(vector signed char __a, vector bool char __b) {211 return __a + (vector signed char)__b;212}213 214static __inline__ vector unsigned char __ATTRS_o_ai215vec_add(vector unsigned char __a, vector unsigned char __b) {216 return __a + __b;217}218 219static __inline__ vector unsigned char __ATTRS_o_ai220vec_add(vector bool char __a, vector unsigned char __b) {221 return (vector unsigned char)__a + __b;222}223 224static __inline__ vector unsigned char __ATTRS_o_ai225vec_add(vector unsigned char __a, vector bool char __b) {226 return __a + (vector unsigned char)__b;227}228 229static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,230 vector short __b) {231 return __a + __b;232}233 234static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,235 vector short __b) {236 return (vector short)__a + __b;237}238 239static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,240 vector bool short __b) {241 return __a + (vector short)__b;242}243 244static __inline__ vector unsigned short __ATTRS_o_ai245vec_add(vector unsigned short __a, vector unsigned short __b) {246 return __a + __b;247}248 249static __inline__ vector unsigned short __ATTRS_o_ai250vec_add(vector bool short __a, vector unsigned short __b) {251 return (vector unsigned short)__a + __b;252}253 254static __inline__ vector unsigned short __ATTRS_o_ai255vec_add(vector unsigned short __a, vector bool short __b) {256 return __a + (vector unsigned short)__b;257}258 259static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,260 vector int __b) {261 return __a + __b;262}263 264static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,265 vector int __b) {266 return (vector int)__a + __b;267}268 269static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,270 vector bool int __b) {271 return __a + (vector int)__b;272}273 274static __inline__ vector unsigned int __ATTRS_o_ai275vec_add(vector unsigned int __a, vector unsigned int __b) {276 return __a + __b;277}278 279static __inline__ vector unsigned int __ATTRS_o_ai280vec_add(vector bool int __a, vector unsigned int __b) {281 return (vector unsigned int)__a + __b;282}283 284static __inline__ vector unsigned int __ATTRS_o_ai285vec_add(vector unsigned int __a, vector bool int __b) {286 return __a + (vector unsigned int)__b;287}288 289#ifdef __POWER8_VECTOR__290static __inline__ vector signed long long __ATTRS_o_ai291vec_add(vector signed long long __a, vector signed long long __b) {292 return __a + __b;293}294 295static __inline__ vector unsigned long long __ATTRS_o_ai296vec_add(vector unsigned long long __a, vector unsigned long long __b) {297 return __a + __b;298}299 300#ifdef __SIZEOF_INT128__301static __inline__ vector signed __int128 __ATTRS_o_ai302vec_add(vector signed __int128 __a, vector signed __int128 __b) {303 return __a + __b;304}305 306static __inline__ vector unsigned __int128 __ATTRS_o_ai307vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {308 return __a + __b;309}310#endif311 312static __inline__ vector unsigned char __attribute__((__always_inline__))313vec_add_u128(vector unsigned char __a, vector unsigned char __b) {314 return (vector unsigned char)__builtin_altivec_vadduqm(__a, __b);315}316#elif defined(__VSX__)317static __inline__ vector signed long long __ATTRS_o_ai318vec_add(vector signed long long __a, vector signed long long __b) {319#ifdef __LITTLE_ENDIAN__320 // Little endian systems on CPU's prior to Power8 don't really exist321 // so scalarizing is fine.322 return __a + __b;323#else324 vector unsigned int __res =325 (vector unsigned int)__a + (vector unsigned int)__b;326 vector unsigned int __carry = __builtin_altivec_vaddcuw(327 (vector unsigned int)__a, (vector unsigned int)__b);328 __carry = (vector unsigned int)__builtin_shufflevector(329 (vector unsigned char)__carry, (vector unsigned char)__carry, 0, 0, 0, 7,330 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0);331 return (vector signed long long)(__res + __carry);332#endif333}334 335static __inline__ vector unsigned long long __ATTRS_o_ai336vec_add(vector unsigned long long __a, vector unsigned long long __b) {337 return (vector unsigned long long)vec_add((vector signed long long)__a,338 (vector signed long long)__b);339}340#endif // __POWER8_VECTOR__341 342static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,343 vector float __b) {344 return __a + __b;345}346 347#ifdef __VSX__348static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,349 vector double __b) {350 return __a + __b;351}352#endif // __VSX__353 354/* vec_adde */355 356#ifdef __POWER8_VECTOR__357#ifdef __SIZEOF_INT128__358static __inline__ vector signed __int128 __ATTRS_o_ai359vec_adde(vector signed __int128 __a, vector signed __int128 __b,360 vector signed __int128 __c) {361 return (vector signed __int128)__builtin_altivec_vaddeuqm(362 (vector unsigned __int128)__a, (vector unsigned __int128)__b,363 (vector unsigned __int128)__c);364}365 366static __inline__ vector unsigned __int128 __ATTRS_o_ai367vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,368 vector unsigned __int128 __c) {369 return __builtin_altivec_vaddeuqm(__a, __b, __c);370}371#endif372 373static __inline__ vector unsigned char __attribute__((__always_inline__))374vec_adde_u128(vector unsigned char __a, vector unsigned char __b,375 vector unsigned char __c) {376 return (vector unsigned char)__builtin_altivec_vaddeuqm_c(377 (vector unsigned char)__a, (vector unsigned char)__b,378 (vector unsigned char)__c);379}380#endif381 382static __inline__ vector signed int __ATTRS_o_ai383vec_adde(vector signed int __a, vector signed int __b,384 vector signed int __c) {385 vector signed int __mask = {1, 1, 1, 1};386 vector signed int __carry = __c & __mask;387 return vec_add(vec_add(__a, __b), __carry);388}389 390static __inline__ vector unsigned int __ATTRS_o_ai391vec_adde(vector unsigned int __a, vector unsigned int __b,392 vector unsigned int __c) {393 vector unsigned int __mask = {1, 1, 1, 1};394 vector unsigned int __carry = __c & __mask;395 return vec_add(vec_add(__a, __b), __carry);396}397 398/* vec_addec */399 400#ifdef __POWER8_VECTOR__401#ifdef __SIZEOF_INT128__402static __inline__ vector signed __int128 __ATTRS_o_ai403vec_addec(vector signed __int128 __a, vector signed __int128 __b,404 vector signed __int128 __c) {405 return (vector signed __int128)__builtin_altivec_vaddecuq(406 (vector unsigned __int128)__a, (vector unsigned __int128)__b,407 (vector unsigned __int128)__c);408}409 410static __inline__ vector unsigned __int128 __ATTRS_o_ai411vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,412 vector unsigned __int128 __c) {413 return __builtin_altivec_vaddecuq(__a, __b, __c);414}415#endif416 417static __inline__ vector unsigned char __attribute__((__always_inline__))418vec_addec_u128(vector unsigned char __a, vector unsigned char __b,419 vector unsigned char __c) {420 return (vector unsigned char)__builtin_altivec_vaddecuq_c(421 (vector unsigned char)__a, (vector unsigned char)__b,422 (vector unsigned char)__c);423}424 425#ifdef __powerpc64__426static __inline__ vector signed int __ATTRS_o_ai427vec_addec(vector signed int __a, vector signed int __b,428 vector signed int __c) {429 430 signed int __result[4];431 for (int i = 0; i < 4; i++) {432 unsigned int __tempa = (unsigned int) __a[i];433 unsigned int __tempb = (unsigned int) __b[i];434 unsigned int __tempc = (unsigned int) __c[i];435 __tempc = __tempc & 0x00000001;436 unsigned long long __longa = (unsigned long long) __tempa;437 unsigned long long __longb = (unsigned long long) __tempb;438 unsigned long long __longc = (unsigned long long) __tempc;439 unsigned long long __sum = __longa + __longb + __longc;440 unsigned long long __res = (__sum >> 32) & 0x01;441 unsigned long long __tempres = (unsigned int) __res;442 __result[i] = (signed int) __tempres;443 }444 445 vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };446 return ret;447}448 449static __inline__ vector unsigned int __ATTRS_o_ai450vec_addec(vector unsigned int __a, vector unsigned int __b,451 vector unsigned int __c) {452 453 unsigned int __result[4];454 for (int i = 0; i < 4; i++) {455 unsigned int __tempc = __c[i] & 1;456 unsigned long long __longa = (unsigned long long) __a[i];457 unsigned long long __longb = (unsigned long long) __b[i];458 unsigned long long __longc = (unsigned long long) __tempc;459 unsigned long long __sum = __longa + __longb + __longc;460 unsigned long long __res = (__sum >> 32) & 0x01;461 unsigned long long __tempres = (unsigned int) __res;462 __result[i] = (signed int) __tempres;463 }464 465 vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };466 return ret;467}468#endif // __powerpc64__469#endif // __POWER8_VECTOR__470 471/* vec_vaddubm */472 473#define __builtin_altivec_vaddubm vec_vaddubm474 475static __inline__ vector signed char __ATTRS_o_ai476vec_vaddubm(vector signed char __a, vector signed char __b) {477 return __a + __b;478}479 480static __inline__ vector signed char __ATTRS_o_ai481vec_vaddubm(vector bool char __a, vector signed char __b) {482 return (vector signed char)__a + __b;483}484 485static __inline__ vector signed char __ATTRS_o_ai486vec_vaddubm(vector signed char __a, vector bool char __b) {487 return __a + (vector signed char)__b;488}489 490static __inline__ vector unsigned char __ATTRS_o_ai491vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {492 return __a + __b;493}494 495static __inline__ vector unsigned char __ATTRS_o_ai496vec_vaddubm(vector bool char __a, vector unsigned char __b) {497 return (vector unsigned char)__a + __b;498}499 500static __inline__ vector unsigned char __ATTRS_o_ai501vec_vaddubm(vector unsigned char __a, vector bool char __b) {502 return __a + (vector unsigned char)__b;503}504 505/* vec_vadduhm */506 507#define __builtin_altivec_vadduhm vec_vadduhm508 509static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,510 vector short __b) {511 return __a + __b;512}513 514static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,515 vector short __b) {516 return (vector short)__a + __b;517}518 519static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,520 vector bool short __b) {521 return __a + (vector short)__b;522}523 524static __inline__ vector unsigned short __ATTRS_o_ai525vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {526 return __a + __b;527}528 529static __inline__ vector unsigned short __ATTRS_o_ai530vec_vadduhm(vector bool short __a, vector unsigned short __b) {531 return (vector unsigned short)__a + __b;532}533 534static __inline__ vector unsigned short __ATTRS_o_ai535vec_vadduhm(vector unsigned short __a, vector bool short __b) {536 return __a + (vector unsigned short)__b;537}538 539/* vec_vadduwm */540 541#define __builtin_altivec_vadduwm vec_vadduwm542 543static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,544 vector int __b) {545 return __a + __b;546}547 548static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,549 vector int __b) {550 return (vector int)__a + __b;551}552 553static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,554 vector bool int __b) {555 return __a + (vector int)__b;556}557 558static __inline__ vector unsigned int __ATTRS_o_ai559vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {560 return __a + __b;561}562 563static __inline__ vector unsigned int __ATTRS_o_ai564vec_vadduwm(vector bool int __a, vector unsigned int __b) {565 return (vector unsigned int)__a + __b;566}567 568static __inline__ vector unsigned int __ATTRS_o_ai569vec_vadduwm(vector unsigned int __a, vector bool int __b) {570 return __a + (vector unsigned int)__b;571}572 573/* vec_vaddfp */574 575#define __builtin_altivec_vaddfp vec_vaddfp576 577static __inline__ vector float __attribute__((__always_inline__))578vec_vaddfp(vector float __a, vector float __b) {579 return __a + __b;580}581 582/* vec_addc */583 584static __inline__ vector signed int __ATTRS_o_ai585vec_addc(vector signed int __a, vector signed int __b) {586 return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,587 (vector unsigned int)__b);588}589 590static __inline__ vector unsigned int __ATTRS_o_ai591vec_addc(vector unsigned int __a, vector unsigned int __b) {592 return __builtin_altivec_vaddcuw(__a, __b);593}594 595#ifdef __POWER8_VECTOR__596#ifdef __SIZEOF_INT128__597static __inline__ vector signed __int128 __ATTRS_o_ai598vec_addc(vector signed __int128 __a, vector signed __int128 __b) {599 return (vector signed __int128)__builtin_altivec_vaddcuq(600 (vector unsigned __int128)__a, (vector unsigned __int128)__b);601}602 603static __inline__ vector unsigned __int128 __ATTRS_o_ai604vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {605 return __builtin_altivec_vaddcuq(__a, __b);606}607#endif608 609static __inline__ vector unsigned char __attribute__((__always_inline__))610vec_addc_u128(vector unsigned char __a, vector unsigned char __b) {611 return (vector unsigned char)__builtin_altivec_vaddcuq_c(612 (vector unsigned char)__a, (vector unsigned char)__b);613}614#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)615 616/* vec_vaddcuw */617 618static __inline__ vector unsigned int __attribute__((__always_inline__))619vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {620 return __builtin_altivec_vaddcuw(__a, __b);621}622 623/* vec_adds */624 625static __inline__ vector signed char __ATTRS_o_ai626vec_adds(vector signed char __a, vector signed char __b) {627 return __builtin_altivec_vaddsbs(__a, __b);628}629 630static __inline__ vector signed char __ATTRS_o_ai631vec_adds(vector bool char __a, vector signed char __b) {632 return __builtin_altivec_vaddsbs((vector signed char)__a, __b);633}634 635static __inline__ vector signed char __ATTRS_o_ai636vec_adds(vector signed char __a, vector bool char __b) {637 return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);638}639 640static __inline__ vector unsigned char __ATTRS_o_ai641vec_adds(vector unsigned char __a, vector unsigned char __b) {642 return __builtin_altivec_vaddubs(__a, __b);643}644 645static __inline__ vector unsigned char __ATTRS_o_ai646vec_adds(vector bool char __a, vector unsigned char __b) {647 return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);648}649 650static __inline__ vector unsigned char __ATTRS_o_ai651vec_adds(vector unsigned char __a, vector bool char __b) {652 return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);653}654 655static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,656 vector short __b) {657 return __builtin_altivec_vaddshs(__a, __b);658}659 660static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,661 vector short __b) {662 return __builtin_altivec_vaddshs((vector short)__a, __b);663}664 665static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,666 vector bool short __b) {667 return __builtin_altivec_vaddshs(__a, (vector short)__b);668}669 670static __inline__ vector unsigned short __ATTRS_o_ai671vec_adds(vector unsigned short __a, vector unsigned short __b) {672 return __builtin_altivec_vadduhs(__a, __b);673}674 675static __inline__ vector unsigned short __ATTRS_o_ai676vec_adds(vector bool short __a, vector unsigned short __b) {677 return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);678}679 680static __inline__ vector unsigned short __ATTRS_o_ai681vec_adds(vector unsigned short __a, vector bool short __b) {682 return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);683}684 685static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,686 vector int __b) {687 return __builtin_altivec_vaddsws(__a, __b);688}689 690static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,691 vector int __b) {692 return __builtin_altivec_vaddsws((vector int)__a, __b);693}694 695static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,696 vector bool int __b) {697 return __builtin_altivec_vaddsws(__a, (vector int)__b);698}699 700static __inline__ vector unsigned int __ATTRS_o_ai701vec_adds(vector unsigned int __a, vector unsigned int __b) {702 return __builtin_altivec_vadduws(__a, __b);703}704 705static __inline__ vector unsigned int __ATTRS_o_ai706vec_adds(vector bool int __a, vector unsigned int __b) {707 return __builtin_altivec_vadduws((vector unsigned int)__a, __b);708}709 710static __inline__ vector unsigned int __ATTRS_o_ai711vec_adds(vector unsigned int __a, vector bool int __b) {712 return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);713}714 715/* vec_vaddsbs */716 717static __inline__ vector signed char __ATTRS_o_ai718vec_vaddsbs(vector signed char __a, vector signed char __b) {719 return __builtin_altivec_vaddsbs(__a, __b);720}721 722static __inline__ vector signed char __ATTRS_o_ai723vec_vaddsbs(vector bool char __a, vector signed char __b) {724 return __builtin_altivec_vaddsbs((vector signed char)__a, __b);725}726 727static __inline__ vector signed char __ATTRS_o_ai728vec_vaddsbs(vector signed char __a, vector bool char __b) {729 return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);730}731 732/* vec_vaddubs */733 734static __inline__ vector unsigned char __ATTRS_o_ai735vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {736 return __builtin_altivec_vaddubs(__a, __b);737}738 739static __inline__ vector unsigned char __ATTRS_o_ai740vec_vaddubs(vector bool char __a, vector unsigned char __b) {741 return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);742}743 744static __inline__ vector unsigned char __ATTRS_o_ai745vec_vaddubs(vector unsigned char __a, vector bool char __b) {746 return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);747}748 749/* vec_vaddshs */750 751static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,752 vector short __b) {753 return __builtin_altivec_vaddshs(__a, __b);754}755 756static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,757 vector short __b) {758 return __builtin_altivec_vaddshs((vector short)__a, __b);759}760 761static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,762 vector bool short __b) {763 return __builtin_altivec_vaddshs(__a, (vector short)__b);764}765 766/* vec_vadduhs */767 768static __inline__ vector unsigned short __ATTRS_o_ai769vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {770 return __builtin_altivec_vadduhs(__a, __b);771}772 773static __inline__ vector unsigned short __ATTRS_o_ai774vec_vadduhs(vector bool short __a, vector unsigned short __b) {775 return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);776}777 778static __inline__ vector unsigned short __ATTRS_o_ai779vec_vadduhs(vector unsigned short __a, vector bool short __b) {780 return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);781}782 783/* vec_vaddsws */784 785static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,786 vector int __b) {787 return __builtin_altivec_vaddsws(__a, __b);788}789 790static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,791 vector int __b) {792 return __builtin_altivec_vaddsws((vector int)__a, __b);793}794 795static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,796 vector bool int __b) {797 return __builtin_altivec_vaddsws(__a, (vector int)__b);798}799 800/* vec_vadduws */801 802static __inline__ vector unsigned int __ATTRS_o_ai803vec_vadduws(vector unsigned int __a, vector unsigned int __b) {804 return __builtin_altivec_vadduws(__a, __b);805}806 807static __inline__ vector unsigned int __ATTRS_o_ai808vec_vadduws(vector bool int __a, vector unsigned int __b) {809 return __builtin_altivec_vadduws((vector unsigned int)__a, __b);810}811 812static __inline__ vector unsigned int __ATTRS_o_ai813vec_vadduws(vector unsigned int __a, vector bool int __b) {814 return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);815}816 817#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \818 defined(__SIZEOF_INT128__)819/* vec_vadduqm */820 821static __inline__ vector signed __int128 __ATTRS_o_ai822vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {823 return __a + __b;824}825 826static __inline__ vector unsigned __int128 __ATTRS_o_ai827vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {828 return __a + __b;829}830 831/* vec_vaddeuqm */832 833static __inline__ vector signed __int128 __ATTRS_o_ai834vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,835 vector signed __int128 __c) {836 return (vector signed __int128)__builtin_altivec_vaddeuqm(837 (vector unsigned __int128)__a, (vector unsigned __int128)__b,838 (vector unsigned __int128)__c);839}840 841static __inline__ vector unsigned __int128 __ATTRS_o_ai842vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,843 vector unsigned __int128 __c) {844 return __builtin_altivec_vaddeuqm(__a, __b, __c);845}846 847/* vec_vaddcuq */848 849static __inline__ vector signed __int128 __ATTRS_o_ai850vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {851 return (vector signed __int128)__builtin_altivec_vaddcuq(852 (vector unsigned __int128)__a, (vector unsigned __int128)__b);853}854 855static __inline__ vector unsigned __int128 __ATTRS_o_ai856vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {857 return __builtin_altivec_vaddcuq(__a, __b);858}859 860/* vec_vaddecuq */861 862static __inline__ vector signed __int128 __ATTRS_o_ai863vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,864 vector signed __int128 __c) {865 return (vector signed __int128)__builtin_altivec_vaddecuq(866 (vector unsigned __int128)__a, (vector unsigned __int128)__b,867 (vector unsigned __int128)__c);868}869 870static __inline__ vector unsigned __int128 __ATTRS_o_ai871vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,872 vector unsigned __int128 __c) {873 return __builtin_altivec_vaddecuq(__a, __b, __c);874}875#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)876 877/* vec_and */878 879#define __builtin_altivec_vand vec_and880 881static __inline__ vector signed char __ATTRS_o_ai882vec_and(vector signed char __a, vector signed char __b) {883 return __a & __b;884}885 886static __inline__ vector signed char __ATTRS_o_ai887vec_and(vector bool char __a, vector signed char __b) {888 return (vector signed char)__a & __b;889}890 891static __inline__ vector signed char __ATTRS_o_ai892vec_and(vector signed char __a, vector bool char __b) {893 return __a & (vector signed char)__b;894}895 896static __inline__ vector unsigned char __ATTRS_o_ai897vec_and(vector unsigned char __a, vector unsigned char __b) {898 return __a & __b;899}900 901static __inline__ vector unsigned char __ATTRS_o_ai902vec_and(vector bool char __a, vector unsigned char __b) {903 return (vector unsigned char)__a & __b;904}905 906static __inline__ vector unsigned char __ATTRS_o_ai907vec_and(vector unsigned char __a, vector bool char __b) {908 return __a & (vector unsigned char)__b;909}910 911static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,912 vector bool char __b) {913 return __a & __b;914}915 916static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,917 vector short __b) {918 return __a & __b;919}920 921static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,922 vector short __b) {923 return (vector short)__a & __b;924}925 926static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,927 vector bool short __b) {928 return __a & (vector short)__b;929}930 931static __inline__ vector unsigned short __ATTRS_o_ai932vec_and(vector unsigned short __a, vector unsigned short __b) {933 return __a & __b;934}935 936static __inline__ vector unsigned short __ATTRS_o_ai937vec_and(vector bool short __a, vector unsigned short __b) {938 return (vector unsigned short)__a & __b;939}940 941static __inline__ vector unsigned short __ATTRS_o_ai942vec_and(vector unsigned short __a, vector bool short __b) {943 return __a & (vector unsigned short)__b;944}945 946static __inline__ vector bool short __ATTRS_o_ai947vec_and(vector bool short __a, vector bool short __b) {948 return __a & __b;949}950 951static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,952 vector int __b) {953 return __a & __b;954}955 956static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,957 vector int __b) {958 return (vector int)__a & __b;959}960 961static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,962 vector bool int __b) {963 return __a & (vector int)__b;964}965 966static __inline__ vector unsigned int __ATTRS_o_ai967vec_and(vector unsigned int __a, vector unsigned int __b) {968 return __a & __b;969}970 971static __inline__ vector unsigned int __ATTRS_o_ai972vec_and(vector bool int __a, vector unsigned int __b) {973 return (vector unsigned int)__a & __b;974}975 976static __inline__ vector unsigned int __ATTRS_o_ai977vec_and(vector unsigned int __a, vector bool int __b) {978 return __a & (vector unsigned int)__b;979}980 981static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,982 vector bool int __b) {983 return __a & __b;984}985 986static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,987 vector float __b) {988 vector unsigned int __res =989 (vector unsigned int)__a & (vector unsigned int)__b;990 return (vector float)__res;991}992 993static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,994 vector float __b) {995 vector unsigned int __res =996 (vector unsigned int)__a & (vector unsigned int)__b;997 return (vector float)__res;998}999 1000static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,1001 vector bool int __b) {1002 vector unsigned int __res =1003 (vector unsigned int)__a & (vector unsigned int)__b;1004 return (vector float)__res;1005}1006 1007#ifdef __VSX__1008static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,1009 vector double __b) {1010 vector unsigned long long __res =1011 (vector unsigned long long)__a & (vector unsigned long long)__b;1012 return (vector double)__res;1013}1014 1015static __inline__ vector double __ATTRS_o_ai1016vec_and(vector double __a, vector bool long long __b) {1017 vector unsigned long long __res =1018 (vector unsigned long long)__a & (vector unsigned long long)__b;1019 return (vector double)__res;1020}1021 1022static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,1023 vector double __b) {1024 vector unsigned long long __res =1025 (vector unsigned long long)__a & (vector unsigned long long)__b;1026 return (vector double)__res;1027}1028 1029static __inline__ vector signed long long __ATTRS_o_ai1030vec_and(vector signed long long __a, vector signed long long __b) {1031 return __a & __b;1032}1033 1034static __inline__ vector signed long long __ATTRS_o_ai1035vec_and(vector bool long long __a, vector signed long long __b) {1036 return (vector signed long long)__a & __b;1037}1038 1039static __inline__ vector signed long long __ATTRS_o_ai1040vec_and(vector signed long long __a, vector bool long long __b) {1041 return __a & (vector signed long long)__b;1042}1043 1044static __inline__ vector unsigned long long __ATTRS_o_ai1045vec_and(vector unsigned long long __a, vector unsigned long long __b) {1046 return __a & __b;1047}1048 1049static __inline__ vector unsigned long long __ATTRS_o_ai1050vec_and(vector bool long long __a, vector unsigned long long __b) {1051 return (vector unsigned long long)__a & __b;1052}1053 1054static __inline__ vector unsigned long long __ATTRS_o_ai1055vec_and(vector unsigned long long __a, vector bool long long __b) {1056 return __a & (vector unsigned long long)__b;1057}1058 1059static __inline__ vector bool long long __ATTRS_o_ai1060vec_and(vector bool long long __a, vector bool long long __b) {1061 return __a & __b;1062}1063#endif1064 1065/* vec_vand */1066 1067static __inline__ vector signed char __ATTRS_o_ai1068vec_vand(vector signed char __a, vector signed char __b) {1069 return __a & __b;1070}1071 1072static __inline__ vector signed char __ATTRS_o_ai1073vec_vand(vector bool char __a, vector signed char __b) {1074 return (vector signed char)__a & __b;1075}1076 1077static __inline__ vector signed char __ATTRS_o_ai1078vec_vand(vector signed char __a, vector bool char __b) {1079 return __a & (vector signed char)__b;1080}1081 1082static __inline__ vector unsigned char __ATTRS_o_ai1083vec_vand(vector unsigned char __a, vector unsigned char __b) {1084 return __a & __b;1085}1086 1087static __inline__ vector unsigned char __ATTRS_o_ai1088vec_vand(vector bool char __a, vector unsigned char __b) {1089 return (vector unsigned char)__a & __b;1090}1091 1092static __inline__ vector unsigned char __ATTRS_o_ai1093vec_vand(vector unsigned char __a, vector bool char __b) {1094 return __a & (vector unsigned char)__b;1095}1096 1097static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,1098 vector bool char __b) {1099 return __a & __b;1100}1101 1102static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,1103 vector short __b) {1104 return __a & __b;1105}1106 1107static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,1108 vector short __b) {1109 return (vector short)__a & __b;1110}1111 1112static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,1113 vector bool short __b) {1114 return __a & (vector short)__b;1115}1116 1117static __inline__ vector unsigned short __ATTRS_o_ai1118vec_vand(vector unsigned short __a, vector unsigned short __b) {1119 return __a & __b;1120}1121 1122static __inline__ vector unsigned short __ATTRS_o_ai1123vec_vand(vector bool short __a, vector unsigned short __b) {1124 return (vector unsigned short)__a & __b;1125}1126 1127static __inline__ vector unsigned short __ATTRS_o_ai1128vec_vand(vector unsigned short __a, vector bool short __b) {1129 return __a & (vector unsigned short)__b;1130}1131 1132static __inline__ vector bool short __ATTRS_o_ai1133vec_vand(vector bool short __a, vector bool short __b) {1134 return __a & __b;1135}1136 1137static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,1138 vector int __b) {1139 return __a & __b;1140}1141 1142static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,1143 vector int __b) {1144 return (vector int)__a & __b;1145}1146 1147static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,1148 vector bool int __b) {1149 return __a & (vector int)__b;1150}1151 1152static __inline__ vector unsigned int __ATTRS_o_ai1153vec_vand(vector unsigned int __a, vector unsigned int __b) {1154 return __a & __b;1155}1156 1157static __inline__ vector unsigned int __ATTRS_o_ai1158vec_vand(vector bool int __a, vector unsigned int __b) {1159 return (vector unsigned int)__a & __b;1160}1161 1162static __inline__ vector unsigned int __ATTRS_o_ai1163vec_vand(vector unsigned int __a, vector bool int __b) {1164 return __a & (vector unsigned int)__b;1165}1166 1167static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,1168 vector bool int __b) {1169 return __a & __b;1170}1171 1172static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,1173 vector float __b) {1174 vector unsigned int __res =1175 (vector unsigned int)__a & (vector unsigned int)__b;1176 return (vector float)__res;1177}1178 1179static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,1180 vector float __b) {1181 vector unsigned int __res =1182 (vector unsigned int)__a & (vector unsigned int)__b;1183 return (vector float)__res;1184}1185 1186static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,1187 vector bool int __b) {1188 vector unsigned int __res =1189 (vector unsigned int)__a & (vector unsigned int)__b;1190 return (vector float)__res;1191}1192 1193#ifdef __VSX__1194static __inline__ vector signed long long __ATTRS_o_ai1195vec_vand(vector signed long long __a, vector signed long long __b) {1196 return __a & __b;1197}1198 1199static __inline__ vector signed long long __ATTRS_o_ai1200vec_vand(vector bool long long __a, vector signed long long __b) {1201 return (vector signed long long)__a & __b;1202}1203 1204static __inline__ vector signed long long __ATTRS_o_ai1205vec_vand(vector signed long long __a, vector bool long long __b) {1206 return __a & (vector signed long long)__b;1207}1208 1209static __inline__ vector unsigned long long __ATTRS_o_ai1210vec_vand(vector unsigned long long __a, vector unsigned long long __b) {1211 return __a & __b;1212}1213 1214static __inline__ vector unsigned long long __ATTRS_o_ai1215vec_vand(vector bool long long __a, vector unsigned long long __b) {1216 return (vector unsigned long long)__a & __b;1217}1218 1219static __inline__ vector unsigned long long __ATTRS_o_ai1220vec_vand(vector unsigned long long __a, vector bool long long __b) {1221 return __a & (vector unsigned long long)__b;1222}1223 1224static __inline__ vector bool long long __ATTRS_o_ai1225vec_vand(vector bool long long __a, vector bool long long __b) {1226 return __a & __b;1227}1228#endif1229 1230/* vec_andc */1231 1232#define __builtin_altivec_vandc vec_andc1233 1234static __inline__ vector signed char __ATTRS_o_ai1235vec_andc(vector signed char __a, vector signed char __b) {1236 return __a & ~__b;1237}1238 1239static __inline__ vector signed char __ATTRS_o_ai1240vec_andc(vector bool char __a, vector signed char __b) {1241 return (vector signed char)__a & ~__b;1242}1243 1244static __inline__ vector signed char __ATTRS_o_ai1245vec_andc(vector signed char __a, vector bool char __b) {1246 return __a & ~(vector signed char)__b;1247}1248 1249static __inline__ vector unsigned char __ATTRS_o_ai1250vec_andc(vector unsigned char __a, vector unsigned char __b) {1251 return __a & ~__b;1252}1253 1254static __inline__ vector unsigned char __ATTRS_o_ai1255vec_andc(vector bool char __a, vector unsigned char __b) {1256 return (vector unsigned char)__a & ~__b;1257}1258 1259static __inline__ vector unsigned char __ATTRS_o_ai1260vec_andc(vector unsigned char __a, vector bool char __b) {1261 return __a & ~(vector unsigned char)__b;1262}1263 1264static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,1265 vector bool char __b) {1266 return __a & ~__b;1267}1268 1269static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,1270 vector short __b) {1271 return __a & ~__b;1272}1273 1274static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,1275 vector short __b) {1276 return (vector short)__a & ~__b;1277}1278 1279static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,1280 vector bool short __b) {1281 return __a & ~(vector short)__b;1282}1283 1284static __inline__ vector unsigned short __ATTRS_o_ai1285vec_andc(vector unsigned short __a, vector unsigned short __b) {1286 return __a & ~__b;1287}1288 1289static __inline__ vector unsigned short __ATTRS_o_ai1290vec_andc(vector bool short __a, vector unsigned short __b) {1291 return (vector unsigned short)__a & ~__b;1292}1293 1294static __inline__ vector unsigned short __ATTRS_o_ai1295vec_andc(vector unsigned short __a, vector bool short __b) {1296 return __a & ~(vector unsigned short)__b;1297}1298 1299static __inline__ vector bool short __ATTRS_o_ai1300vec_andc(vector bool short __a, vector bool short __b) {1301 return __a & ~__b;1302}1303 1304static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,1305 vector int __b) {1306 return __a & ~__b;1307}1308 1309static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,1310 vector int __b) {1311 return (vector int)__a & ~__b;1312}1313 1314static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,1315 vector bool int __b) {1316 return __a & ~(vector int)__b;1317}1318 1319static __inline__ vector unsigned int __ATTRS_o_ai1320vec_andc(vector unsigned int __a, vector unsigned int __b) {1321 return __a & ~__b;1322}1323 1324static __inline__ vector unsigned int __ATTRS_o_ai1325vec_andc(vector bool int __a, vector unsigned int __b) {1326 return (vector unsigned int)__a & ~__b;1327}1328 1329static __inline__ vector unsigned int __ATTRS_o_ai1330vec_andc(vector unsigned int __a, vector bool int __b) {1331 return __a & ~(vector unsigned int)__b;1332}1333 1334static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,1335 vector bool int __b) {1336 return __a & ~__b;1337}1338 1339static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,1340 vector float __b) {1341 vector unsigned int __res =1342 (vector unsigned int)__a & ~(vector unsigned int)__b;1343 return (vector float)__res;1344}1345 1346static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,1347 vector float __b) {1348 vector unsigned int __res =1349 (vector unsigned int)__a & ~(vector unsigned int)__b;1350 return (vector float)__res;1351}1352 1353static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,1354 vector bool int __b) {1355 vector unsigned int __res =1356 (vector unsigned int)__a & ~(vector unsigned int)__b;1357 return (vector float)__res;1358}1359 1360#ifdef __VSX__1361static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,1362 vector double __b) {1363 vector unsigned long long __res =1364 (vector unsigned long long)__a & ~(vector unsigned long long)__b;1365 return (vector double)__res;1366}1367 1368static __inline__ vector double __ATTRS_o_ai1369vec_andc(vector double __a, vector bool long long __b) {1370 vector unsigned long long __res =1371 (vector unsigned long long)__a & ~(vector unsigned long long)__b;1372 return (vector double)__res;1373}1374 1375static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,1376 vector double __b) {1377 vector unsigned long long __res =1378 (vector unsigned long long)__a & ~(vector unsigned long long)__b;1379 return (vector double)__res;1380}1381 1382static __inline__ vector signed long long __ATTRS_o_ai1383vec_andc(vector signed long long __a, vector signed long long __b) {1384 return __a & ~__b;1385}1386 1387static __inline__ vector signed long long __ATTRS_o_ai1388vec_andc(vector bool long long __a, vector signed long long __b) {1389 return (vector signed long long)__a & ~__b;1390}1391 1392static __inline__ vector signed long long __ATTRS_o_ai1393vec_andc(vector signed long long __a, vector bool long long __b) {1394 return __a & ~(vector signed long long)__b;1395}1396 1397static __inline__ vector unsigned long long __ATTRS_o_ai1398vec_andc(vector unsigned long long __a, vector unsigned long long __b) {1399 return __a & ~__b;1400}1401 1402static __inline__ vector unsigned long long __ATTRS_o_ai1403vec_andc(vector bool long long __a, vector unsigned long long __b) {1404 return (vector unsigned long long)__a & ~__b;1405}1406 1407static __inline__ vector unsigned long long __ATTRS_o_ai1408vec_andc(vector unsigned long long __a, vector bool long long __b) {1409 return __a & ~(vector unsigned long long)__b;1410}1411 1412static __inline__ vector bool long long __ATTRS_o_ai1413vec_andc(vector bool long long __a, vector bool long long __b) {1414 return __a & ~__b;1415}1416#endif1417 1418/* vec_vandc */1419 1420static __inline__ vector signed char __ATTRS_o_ai1421vec_vandc(vector signed char __a, vector signed char __b) {1422 return __a & ~__b;1423}1424 1425static __inline__ vector signed char __ATTRS_o_ai1426vec_vandc(vector bool char __a, vector signed char __b) {1427 return (vector signed char)__a & ~__b;1428}1429 1430static __inline__ vector signed char __ATTRS_o_ai1431vec_vandc(vector signed char __a, vector bool char __b) {1432 return __a & ~(vector signed char)__b;1433}1434 1435static __inline__ vector unsigned char __ATTRS_o_ai1436vec_vandc(vector unsigned char __a, vector unsigned char __b) {1437 return __a & ~__b;1438}1439 1440static __inline__ vector unsigned char __ATTRS_o_ai1441vec_vandc(vector bool char __a, vector unsigned char __b) {1442 return (vector unsigned char)__a & ~__b;1443}1444 1445static __inline__ vector unsigned char __ATTRS_o_ai1446vec_vandc(vector unsigned char __a, vector bool char __b) {1447 return __a & ~(vector unsigned char)__b;1448}1449 1450static __inline__ vector bool char __ATTRS_o_ai1451vec_vandc(vector bool char __a, vector bool char __b) {1452 return __a & ~__b;1453}1454 1455static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,1456 vector short __b) {1457 return __a & ~__b;1458}1459 1460static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,1461 vector short __b) {1462 return (vector short)__a & ~__b;1463}1464 1465static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,1466 vector bool short __b) {1467 return __a & ~(vector short)__b;1468}1469 1470static __inline__ vector unsigned short __ATTRS_o_ai1471vec_vandc(vector unsigned short __a, vector unsigned short __b) {1472 return __a & ~__b;1473}1474 1475static __inline__ vector unsigned short __ATTRS_o_ai1476vec_vandc(vector bool short __a, vector unsigned short __b) {1477 return (vector unsigned short)__a & ~__b;1478}1479 1480static __inline__ vector unsigned short __ATTRS_o_ai1481vec_vandc(vector unsigned short __a, vector bool short __b) {1482 return __a & ~(vector unsigned short)__b;1483}1484 1485static __inline__ vector bool short __ATTRS_o_ai1486vec_vandc(vector bool short __a, vector bool short __b) {1487 return __a & ~__b;1488}1489 1490static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,1491 vector int __b) {1492 return __a & ~__b;1493}1494 1495static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,1496 vector int __b) {1497 return (vector int)__a & ~__b;1498}1499 1500static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,1501 vector bool int __b) {1502 return __a & ~(vector int)__b;1503}1504 1505static __inline__ vector unsigned int __ATTRS_o_ai1506vec_vandc(vector unsigned int __a, vector unsigned int __b) {1507 return __a & ~__b;1508}1509 1510static __inline__ vector unsigned int __ATTRS_o_ai1511vec_vandc(vector bool int __a, vector unsigned int __b) {1512 return (vector unsigned int)__a & ~__b;1513}1514 1515static __inline__ vector unsigned int __ATTRS_o_ai1516vec_vandc(vector unsigned int __a, vector bool int __b) {1517 return __a & ~(vector unsigned int)__b;1518}1519 1520static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,1521 vector bool int __b) {1522 return __a & ~__b;1523}1524 1525static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,1526 vector float __b) {1527 vector unsigned int __res =1528 (vector unsigned int)__a & ~(vector unsigned int)__b;1529 return (vector float)__res;1530}1531 1532static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,1533 vector float __b) {1534 vector unsigned int __res =1535 (vector unsigned int)__a & ~(vector unsigned int)__b;1536 return (vector float)__res;1537}1538 1539static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,1540 vector bool int __b) {1541 vector unsigned int __res =1542 (vector unsigned int)__a & ~(vector unsigned int)__b;1543 return (vector float)__res;1544}1545 1546#ifdef __VSX__1547static __inline__ vector signed long long __ATTRS_o_ai1548vec_vandc(vector signed long long __a, vector signed long long __b) {1549 return __a & ~__b;1550}1551 1552static __inline__ vector signed long long __ATTRS_o_ai1553vec_vandc(vector bool long long __a, vector signed long long __b) {1554 return (vector signed long long)__a & ~__b;1555}1556 1557static __inline__ vector signed long long __ATTRS_o_ai1558vec_vandc(vector signed long long __a, vector bool long long __b) {1559 return __a & ~(vector signed long long)__b;1560}1561 1562static __inline__ vector unsigned long long __ATTRS_o_ai1563vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {1564 return __a & ~__b;1565}1566 1567static __inline__ vector unsigned long long __ATTRS_o_ai1568vec_vandc(vector bool long long __a, vector unsigned long long __b) {1569 return (vector unsigned long long)__a & ~__b;1570}1571 1572static __inline__ vector unsigned long long __ATTRS_o_ai1573vec_vandc(vector unsigned long long __a, vector bool long long __b) {1574 return __a & ~(vector unsigned long long)__b;1575}1576 1577static __inline__ vector bool long long __ATTRS_o_ai1578vec_vandc(vector bool long long __a, vector bool long long __b) {1579 return __a & ~__b;1580}1581#endif1582 1583/* vec_avg */1584 1585static __inline__ vector signed char __ATTRS_o_ai1586vec_avg(vector signed char __a, vector signed char __b) {1587 return __builtin_altivec_vavgsb(__a, __b);1588}1589 1590static __inline__ vector unsigned char __ATTRS_o_ai1591vec_avg(vector unsigned char __a, vector unsigned char __b) {1592 return __builtin_altivec_vavgub(__a, __b);1593}1594 1595static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,1596 vector short __b) {1597 return __builtin_altivec_vavgsh(__a, __b);1598}1599 1600static __inline__ vector unsigned short __ATTRS_o_ai1601vec_avg(vector unsigned short __a, vector unsigned short __b) {1602 return __builtin_altivec_vavguh(__a, __b);1603}1604 1605static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,1606 vector int __b) {1607 return __builtin_altivec_vavgsw(__a, __b);1608}1609 1610static __inline__ vector unsigned int __ATTRS_o_ai1611vec_avg(vector unsigned int __a, vector unsigned int __b) {1612 return __builtin_altivec_vavguw(__a, __b);1613}1614 1615/* vec_vavgsb */1616 1617static __inline__ vector signed char __attribute__((__always_inline__))1618vec_vavgsb(vector signed char __a, vector signed char __b) {1619 return __builtin_altivec_vavgsb(__a, __b);1620}1621 1622/* vec_vavgub */1623 1624static __inline__ vector unsigned char __attribute__((__always_inline__))1625vec_vavgub(vector unsigned char __a, vector unsigned char __b) {1626 return __builtin_altivec_vavgub(__a, __b);1627}1628 1629/* vec_vavgsh */1630 1631static __inline__ vector short __attribute__((__always_inline__))1632vec_vavgsh(vector short __a, vector short __b) {1633 return __builtin_altivec_vavgsh(__a, __b);1634}1635 1636/* vec_vavguh */1637 1638static __inline__ vector unsigned short __attribute__((__always_inline__))1639vec_vavguh(vector unsigned short __a, vector unsigned short __b) {1640 return __builtin_altivec_vavguh(__a, __b);1641}1642 1643/* vec_vavgsw */1644 1645static __inline__ vector int __attribute__((__always_inline__))1646vec_vavgsw(vector int __a, vector int __b) {1647 return __builtin_altivec_vavgsw(__a, __b);1648}1649 1650/* vec_vavguw */1651 1652static __inline__ vector unsigned int __attribute__((__always_inline__))1653vec_vavguw(vector unsigned int __a, vector unsigned int __b) {1654 return __builtin_altivec_vavguw(__a, __b);1655}1656 1657/* vec_ceil */1658 1659static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {1660#ifdef __VSX__1661 return __builtin_vsx_xvrspip(__a);1662#else1663 return __builtin_altivec_vrfip(__a);1664#endif1665}1666 1667#ifdef __VSX__1668static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {1669 return __builtin_vsx_xvrdpip(__a);1670}1671#endif1672 1673/* vec_roundp */1674static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a) {1675 return vec_ceil(__a);1676}1677 1678#ifdef __VSX__1679static __inline__ vector double __ATTRS_o_ai vec_roundp(vector double __a) {1680 return vec_ceil(__a);1681}1682#endif1683 1684/* vec_vrfip */1685 1686static __inline__ vector float __attribute__((__always_inline__))1687vec_vrfip(vector float __a) {1688 return __builtin_altivec_vrfip(__a);1689}1690 1691/* vec_cmpb */1692 1693static __inline__ vector int __attribute__((__always_inline__))1694vec_cmpb(vector float __a, vector float __b) {1695 return __builtin_altivec_vcmpbfp(__a, __b);1696}1697 1698/* vec_vcmpbfp */1699 1700static __inline__ vector int __attribute__((__always_inline__))1701vec_vcmpbfp(vector float __a, vector float __b) {1702 return __builtin_altivec_vcmpbfp(__a, __b);1703}1704 1705/* vec_cmpeq */1706 1707static __inline__ vector bool char __ATTRS_o_ai1708vec_cmpeq(vector signed char __a, vector signed char __b) {1709 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,1710 (vector char)__b);1711}1712 1713static __inline__ vector bool char __ATTRS_o_ai1714vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {1715 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,1716 (vector char)__b);1717}1718 1719static __inline__ vector bool char __ATTRS_o_ai1720vec_cmpeq(vector bool char __a, vector bool char __b) {1721 return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,1722 (vector char)__b);1723}1724 1725static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,1726 vector short __b) {1727 return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);1728}1729 1730static __inline__ vector bool short __ATTRS_o_ai1731vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {1732 return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,1733 (vector short)__b);1734}1735 1736static __inline__ vector bool short __ATTRS_o_ai1737vec_cmpeq(vector bool short __a, vector bool short __b) {1738 return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,1739 (vector short)__b);1740}1741 1742static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,1743 vector int __b) {1744 return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);1745}1746 1747static __inline__ vector bool int __ATTRS_o_ai1748vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {1749 return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,1750 (vector int)__b);1751}1752 1753static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,1754 vector bool int __b) {1755 return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,1756 (vector int)__b);1757}1758 1759#ifdef __POWER8_VECTOR__1760static __inline__ vector bool long long __ATTRS_o_ai1761vec_cmpeq(vector signed long long __a, vector signed long long __b) {1762 return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);1763}1764 1765static __inline__ vector bool long long __ATTRS_o_ai1766vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {1767 return (vector bool long long)__builtin_altivec_vcmpequd(1768 (vector long long)__a, (vector long long)__b);1769}1770 1771static __inline__ vector bool long long __ATTRS_o_ai1772vec_cmpeq(vector bool long long __a, vector bool long long __b) {1773 return (vector bool long long)__builtin_altivec_vcmpequd(1774 (vector long long)__a, (vector long long)__b);1775}1776#elif defined(__VSX__)1777static __inline__ vector bool long long __ATTRS_o_ai1778vec_cmpeq(vector signed long long __a, vector signed long long __b) {1779 vector bool int __wordcmp =1780 vec_cmpeq((vector signed int)__a, (vector signed int)__b);1781#ifdef __LITTLE_ENDIAN__1782 __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 3, 0, 1, 2);1783 return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 1,1784 1, 3, 3);1785#else1786 __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 1, 2, 3, 0);1787 return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 0,1788 0, 2, 2);1789#endif1790}1791 1792static __inline__ vector bool long long __ATTRS_o_ai1793vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {1794 return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);1795}1796 1797static __inline__ vector bool long long __ATTRS_o_ai1798vec_cmpeq(vector bool long long __a, vector bool long long __b) {1799 return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);1800}1801#endif1802 1803static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,1804 vector float __b) {1805#ifdef __VSX__1806 return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);1807#else1808 return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);1809#endif1810}1811 1812#ifdef __VSX__1813static __inline__ vector bool long long __ATTRS_o_ai1814vec_cmpeq(vector double __a, vector double __b) {1815 return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);1816}1817#endif1818 1819#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)1820static __inline__ vector bool __int128 __ATTRS_o_ai1821vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) {1822 return (vector bool __int128)__builtin_altivec_vcmpequq(1823 (vector unsigned __int128)__a, (vector unsigned __int128)__b);1824}1825 1826static __inline__ vector bool __int128 __ATTRS_o_ai1827vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) {1828 return (vector bool __int128)__builtin_altivec_vcmpequq(1829 (vector unsigned __int128)__a, (vector unsigned __int128)__b);1830}1831 1832static __inline__ vector bool __int128 __ATTRS_o_ai1833vec_cmpeq(vector bool __int128 __a, vector bool __int128 __b) {1834 return (vector bool __int128)__builtin_altivec_vcmpequq(1835 (vector unsigned __int128)__a, (vector unsigned __int128)__b);1836}1837#endif1838 1839#ifdef __POWER9_VECTOR__1840/* vec_cmpne */1841 1842static __inline__ vector bool char __ATTRS_o_ai1843vec_cmpne(vector bool char __a, vector bool char __b) {1844 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,1845 (vector char)__b);1846}1847 1848static __inline__ vector bool char __ATTRS_o_ai1849vec_cmpne(vector signed char __a, vector signed char __b) {1850 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,1851 (vector char)__b);1852}1853 1854static __inline__ vector bool char __ATTRS_o_ai1855vec_cmpne(vector unsigned char __a, vector unsigned char __b) {1856 return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,1857 (vector char)__b);1858}1859 1860static __inline__ vector bool short __ATTRS_o_ai1861vec_cmpne(vector bool short __a, vector bool short __b) {1862 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,1863 (vector short)__b);1864}1865 1866static __inline__ vector bool short __ATTRS_o_ai1867vec_cmpne(vector signed short __a, vector signed short __b) {1868 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,1869 (vector short)__b);1870}1871 1872static __inline__ vector bool short __ATTRS_o_ai1873vec_cmpne(vector unsigned short __a, vector unsigned short __b) {1874 return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,1875 (vector short)__b);1876}1877 1878static __inline__ vector bool int __ATTRS_o_ai1879vec_cmpne(vector bool int __a, vector bool int __b) {1880 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,1881 (vector int)__b);1882}1883 1884static __inline__ vector bool int __ATTRS_o_ai1885vec_cmpne(vector signed int __a, vector signed int __b) {1886 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,1887 (vector int)__b);1888}1889 1890static __inline__ vector bool int __ATTRS_o_ai1891vec_cmpne(vector unsigned int __a, vector unsigned int __b) {1892 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,1893 (vector int)__b);1894}1895 1896static __inline__ vector bool int __ATTRS_o_ai1897vec_cmpne(vector float __a, vector float __b) {1898 return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,1899 (vector int)__b);1900}1901 1902#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)1903static __inline__ vector bool __int128 __ATTRS_o_ai1904vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) {1905 return (vector bool __int128)~(__builtin_altivec_vcmpequq(1906 (vector unsigned __int128)__a, (vector unsigned __int128)__b));1907}1908 1909static __inline__ vector bool __int128 __ATTRS_o_ai1910vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) {1911 return (vector bool __int128)~(__builtin_altivec_vcmpequq(1912 (vector unsigned __int128)__a, (vector unsigned __int128)__b));1913}1914 1915static __inline__ vector bool __int128 __ATTRS_o_ai1916vec_cmpne(vector bool __int128 __a, vector bool __int128 __b) {1917 return (vector bool __int128)~(__builtin_altivec_vcmpequq(1918 (vector unsigned __int128)__a, (vector unsigned __int128)__b));1919}1920#endif1921 1922/* vec_cmpnez */1923 1924static __inline__ vector bool char __ATTRS_o_ai1925vec_cmpnez(vector signed char __a, vector signed char __b) {1926 return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,1927 (vector char)__b);1928}1929 1930static __inline__ vector bool char __ATTRS_o_ai1931vec_cmpnez(vector unsigned char __a, vector unsigned char __b) {1932 return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,1933 (vector char)__b);1934}1935 1936static __inline__ vector bool short __ATTRS_o_ai1937vec_cmpnez(vector signed short __a, vector signed short __b) {1938 return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,1939 (vector short)__b);1940}1941 1942static __inline__ vector bool short __ATTRS_o_ai1943vec_cmpnez(vector unsigned short __a, vector unsigned short __b) {1944 return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,1945 (vector short)__b);1946}1947 1948static __inline__ vector bool int __ATTRS_o_ai1949vec_cmpnez(vector signed int __a, vector signed int __b) {1950 return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,1951 (vector int)__b);1952}1953 1954static __inline__ vector bool int __ATTRS_o_ai1955vec_cmpnez(vector unsigned int __a, vector unsigned int __b) {1956 return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,1957 (vector int)__b);1958}1959 1960static __inline__ signed int __ATTRS_o_ai1961vec_cntlz_lsbb(vector signed char __a) {1962#ifdef __LITTLE_ENDIAN__1963 return __builtin_altivec_vctzlsbb((vector unsigned char)__a);1964#else1965 return __builtin_altivec_vclzlsbb((vector unsigned char)__a);1966#endif1967}1968 1969static __inline__ signed int __ATTRS_o_ai1970vec_cntlz_lsbb(vector unsigned char __a) {1971#ifdef __LITTLE_ENDIAN__1972 return __builtin_altivec_vctzlsbb((vector unsigned char)__a);1973#else1974 return __builtin_altivec_vclzlsbb(__a);1975#endif1976}1977 1978static __inline__ signed int __ATTRS_o_ai1979vec_cnttz_lsbb(vector signed char __a) {1980#ifdef __LITTLE_ENDIAN__1981 return __builtin_altivec_vclzlsbb((vector unsigned char)__a);1982#else1983 return __builtin_altivec_vctzlsbb((vector unsigned char)__a);1984#endif1985}1986 1987static __inline__ signed int __ATTRS_o_ai1988vec_cnttz_lsbb(vector unsigned char __a) {1989#ifdef __LITTLE_ENDIAN__1990 return __builtin_altivec_vclzlsbb(__a);1991#else1992 return __builtin_altivec_vctzlsbb(__a);1993#endif1994}1995 1996static __inline__ vector unsigned int __ATTRS_o_ai1997vec_parity_lsbb(vector unsigned int __a) {1998 return __builtin_altivec_vprtybw(__a);1999}2000 2001static __inline__ vector unsigned int __ATTRS_o_ai2002vec_parity_lsbb(vector signed int __a) {2003 return __builtin_altivec_vprtybw((vector unsigned int)__a);2004}2005 2006#ifdef __SIZEOF_INT128__2007static __inline__ vector unsigned __int128 __ATTRS_o_ai2008vec_parity_lsbb(vector unsigned __int128 __a) {2009 return __builtin_altivec_vprtybq(__a);2010}2011 2012static __inline__ vector unsigned __int128 __ATTRS_o_ai2013vec_parity_lsbb(vector signed __int128 __a) {2014 return __builtin_altivec_vprtybq((vector unsigned __int128)__a);2015}2016#endif2017 2018static __inline__ vector unsigned long long __ATTRS_o_ai2019vec_parity_lsbb(vector unsigned long long __a) {2020 return __builtin_altivec_vprtybd(__a);2021}2022 2023static __inline__ vector unsigned long long __ATTRS_o_ai2024vec_parity_lsbb(vector signed long long __a) {2025 return __builtin_altivec_vprtybd((vector unsigned long long)__a);2026}2027 2028#else2029/* vec_cmpne */2030 2031static __inline__ vector bool char __ATTRS_o_ai2032vec_cmpne(vector bool char __a, vector bool char __b) {2033 return ~(vec_cmpeq(__a, __b));2034}2035 2036static __inline__ vector bool char __ATTRS_o_ai2037vec_cmpne(vector signed char __a, vector signed char __b) {2038 return ~(vec_cmpeq(__a, __b));2039}2040 2041static __inline__ vector bool char __ATTRS_o_ai2042vec_cmpne(vector unsigned char __a, vector unsigned char __b) {2043 return ~(vec_cmpeq(__a, __b));2044}2045 2046static __inline__ vector bool short __ATTRS_o_ai2047vec_cmpne(vector bool short __a, vector bool short __b) {2048 return ~(vec_cmpeq(__a, __b));2049}2050 2051static __inline__ vector bool short __ATTRS_o_ai2052vec_cmpne(vector signed short __a, vector signed short __b) {2053 return ~(vec_cmpeq(__a, __b));2054}2055 2056static __inline__ vector bool short __ATTRS_o_ai2057vec_cmpne(vector unsigned short __a, vector unsigned short __b) {2058 return ~(vec_cmpeq(__a, __b));2059}2060 2061static __inline__ vector bool int __ATTRS_o_ai2062vec_cmpne(vector bool int __a, vector bool int __b) {2063 return ~(vec_cmpeq(__a, __b));2064}2065 2066static __inline__ vector bool int __ATTRS_o_ai2067vec_cmpne(vector signed int __a, vector signed int __b) {2068 return ~(vec_cmpeq(__a, __b));2069}2070 2071static __inline__ vector bool int __ATTRS_o_ai2072vec_cmpne(vector unsigned int __a, vector unsigned int __b) {2073 return ~(vec_cmpeq(__a, __b));2074}2075 2076static __inline__ vector bool int __ATTRS_o_ai2077vec_cmpne(vector float __a, vector float __b) {2078 return ~(vec_cmpeq(__a, __b));2079}2080#endif2081 2082#ifdef __POWER8_VECTOR__2083static __inline__ vector bool long long __ATTRS_o_ai2084vec_cmpne(vector bool long long __a, vector bool long long __b) {2085 return (vector bool long long)2086 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));2087}2088 2089static __inline__ vector bool long long __ATTRS_o_ai2090vec_cmpne(vector signed long long __a, vector signed long long __b) {2091 return (vector bool long long)2092 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));2093}2094 2095static __inline__ vector bool long long __ATTRS_o_ai2096vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {2097 return (vector bool long long)2098 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));2099}2100#elif defined(__VSX__)2101static __inline__ vector bool long long __ATTRS_o_ai2102vec_cmpne(vector bool long long __a, vector bool long long __b) {2103 return (vector bool long long)~(2104 vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));2105}2106 2107static __inline__ vector bool long long __ATTRS_o_ai2108vec_cmpne(vector signed long long __a, vector signed long long __b) {2109 return (vector bool long long)~(2110 vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));2111}2112 2113static __inline__ vector bool long long __ATTRS_o_ai2114vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {2115 return (vector bool long long)~(2116 vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));2117}2118#endif2119 2120#ifdef __VSX__2121static __inline__ vector bool long long __ATTRS_o_ai2122vec_cmpne(vector double __a, vector double __b) {2123 return (vector bool long long)2124 ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));2125}2126#endif2127 2128/* vec_cmpgt */2129 2130static __inline__ vector bool char __ATTRS_o_ai2131vec_cmpgt(vector signed char __a, vector signed char __b) {2132 return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);2133}2134 2135static __inline__ vector bool char __ATTRS_o_ai2136vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {2137 return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);2138}2139 2140static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,2141 vector short __b) {2142 return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);2143}2144 2145static __inline__ vector bool short __ATTRS_o_ai2146vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {2147 return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);2148}2149 2150static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,2151 vector int __b) {2152 return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);2153}2154 2155static __inline__ vector bool int __ATTRS_o_ai2156vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {2157 return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);2158}2159 2160#ifdef __POWER8_VECTOR__2161static __inline__ vector bool long long __ATTRS_o_ai2162vec_cmpgt(vector signed long long __a, vector signed long long __b) {2163 return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);2164}2165 2166static __inline__ vector bool long long __ATTRS_o_ai2167vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {2168 return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);2169}2170#elif defined(__VSX__)2171static __inline__ vector bool long long __ATTRS_o_ai2172vec_cmpgt(vector signed long long __a, vector signed long long __b) {2173 vector signed int __sgtw = (vector signed int)vec_cmpgt(2174 (vector signed int)__a, (vector signed int)__b);2175 vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(2176 (vector unsigned int)__a, (vector unsigned int)__b);2177 vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(2178 (vector signed int)__a, (vector signed int)__b);2179#ifdef __LITTLE_ENDIAN__2180 __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;2181 __sgtw |= (vector signed int)__ugtw;2182 return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 1, 1, 3,2183 3);2184#else2185 __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;2186 __sgtw |= (vector signed int)__ugtw;2187 return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 0, 0, 2,2188 2);2189#endif2190}2191 2192static __inline__ vector bool long long __ATTRS_o_ai2193vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {2194 vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(2195 (vector unsigned int)__a, (vector unsigned int)__b);2196 vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(2197 (vector signed int)__a, (vector signed int)__b);2198#ifdef __LITTLE_ENDIAN__2199 __eqw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;2200 __ugtw |= __eqw;2201 return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 1, 1, 3,2202 3);2203#else2204 __eqw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;2205 __ugtw |= __eqw;2206 return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 0, 0, 2,2207 2);2208#endif2209}2210#endif2211 2212static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,2213 vector float __b) {2214#ifdef __VSX__2215 return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);2216#else2217 return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);2218#endif2219}2220 2221#ifdef __VSX__2222static __inline__ vector bool long long __ATTRS_o_ai2223vec_cmpgt(vector double __a, vector double __b) {2224 return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);2225}2226#endif2227 2228#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)2229static __inline__ vector bool __int128 __ATTRS_o_ai2230vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) {2231 return (vector bool __int128)__builtin_altivec_vcmpgtsq(__a, __b);2232}2233 2234static __inline__ vector bool __int128 __ATTRS_o_ai2235vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) {2236 return (vector bool __int128)__builtin_altivec_vcmpgtuq(__a, __b);2237}2238#endif2239 2240/* vec_cmpge */2241 2242static __inline__ vector bool char __ATTRS_o_ai2243vec_cmpge(vector signed char __a, vector signed char __b) {2244 return ~(vec_cmpgt(__b, __a));2245}2246 2247static __inline__ vector bool char __ATTRS_o_ai2248vec_cmpge(vector unsigned char __a, vector unsigned char __b) {2249 return ~(vec_cmpgt(__b, __a));2250}2251 2252static __inline__ vector bool short __ATTRS_o_ai2253vec_cmpge(vector signed short __a, vector signed short __b) {2254 return ~(vec_cmpgt(__b, __a));2255}2256 2257static __inline__ vector bool short __ATTRS_o_ai2258vec_cmpge(vector unsigned short __a, vector unsigned short __b) {2259 return ~(vec_cmpgt(__b, __a));2260}2261 2262static __inline__ vector bool int __ATTRS_o_ai2263vec_cmpge(vector signed int __a, vector signed int __b) {2264 return ~(vec_cmpgt(__b, __a));2265}2266 2267static __inline__ vector bool int __ATTRS_o_ai2268vec_cmpge(vector unsigned int __a, vector unsigned int __b) {2269 return ~(vec_cmpgt(__b, __a));2270}2271 2272static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,2273 vector float __b) {2274#ifdef __VSX__2275 return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);2276#else2277 return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);2278#endif2279}2280 2281#ifdef __VSX__2282static __inline__ vector bool long long __ATTRS_o_ai2283vec_cmpge(vector double __a, vector double __b) {2284 return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);2285}2286 2287static __inline__ vector bool long long __ATTRS_o_ai2288vec_cmpge(vector signed long long __a, vector signed long long __b) {2289 return ~(vec_cmpgt(__b, __a));2290}2291 2292static __inline__ vector bool long long __ATTRS_o_ai2293vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {2294 return ~(vec_cmpgt(__b, __a));2295}2296#endif2297 2298#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)2299static __inline__ vector bool __int128 __ATTRS_o_ai2300vec_cmpge(vector signed __int128 __a, vector signed __int128 __b) {2301 return ~(vec_cmpgt(__b, __a));2302}2303 2304static __inline__ vector bool __int128 __ATTRS_o_ai2305vec_cmpge(vector unsigned __int128 __a, vector unsigned __int128 __b) {2306 return ~(vec_cmpgt(__b, __a));2307}2308#endif2309 2310/* vec_vcmpgefp */2311 2312static __inline__ vector bool int __attribute__((__always_inline__))2313vec_vcmpgefp(vector float __a, vector float __b) {2314 return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);2315}2316 2317/* vec_vcmpgtsb */2318 2319static __inline__ vector bool char __attribute__((__always_inline__))2320vec_vcmpgtsb(vector signed char __a, vector signed char __b) {2321 return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);2322}2323 2324/* vec_vcmpgtub */2325 2326static __inline__ vector bool char __attribute__((__always_inline__))2327vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {2328 return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);2329}2330 2331/* vec_vcmpgtsh */2332 2333static __inline__ vector bool short __attribute__((__always_inline__))2334vec_vcmpgtsh(vector short __a, vector short __b) {2335 return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);2336}2337 2338/* vec_vcmpgtuh */2339 2340static __inline__ vector bool short __attribute__((__always_inline__))2341vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {2342 return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);2343}2344 2345/* vec_vcmpgtsw */2346 2347static __inline__ vector bool int __attribute__((__always_inline__))2348vec_vcmpgtsw(vector int __a, vector int __b) {2349 return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);2350}2351 2352/* vec_vcmpgtuw */2353 2354static __inline__ vector bool int __attribute__((__always_inline__))2355vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {2356 return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);2357}2358 2359/* vec_vcmpgtfp */2360 2361static __inline__ vector bool int __attribute__((__always_inline__))2362vec_vcmpgtfp(vector float __a, vector float __b) {2363 return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);2364}2365 2366/* vec_cmple */2367 2368static __inline__ vector bool char __ATTRS_o_ai2369vec_cmple(vector signed char __a, vector signed char __b) {2370 return vec_cmpge(__b, __a);2371}2372 2373static __inline__ vector bool char __ATTRS_o_ai2374vec_cmple(vector unsigned char __a, vector unsigned char __b) {2375 return vec_cmpge(__b, __a);2376}2377 2378static __inline__ vector bool short __ATTRS_o_ai2379vec_cmple(vector signed short __a, vector signed short __b) {2380 return vec_cmpge(__b, __a);2381}2382 2383static __inline__ vector bool short __ATTRS_o_ai2384vec_cmple(vector unsigned short __a, vector unsigned short __b) {2385 return vec_cmpge(__b, __a);2386}2387 2388static __inline__ vector bool int __ATTRS_o_ai2389vec_cmple(vector signed int __a, vector signed int __b) {2390 return vec_cmpge(__b, __a);2391}2392 2393static __inline__ vector bool int __ATTRS_o_ai2394vec_cmple(vector unsigned int __a, vector unsigned int __b) {2395 return vec_cmpge(__b, __a);2396}2397 2398static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,2399 vector float __b) {2400 return vec_cmpge(__b, __a);2401}2402 2403#ifdef __VSX__2404static __inline__ vector bool long long __ATTRS_o_ai2405vec_cmple(vector double __a, vector double __b) {2406 return vec_cmpge(__b, __a);2407}2408 2409static __inline__ vector bool long long __ATTRS_o_ai2410vec_cmple(vector signed long long __a, vector signed long long __b) {2411 return vec_cmpge(__b, __a);2412}2413 2414static __inline__ vector bool long long __ATTRS_o_ai2415vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {2416 return vec_cmpge(__b, __a);2417}2418#endif2419 2420#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)2421static __inline__ vector bool __int128 __ATTRS_o_ai2422vec_cmple(vector signed __int128 __a, vector signed __int128 __b) {2423 return vec_cmpge(__b, __a);2424}2425 2426static __inline__ vector bool __int128 __ATTRS_o_ai2427vec_cmple(vector unsigned __int128 __a, vector unsigned __int128 __b) {2428 return vec_cmpge(__b, __a);2429}2430#endif2431 2432/* vec_cmplt */2433 2434static __inline__ vector bool char __ATTRS_o_ai2435vec_cmplt(vector signed char __a, vector signed char __b) {2436 return vec_cmpgt(__b, __a);2437}2438 2439static __inline__ vector bool char __ATTRS_o_ai2440vec_cmplt(vector unsigned char __a, vector unsigned char __b) {2441 return vec_cmpgt(__b, __a);2442}2443 2444static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,2445 vector short __b) {2446 return vec_cmpgt(__b, __a);2447}2448 2449static __inline__ vector bool short __ATTRS_o_ai2450vec_cmplt(vector unsigned short __a, vector unsigned short __b) {2451 return vec_cmpgt(__b, __a);2452}2453 2454static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,2455 vector int __b) {2456 return vec_cmpgt(__b, __a);2457}2458 2459static __inline__ vector bool int __ATTRS_o_ai2460vec_cmplt(vector unsigned int __a, vector unsigned int __b) {2461 return vec_cmpgt(__b, __a);2462}2463 2464static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,2465 vector float __b) {2466 return vec_cmpgt(__b, __a);2467}2468 2469#ifdef __VSX__2470static __inline__ vector bool long long __ATTRS_o_ai2471vec_cmplt(vector double __a, vector double __b) {2472 return vec_cmpgt(__b, __a);2473}2474#endif2475 2476#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)2477static __inline__ vector bool __int128 __ATTRS_o_ai2478vec_cmplt(vector signed __int128 __a, vector signed __int128 __b) {2479 return vec_cmpgt(__b, __a);2480}2481 2482static __inline__ vector bool __int128 __ATTRS_o_ai2483vec_cmplt(vector unsigned __int128 __a, vector unsigned __int128 __b) {2484 return vec_cmpgt(__b, __a);2485}2486#endif2487 2488#ifdef __VSX__2489static __inline__ vector bool long long __ATTRS_o_ai2490vec_cmplt(vector signed long long __a, vector signed long long __b) {2491 return vec_cmpgt(__b, __a);2492}2493 2494static __inline__ vector bool long long __ATTRS_o_ai2495vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {2496 return vec_cmpgt(__b, __a);2497}2498#endif2499 2500#ifdef __POWER8_VECTOR__2501/* vec_popcnt */2502 2503static __inline__ vector unsigned char __ATTRS_o_ai2504vec_popcnt(vector signed char __a) {2505 return (vector unsigned char)__builtin_elementwise_popcount(2506 (vector unsigned char)__a);2507}2508static __inline__ vector unsigned char __ATTRS_o_ai2509vec_popcnt(vector unsigned char __a) {2510 return __builtin_elementwise_popcount(__a);2511}2512static __inline__ vector unsigned short __ATTRS_o_ai2513vec_popcnt(vector signed short __a) {2514 return (vector unsigned short)__builtin_elementwise_popcount(2515 (vector unsigned short)__a);2516}2517static __inline__ vector unsigned short __ATTRS_o_ai2518vec_popcnt(vector unsigned short __a) {2519 return __builtin_elementwise_popcount(__a);2520}2521static __inline__ vector unsigned int __ATTRS_o_ai2522vec_popcnt(vector signed int __a) {2523 return __builtin_elementwise_popcount((vector unsigned int)__a);2524}2525static __inline__ vector unsigned int __ATTRS_o_ai2526vec_popcnt(vector unsigned int __a) {2527 return __builtin_elementwise_popcount(__a);2528}2529static __inline__ vector unsigned long long __ATTRS_o_ai2530vec_popcnt(vector signed long long __a) {2531 return __builtin_elementwise_popcount((vector unsigned long long)__a);2532}2533static __inline__ vector unsigned long long __ATTRS_o_ai2534vec_popcnt(vector unsigned long long __a) {2535 return __builtin_elementwise_popcount(__a);2536}2537 2538#define vec_vclz vec_cntlz2539/* vec_cntlz */2540 2541static __inline__ vector signed char __ATTRS_o_ai2542vec_cntlz(vector signed char __a) {2543 return (vector signed char)__builtin_altivec_vclzb((vector unsigned char)__a);2544}2545static __inline__ vector unsigned char __ATTRS_o_ai2546vec_cntlz(vector unsigned char __a) {2547 return __builtin_altivec_vclzb(__a);2548}2549static __inline__ vector signed short __ATTRS_o_ai2550vec_cntlz(vector signed short __a) {2551 return (vector signed short)__builtin_altivec_vclzh(2552 (vector unsigned short)__a);2553}2554static __inline__ vector unsigned short __ATTRS_o_ai2555vec_cntlz(vector unsigned short __a) {2556 return __builtin_altivec_vclzh(__a);2557}2558static __inline__ vector signed int __ATTRS_o_ai2559vec_cntlz(vector signed int __a) {2560 return (vector signed int)__builtin_altivec_vclzw((vector unsigned int)__a);2561}2562static __inline__ vector unsigned int __ATTRS_o_ai2563vec_cntlz(vector unsigned int __a) {2564 return __builtin_altivec_vclzw(__a);2565}2566static __inline__ vector signed long long __ATTRS_o_ai2567vec_cntlz(vector signed long long __a) {2568 return (vector signed long long)__builtin_altivec_vclzd(2569 (vector unsigned long long)__a);2570}2571static __inline__ vector unsigned long long __ATTRS_o_ai2572vec_cntlz(vector unsigned long long __a) {2573 return __builtin_altivec_vclzd(__a);2574}2575#endif2576 2577#ifdef __POWER9_VECTOR__2578 2579/* vec_cnttz */2580 2581static __inline__ vector signed char __ATTRS_o_ai2582vec_cnttz(vector signed char __a) {2583 return (vector signed char)__builtin_altivec_vctzb((vector unsigned char)__a);2584}2585static __inline__ vector unsigned char __ATTRS_o_ai2586vec_cnttz(vector unsigned char __a) {2587 return __builtin_altivec_vctzb(__a);2588}2589static __inline__ vector signed short __ATTRS_o_ai2590vec_cnttz(vector signed short __a) {2591 return (vector signed short)__builtin_altivec_vctzh(2592 (vector unsigned short)__a);2593}2594static __inline__ vector unsigned short __ATTRS_o_ai2595vec_cnttz(vector unsigned short __a) {2596 return __builtin_altivec_vctzh(__a);2597}2598static __inline__ vector signed int __ATTRS_o_ai2599vec_cnttz(vector signed int __a) {2600 return (vector signed int)__builtin_altivec_vctzw((vector unsigned int)__a);2601}2602static __inline__ vector unsigned int __ATTRS_o_ai2603vec_cnttz(vector unsigned int __a) {2604 return __builtin_altivec_vctzw(__a);2605}2606static __inline__ vector signed long long __ATTRS_o_ai2607vec_cnttz(vector signed long long __a) {2608 return (vector signed long long)__builtin_altivec_vctzd(2609 (vector unsigned long long)__a);2610}2611static __inline__ vector unsigned long long __ATTRS_o_ai2612vec_cnttz(vector unsigned long long __a) {2613 return __builtin_altivec_vctzd(__a);2614}2615 2616/* vec_first_match_index */2617 2618static __inline__ unsigned __ATTRS_o_ai2619vec_first_match_index(vector signed char __a, vector signed char __b) {2620 vector unsigned long long __res =2621#ifdef __LITTLE_ENDIAN__2622 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));2623#else2624 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));2625#endif2626 if (__res[0] == 64) {2627 return (__res[1] + 64) >> 3;2628 }2629 return __res[0] >> 3;2630}2631 2632static __inline__ unsigned __ATTRS_o_ai2633vec_first_match_index(vector unsigned char __a, vector unsigned char __b) {2634 vector unsigned long long __res =2635#ifdef __LITTLE_ENDIAN__2636 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));2637#else2638 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));2639#endif2640 if (__res[0] == 64) {2641 return (__res[1] + 64) >> 3;2642 }2643 return __res[0] >> 3;2644}2645 2646static __inline__ unsigned __ATTRS_o_ai2647vec_first_match_index(vector signed short __a, vector signed short __b) {2648 vector unsigned long long __res =2649#ifdef __LITTLE_ENDIAN__2650 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));2651#else2652 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));2653#endif2654 if (__res[0] == 64) {2655 return (__res[1] + 64) >> 4;2656 }2657 return __res[0] >> 4;2658}2659 2660static __inline__ unsigned __ATTRS_o_ai2661vec_first_match_index(vector unsigned short __a, vector unsigned short __b) {2662 vector unsigned long long __res =2663#ifdef __LITTLE_ENDIAN__2664 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));2665#else2666 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));2667#endif2668 if (__res[0] == 64) {2669 return (__res[1] + 64) >> 4;2670 }2671 return __res[0] >> 4;2672}2673 2674static __inline__ unsigned __ATTRS_o_ai2675vec_first_match_index(vector signed int __a, vector signed int __b) {2676 vector unsigned long long __res =2677#ifdef __LITTLE_ENDIAN__2678 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));2679#else2680 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));2681#endif2682 if (__res[0] == 64) {2683 return (__res[1] + 64) >> 5;2684 }2685 return __res[0] >> 5;2686}2687 2688static __inline__ unsigned __ATTRS_o_ai2689vec_first_match_index(vector unsigned int __a, vector unsigned int __b) {2690 vector unsigned long long __res =2691#ifdef __LITTLE_ENDIAN__2692 vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));2693#else2694 vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));2695#endif2696 if (__res[0] == 64) {2697 return (__res[1] + 64) >> 5;2698 }2699 return __res[0] >> 5;2700}2701 2702/* vec_first_match_or_eos_index */2703 2704static __inline__ unsigned __ATTRS_o_ai2705vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {2706 /* Compare the result of the comparison of two vectors with either and OR the2707 result. Either the elements are equal or one will equal the comparison2708 result if either is zero.2709 */2710 vector bool char __tmp1 = vec_cmpeq(__a, __b);2711 vector bool char __tmp2 = __tmp1 |2712 vec_cmpeq((vector signed char)__tmp1, __a) |2713 vec_cmpeq((vector signed char)__tmp1, __b);2714 2715 vector unsigned long long __res =2716#ifdef __LITTLE_ENDIAN__2717 vec_cnttz((vector unsigned long long)__tmp2);2718#else2719 vec_cntlz((vector unsigned long long)__tmp2);2720#endif2721 if (__res[0] == 64) {2722 return (__res[1] + 64) >> 3;2723 }2724 return __res[0] >> 3;2725}2726 2727static __inline__ unsigned __ATTRS_o_ai2728vec_first_match_or_eos_index(vector unsigned char __a,2729 vector unsigned char __b) {2730 vector bool char __tmp1 = vec_cmpeq(__a, __b);2731 vector bool char __tmp2 = __tmp1 |2732 vec_cmpeq((vector unsigned char)__tmp1, __a) |2733 vec_cmpeq((vector unsigned char)__tmp1, __b);2734 2735 vector unsigned long long __res =2736#ifdef __LITTLE_ENDIAN__2737 vec_cnttz((vector unsigned long long)__tmp2);2738#else2739 vec_cntlz((vector unsigned long long)__tmp2);2740#endif2741 if (__res[0] == 64) {2742 return (__res[1] + 64) >> 3;2743 }2744 return __res[0] >> 3;2745}2746 2747static __inline__ unsigned __ATTRS_o_ai2748vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {2749 vector bool short __tmp1 = vec_cmpeq(__a, __b);2750 vector bool short __tmp2 = __tmp1 |2751 vec_cmpeq((vector signed short)__tmp1, __a) |2752 vec_cmpeq((vector signed short)__tmp1, __b);2753 2754 vector unsigned long long __res =2755#ifdef __LITTLE_ENDIAN__2756 vec_cnttz((vector unsigned long long)__tmp2);2757#else2758 vec_cntlz((vector unsigned long long)__tmp2);2759#endif2760 if (__res[0] == 64) {2761 return (__res[1] + 64) >> 4;2762 }2763 return __res[0] >> 4;2764}2765 2766static __inline__ unsigned __ATTRS_o_ai2767vec_first_match_or_eos_index(vector unsigned short __a,2768 vector unsigned short __b) {2769 vector bool short __tmp1 = vec_cmpeq(__a, __b);2770 vector bool short __tmp2 = __tmp1 |2771 vec_cmpeq((vector unsigned short)__tmp1, __a) |2772 vec_cmpeq((vector unsigned short)__tmp1, __b);2773 2774 vector unsigned long long __res =2775#ifdef __LITTLE_ENDIAN__2776 vec_cnttz((vector unsigned long long)__tmp2);2777#else2778 vec_cntlz((vector unsigned long long)__tmp2);2779#endif2780 if (__res[0] == 64) {2781 return (__res[1] + 64) >> 4;2782 }2783 return __res[0] >> 4;2784}2785 2786static __inline__ unsigned __ATTRS_o_ai2787vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {2788 vector bool int __tmp1 = vec_cmpeq(__a, __b);2789 vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |2790 vec_cmpeq((vector signed int)__tmp1, __b);2791 2792 vector unsigned long long __res =2793#ifdef __LITTLE_ENDIAN__2794 vec_cnttz((vector unsigned long long)__tmp2);2795#else2796 vec_cntlz((vector unsigned long long)__tmp2);2797#endif2798 if (__res[0] == 64) {2799 return (__res[1] + 64) >> 5;2800 }2801 return __res[0] >> 5;2802}2803 2804static __inline__ unsigned __ATTRS_o_ai2805vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {2806 vector bool int __tmp1 = vec_cmpeq(__a, __b);2807 vector bool int __tmp2 = __tmp1 |2808 vec_cmpeq((vector unsigned int)__tmp1, __a) |2809 vec_cmpeq((vector unsigned int)__tmp1, __b);2810 2811 vector unsigned long long __res =2812#ifdef __LITTLE_ENDIAN__2813 vec_cnttz((vector unsigned long long)__tmp2);2814#else2815 vec_cntlz((vector unsigned long long)__tmp2);2816#endif2817 if (__res[0] == 64) {2818 return (__res[1] + 64) >> 5;2819 }2820 return __res[0] >> 5;2821}2822 2823/* vec_first_mismatch_index */2824 2825static __inline__ unsigned __ATTRS_o_ai2826vec_first_mismatch_index(vector signed char __a, vector signed char __b) {2827 vector unsigned long long __res =2828#ifdef __LITTLE_ENDIAN__2829 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));2830#else2831 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));2832#endif2833 if (__res[0] == 64) {2834 return (__res[1] + 64) >> 3;2835 }2836 return __res[0] >> 3;2837}2838 2839static __inline__ unsigned __ATTRS_o_ai2840vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {2841 vector unsigned long long __res =2842#ifdef __LITTLE_ENDIAN__2843 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));2844#else2845 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));2846#endif2847 if (__res[0] == 64) {2848 return (__res[1] + 64) >> 3;2849 }2850 return __res[0] >> 3;2851}2852 2853static __inline__ unsigned __ATTRS_o_ai2854vec_first_mismatch_index(vector signed short __a, vector signed short __b) {2855 vector unsigned long long __res =2856#ifdef __LITTLE_ENDIAN__2857 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));2858#else2859 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));2860#endif2861 if (__res[0] == 64) {2862 return (__res[1] + 64) >> 4;2863 }2864 return __res[0] >> 4;2865}2866 2867static __inline__ unsigned __ATTRS_o_ai2868vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {2869 vector unsigned long long __res =2870#ifdef __LITTLE_ENDIAN__2871 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));2872#else2873 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));2874#endif2875 if (__res[0] == 64) {2876 return (__res[1] + 64) >> 4;2877 }2878 return __res[0] >> 4;2879}2880 2881static __inline__ unsigned __ATTRS_o_ai2882vec_first_mismatch_index(vector signed int __a, vector signed int __b) {2883 vector unsigned long long __res =2884#ifdef __LITTLE_ENDIAN__2885 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));2886#else2887 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));2888#endif2889 if (__res[0] == 64) {2890 return (__res[1] + 64) >> 5;2891 }2892 return __res[0] >> 5;2893}2894 2895static __inline__ unsigned __ATTRS_o_ai2896vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {2897 vector unsigned long long __res =2898#ifdef __LITTLE_ENDIAN__2899 vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));2900#else2901 vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));2902#endif2903 if (__res[0] == 64) {2904 return (__res[1] + 64) >> 5;2905 }2906 return __res[0] >> 5;2907}2908 2909/* vec_first_mismatch_or_eos_index */2910 2911static __inline__ unsigned __ATTRS_o_ai2912vec_first_mismatch_or_eos_index(vector signed char __a,2913 vector signed char __b) {2914 vector unsigned long long __res =2915#ifdef __LITTLE_ENDIAN__2916 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));2917#else2918 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));2919#endif2920 if (__res[0] == 64) {2921 return (__res[1] + 64) >> 3;2922 }2923 return __res[0] >> 3;2924}2925 2926static __inline__ unsigned __ATTRS_o_ai2927vec_first_mismatch_or_eos_index(vector unsigned char __a,2928 vector unsigned char __b) {2929 vector unsigned long long __res =2930#ifdef __LITTLE_ENDIAN__2931 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));2932#else2933 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));2934#endif2935 if (__res[0] == 64) {2936 return (__res[1] + 64) >> 3;2937 }2938 return __res[0] >> 3;2939}2940 2941static __inline__ unsigned __ATTRS_o_ai2942vec_first_mismatch_or_eos_index(vector signed short __a,2943 vector signed short __b) {2944 vector unsigned long long __res =2945#ifdef __LITTLE_ENDIAN__2946 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));2947#else2948 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));2949#endif2950 if (__res[0] == 64) {2951 return (__res[1] + 64) >> 4;2952 }2953 return __res[0] >> 4;2954}2955 2956static __inline__ unsigned __ATTRS_o_ai2957vec_first_mismatch_or_eos_index(vector unsigned short __a,2958 vector unsigned short __b) {2959 vector unsigned long long __res =2960#ifdef __LITTLE_ENDIAN__2961 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));2962#else2963 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));2964#endif2965 if (__res[0] == 64) {2966 return (__res[1] + 64) >> 4;2967 }2968 return __res[0] >> 4;2969}2970 2971static __inline__ unsigned __ATTRS_o_ai2972vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {2973 vector unsigned long long __res =2974#ifdef __LITTLE_ENDIAN__2975 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));2976#else2977 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));2978#endif2979 if (__res[0] == 64) {2980 return (__res[1] + 64) >> 5;2981 }2982 return __res[0] >> 5;2983}2984 2985static __inline__ unsigned __ATTRS_o_ai2986vec_first_mismatch_or_eos_index(vector unsigned int __a,2987 vector unsigned int __b) {2988 vector unsigned long long __res =2989#ifdef __LITTLE_ENDIAN__2990 vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));2991#else2992 vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));2993#endif2994 if (__res[0] == 64) {2995 return (__res[1] + 64) >> 5;2996 }2997 return __res[0] >> 5;2998}2999 3000static __inline__ vector double __ATTRS_o_ai3001vec_insert_exp(vector double __a, vector unsigned long long __b) {3002 return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);3003}3004 3005static __inline__ vector double __ATTRS_o_ai3006vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {3007 return __builtin_vsx_xviexpdp(__a,__b);3008}3009 3010static __inline__ vector float __ATTRS_o_ai3011vec_insert_exp(vector float __a, vector unsigned int __b) {3012 return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);3013}3014 3015static __inline__ vector float __ATTRS_o_ai3016vec_insert_exp(vector unsigned int __a, vector unsigned int __b) {3017 return __builtin_vsx_xviexpsp(__a,__b);3018}3019 3020#if defined(__powerpc64__)3021static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(const signed char *__a,3022 size_t __b) {3023 return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));3024}3025 3026static __inline__ vector unsigned char __ATTRS_o_ai3027vec_xl_len(const unsigned char *__a, size_t __b) {3028 return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));3029}3030 3031static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(const signed short *__a,3032 size_t __b) {3033 return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));3034}3035 3036static __inline__ vector unsigned short __ATTRS_o_ai3037vec_xl_len(const unsigned short *__a, size_t __b) {3038 return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));3039}3040 3041static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(const signed int *__a,3042 size_t __b) {3043 return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));3044}3045 3046static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(const unsigned int *__a,3047 size_t __b) {3048 return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));3049}3050 3051static __inline__ vector float __ATTRS_o_ai vec_xl_len(const float *__a, size_t __b) {3052 return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));3053}3054 3055#ifdef __SIZEOF_INT128__3056static __inline__ vector signed __int128 __ATTRS_o_ai3057vec_xl_len(const signed __int128 *__a, size_t __b) {3058 return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));3059}3060 3061static __inline__ vector unsigned __int128 __ATTRS_o_ai3062vec_xl_len(const unsigned __int128 *__a, size_t __b) {3063 return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));3064}3065#endif3066 3067static __inline__ vector signed long long __ATTRS_o_ai3068vec_xl_len(const signed long long *__a, size_t __b) {3069 return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));3070}3071 3072static __inline__ vector unsigned long long __ATTRS_o_ai3073vec_xl_len(const unsigned long long *__a, size_t __b) {3074 return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));3075}3076 3077static __inline__ vector double __ATTRS_o_ai vec_xl_len(const double *__a,3078 size_t __b) {3079 return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));3080}3081 3082static __inline__ vector unsigned char __ATTRS_o_ai3083vec_xl_len_r(const unsigned char *__a, size_t __b) {3084 vector unsigned char __res =3085 (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));3086 vector unsigned char __mask =3087 (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);3088 return (vector unsigned char)__builtin_altivec_vperm_4si(3089 (vector int)__res, (vector int)__res, __mask);3090}3091 3092// vec_xst_len3093static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,3094 unsigned char *__b,3095 size_t __c) {3096 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3097}3098 3099static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,3100 signed char *__b, size_t __c) {3101 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3102}3103 3104static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,3105 signed short *__b, size_t __c) {3106 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3107}3108 3109static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,3110 unsigned short *__b,3111 size_t __c) {3112 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3113}3114 3115static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,3116 signed int *__b, size_t __c) {3117 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3118}3119 3120static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,3121 unsigned int *__b, size_t __c) {3122 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3123}3124 3125static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,3126 size_t __c) {3127 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3128}3129 3130#ifdef __SIZEOF_INT128__3131static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,3132 signed __int128 *__b,3133 size_t __c) {3134 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3135}3136 3137static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,3138 unsigned __int128 *__b,3139 size_t __c) {3140 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3141}3142#endif3143 3144static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,3145 signed long long *__b,3146 size_t __c) {3147 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3148}3149 3150static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,3151 unsigned long long *__b,3152 size_t __c) {3153 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3154}3155 3156static __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b,3157 size_t __c) {3158 return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));3159}3160 3161static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,3162 unsigned char *__b,3163 size_t __c) {3164 vector unsigned char __mask =3165 (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);3166 vector unsigned char __res =3167 (vector unsigned char)__builtin_altivec_vperm_4si(3168 (vector int)__a, (vector int)__a, __mask);3169 return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));3170}3171#endif3172#endif3173 3174#if defined(__POWER9_VECTOR__) && defined(__powerpc64__)3175#define __vec_ldrmb(PTR, CNT) vec_xl_len_r((const unsigned char *)(PTR), (CNT))3176#define __vec_strmb(PTR, CNT, VAL) \3177 vec_xst_len_r((VAL), (unsigned char *)(PTR), (CNT))3178#else3179#define __vec_ldrmb __builtin_vsx_ldrmb3180#define __vec_strmb __builtin_vsx_strmb3181#endif3182 3183/* vec_cpsgn */3184 3185#ifdef __VSX__3186static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,3187 vector float __b) {3188 return __builtin_vsx_xvcpsgnsp(__b, __a);3189}3190 3191static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,3192 vector double __b) {3193 return __builtin_vsx_xvcpsgndp(__b, __a);3194}3195#endif3196 3197/* vec_ctf */3198 3199#ifdef __VSX__3200// There are some functions that have different signatures with the XL compiler3201// from those in Clang/GCC and documented in the PVIPR. This macro ensures that3202// the XL-compatible signatures are used for those functions.3203#ifdef __XL_COMPAT_ALTIVEC__3204#define vec_ctf(__a, __b) \3205 _Generic((__a), \3206 vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a), \3207 ((__b)&0x1F)), \3208 vector unsigned int: (vector float)__builtin_altivec_vcfux( \3209 (vector unsigned int)(__a), ((__b)&0x1F)), \3210 vector unsigned long long: ( \3211 vector float)(__builtin_vsx_xvcvuxdsp( \3212 (vector unsigned long long)(__a)) * \3213 (vector float)(vector unsigned)((0x7f - \3214 ((__b)&0x1F)) \3215 << 23)), \3216 vector signed long long: ( \3217 vector float)(__builtin_vsx_xvcvsxdsp( \3218 (vector signed long long)(__a)) * \3219 (vector float)(vector unsigned)((0x7f - \3220 ((__b)&0x1F)) \3221 << 23)))3222#else // __XL_COMPAT_ALTIVEC__3223#define vec_ctf(__a, __b) \3224 _Generic( \3225 (__a), \3226 vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a), \3227 ((__b)&0x1F)), \3228 vector unsigned int: (vector float)__builtin_altivec_vcfux( \3229 (vector unsigned int)(__a), ((__b)&0x1F)), \3230 vector unsigned long long: ( \3231 vector float)(__builtin_convertvector( \3232 (vector unsigned long long)(__a), vector double) * \3233 (vector double)(vector unsigned long long)((0x3ffULL - \3234 ((__b)&0x1F)) \3235 << 52)), \3236 vector signed long long: ( \3237 vector float)(__builtin_convertvector( \3238 (vector signed long long)(__a), vector double) * \3239 (vector double)(vector unsigned long long)((0x3ffULL - \3240 ((__b)&0x1F)) \3241 << 52)))3242#endif // __XL_COMPAT_ALTIVEC__3243#else3244#define vec_ctf(__a, __b) \3245 _Generic((__a), \3246 vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a), \3247 ((__b)&0x1F)), \3248 vector unsigned int: (vector float)__builtin_altivec_vcfux( \3249 (vector unsigned int)(__a), ((__b)&0x1F)))3250#endif3251 3252/* vec_ctd */3253#ifdef __VSX__3254#define vec_ctd(__a, __b) \3255 _Generic((__a), \3256 vector signed int: ( \3257 vec_doublee((vector signed int)(__a)) * \3258 (vector double)(vector unsigned long long)((0x3ffULL - \3259 ((__b)&0x1F)) \3260 << 52)), \3261 vector unsigned int: ( \3262 vec_doublee((vector unsigned int)(__a)) * \3263 (vector double)(vector unsigned long long)((0x3ffULL - \3264 ((__b)&0x1F)) \3265 << 52)), \3266 vector unsigned long long: ( \3267 __builtin_convertvector((vector unsigned long long)(__a), \3268 vector double) * \3269 (vector double)(vector unsigned long long)((0x3ffULL - \3270 ((__b)&0x1F)) \3271 << 52)), \3272 vector signed long long: ( \3273 __builtin_convertvector((vector signed long long)(__a), \3274 vector double) * \3275 (vector double)(vector unsigned long long)((0x3ffULL - \3276 ((__b)&0x1F)) \3277 << 52)))3278#endif // __VSX__3279 3280/* vec_vcfsx */3281 3282#define vec_vcfux __builtin_altivec_vcfux3283/* vec_vcfux */3284 3285#define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))3286 3287/* vec_cts */3288 3289#ifdef __VSX__3290#ifdef __XL_COMPAT_ALTIVEC__3291#define vec_cts(__a, __b) \3292 _Generic((__a), \3293 vector float: (vector signed int)__builtin_altivec_vctsxs( \3294 (vector float)(__a), ((__b)&0x1F)), \3295 vector double: __extension__({ \3296 vector double __ret = \3297 (vector double)(__a) * \3298 (vector double)(vector unsigned long long)((0x3ffULL + \3299 ((__b)&0x1F)) \3300 << 52); \3301 (vector signed long long)__builtin_vsx_xvcvdpsxws(__ret); \3302 }))3303#else // __XL_COMPAT_ALTIVEC__3304#define vec_cts(__a, __b) \3305 _Generic((__a), \3306 vector float: (vector signed int)__builtin_altivec_vctsxs( \3307 (vector float)(__a), ((__b)&0x1F)), \3308 vector double: __extension__({ \3309 vector double __ret = \3310 (vector double)(__a) * \3311 (vector double)(vector unsigned long long)((0x3ffULL + \3312 ((__b)&0x1F)) \3313 << 52); \3314 (vector signed long long)__builtin_convertvector( \3315 __ret, vector signed long long); \3316 }))3317#endif // __XL_COMPAT_ALTIVEC__3318#else3319#define vec_cts __builtin_altivec_vctsxs3320#endif3321 3322/* vec_vctsxs */3323 3324#define vec_vctsxs __builtin_altivec_vctsxs3325 3326/* vec_ctu */3327 3328#ifdef __VSX__3329#ifdef __XL_COMPAT_ALTIVEC__3330#define vec_ctu(__a, __b) \3331 _Generic((__a), \3332 vector float: (vector unsigned int)__builtin_altivec_vctuxs( \3333 (vector float)(__a), ((__b)&0x1F)), \3334 vector double: __extension__({ \3335 vector double __ret = \3336 (vector double)(__a) * \3337 (vector double)(vector unsigned long long)((0x3ffULL + \3338 ((__b)&0x1F)) \3339 << 52); \3340 (vector unsigned long long)__builtin_vsx_xvcvdpuxws(__ret); \3341 }))3342#else // __XL_COMPAT_ALTIVEC__3343#define vec_ctu(__a, __b) \3344 _Generic((__a), \3345 vector float: (vector unsigned int)__builtin_altivec_vctuxs( \3346 (vector float)(__a), ((__b)&0x1F)), \3347 vector double: __extension__({ \3348 vector double __ret = \3349 (vector double)(__a) * \3350 (vector double)(vector unsigned long long)((0x3ffULL + \3351 ((__b)&0x1F)) \3352 << 52); \3353 (vector unsigned long long)__builtin_convertvector( \3354 __ret, vector unsigned long long); \3355 }))3356#endif // __XL_COMPAT_ALTIVEC__3357#else3358#define vec_ctu __builtin_altivec_vctuxs3359#endif3360 3361#ifdef __LITTLE_ENDIAN__3362/* vec_ctsl */3363 3364#ifdef __VSX__3365#define vec_ctsl(__a, __b) \3366 _Generic( \3367 (__a), vector float \3368 : __extension__({ \3369 vector float __ret = \3370 (vector float)(__a) * \3371 (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \3372 __builtin_vsx_xvcvspsxds(__builtin_vsx_xxsldwi(__ret, __ret, 1)); \3373 }), \3374 vector double \3375 : __extension__({ \3376 vector double __ret = \3377 (vector double)(__a) * \3378 (vector double)(vector unsigned long long)((0x3ffULL + \3379 ((__b)&0x1F)) \3380 << 52); \3381 __builtin_convertvector(__ret, vector signed long long); \3382 }))3383 3384/* vec_ctul */3385 3386#define vec_ctul(__a, __b) \3387 _Generic( \3388 (__a), vector float \3389 : __extension__({ \3390 vector float __ret = \3391 (vector float)(__a) * \3392 (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \3393 __builtin_vsx_xvcvspuxds(__builtin_vsx_xxsldwi(__ret, __ret, 1)); \3394 }), \3395 vector double \3396 : __extension__({ \3397 vector double __ret = \3398 (vector double)(__a) * \3399 (vector double)(vector unsigned long long)((0x3ffULL + \3400 ((__b)&0x1F)) \3401 << 52); \3402 __builtin_convertvector(__ret, vector unsigned long long); \3403 }))3404#endif3405#else // __LITTLE_ENDIAN__3406/* vec_ctsl */3407 3408#ifdef __VSX__3409#define vec_ctsl(__a, __b) \3410 _Generic((__a), \3411 vector float: __extension__({ \3412 vector float __ret = \3413 (vector float)(__a) * \3414 (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \3415 __builtin_vsx_xvcvspsxds(__ret); \3416 }), \3417 vector double: __extension__({ \3418 vector double __ret = \3419 (vector double)(__a) * \3420 (vector double)(vector unsigned long long)((0x3ffULL + \3421 ((__b)&0x1F)) \3422 << 52); \3423 __builtin_convertvector(__ret, vector signed long long); \3424 }))3425 3426/* vec_ctul */3427 3428#define vec_ctul(__a, __b) \3429 _Generic((__a), vector float \3430 : __extension__({ \3431 vector float __ret = \3432 (vector float)(__a) * \3433 (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) \3434 << 23); \3435 __builtin_vsx_xvcvspuxds(__ret); \3436 }), \3437 vector double \3438 : __extension__({ \3439 vector double __ret = \3440 (vector double)(__a) * \3441 (vector double)(vector unsigned long long)((0x3ffULL + \3442 ((__b)&0x1F)) \3443 << 52); \3444 __builtin_convertvector(__ret, vector unsigned long long); \3445 }))3446#endif3447#endif // __LITTLE_ENDIAN__3448 3449/* vec_vctuxs */3450 3451#define vec_vctuxs __builtin_altivec_vctuxs3452 3453/* vec_signext */3454 3455#ifdef __POWER9_VECTOR__3456static __inline__ vector signed int __ATTRS_o_ai3457vec_signexti(vector signed char __a) {3458 return __builtin_altivec_vextsb2w(__a);3459}3460 3461static __inline__ vector signed int __ATTRS_o_ai3462vec_signexti(vector signed short __a) {3463 return __builtin_altivec_vextsh2w(__a);3464}3465 3466static __inline__ vector signed long long __ATTRS_o_ai3467vec_signextll(vector signed char __a) {3468 return __builtin_altivec_vextsb2d(__a);3469}3470 3471static __inline__ vector signed long long __ATTRS_o_ai3472vec_signextll(vector signed short __a) {3473 return __builtin_altivec_vextsh2d(__a);3474}3475 3476static __inline__ vector signed long long __ATTRS_o_ai3477vec_signextll(vector signed int __a) {3478 return __builtin_altivec_vextsw2d(__a);3479}3480#endif3481 3482#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)3483static __inline__ vector signed __int128 __ATTRS_o_ai3484vec_signextq(vector signed long long __a) {3485 return __builtin_altivec_vextsd2q(__a);3486}3487#endif3488 3489/* vec_signed */3490 3491static __inline__ vector signed int __ATTRS_o_ai3492vec_sld(vector signed int, vector signed int, unsigned const int __c);3493 3494static __inline__ vector signed int __ATTRS_o_ai3495vec_signed(vector float __a) {3496 return __builtin_convertvector(__a, vector signed int);3497}3498 3499#ifdef __VSX__3500static __inline__ vector signed long long __ATTRS_o_ai3501vec_signed(vector double __a) {3502 return __builtin_convertvector(__a, vector signed long long);3503}3504 3505static __inline__ vector signed int __attribute__((__always_inline__))3506vec_signed2(vector double __a, vector double __b) {3507 return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };3508}3509 3510static __inline__ vector signed int __ATTRS_o_ai3511vec_signede(vector double __a) {3512#ifdef __LITTLE_ENDIAN__3513 vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);3514 return vec_sld(__ret, __ret, 12);3515#else3516 return __builtin_vsx_xvcvdpsxws(__a);3517#endif3518}3519 3520static __inline__ vector signed int __ATTRS_o_ai3521vec_signedo(vector double __a) {3522#ifdef __LITTLE_ENDIAN__3523 return __builtin_vsx_xvcvdpsxws(__a);3524#else3525 vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);3526 return vec_sld(__ret, __ret, 12);3527#endif3528}3529#endif3530 3531/* vec_unsigned */3532 3533static __inline__ vector unsigned int __ATTRS_o_ai3534vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);3535 3536static __inline__ vector unsigned int __ATTRS_o_ai3537vec_unsigned(vector float __a) {3538 return __builtin_convertvector(__a, vector unsigned int);3539}3540 3541#ifdef __VSX__3542static __inline__ vector unsigned long long __ATTRS_o_ai3543vec_unsigned(vector double __a) {3544 return __builtin_convertvector(__a, vector unsigned long long);3545}3546 3547static __inline__ vector unsigned int __attribute__((__always_inline__))3548vec_unsigned2(vector double __a, vector double __b) {3549 return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };3550}3551 3552static __inline__ vector unsigned int __ATTRS_o_ai3553vec_unsignede(vector double __a) {3554#ifdef __LITTLE_ENDIAN__3555 vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);3556 return vec_sld(__ret, __ret, 12);3557#else3558 return __builtin_vsx_xvcvdpuxws(__a);3559#endif3560}3561 3562static __inline__ vector unsigned int __ATTRS_o_ai3563vec_unsignedo(vector double __a) {3564#ifdef __LITTLE_ENDIAN__3565 return __builtin_vsx_xvcvdpuxws(__a);3566#else3567 vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);3568 return vec_sld(__ret, __ret, 12);3569#endif3570}3571#endif3572 3573/* vec_float */3574 3575static __inline__ vector float __ATTRS_o_ai3576vec_sld(vector float, vector float, unsigned const int __c);3577 3578static __inline__ vector float __ATTRS_o_ai3579vec_float(vector signed int __a) {3580 return __builtin_convertvector(__a, vector float);3581}3582 3583static __inline__ vector float __ATTRS_o_ai3584vec_float(vector unsigned int __a) {3585 return __builtin_convertvector(__a, vector float);3586}3587 3588#ifdef __VSX__3589static __inline__ vector float __ATTRS_o_ai3590vec_float2(vector signed long long __a, vector signed long long __b) {3591 return (vector float) { __a[0], __a[1], __b[0], __b[1] };3592}3593 3594static __inline__ vector float __ATTRS_o_ai3595vec_float2(vector unsigned long long __a, vector unsigned long long __b) {3596 return (vector float) { __a[0], __a[1], __b[0], __b[1] };3597}3598 3599static __inline__ vector float __ATTRS_o_ai3600vec_float2(vector double __a, vector double __b) {3601 return (vector float) { __a[0], __a[1], __b[0], __b[1] };3602}3603 3604static __inline__ vector float __ATTRS_o_ai3605vec_floate(vector signed long long __a) {3606#ifdef __LITTLE_ENDIAN__3607 vector float __ret = __builtin_vsx_xvcvsxdsp(__a);3608 return vec_sld(__ret, __ret, 12);3609#else3610 return __builtin_vsx_xvcvsxdsp(__a);3611#endif3612}3613 3614static __inline__ vector float __ATTRS_o_ai3615vec_floate(vector unsigned long long __a) {3616#ifdef __LITTLE_ENDIAN__3617 vector float __ret = __builtin_vsx_xvcvuxdsp(__a);3618 return vec_sld(__ret, __ret, 12);3619#else3620 return __builtin_vsx_xvcvuxdsp(__a);3621#endif3622}3623 3624static __inline__ vector float __ATTRS_o_ai3625vec_floate(vector double __a) {3626#ifdef __LITTLE_ENDIAN__3627 vector float __ret = __builtin_vsx_xvcvdpsp(__a);3628 return vec_sld(__ret, __ret, 12);3629#else3630 return __builtin_vsx_xvcvdpsp(__a);3631#endif3632}3633 3634static __inline__ vector float __ATTRS_o_ai3635vec_floato(vector signed long long __a) {3636#ifdef __LITTLE_ENDIAN__3637 return __builtin_vsx_xvcvsxdsp(__a);3638#else3639 vector float __ret = __builtin_vsx_xvcvsxdsp(__a);3640 return vec_sld(__ret, __ret, 12);3641#endif3642}3643 3644static __inline__ vector float __ATTRS_o_ai3645vec_floato(vector unsigned long long __a) {3646#ifdef __LITTLE_ENDIAN__3647 return __builtin_vsx_xvcvuxdsp(__a);3648#else3649 vector float __ret = __builtin_vsx_xvcvuxdsp(__a);3650 return vec_sld(__ret, __ret, 12);3651#endif3652}3653 3654static __inline__ vector float __ATTRS_o_ai3655vec_floato(vector double __a) {3656#ifdef __LITTLE_ENDIAN__3657 return __builtin_vsx_xvcvdpsp(__a);3658#else3659 vector float __ret = __builtin_vsx_xvcvdpsp(__a);3660 return vec_sld(__ret, __ret, 12);3661#endif3662}3663#endif3664 3665/* vec_double */3666 3667#ifdef __VSX__3668static __inline__ vector double __ATTRS_o_ai3669vec_double(vector signed long long __a) {3670 return __builtin_convertvector(__a, vector double);3671}3672 3673static __inline__ vector double __ATTRS_o_ai3674vec_double(vector unsigned long long __a) {3675 return __builtin_convertvector(__a, vector double);3676}3677 3678static __inline__ vector double __ATTRS_o_ai3679vec_doublee(vector signed int __a) {3680#ifdef __LITTLE_ENDIAN__3681 return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));3682#else3683 return __builtin_vsx_xvcvsxwdp(__a);3684#endif3685}3686 3687static __inline__ vector double __ATTRS_o_ai3688vec_doublee(vector unsigned int __a) {3689#ifdef __LITTLE_ENDIAN__3690 return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));3691#else3692 return __builtin_vsx_xvcvuxwdp(__a);3693#endif3694}3695 3696static __inline__ vector double __ATTRS_o_ai3697vec_doublee(vector float __a) {3698#ifdef __LITTLE_ENDIAN__3699 return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));3700#else3701 return __builtin_vsx_xvcvspdp(__a);3702#endif3703}3704 3705static __inline__ vector double __ATTRS_o_ai3706vec_doubleh(vector signed int __a) {3707 vector double __ret = {__a[0], __a[1]};3708 return __ret;3709}3710 3711static __inline__ vector double __ATTRS_o_ai3712vec_doubleh(vector unsigned int __a) {3713 vector double __ret = {__a[0], __a[1]};3714 return __ret;3715}3716 3717static __inline__ vector double __ATTRS_o_ai3718vec_doubleh(vector float __a) {3719 vector double __ret = {__a[0], __a[1]};3720 return __ret;3721}3722 3723static __inline__ vector double __ATTRS_o_ai3724vec_doublel(vector signed int __a) {3725 vector double __ret = {__a[2], __a[3]};3726 return __ret;3727}3728 3729static __inline__ vector double __ATTRS_o_ai3730vec_doublel(vector unsigned int __a) {3731 vector double __ret = {__a[2], __a[3]};3732 return __ret;3733}3734 3735static __inline__ vector double __ATTRS_o_ai3736vec_doublel(vector float __a) {3737 vector double __ret = {__a[2], __a[3]};3738 return __ret;3739}3740 3741static __inline__ vector double __ATTRS_o_ai3742vec_doubleo(vector signed int __a) {3743#ifdef __LITTLE_ENDIAN__3744 return __builtin_vsx_xvcvsxwdp(__a);3745#else3746 return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));3747#endif3748}3749 3750static __inline__ vector double __ATTRS_o_ai3751vec_doubleo(vector unsigned int __a) {3752#ifdef __LITTLE_ENDIAN__3753 return __builtin_vsx_xvcvuxwdp(__a);3754#else3755 return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));3756#endif3757}3758 3759static __inline__ vector double __ATTRS_o_ai3760vec_doubleo(vector float __a) {3761#ifdef __LITTLE_ENDIAN__3762 return __builtin_vsx_xvcvspdp(__a);3763#else3764 return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));3765#endif3766}3767 3768/* vec_cvf */3769static __inline__ vector double __ATTRS_o_ai vec_cvf(vector float __a) {3770 return vec_doublee(__a);3771}3772 3773static __inline__ vector float __ATTRS_o_ai vec_cvf(vector double __a) {3774 return vec_floate(__a);3775}3776#endif3777 3778/* vec_div */3779 3780/* Integer vector divides (vectors are scalarized, elements divided3781 and the vectors reassembled).3782*/3783static __inline__ vector signed char __ATTRS_o_ai3784vec_div(vector signed char __a, vector signed char __b) {3785 return __a / __b;3786}3787 3788static __inline__ vector unsigned char __ATTRS_o_ai3789vec_div(vector unsigned char __a, vector unsigned char __b) {3790 return __a / __b;3791}3792 3793static __inline__ vector signed short __ATTRS_o_ai3794vec_div(vector signed short __a, vector signed short __b) {3795 return __a / __b;3796}3797 3798static __inline__ vector unsigned short __ATTRS_o_ai3799vec_div(vector unsigned short __a, vector unsigned short __b) {3800 return __a / __b;3801}3802 3803static __inline__ vector signed int __ATTRS_o_ai3804vec_div(vector signed int __a, vector signed int __b) {3805 return __a / __b;3806}3807 3808static __inline__ vector unsigned int __ATTRS_o_ai3809vec_div(vector unsigned int __a, vector unsigned int __b) {3810 return __a / __b;3811}3812 3813#ifdef __VSX__3814static __inline__ vector signed long long __ATTRS_o_ai3815vec_div(vector signed long long __a, vector signed long long __b) {3816 return __a / __b;3817}3818 3819static __inline__ vector unsigned long long __ATTRS_o_ai3820vec_div(vector unsigned long long __a, vector unsigned long long __b) {3821 return __a / __b;3822}3823 3824static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,3825 vector float __b) {3826 return __a / __b;3827}3828 3829static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,3830 vector double __b) {3831 return __a / __b;3832}3833#endif3834 3835/* vec_dive */3836 3837#ifdef __POWER10_VECTOR__3838static __inline__ vector signed int __ATTRS_o_ai3839vec_dive(vector signed int __a, vector signed int __b) {3840 return __builtin_altivec_vdivesw(__a, __b);3841}3842 3843static __inline__ vector unsigned int __ATTRS_o_ai3844vec_dive(vector unsigned int __a, vector unsigned int __b) {3845 return __builtin_altivec_vdiveuw(__a, __b);3846}3847 3848static __inline__ vector signed long long __ATTRS_o_ai3849vec_dive(vector signed long long __a, vector signed long long __b) {3850 return __builtin_altivec_vdivesd(__a, __b);3851}3852 3853static __inline__ vector unsigned long long __ATTRS_o_ai3854vec_dive(vector unsigned long long __a, vector unsigned long long __b) {3855 return __builtin_altivec_vdiveud(__a, __b);3856}3857 3858#ifdef __SIZEOF_INT128__3859static __inline__ vector unsigned __int128 __ATTRS_o_ai3860vec_dive(vector unsigned __int128 __a, vector unsigned __int128 __b) {3861 return __builtin_altivec_vdiveuq(__a, __b);3862}3863 3864static __inline__ vector signed __int128 __ATTRS_o_ai3865vec_dive(vector signed __int128 __a, vector signed __int128 __b) {3866 return __builtin_altivec_vdivesq(__a, __b);3867}3868#endif3869#endif3870 3871#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)3872static __inline__ vector unsigned __int128 __ATTRS_o_ai3873vec_div(vector unsigned __int128 __a, vector unsigned __int128 __b) {3874 return __a / __b;3875}3876 3877static __inline__ vector signed __int128 __ATTRS_o_ai3878vec_div(vector signed __int128 __a, vector signed __int128 __b) {3879 return __a / __b;3880}3881#endif /* __POWER10_VECTOR__ */3882 3883/* vec_xvtdiv */3884 3885#ifdef __VSX__3886static __inline__ int __ATTRS_o_ai vec_test_swdiv(vector double __a,3887 vector double __b) {3888 return __builtin_vsx_xvtdivdp(__a, __b);3889}3890 3891static __inline__ int __ATTRS_o_ai vec_test_swdivs(vector float __a,3892 vector float __b) {3893 return __builtin_vsx_xvtdivsp(__a, __b);3894}3895#endif3896 3897/* vec_dss */3898 3899#define vec_dss __builtin_altivec_dss3900 3901/* vec_dssall */3902 3903static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {3904 __builtin_altivec_dssall();3905}3906 3907/* vec_dst */3908#define vec_dst(__PTR, __CW, __STR) \3909 __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR))3910 3911/* vec_dstst */3912#define vec_dstst(__PTR, __CW, __STR) \3913 __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR))3914 3915/* vec_dststt */3916#define vec_dststt(__PTR, __CW, __STR) \3917 __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR))3918 3919/* vec_dstt */3920#define vec_dstt(__PTR, __CW, __STR) \3921 __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR))3922 3923/* vec_eqv */3924 3925#ifdef __POWER8_VECTOR__3926static __inline__ vector signed char __ATTRS_o_ai3927vec_eqv(vector signed char __a, vector signed char __b) {3928 return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,3929 (vector unsigned int)__b);3930}3931 3932static __inline__ vector unsigned char __ATTRS_o_ai3933vec_eqv(vector unsigned char __a, vector unsigned char __b) {3934 return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,3935 (vector unsigned int)__b);3936}3937 3938static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,3939 vector bool char __b) {3940 return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,3941 (vector unsigned int)__b);3942}3943 3944static __inline__ vector signed short __ATTRS_o_ai3945vec_eqv(vector signed short __a, vector signed short __b) {3946 return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,3947 (vector unsigned int)__b);3948}3949 3950static __inline__ vector unsigned short __ATTRS_o_ai3951vec_eqv(vector unsigned short __a, vector unsigned short __b) {3952 return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,3953 (vector unsigned int)__b);3954}3955 3956static __inline__ vector bool short __ATTRS_o_ai3957vec_eqv(vector bool short __a, vector bool short __b) {3958 return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,3959 (vector unsigned int)__b);3960}3961 3962static __inline__ vector signed int __ATTRS_o_ai3963vec_eqv(vector signed int __a, vector signed int __b) {3964 return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,3965 (vector unsigned int)__b);3966}3967 3968static __inline__ vector unsigned int __ATTRS_o_ai3969vec_eqv(vector unsigned int __a, vector unsigned int __b) {3970 return __builtin_vsx_xxleqv(__a, __b);3971}3972 3973static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,3974 vector bool int __b) {3975 return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,3976 (vector unsigned int)__b);3977}3978 3979static __inline__ vector signed long long __ATTRS_o_ai3980vec_eqv(vector signed long long __a, vector signed long long __b) {3981 return (vector signed long long)__builtin_vsx_xxleqv(3982 (vector unsigned int)__a, (vector unsigned int)__b);3983}3984 3985static __inline__ vector unsigned long long __ATTRS_o_ai3986vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {3987 return (vector unsigned long long)__builtin_vsx_xxleqv(3988 (vector unsigned int)__a, (vector unsigned int)__b);3989}3990 3991static __inline__ vector bool long long __ATTRS_o_ai3992vec_eqv(vector bool long long __a, vector bool long long __b) {3993 return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,3994 (vector unsigned int)__b);3995}3996 3997static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,3998 vector float __b) {3999 return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,4000 (vector unsigned int)__b);4001}4002 4003static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,4004 vector double __b) {4005 return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,4006 (vector unsigned int)__b);4007}4008#endif4009 4010/* vec_expte */4011 4012static __inline__ vector float __attribute__((__always_inline__))4013vec_expte(vector float __a) {4014 return __builtin_altivec_vexptefp(__a);4015}4016 4017/* vec_vexptefp */4018 4019static __inline__ vector float __attribute__((__always_inline__))4020vec_vexptefp(vector float __a) {4021 return __builtin_altivec_vexptefp(__a);4022}4023 4024/* vec_floor */4025 4026static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {4027#ifdef __VSX__4028 return __builtin_vsx_xvrspim(__a);4029#else4030 return __builtin_altivec_vrfim(__a);4031#endif4032}4033 4034#ifdef __VSX__4035static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {4036 return __builtin_vsx_xvrdpim(__a);4037}4038#endif4039 4040/* vec_roundm */4041static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a) {4042 return vec_floor(__a);4043}4044 4045#ifdef __VSX__4046static __inline__ vector double __ATTRS_o_ai vec_roundm(vector double __a) {4047 return vec_floor(__a);4048}4049#endif4050 4051/* vec_vrfim */4052 4053static __inline__ vector float __attribute__((__always_inline__))4054vec_vrfim(vector float __a) {4055 return __builtin_altivec_vrfim(__a);4056}4057 4058/* vec_ld */4059 4060static __inline__ vector signed char __ATTRS_o_ai4061vec_ld(long __a, const vector signed char *__b) {4062 return (vector signed char)__builtin_altivec_lvx(__a, __b);4063}4064 4065static __inline__ vector signed char __ATTRS_o_ai4066vec_ld(long __a, const signed char *__b) {4067 return (vector signed char)__builtin_altivec_lvx(__a, __b);4068}4069 4070static __inline__ vector unsigned char __ATTRS_o_ai4071vec_ld(long __a, const vector unsigned char *__b) {4072 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);4073}4074 4075static __inline__ vector unsigned char __ATTRS_o_ai4076vec_ld(long __a, const unsigned char *__b) {4077 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);4078}4079 4080static __inline__ vector bool char __ATTRS_o_ai4081vec_ld(long __a, const vector bool char *__b) {4082 return (vector bool char)__builtin_altivec_lvx(__a, __b);4083}4084 4085static __inline__ vector short __ATTRS_o_ai vec_ld(long __a,4086 const vector short *__b) {4087 return (vector short)__builtin_altivec_lvx(__a, __b);4088}4089 4090static __inline__ vector short __ATTRS_o_ai vec_ld(long __a, const short *__b) {4091 return (vector short)__builtin_altivec_lvx(__a, __b);4092}4093 4094static __inline__ vector unsigned short __ATTRS_o_ai4095vec_ld(long __a, const vector unsigned short *__b) {4096 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);4097}4098 4099static __inline__ vector unsigned short __ATTRS_o_ai4100vec_ld(long __a, const unsigned short *__b) {4101 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);4102}4103 4104static __inline__ vector bool short __ATTRS_o_ai4105vec_ld(long __a, const vector bool short *__b) {4106 return (vector bool short)__builtin_altivec_lvx(__a, __b);4107}4108 4109static __inline__ vector pixel __ATTRS_o_ai vec_ld(long __a,4110 const vector pixel *__b) {4111 return (vector pixel)__builtin_altivec_lvx(__a, __b);4112}4113 4114static __inline__ vector int __ATTRS_o_ai vec_ld(long __a,4115 const vector int *__b) {4116 return (vector int)__builtin_altivec_lvx(__a, __b);4117}4118 4119static __inline__ vector int __ATTRS_o_ai vec_ld(long __a, const int *__b) {4120 return (vector int)__builtin_altivec_lvx(__a, __b);4121}4122 4123static __inline__ vector unsigned int __ATTRS_o_ai4124vec_ld(long __a, const vector unsigned int *__b) {4125 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);4126}4127 4128static __inline__ vector unsigned int __ATTRS_o_ai4129vec_ld(long __a, const unsigned int *__b) {4130 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);4131}4132 4133static __inline__ vector bool int __ATTRS_o_ai4134vec_ld(long __a, const vector bool int *__b) {4135 return (vector bool int)__builtin_altivec_lvx(__a, __b);4136}4137 4138static __inline__ vector float __ATTRS_o_ai vec_ld(long __a,4139 const vector float *__b) {4140 return (vector float)__builtin_altivec_lvx(__a, __b);4141}4142 4143static __inline__ vector float __ATTRS_o_ai vec_ld(long __a, const float *__b) {4144 return (vector float)__builtin_altivec_lvx(__a, __b);4145}4146 4147/* vec_lvx */4148 4149static __inline__ vector signed char __ATTRS_o_ai4150vec_lvx(long __a, const vector signed char *__b) {4151 return (vector signed char)__builtin_altivec_lvx(__a, __b);4152}4153 4154static __inline__ vector signed char __ATTRS_o_ai4155vec_lvx(long __a, const signed char *__b) {4156 return (vector signed char)__builtin_altivec_lvx(__a, __b);4157}4158 4159static __inline__ vector unsigned char __ATTRS_o_ai4160vec_lvx(long __a, const vector unsigned char *__b) {4161 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);4162}4163 4164static __inline__ vector unsigned char __ATTRS_o_ai4165vec_lvx(long __a, const unsigned char *__b) {4166 return (vector unsigned char)__builtin_altivec_lvx(__a, __b);4167}4168 4169static __inline__ vector bool char __ATTRS_o_ai4170vec_lvx(long __a, const vector bool char *__b) {4171 return (vector bool char)__builtin_altivec_lvx(__a, __b);4172}4173 4174static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a,4175 const vector short *__b) {4176 return (vector short)__builtin_altivec_lvx(__a, __b);4177}4178 4179static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a, const short *__b) {4180 return (vector short)__builtin_altivec_lvx(__a, __b);4181}4182 4183static __inline__ vector unsigned short __ATTRS_o_ai4184vec_lvx(long __a, const vector unsigned short *__b) {4185 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);4186}4187 4188static __inline__ vector unsigned short __ATTRS_o_ai4189vec_lvx(long __a, const unsigned short *__b) {4190 return (vector unsigned short)__builtin_altivec_lvx(__a, __b);4191}4192 4193static __inline__ vector bool short __ATTRS_o_ai4194vec_lvx(long __a, const vector bool short *__b) {4195 return (vector bool short)__builtin_altivec_lvx(__a, __b);4196}4197 4198static __inline__ vector pixel __ATTRS_o_ai vec_lvx(long __a,4199 const vector pixel *__b) {4200 return (vector pixel)__builtin_altivec_lvx(__a, __b);4201}4202 4203static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a,4204 const vector int *__b) {4205 return (vector int)__builtin_altivec_lvx(__a, __b);4206}4207 4208static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a, const int *__b) {4209 return (vector int)__builtin_altivec_lvx(__a, __b);4210}4211 4212static __inline__ vector unsigned int __ATTRS_o_ai4213vec_lvx(long __a, const vector unsigned int *__b) {4214 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);4215}4216 4217static __inline__ vector unsigned int __ATTRS_o_ai4218vec_lvx(long __a, const unsigned int *__b) {4219 return (vector unsigned int)__builtin_altivec_lvx(__a, __b);4220}4221 4222static __inline__ vector bool int __ATTRS_o_ai4223vec_lvx(long __a, const vector bool int *__b) {4224 return (vector bool int)__builtin_altivec_lvx(__a, __b);4225}4226 4227static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a,4228 const vector float *__b) {4229 return (vector float)__builtin_altivec_lvx(__a, __b);4230}4231 4232static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a, const float *__b) {4233 return (vector float)__builtin_altivec_lvx(__a, __b);4234}4235 4236/* vec_lde */4237 4238static __inline__ vector signed char __ATTRS_o_ai4239vec_lde(long __a, const signed char *__b) {4240 return (vector signed char)__builtin_altivec_lvebx(__a, __b);4241}4242 4243static __inline__ vector unsigned char __ATTRS_o_ai4244vec_lde(long __a, const unsigned char *__b) {4245 return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);4246}4247 4248static __inline__ vector short __ATTRS_o_ai vec_lde(long __a, const short *__b) {4249 return (vector short)__builtin_altivec_lvehx(__a, __b);4250}4251 4252static __inline__ vector unsigned short __ATTRS_o_ai4253vec_lde(long __a, const unsigned short *__b) {4254 return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);4255}4256 4257static __inline__ vector int __ATTRS_o_ai vec_lde(long __a, const int *__b) {4258 return (vector int)__builtin_altivec_lvewx(__a, __b);4259}4260 4261static __inline__ vector unsigned int __ATTRS_o_ai4262vec_lde(long __a, const unsigned int *__b) {4263 return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);4264}4265 4266static __inline__ vector float __ATTRS_o_ai vec_lde(long __a, const float *__b) {4267 return (vector float)__builtin_altivec_lvewx(__a, __b);4268}4269 4270/* vec_lvebx */4271 4272static __inline__ vector signed char __ATTRS_o_ai4273vec_lvebx(long __a, const signed char *__b) {4274 return (vector signed char)__builtin_altivec_lvebx(__a, __b);4275}4276 4277static __inline__ vector unsigned char __ATTRS_o_ai4278vec_lvebx(long __a, const unsigned char *__b) {4279 return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);4280}4281 4282/* vec_lvehx */4283 4284static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a,4285 const short *__b) {4286 return (vector short)__builtin_altivec_lvehx(__a, __b);4287}4288 4289static __inline__ vector unsigned short __ATTRS_o_ai4290vec_lvehx(long __a, const unsigned short *__b) {4291 return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);4292}4293 4294/* vec_lvewx */4295 4296static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b) {4297 return (vector int)__builtin_altivec_lvewx(__a, __b);4298}4299 4300static __inline__ vector unsigned int __ATTRS_o_ai4301vec_lvewx(long __a, const unsigned int *__b) {4302 return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);4303}4304 4305static __inline__ vector float __ATTRS_o_ai vec_lvewx(long __a,4306 const float *__b) {4307 return (vector float)__builtin_altivec_lvewx(__a, __b);4308}4309 4310/* vec_ldl */4311 4312static __inline__ vector signed char __ATTRS_o_ai4313vec_ldl(long __a, const vector signed char *__b) {4314 return (vector signed char)__builtin_altivec_lvxl(__a, __b);4315}4316 4317static __inline__ vector signed char __ATTRS_o_ai4318vec_ldl(long __a, const signed char *__b) {4319 return (vector signed char)__builtin_altivec_lvxl(__a, __b);4320}4321 4322static __inline__ vector unsigned char __ATTRS_o_ai4323vec_ldl(long __a, const vector unsigned char *__b) {4324 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);4325}4326 4327static __inline__ vector unsigned char __ATTRS_o_ai4328vec_ldl(long __a, const unsigned char *__b) {4329 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);4330}4331 4332static __inline__ vector bool char __ATTRS_o_ai4333vec_ldl(long __a, const vector bool char *__b) {4334 return (vector bool char)__builtin_altivec_lvxl(__a, __b);4335}4336 4337static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a,4338 const vector short *__b) {4339 return (vector short)__builtin_altivec_lvxl(__a, __b);4340}4341 4342static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a, const short *__b) {4343 return (vector short)__builtin_altivec_lvxl(__a, __b);4344}4345 4346static __inline__ vector unsigned short __ATTRS_o_ai4347vec_ldl(long __a, const vector unsigned short *__b) {4348 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);4349}4350 4351static __inline__ vector unsigned short __ATTRS_o_ai4352vec_ldl(long __a, const unsigned short *__b) {4353 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);4354}4355 4356static __inline__ vector bool short __ATTRS_o_ai4357vec_ldl(long __a, const vector bool short *__b) {4358 return (vector bool short)__builtin_altivec_lvxl(__a, __b);4359}4360 4361static __inline__ vector pixel __ATTRS_o_ai vec_ldl(long __a,4362 const vector pixel *__b) {4363 return (vector pixel short)__builtin_altivec_lvxl(__a, __b);4364}4365 4366static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a,4367 const vector int *__b) {4368 return (vector int)__builtin_altivec_lvxl(__a, __b);4369}4370 4371static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a, const int *__b) {4372 return (vector int)__builtin_altivec_lvxl(__a, __b);4373}4374 4375static __inline__ vector unsigned int __ATTRS_o_ai4376vec_ldl(long __a, const vector unsigned int *__b) {4377 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);4378}4379 4380static __inline__ vector unsigned int __ATTRS_o_ai4381vec_ldl(long __a, const unsigned int *__b) {4382 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);4383}4384 4385static __inline__ vector bool int __ATTRS_o_ai4386vec_ldl(long __a, const vector bool int *__b) {4387 return (vector bool int)__builtin_altivec_lvxl(__a, __b);4388}4389 4390static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a,4391 const vector float *__b) {4392 return (vector float)__builtin_altivec_lvxl(__a, __b);4393}4394 4395static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a, const float *__b) {4396 return (vector float)__builtin_altivec_lvxl(__a, __b);4397}4398 4399/* vec_lvxl */4400 4401static __inline__ vector signed char __ATTRS_o_ai4402vec_lvxl(long __a, const vector signed char *__b) {4403 return (vector signed char)__builtin_altivec_lvxl(__a, __b);4404}4405 4406static __inline__ vector signed char __ATTRS_o_ai4407vec_lvxl(long __a, const signed char *__b) {4408 return (vector signed char)__builtin_altivec_lvxl(__a, __b);4409}4410 4411static __inline__ vector unsigned char __ATTRS_o_ai4412vec_lvxl(long __a, const vector unsigned char *__b) {4413 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);4414}4415 4416static __inline__ vector unsigned char __ATTRS_o_ai4417vec_lvxl(long __a, const unsigned char *__b) {4418 return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);4419}4420 4421static __inline__ vector bool char __ATTRS_o_ai4422vec_lvxl(long __a, const vector bool char *__b) {4423 return (vector bool char)__builtin_altivec_lvxl(__a, __b);4424}4425 4426static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,4427 const vector short *__b) {4428 return (vector short)__builtin_altivec_lvxl(__a, __b);4429}4430 4431static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,4432 const short *__b) {4433 return (vector short)__builtin_altivec_lvxl(__a, __b);4434}4435 4436static __inline__ vector unsigned short __ATTRS_o_ai4437vec_lvxl(long __a, const vector unsigned short *__b) {4438 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);4439}4440 4441static __inline__ vector unsigned short __ATTRS_o_ai4442vec_lvxl(long __a, const unsigned short *__b) {4443 return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);4444}4445 4446static __inline__ vector bool short __ATTRS_o_ai4447vec_lvxl(long __a, const vector bool short *__b) {4448 return (vector bool short)__builtin_altivec_lvxl(__a, __b);4449}4450 4451static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(long __a,4452 const vector pixel *__b) {4453 return (vector pixel)__builtin_altivec_lvxl(__a, __b);4454}4455 4456static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a,4457 const vector int *__b) {4458 return (vector int)__builtin_altivec_lvxl(__a, __b);4459}4460 4461static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a, const int *__b) {4462 return (vector int)__builtin_altivec_lvxl(__a, __b);4463}4464 4465static __inline__ vector unsigned int __ATTRS_o_ai4466vec_lvxl(long __a, const vector unsigned int *__b) {4467 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);4468}4469 4470static __inline__ vector unsigned int __ATTRS_o_ai4471vec_lvxl(long __a, const unsigned int *__b) {4472 return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);4473}4474 4475static __inline__ vector bool int __ATTRS_o_ai4476vec_lvxl(long __a, const vector bool int *__b) {4477 return (vector bool int)__builtin_altivec_lvxl(__a, __b);4478}4479 4480static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,4481 const vector float *__b) {4482 return (vector float)__builtin_altivec_lvxl(__a, __b);4483}4484 4485static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,4486 const float *__b) {4487 return (vector float)__builtin_altivec_lvxl(__a, __b);4488}4489 4490/* vec_loge */4491 4492static __inline__ vector float __attribute__((__always_inline__))4493vec_loge(vector float __a) {4494 return __builtin_altivec_vlogefp(__a);4495}4496 4497/* vec_vlogefp */4498 4499static __inline__ vector float __attribute__((__always_inline__))4500vec_vlogefp(vector float __a) {4501 return __builtin_altivec_vlogefp(__a);4502}4503 4504/* vec_lvsl */4505 4506#ifdef __LITTLE_ENDIAN__4507static __inline__ vector unsigned char __ATTRS_o_ai4508 __attribute__((__deprecated__("use assignment for unaligned little endian \4509loads/stores"))) vec_lvsl(int __a, const signed char *__b) {4510 vector unsigned char mask =4511 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4512 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4513 7, 6, 5, 4, 3, 2, 1, 0};4514 return vec_perm(mask, mask, reverse);4515}4516#else4517static __inline__ vector unsigned char __ATTRS_o_ai4518vec_lvsl(int __a, const signed char *__b) {4519 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4520}4521#endif4522 4523#ifdef __LITTLE_ENDIAN__4524static __inline__ vector unsigned char __ATTRS_o_ai4525 __attribute__((__deprecated__("use assignment for unaligned little endian \4526loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {4527 vector unsigned char mask =4528 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4529 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4530 7, 6, 5, 4, 3, 2, 1, 0};4531 return vec_perm(mask, mask, reverse);4532}4533#else4534static __inline__ vector unsigned char __ATTRS_o_ai4535vec_lvsl(int __a, const unsigned char *__b) {4536 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4537}4538#endif4539 4540#ifdef __LITTLE_ENDIAN__4541static __inline__ vector unsigned char __ATTRS_o_ai4542 __attribute__((__deprecated__("use assignment for unaligned little endian \4543loads/stores"))) vec_lvsl(int __a, const short *__b) {4544 vector unsigned char mask =4545 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4546 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4547 7, 6, 5, 4, 3, 2, 1, 0};4548 return vec_perm(mask, mask, reverse);4549}4550#else4551static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,4552 const short *__b) {4553 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4554}4555#endif4556 4557#ifdef __LITTLE_ENDIAN__4558static __inline__ vector unsigned char __ATTRS_o_ai4559 __attribute__((__deprecated__("use assignment for unaligned little endian \4560loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {4561 vector unsigned char mask =4562 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4563 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4564 7, 6, 5, 4, 3, 2, 1, 0};4565 return vec_perm(mask, mask, reverse);4566}4567#else4568static __inline__ vector unsigned char __ATTRS_o_ai4569vec_lvsl(int __a, const unsigned short *__b) {4570 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4571}4572#endif4573 4574#ifdef __LITTLE_ENDIAN__4575static __inline__ vector unsigned char __ATTRS_o_ai4576 __attribute__((__deprecated__("use assignment for unaligned little endian \4577loads/stores"))) vec_lvsl(int __a, const int *__b) {4578 vector unsigned char mask =4579 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4580 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4581 7, 6, 5, 4, 3, 2, 1, 0};4582 return vec_perm(mask, mask, reverse);4583}4584#else4585static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,4586 const int *__b) {4587 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4588}4589#endif4590 4591#ifdef __LITTLE_ENDIAN__4592static __inline__ vector unsigned char __ATTRS_o_ai4593 __attribute__((__deprecated__("use assignment for unaligned little endian \4594loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {4595 vector unsigned char mask =4596 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4597 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4598 7, 6, 5, 4, 3, 2, 1, 0};4599 return vec_perm(mask, mask, reverse);4600}4601#else4602static __inline__ vector unsigned char __ATTRS_o_ai4603vec_lvsl(int __a, const unsigned int *__b) {4604 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4605}4606#endif4607 4608#ifdef __LITTLE_ENDIAN__4609static __inline__ vector unsigned char __ATTRS_o_ai4610 __attribute__((__deprecated__("use assignment for unaligned little endian \4611loads/stores"))) vec_lvsl(int __a, const float *__b) {4612 vector unsigned char mask =4613 (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4614 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4615 7, 6, 5, 4, 3, 2, 1, 0};4616 return vec_perm(mask, mask, reverse);4617}4618#else4619static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,4620 const float *__b) {4621 return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);4622}4623#endif4624 4625/* vec_lvsr */4626 4627#ifdef __LITTLE_ENDIAN__4628static __inline__ vector unsigned char __ATTRS_o_ai4629 __attribute__((__deprecated__("use assignment for unaligned little endian \4630loads/stores"))) vec_lvsr(int __a, const signed char *__b) {4631 vector unsigned char mask =4632 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4633 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4634 7, 6, 5, 4, 3, 2, 1, 0};4635 return vec_perm(mask, mask, reverse);4636}4637#else4638static __inline__ vector unsigned char __ATTRS_o_ai4639vec_lvsr(int __a, const signed char *__b) {4640 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4641}4642#endif4643 4644#ifdef __LITTLE_ENDIAN__4645static __inline__ vector unsigned char __ATTRS_o_ai4646 __attribute__((__deprecated__("use assignment for unaligned little endian \4647loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {4648 vector unsigned char mask =4649 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4650 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4651 7, 6, 5, 4, 3, 2, 1, 0};4652 return vec_perm(mask, mask, reverse);4653}4654#else4655static __inline__ vector unsigned char __ATTRS_o_ai4656vec_lvsr(int __a, const unsigned char *__b) {4657 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4658}4659#endif4660 4661#ifdef __LITTLE_ENDIAN__4662static __inline__ vector unsigned char __ATTRS_o_ai4663 __attribute__((__deprecated__("use assignment for unaligned little endian \4664loads/stores"))) vec_lvsr(int __a, const short *__b) {4665 vector unsigned char mask =4666 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4667 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4668 7, 6, 5, 4, 3, 2, 1, 0};4669 return vec_perm(mask, mask, reverse);4670}4671#else4672static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,4673 const short *__b) {4674 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4675}4676#endif4677 4678#ifdef __LITTLE_ENDIAN__4679static __inline__ vector unsigned char __ATTRS_o_ai4680 __attribute__((__deprecated__("use assignment for unaligned little endian \4681loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {4682 vector unsigned char mask =4683 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4684 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4685 7, 6, 5, 4, 3, 2, 1, 0};4686 return vec_perm(mask, mask, reverse);4687}4688#else4689static __inline__ vector unsigned char __ATTRS_o_ai4690vec_lvsr(int __a, const unsigned short *__b) {4691 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4692}4693#endif4694 4695#ifdef __LITTLE_ENDIAN__4696static __inline__ vector unsigned char __ATTRS_o_ai4697 __attribute__((__deprecated__("use assignment for unaligned little endian \4698loads/stores"))) vec_lvsr(int __a, const int *__b) {4699 vector unsigned char mask =4700 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4701 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4702 7, 6, 5, 4, 3, 2, 1, 0};4703 return vec_perm(mask, mask, reverse);4704}4705#else4706static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,4707 const int *__b) {4708 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4709}4710#endif4711 4712#ifdef __LITTLE_ENDIAN__4713static __inline__ vector unsigned char __ATTRS_o_ai4714 __attribute__((__deprecated__("use assignment for unaligned little endian \4715loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {4716 vector unsigned char mask =4717 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4718 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4719 7, 6, 5, 4, 3, 2, 1, 0};4720 return vec_perm(mask, mask, reverse);4721}4722#else4723static __inline__ vector unsigned char __ATTRS_o_ai4724vec_lvsr(int __a, const unsigned int *__b) {4725 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4726}4727#endif4728 4729#ifdef __LITTLE_ENDIAN__4730static __inline__ vector unsigned char __ATTRS_o_ai4731 __attribute__((__deprecated__("use assignment for unaligned little endian \4732loads/stores"))) vec_lvsr(int __a, const float *__b) {4733 vector unsigned char mask =4734 (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4735 vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,4736 7, 6, 5, 4, 3, 2, 1, 0};4737 return vec_perm(mask, mask, reverse);4738}4739#else4740static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,4741 const float *__b) {4742 return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);4743}4744#endif4745 4746/* vec_madd */4747static __inline__ vector signed short __ATTRS_o_ai4748vec_mladd(vector signed short, vector signed short, vector signed short);4749static __inline__ vector signed short __ATTRS_o_ai4750vec_mladd(vector signed short, vector unsigned short, vector unsigned short);4751static __inline__ vector signed short __ATTRS_o_ai4752vec_mladd(vector unsigned short, vector signed short, vector signed short);4753static __inline__ vector unsigned short __ATTRS_o_ai4754vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);4755 4756static __inline__ vector signed short __ATTRS_o_ai vec_madd(4757 vector signed short __a, vector signed short __b, vector signed short __c) {4758 return vec_mladd(__a, __b, __c);4759}4760 4761static __inline__ vector signed short __ATTRS_o_ai4762vec_madd(vector signed short __a, vector unsigned short __b,4763 vector unsigned short __c) {4764 return vec_mladd(__a, __b, __c);4765}4766 4767static __inline__ vector signed short __ATTRS_o_ai4768vec_madd(vector unsigned short __a, vector signed short __b,4769 vector signed short __c) {4770 return vec_mladd(__a, __b, __c);4771}4772 4773static __inline__ vector unsigned short __ATTRS_o_ai4774vec_madd(vector unsigned short __a, vector unsigned short __b,4775 vector unsigned short __c) {4776 return vec_mladd(__a, __b, __c);4777}4778 4779static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,4780 vector float __b,4781 vector float __c) {4782#ifdef __VSX__4783 return __builtin_vsx_xvmaddasp(__a, __b, __c);4784#else4785 return __builtin_altivec_vmaddfp(__a, __b, __c);4786#endif4787}4788 4789#ifdef __VSX__4790static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,4791 vector double __b,4792 vector double __c) {4793 return __builtin_vsx_xvmaddadp(__a, __b, __c);4794}4795#endif4796 4797/* vec_vmaddfp */4798 4799static __inline__ vector float __attribute__((__always_inline__))4800vec_vmaddfp(vector float __a, vector float __b, vector float __c) {4801 return __builtin_altivec_vmaddfp(__a, __b, __c);4802}4803 4804/* vec_madds */4805 4806static __inline__ vector signed short __attribute__((__always_inline__))4807vec_madds(vector signed short __a, vector signed short __b,4808 vector signed short __c) {4809 return __builtin_altivec_vmhaddshs(__a, __b, __c);4810}4811 4812/* vec_vmhaddshs */4813static __inline__ vector signed short __attribute__((__always_inline__))4814vec_vmhaddshs(vector signed short __a, vector signed short __b,4815 vector signed short __c) {4816 return __builtin_altivec_vmhaddshs(__a, __b, __c);4817}4818 4819/* vec_msub */4820 4821#ifdef __VSX__4822static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,4823 vector float __b,4824 vector float __c) {4825 return __builtin_vsx_xvmsubasp(__a, __b, __c);4826}4827 4828static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,4829 vector double __b,4830 vector double __c) {4831 return __builtin_vsx_xvmsubadp(__a, __b, __c);4832}4833#endif4834 4835/* vec_max */4836 4837static __inline__ vector signed char __ATTRS_o_ai4838vec_max(vector signed char __a, vector signed char __b) {4839 return __builtin_altivec_vmaxsb(__a, __b);4840}4841 4842static __inline__ vector signed char __ATTRS_o_ai4843vec_max(vector bool char __a, vector signed char __b) {4844 return __builtin_altivec_vmaxsb((vector signed char)__a, __b);4845}4846 4847static __inline__ vector signed char __ATTRS_o_ai4848vec_max(vector signed char __a, vector bool char __b) {4849 return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);4850}4851 4852static __inline__ vector unsigned char __ATTRS_o_ai4853vec_max(vector unsigned char __a, vector unsigned char __b) {4854 return __builtin_altivec_vmaxub(__a, __b);4855}4856 4857static __inline__ vector unsigned char __ATTRS_o_ai4858vec_max(vector bool char __a, vector unsigned char __b) {4859 return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);4860}4861 4862static __inline__ vector unsigned char __ATTRS_o_ai4863vec_max(vector unsigned char __a, vector bool char __b) {4864 return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);4865}4866 4867static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,4868 vector short __b) {4869 return __builtin_altivec_vmaxsh(__a, __b);4870}4871 4872static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,4873 vector short __b) {4874 return __builtin_altivec_vmaxsh((vector short)__a, __b);4875}4876 4877static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,4878 vector bool short __b) {4879 return __builtin_altivec_vmaxsh(__a, (vector short)__b);4880}4881 4882static __inline__ vector unsigned short __ATTRS_o_ai4883vec_max(vector unsigned short __a, vector unsigned short __b) {4884 return __builtin_altivec_vmaxuh(__a, __b);4885}4886 4887static __inline__ vector unsigned short __ATTRS_o_ai4888vec_max(vector bool short __a, vector unsigned short __b) {4889 return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);4890}4891 4892static __inline__ vector unsigned short __ATTRS_o_ai4893vec_max(vector unsigned short __a, vector bool short __b) {4894 return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);4895}4896 4897static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,4898 vector int __b) {4899 return __builtin_altivec_vmaxsw(__a, __b);4900}4901 4902static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,4903 vector int __b) {4904 return __builtin_altivec_vmaxsw((vector int)__a, __b);4905}4906 4907static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,4908 vector bool int __b) {4909 return __builtin_altivec_vmaxsw(__a, (vector int)__b);4910}4911 4912static __inline__ vector unsigned int __ATTRS_o_ai4913vec_max(vector unsigned int __a, vector unsigned int __b) {4914 return __builtin_altivec_vmaxuw(__a, __b);4915}4916 4917static __inline__ vector unsigned int __ATTRS_o_ai4918vec_max(vector bool int __a, vector unsigned int __b) {4919 return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);4920}4921 4922static __inline__ vector unsigned int __ATTRS_o_ai4923vec_max(vector unsigned int __a, vector bool int __b) {4924 return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);4925}4926 4927#ifdef __POWER8_VECTOR__4928static __inline__ vector signed long long __ATTRS_o_ai4929vec_max(vector signed long long __a, vector signed long long __b) {4930 return __builtin_altivec_vmaxsd(__a, __b);4931}4932 4933static __inline__ vector signed long long __ATTRS_o_ai4934vec_max(vector bool long long __a, vector signed long long __b) {4935 return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);4936}4937 4938static __inline__ vector signed long long __ATTRS_o_ai4939vec_max(vector signed long long __a, vector bool long long __b) {4940 return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);4941}4942 4943static __inline__ vector unsigned long long __ATTRS_o_ai4944vec_max(vector unsigned long long __a, vector unsigned long long __b) {4945 return __builtin_altivec_vmaxud(__a, __b);4946}4947 4948static __inline__ vector unsigned long long __ATTRS_o_ai4949vec_max(vector bool long long __a, vector unsigned long long __b) {4950 return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);4951}4952 4953static __inline__ vector unsigned long long __ATTRS_o_ai4954vec_max(vector unsigned long long __a, vector bool long long __b) {4955 return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);4956}4957#endif4958 4959static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,4960 vector float __b) {4961#ifdef __VSX__4962 return __builtin_vsx_xvmaxsp(__a, __b);4963#else4964 return __builtin_altivec_vmaxfp(__a, __b);4965#endif4966}4967 4968#ifdef __VSX__4969static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,4970 vector double __b) {4971 return __builtin_vsx_xvmaxdp(__a, __b);4972}4973#endif4974 4975/* vec_vmaxsb */4976 4977static __inline__ vector signed char __ATTRS_o_ai4978vec_vmaxsb(vector signed char __a, vector signed char __b) {4979 return __builtin_altivec_vmaxsb(__a, __b);4980}4981 4982static __inline__ vector signed char __ATTRS_o_ai4983vec_vmaxsb(vector bool char __a, vector signed char __b) {4984 return __builtin_altivec_vmaxsb((vector signed char)__a, __b);4985}4986 4987static __inline__ vector signed char __ATTRS_o_ai4988vec_vmaxsb(vector signed char __a, vector bool char __b) {4989 return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);4990}4991 4992/* vec_vmaxub */4993 4994static __inline__ vector unsigned char __ATTRS_o_ai4995vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {4996 return __builtin_altivec_vmaxub(__a, __b);4997}4998 4999static __inline__ vector unsigned char __ATTRS_o_ai5000vec_vmaxub(vector bool char __a, vector unsigned char __b) {5001 return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);5002}5003 5004static __inline__ vector unsigned char __ATTRS_o_ai5005vec_vmaxub(vector unsigned char __a, vector bool char __b) {5006 return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);5007}5008 5009/* vec_vmaxsh */5010 5011static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,5012 vector short __b) {5013 return __builtin_altivec_vmaxsh(__a, __b);5014}5015 5016static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,5017 vector short __b) {5018 return __builtin_altivec_vmaxsh((vector short)__a, __b);5019}5020 5021static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,5022 vector bool short __b) {5023 return __builtin_altivec_vmaxsh(__a, (vector short)__b);5024}5025 5026/* vec_vmaxuh */5027 5028static __inline__ vector unsigned short __ATTRS_o_ai5029vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {5030 return __builtin_altivec_vmaxuh(__a, __b);5031}5032 5033static __inline__ vector unsigned short __ATTRS_o_ai5034vec_vmaxuh(vector bool short __a, vector unsigned short __b) {5035 return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);5036}5037 5038static __inline__ vector unsigned short __ATTRS_o_ai5039vec_vmaxuh(vector unsigned short __a, vector bool short __b) {5040 return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);5041}5042 5043/* vec_vmaxsw */5044 5045static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,5046 vector int __b) {5047 return __builtin_altivec_vmaxsw(__a, __b);5048}5049 5050static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,5051 vector int __b) {5052 return __builtin_altivec_vmaxsw((vector int)__a, __b);5053}5054 5055static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,5056 vector bool int __b) {5057 return __builtin_altivec_vmaxsw(__a, (vector int)__b);5058}5059 5060/* vec_vmaxuw */5061 5062static __inline__ vector unsigned int __ATTRS_o_ai5063vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {5064 return __builtin_altivec_vmaxuw(__a, __b);5065}5066 5067static __inline__ vector unsigned int __ATTRS_o_ai5068vec_vmaxuw(vector bool int __a, vector unsigned int __b) {5069 return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);5070}5071 5072static __inline__ vector unsigned int __ATTRS_o_ai5073vec_vmaxuw(vector unsigned int __a, vector bool int __b) {5074 return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);5075}5076 5077/* vec_vmaxfp */5078 5079static __inline__ vector float __attribute__((__always_inline__))5080vec_vmaxfp(vector float __a, vector float __b) {5081#ifdef __VSX__5082 return __builtin_vsx_xvmaxsp(__a, __b);5083#else5084 return __builtin_altivec_vmaxfp(__a, __b);5085#endif5086}5087 5088/* vec_mergeh */5089 5090static __inline__ vector signed char __ATTRS_o_ai5091vec_mergeh(vector signed char __a, vector signed char __b) {5092 return vec_perm(__a, __b,5093 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,5094 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,5095 0x06, 0x16, 0x07, 0x17));5096}5097 5098static __inline__ vector unsigned char __ATTRS_o_ai5099vec_mergeh(vector unsigned char __a, vector unsigned char __b) {5100 return vec_perm(__a, __b,5101 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,5102 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,5103 0x06, 0x16, 0x07, 0x17));5104}5105 5106static __inline__ vector bool char __ATTRS_o_ai5107vec_mergeh(vector bool char __a, vector bool char __b) {5108 return vec_perm(__a, __b,5109 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,5110 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,5111 0x06, 0x16, 0x07, 0x17));5112}5113 5114static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,5115 vector short __b) {5116 return vec_perm(__a, __b,5117 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5118 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5119 0x06, 0x07, 0x16, 0x17));5120}5121 5122static __inline__ vector unsigned short __ATTRS_o_ai5123vec_mergeh(vector unsigned short __a, vector unsigned short __b) {5124 return vec_perm(__a, __b,5125 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5126 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5127 0x06, 0x07, 0x16, 0x17));5128}5129 5130static __inline__ vector bool short __ATTRS_o_ai5131vec_mergeh(vector bool short __a, vector bool short __b) {5132 return vec_perm(__a, __b,5133 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5134 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5135 0x06, 0x07, 0x16, 0x17));5136}5137 5138static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,5139 vector pixel __b) {5140 return vec_perm(__a, __b,5141 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5142 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5143 0x06, 0x07, 0x16, 0x17));5144}5145 5146static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,5147 vector int __b) {5148 return vec_perm(__a, __b,5149 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5150 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5151 0x14, 0x15, 0x16, 0x17));5152}5153 5154static __inline__ vector unsigned int __ATTRS_o_ai5155vec_mergeh(vector unsigned int __a, vector unsigned int __b) {5156 return vec_perm(__a, __b,5157 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5158 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5159 0x14, 0x15, 0x16, 0x17));5160}5161 5162static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,5163 vector bool int __b) {5164 return vec_perm(__a, __b,5165 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5166 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5167 0x14, 0x15, 0x16, 0x17));5168}5169 5170static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,5171 vector float __b) {5172 return vec_perm(__a, __b,5173 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5174 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5175 0x14, 0x15, 0x16, 0x17));5176}5177 5178#ifdef __VSX__5179static __inline__ vector signed long long __ATTRS_o_ai5180vec_mergeh(vector signed long long __a, vector signed long long __b) {5181 return vec_perm(__a, __b,5182 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5183 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5184 0x14, 0x15, 0x16, 0x17));5185}5186 5187static __inline__ vector signed long long __ATTRS_o_ai5188vec_mergeh(vector signed long long __a, vector bool long long __b) {5189 return vec_perm(__a, (vector signed long long)__b,5190 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5191 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5192 0x14, 0x15, 0x16, 0x17));5193}5194 5195static __inline__ vector signed long long __ATTRS_o_ai5196vec_mergeh(vector bool long long __a, vector signed long long __b) {5197 return vec_perm((vector signed long long)__a, __b,5198 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5199 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5200 0x14, 0x15, 0x16, 0x17));5201}5202 5203static __inline__ vector unsigned long long __ATTRS_o_ai5204vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {5205 return vec_perm(__a, __b,5206 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5207 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5208 0x14, 0x15, 0x16, 0x17));5209}5210 5211static __inline__ vector unsigned long long __ATTRS_o_ai5212vec_mergeh(vector unsigned long long __a, vector bool long long __b) {5213 return vec_perm(__a, (vector unsigned long long)__b,5214 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5215 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5216 0x14, 0x15, 0x16, 0x17));5217}5218 5219static __inline__ vector unsigned long long __ATTRS_o_ai5220vec_mergeh(vector bool long long __a, vector unsigned long long __b) {5221 return vec_perm((vector unsigned long long)__a, __b,5222 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5223 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5224 0x14, 0x15, 0x16, 0x17));5225}5226 5227static __inline__ vector bool long long __ATTRS_o_ai5228vec_mergeh(vector bool long long __a, vector bool long long __b) {5229 return vec_perm(__a, __b,5230 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5231 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5232 0x14, 0x15, 0x16, 0x17));5233}5234 5235static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,5236 vector double __b) {5237 return vec_perm(__a, __b,5238 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5239 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5240 0x14, 0x15, 0x16, 0x17));5241}5242static __inline__ vector double __ATTRS_o_ai5243vec_mergeh(vector double __a, vector bool long long __b) {5244 return vec_perm(__a, (vector double)__b,5245 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5246 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5247 0x14, 0x15, 0x16, 0x17));5248}5249static __inline__ vector double __ATTRS_o_ai5250vec_mergeh(vector bool long long __a, vector double __b) {5251 return vec_perm((vector double)__a, __b,5252 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,5253 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,5254 0x14, 0x15, 0x16, 0x17));5255}5256#endif5257 5258/* vec_vmrghb */5259 5260#define __builtin_altivec_vmrghb vec_vmrghb5261 5262static __inline__ vector signed char __ATTRS_o_ai5263vec_vmrghb(vector signed char __a, vector signed char __b) {5264 return vec_perm(__a, __b,5265 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,5266 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,5267 0x06, 0x16, 0x07, 0x17));5268}5269 5270static __inline__ vector unsigned char __ATTRS_o_ai5271vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {5272 return vec_perm(__a, __b,5273 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,5274 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,5275 0x06, 0x16, 0x07, 0x17));5276}5277 5278static __inline__ vector bool char __ATTRS_o_ai5279vec_vmrghb(vector bool char __a, vector bool char __b) {5280 return vec_perm(__a, __b,5281 (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,5282 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,5283 0x06, 0x16, 0x07, 0x17));5284}5285 5286/* vec_vmrghh */5287 5288#define __builtin_altivec_vmrghh vec_vmrghh5289 5290static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,5291 vector short __b) {5292 return vec_perm(__a, __b,5293 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5294 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5295 0x06, 0x07, 0x16, 0x17));5296}5297 5298static __inline__ vector unsigned short __ATTRS_o_ai5299vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {5300 return vec_perm(__a, __b,5301 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5302 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5303 0x06, 0x07, 0x16, 0x17));5304}5305 5306static __inline__ vector bool short __ATTRS_o_ai5307vec_vmrghh(vector bool short __a, vector bool short __b) {5308 return vec_perm(__a, __b,5309 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5310 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5311 0x06, 0x07, 0x16, 0x17));5312}5313 5314static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,5315 vector pixel __b) {5316 return vec_perm(__a, __b,5317 (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,5318 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,5319 0x06, 0x07, 0x16, 0x17));5320}5321 5322/* vec_vmrghw */5323 5324#define __builtin_altivec_vmrghw vec_vmrghw5325 5326static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,5327 vector int __b) {5328 return vec_perm(__a, __b,5329 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5330 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5331 0x14, 0x15, 0x16, 0x17));5332}5333 5334static __inline__ vector unsigned int __ATTRS_o_ai5335vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {5336 return vec_perm(__a, __b,5337 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5338 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5339 0x14, 0x15, 0x16, 0x17));5340}5341 5342static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,5343 vector bool int __b) {5344 return vec_perm(__a, __b,5345 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5346 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5347 0x14, 0x15, 0x16, 0x17));5348}5349 5350static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,5351 vector float __b) {5352 return vec_perm(__a, __b,5353 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5354 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,5355 0x14, 0x15, 0x16, 0x17));5356}5357 5358/* vec_mergel */5359 5360static __inline__ vector signed char __ATTRS_o_ai5361vec_mergel(vector signed char __a, vector signed char __b) {5362 return vec_perm(__a, __b,5363 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,5364 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,5365 0x0E, 0x1E, 0x0F, 0x1F));5366}5367 5368static __inline__ vector unsigned char __ATTRS_o_ai5369vec_mergel(vector unsigned char __a, vector unsigned char __b) {5370 return vec_perm(__a, __b,5371 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,5372 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,5373 0x0E, 0x1E, 0x0F, 0x1F));5374}5375 5376static __inline__ vector bool char __ATTRS_o_ai5377vec_mergel(vector bool char __a, vector bool char __b) {5378 return vec_perm(__a, __b,5379 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,5380 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,5381 0x0E, 0x1E, 0x0F, 0x1F));5382}5383 5384static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,5385 vector short __b) {5386 return vec_perm(__a, __b,5387 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5388 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5389 0x0E, 0x0F, 0x1E, 0x1F));5390}5391 5392static __inline__ vector unsigned short __ATTRS_o_ai5393vec_mergel(vector unsigned short __a, vector unsigned short __b) {5394 return vec_perm(__a, __b,5395 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5396 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5397 0x0E, 0x0F, 0x1E, 0x1F));5398}5399 5400static __inline__ vector bool short __ATTRS_o_ai5401vec_mergel(vector bool short __a, vector bool short __b) {5402 return vec_perm(__a, __b,5403 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5404 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5405 0x0E, 0x0F, 0x1E, 0x1F));5406}5407 5408static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,5409 vector pixel __b) {5410 return vec_perm(__a, __b,5411 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5412 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5413 0x0E, 0x0F, 0x1E, 0x1F));5414}5415 5416static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,5417 vector int __b) {5418 return vec_perm(__a, __b,5419 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5420 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5421 0x1C, 0x1D, 0x1E, 0x1F));5422}5423 5424static __inline__ vector unsigned int __ATTRS_o_ai5425vec_mergel(vector unsigned int __a, vector unsigned int __b) {5426 return vec_perm(__a, __b,5427 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5428 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5429 0x1C, 0x1D, 0x1E, 0x1F));5430}5431 5432static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,5433 vector bool int __b) {5434 return vec_perm(__a, __b,5435 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5436 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5437 0x1C, 0x1D, 0x1E, 0x1F));5438}5439 5440static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,5441 vector float __b) {5442 return vec_perm(__a, __b,5443 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5444 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5445 0x1C, 0x1D, 0x1E, 0x1F));5446}5447 5448#ifdef __VSX__5449static __inline__ vector signed long long __ATTRS_o_ai5450vec_mergel(vector signed long long __a, vector signed long long __b) {5451 return vec_perm(__a, __b,5452 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5453 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5454 0x1C, 0x1D, 0x1E, 0x1F));5455}5456static __inline__ vector signed long long __ATTRS_o_ai5457vec_mergel(vector signed long long __a, vector bool long long __b) {5458 return vec_perm(__a, (vector signed long long)__b,5459 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5460 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5461 0x1C, 0x1D, 0x1E, 0x1F));5462}5463static __inline__ vector signed long long __ATTRS_o_ai5464vec_mergel(vector bool long long __a, vector signed long long __b) {5465 return vec_perm((vector signed long long)__a, __b,5466 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5467 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5468 0x1C, 0x1D, 0x1E, 0x1F));5469}5470static __inline__ vector unsigned long long __ATTRS_o_ai5471vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {5472 return vec_perm(__a, __b,5473 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5474 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5475 0x1C, 0x1D, 0x1E, 0x1F));5476}5477static __inline__ vector unsigned long long __ATTRS_o_ai5478vec_mergel(vector unsigned long long __a, vector bool long long __b) {5479 return vec_perm(__a, (vector unsigned long long)__b,5480 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5481 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5482 0x1C, 0x1D, 0x1E, 0x1F));5483}5484static __inline__ vector unsigned long long __ATTRS_o_ai5485vec_mergel(vector bool long long __a, vector unsigned long long __b) {5486 return vec_perm((vector unsigned long long)__a, __b,5487 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5488 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5489 0x1C, 0x1D, 0x1E, 0x1F));5490}5491static __inline__ vector bool long long __ATTRS_o_ai5492vec_mergel(vector bool long long __a, vector bool long long __b) {5493 return vec_perm(__a, __b,5494 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5495 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5496 0x1C, 0x1D, 0x1E, 0x1F));5497}5498static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,5499 vector double __b) {5500 return vec_perm(__a, __b,5501 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5502 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5503 0x1C, 0x1D, 0x1E, 0x1F));5504}5505static __inline__ vector double __ATTRS_o_ai5506vec_mergel(vector double __a, vector bool long long __b) {5507 return vec_perm(__a, (vector double)__b,5508 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5509 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5510 0x1C, 0x1D, 0x1E, 0x1F));5511}5512static __inline__ vector double __ATTRS_o_ai5513vec_mergel(vector bool long long __a, vector double __b) {5514 return vec_perm((vector double)__a, __b,5515 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,5516 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,5517 0x1C, 0x1D, 0x1E, 0x1F));5518}5519#endif5520 5521/* vec_vmrglb */5522 5523#define __builtin_altivec_vmrglb vec_vmrglb5524 5525static __inline__ vector signed char __ATTRS_o_ai5526vec_vmrglb(vector signed char __a, vector signed char __b) {5527 return vec_perm(__a, __b,5528 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,5529 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,5530 0x0E, 0x1E, 0x0F, 0x1F));5531}5532 5533static __inline__ vector unsigned char __ATTRS_o_ai5534vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {5535 return vec_perm(__a, __b,5536 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,5537 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,5538 0x0E, 0x1E, 0x0F, 0x1F));5539}5540 5541static __inline__ vector bool char __ATTRS_o_ai5542vec_vmrglb(vector bool char __a, vector bool char __b) {5543 return vec_perm(__a, __b,5544 (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,5545 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,5546 0x0E, 0x1E, 0x0F, 0x1F));5547}5548 5549/* vec_vmrglh */5550 5551#define __builtin_altivec_vmrglh vec_vmrglh5552 5553static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,5554 vector short __b) {5555 return vec_perm(__a, __b,5556 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5557 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5558 0x0E, 0x0F, 0x1E, 0x1F));5559}5560 5561static __inline__ vector unsigned short __ATTRS_o_ai5562vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {5563 return vec_perm(__a, __b,5564 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5565 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5566 0x0E, 0x0F, 0x1E, 0x1F));5567}5568 5569static __inline__ vector bool short __ATTRS_o_ai5570vec_vmrglh(vector bool short __a, vector bool short __b) {5571 return vec_perm(__a, __b,5572 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5573 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5574 0x0E, 0x0F, 0x1E, 0x1F));5575}5576 5577static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,5578 vector pixel __b) {5579 return vec_perm(__a, __b,5580 (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,5581 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,5582 0x0E, 0x0F, 0x1E, 0x1F));5583}5584 5585/* vec_vmrglw */5586 5587#define __builtin_altivec_vmrglw vec_vmrglw5588 5589static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,5590 vector int __b) {5591 return vec_perm(__a, __b,5592 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5593 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5594 0x1C, 0x1D, 0x1E, 0x1F));5595}5596 5597static __inline__ vector unsigned int __ATTRS_o_ai5598vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {5599 return vec_perm(__a, __b,5600 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5601 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5602 0x1C, 0x1D, 0x1E, 0x1F));5603}5604 5605static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,5606 vector bool int __b) {5607 return vec_perm(__a, __b,5608 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5609 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5610 0x1C, 0x1D, 0x1E, 0x1F));5611}5612 5613static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,5614 vector float __b) {5615 return vec_perm(__a, __b,5616 (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,5617 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,5618 0x1C, 0x1D, 0x1E, 0x1F));5619}5620 5621#ifdef __POWER8_VECTOR__5622/* vec_mergee */5623 5624static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,5625 vector bool int __b) {5626 return vec_perm(__a, __b,5627 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5628 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,5629 0x18, 0x19, 0x1A, 0x1B));5630}5631 5632static __inline__ vector signed int __ATTRS_o_ai5633vec_mergee(vector signed int __a, vector signed int __b) {5634 return vec_perm(__a, __b,5635 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5636 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,5637 0x18, 0x19, 0x1A, 0x1B));5638}5639 5640static __inline__ vector unsigned int __ATTRS_o_ai5641vec_mergee(vector unsigned int __a, vector unsigned int __b) {5642 return vec_perm(__a, __b,5643 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5644 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,5645 0x18, 0x19, 0x1A, 0x1B));5646}5647 5648static __inline__ vector bool long long __ATTRS_o_ai5649vec_mergee(vector bool long long __a, vector bool long long __b) {5650 return vec_mergeh(__a, __b);5651}5652 5653static __inline__ vector signed long long __ATTRS_o_ai5654vec_mergee(vector signed long long __a, vector signed long long __b) {5655 return vec_mergeh(__a, __b);5656}5657 5658static __inline__ vector unsigned long long __ATTRS_o_ai5659vec_mergee(vector unsigned long long __a, vector unsigned long long __b) {5660 return vec_mergeh(__a, __b);5661}5662 5663static __inline__ vector float __ATTRS_o_ai5664vec_mergee(vector float __a, vector float __b) {5665 return vec_perm(__a, __b,5666 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,5667 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,5668 0x18, 0x19, 0x1A, 0x1B));5669}5670 5671static __inline__ vector double __ATTRS_o_ai5672vec_mergee(vector double __a, vector double __b) {5673 return vec_mergeh(__a, __b);5674}5675 5676/* vec_mergeo */5677 5678static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,5679 vector bool int __b) {5680 return vec_perm(__a, __b,5681 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,5682 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,5683 0x1C, 0x1D, 0x1E, 0x1F));5684}5685 5686static __inline__ vector signed int __ATTRS_o_ai5687vec_mergeo(vector signed int __a, vector signed int __b) {5688 return vec_perm(__a, __b,5689 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,5690 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,5691 0x1C, 0x1D, 0x1E, 0x1F));5692}5693 5694static __inline__ vector unsigned int __ATTRS_o_ai5695vec_mergeo(vector unsigned int __a, vector unsigned int __b) {5696 return vec_perm(__a, __b,5697 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,5698 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,5699 0x1C, 0x1D, 0x1E, 0x1F));5700}5701 5702static __inline__ vector bool long long __ATTRS_o_ai5703vec_mergeo(vector bool long long __a, vector bool long long __b) {5704 return vec_mergel(__a, __b);5705}5706 5707static __inline__ vector signed long long __ATTRS_o_ai5708vec_mergeo(vector signed long long __a, vector signed long long __b) {5709 return vec_mergel(__a, __b);5710}5711 5712static __inline__ vector unsigned long long __ATTRS_o_ai5713vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {5714 return vec_mergel(__a, __b);5715}5716 5717static __inline__ vector float __ATTRS_o_ai5718vec_mergeo(vector float __a, vector float __b) {5719 return vec_perm(__a, __b,5720 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,5721 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,5722 0x1C, 0x1D, 0x1E, 0x1F));5723}5724 5725static __inline__ vector double __ATTRS_o_ai5726vec_mergeo(vector double __a, vector double __b) {5727 return vec_mergel(__a, __b);5728}5729 5730#endif5731 5732/* vec_mfvscr */5733 5734static __inline__ vector unsigned short __attribute__((__always_inline__))5735vec_mfvscr(void) {5736 return __builtin_altivec_mfvscr();5737}5738 5739/* vec_min */5740 5741static __inline__ vector signed char __ATTRS_o_ai5742vec_min(vector signed char __a, vector signed char __b) {5743 return __builtin_altivec_vminsb(__a, __b);5744}5745 5746static __inline__ vector signed char __ATTRS_o_ai5747vec_min(vector bool char __a, vector signed char __b) {5748 return __builtin_altivec_vminsb((vector signed char)__a, __b);5749}5750 5751static __inline__ vector signed char __ATTRS_o_ai5752vec_min(vector signed char __a, vector bool char __b) {5753 return __builtin_altivec_vminsb(__a, (vector signed char)__b);5754}5755 5756static __inline__ vector unsigned char __ATTRS_o_ai5757vec_min(vector unsigned char __a, vector unsigned char __b) {5758 return __builtin_altivec_vminub(__a, __b);5759}5760 5761static __inline__ vector unsigned char __ATTRS_o_ai5762vec_min(vector bool char __a, vector unsigned char __b) {5763 return __builtin_altivec_vminub((vector unsigned char)__a, __b);5764}5765 5766static __inline__ vector unsigned char __ATTRS_o_ai5767vec_min(vector unsigned char __a, vector bool char __b) {5768 return __builtin_altivec_vminub(__a, (vector unsigned char)__b);5769}5770 5771static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,5772 vector short __b) {5773 return __builtin_altivec_vminsh(__a, __b);5774}5775 5776static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,5777 vector short __b) {5778 return __builtin_altivec_vminsh((vector short)__a, __b);5779}5780 5781static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,5782 vector bool short __b) {5783 return __builtin_altivec_vminsh(__a, (vector short)__b);5784}5785 5786static __inline__ vector unsigned short __ATTRS_o_ai5787vec_min(vector unsigned short __a, vector unsigned short __b) {5788 return __builtin_altivec_vminuh(__a, __b);5789}5790 5791static __inline__ vector unsigned short __ATTRS_o_ai5792vec_min(vector bool short __a, vector unsigned short __b) {5793 return __builtin_altivec_vminuh((vector unsigned short)__a, __b);5794}5795 5796static __inline__ vector unsigned short __ATTRS_o_ai5797vec_min(vector unsigned short __a, vector bool short __b) {5798 return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);5799}5800 5801static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,5802 vector int __b) {5803 return __builtin_altivec_vminsw(__a, __b);5804}5805 5806static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,5807 vector int __b) {5808 return __builtin_altivec_vminsw((vector int)__a, __b);5809}5810 5811static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,5812 vector bool int __b) {5813 return __builtin_altivec_vminsw(__a, (vector int)__b);5814}5815 5816static __inline__ vector unsigned int __ATTRS_o_ai5817vec_min(vector unsigned int __a, vector unsigned int __b) {5818 return __builtin_altivec_vminuw(__a, __b);5819}5820 5821static __inline__ vector unsigned int __ATTRS_o_ai5822vec_min(vector bool int __a, vector unsigned int __b) {5823 return __builtin_altivec_vminuw((vector unsigned int)__a, __b);5824}5825 5826static __inline__ vector unsigned int __ATTRS_o_ai5827vec_min(vector unsigned int __a, vector bool int __b) {5828 return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);5829}5830 5831#ifdef __POWER8_VECTOR__5832static __inline__ vector signed long long __ATTRS_o_ai5833vec_min(vector signed long long __a, vector signed long long __b) {5834 return __builtin_altivec_vminsd(__a, __b);5835}5836 5837static __inline__ vector signed long long __ATTRS_o_ai5838vec_min(vector bool long long __a, vector signed long long __b) {5839 return __builtin_altivec_vminsd((vector signed long long)__a, __b);5840}5841 5842static __inline__ vector signed long long __ATTRS_o_ai5843vec_min(vector signed long long __a, vector bool long long __b) {5844 return __builtin_altivec_vminsd(__a, (vector signed long long)__b);5845}5846 5847static __inline__ vector unsigned long long __ATTRS_o_ai5848vec_min(vector unsigned long long __a, vector unsigned long long __b) {5849 return __builtin_altivec_vminud(__a, __b);5850}5851 5852static __inline__ vector unsigned long long __ATTRS_o_ai5853vec_min(vector bool long long __a, vector unsigned long long __b) {5854 return __builtin_altivec_vminud((vector unsigned long long)__a, __b);5855}5856 5857static __inline__ vector unsigned long long __ATTRS_o_ai5858vec_min(vector unsigned long long __a, vector bool long long __b) {5859 return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);5860}5861#endif5862 5863static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,5864 vector float __b) {5865#ifdef __VSX__5866 return __builtin_vsx_xvminsp(__a, __b);5867#else5868 return __builtin_altivec_vminfp(__a, __b);5869#endif5870}5871 5872#ifdef __VSX__5873static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,5874 vector double __b) {5875 return __builtin_vsx_xvmindp(__a, __b);5876}5877#endif5878 5879/* vec_vminsb */5880 5881static __inline__ vector signed char __ATTRS_o_ai5882vec_vminsb(vector signed char __a, vector signed char __b) {5883 return __builtin_altivec_vminsb(__a, __b);5884}5885 5886static __inline__ vector signed char __ATTRS_o_ai5887vec_vminsb(vector bool char __a, vector signed char __b) {5888 return __builtin_altivec_vminsb((vector signed char)__a, __b);5889}5890 5891static __inline__ vector signed char __ATTRS_o_ai5892vec_vminsb(vector signed char __a, vector bool char __b) {5893 return __builtin_altivec_vminsb(__a, (vector signed char)__b);5894}5895 5896/* vec_vminub */5897 5898static __inline__ vector unsigned char __ATTRS_o_ai5899vec_vminub(vector unsigned char __a, vector unsigned char __b) {5900 return __builtin_altivec_vminub(__a, __b);5901}5902 5903static __inline__ vector unsigned char __ATTRS_o_ai5904vec_vminub(vector bool char __a, vector unsigned char __b) {5905 return __builtin_altivec_vminub((vector unsigned char)__a, __b);5906}5907 5908static __inline__ vector unsigned char __ATTRS_o_ai5909vec_vminub(vector unsigned char __a, vector bool char __b) {5910 return __builtin_altivec_vminub(__a, (vector unsigned char)__b);5911}5912 5913/* vec_vminsh */5914 5915static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,5916 vector short __b) {5917 return __builtin_altivec_vminsh(__a, __b);5918}5919 5920static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,5921 vector short __b) {5922 return __builtin_altivec_vminsh((vector short)__a, __b);5923}5924 5925static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,5926 vector bool short __b) {5927 return __builtin_altivec_vminsh(__a, (vector short)__b);5928}5929 5930/* vec_vminuh */5931 5932static __inline__ vector unsigned short __ATTRS_o_ai5933vec_vminuh(vector unsigned short __a, vector unsigned short __b) {5934 return __builtin_altivec_vminuh(__a, __b);5935}5936 5937static __inline__ vector unsigned short __ATTRS_o_ai5938vec_vminuh(vector bool short __a, vector unsigned short __b) {5939 return __builtin_altivec_vminuh((vector unsigned short)__a, __b);5940}5941 5942static __inline__ vector unsigned short __ATTRS_o_ai5943vec_vminuh(vector unsigned short __a, vector bool short __b) {5944 return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);5945}5946 5947/* vec_vminsw */5948 5949static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,5950 vector int __b) {5951 return __builtin_altivec_vminsw(__a, __b);5952}5953 5954static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,5955 vector int __b) {5956 return __builtin_altivec_vminsw((vector int)__a, __b);5957}5958 5959static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,5960 vector bool int __b) {5961 return __builtin_altivec_vminsw(__a, (vector int)__b);5962}5963 5964/* vec_vminuw */5965 5966static __inline__ vector unsigned int __ATTRS_o_ai5967vec_vminuw(vector unsigned int __a, vector unsigned int __b) {5968 return __builtin_altivec_vminuw(__a, __b);5969}5970 5971static __inline__ vector unsigned int __ATTRS_o_ai5972vec_vminuw(vector bool int __a, vector unsigned int __b) {5973 return __builtin_altivec_vminuw((vector unsigned int)__a, __b);5974}5975 5976static __inline__ vector unsigned int __ATTRS_o_ai5977vec_vminuw(vector unsigned int __a, vector bool int __b) {5978 return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);5979}5980 5981/* vec_vminfp */5982 5983static __inline__ vector float __attribute__((__always_inline__))5984vec_vminfp(vector float __a, vector float __b) {5985#ifdef __VSX__5986 return __builtin_vsx_xvminsp(__a, __b);5987#else5988 return __builtin_altivec_vminfp(__a, __b);5989#endif5990}5991 5992/* vec_mladd */5993 5994#define __builtin_altivec_vmladduhm vec_mladd5995 5996static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,5997 vector short __b,5998 vector short __c) {5999 return __a * __b + __c;6000}6001 6002static __inline__ vector short __ATTRS_o_ai vec_mladd(6003 vector short __a, vector unsigned short __b, vector unsigned short __c) {6004 return __a * (vector short)__b + (vector short)__c;6005}6006 6007static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,6008 vector short __b,6009 vector short __c) {6010 return (vector short)__a * __b + __c;6011}6012 6013static __inline__ vector unsigned short __ATTRS_o_ai6014vec_mladd(vector unsigned short __a, vector unsigned short __b,6015 vector unsigned short __c) {6016 return __a * __b + __c;6017}6018 6019/* vec_vmladduhm */6020 6021static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,6022 vector short __b,6023 vector short __c) {6024 return __a * __b + __c;6025}6026 6027static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(6028 vector short __a, vector unsigned short __b, vector unsigned short __c) {6029 return __a * (vector short)__b + (vector short)__c;6030}6031 6032static __inline__ vector short __ATTRS_o_ai6033vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {6034 return (vector short)__a * __b + __c;6035}6036 6037static __inline__ vector unsigned short __ATTRS_o_ai6038vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,6039 vector unsigned short __c) {6040 return __a * __b + __c;6041}6042 6043/* vec_mradds */6044 6045static __inline__ vector short __attribute__((__always_inline__))6046vec_mradds(vector short __a, vector short __b, vector short __c) {6047 return __builtin_altivec_vmhraddshs(__a, __b, __c);6048}6049 6050/* vec_vmhraddshs */6051 6052static __inline__ vector short __attribute__((__always_inline__))6053vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {6054 return __builtin_altivec_vmhraddshs(__a, __b, __c);6055}6056 6057/* vec_msum */6058 6059static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,6060 vector unsigned char __b,6061 vector int __c) {6062 return __builtin_altivec_vmsummbm(__a, __b, __c);6063}6064 6065static __inline__ vector unsigned int __ATTRS_o_ai6066vec_msum(vector unsigned char __a, vector unsigned char __b,6067 vector unsigned int __c) {6068 return __builtin_altivec_vmsumubm(__a, __b, __c);6069}6070 6071static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,6072 vector short __b,6073 vector int __c) {6074 return __builtin_altivec_vmsumshm(__a, __b, __c);6075}6076 6077static __inline__ vector unsigned int __ATTRS_o_ai6078vec_msum(vector unsigned short __a, vector unsigned short __b,6079 vector unsigned int __c) {6080 return __builtin_altivec_vmsumuhm(__a, __b, __c);6081}6082 6083/* vec_msumc */6084 6085#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)6086static __inline__ vector unsigned __int128 __ATTRS_o_ai6087vec_msumc(vector unsigned long long __a, vector unsigned long long __b,6088 vector unsigned __int128 __c) {6089 return __builtin_altivec_vmsumcud(__a, __b, __c);6090}6091#endif6092 6093/* vec_vmsummbm */6094 6095static __inline__ vector int __attribute__((__always_inline__))6096vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {6097 return __builtin_altivec_vmsummbm(__a, __b, __c);6098}6099 6100/* vec_vmsumubm */6101 6102static __inline__ vector unsigned int __attribute__((__always_inline__))6103vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,6104 vector unsigned int __c) {6105 return __builtin_altivec_vmsumubm(__a, __b, __c);6106}6107 6108/* vec_vmsumshm */6109 6110static __inline__ vector int __attribute__((__always_inline__))6111vec_vmsumshm(vector short __a, vector short __b, vector int __c) {6112 return __builtin_altivec_vmsumshm(__a, __b, __c);6113}6114 6115/* vec_vmsumuhm */6116 6117static __inline__ vector unsigned int __attribute__((__always_inline__))6118vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,6119 vector unsigned int __c) {6120 return __builtin_altivec_vmsumuhm(__a, __b, __c);6121}6122 6123/* vec_msums */6124 6125static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,6126 vector short __b,6127 vector int __c) {6128 return __builtin_altivec_vmsumshs(__a, __b, __c);6129}6130 6131static __inline__ vector unsigned int __ATTRS_o_ai6132vec_msums(vector unsigned short __a, vector unsigned short __b,6133 vector unsigned int __c) {6134 return __builtin_altivec_vmsumuhs(__a, __b, __c);6135}6136 6137/* vec_vmsumshs */6138 6139static __inline__ vector int __attribute__((__always_inline__))6140vec_vmsumshs(vector short __a, vector short __b, vector int __c) {6141 return __builtin_altivec_vmsumshs(__a, __b, __c);6142}6143 6144/* vec_vmsumuhs */6145 6146static __inline__ vector unsigned int __attribute__((__always_inline__))6147vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,6148 vector unsigned int __c) {6149 return __builtin_altivec_vmsumuhs(__a, __b, __c);6150}6151 6152/* vec_mtvscr */6153 6154static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {6155 __builtin_altivec_mtvscr((vector int)__a);6156}6157 6158static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {6159 __builtin_altivec_mtvscr((vector int)__a);6160}6161 6162static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {6163 __builtin_altivec_mtvscr((vector int)__a);6164}6165 6166static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {6167 __builtin_altivec_mtvscr((vector int)__a);6168}6169 6170static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {6171 __builtin_altivec_mtvscr((vector int)__a);6172}6173 6174static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {6175 __builtin_altivec_mtvscr((vector int)__a);6176}6177 6178static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {6179 __builtin_altivec_mtvscr((vector int)__a);6180}6181 6182static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {6183 __builtin_altivec_mtvscr((vector int)__a);6184}6185 6186static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {6187 __builtin_altivec_mtvscr((vector int)__a);6188}6189 6190static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {6191 __builtin_altivec_mtvscr((vector int)__a);6192}6193 6194static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {6195 __builtin_altivec_mtvscr((vector int)__a);6196}6197 6198/* vec_mul */6199 6200/* Integer vector multiplication will involve multiplication of the odd/even6201 elements separately, then truncating the results and moving to the6202 result vector.6203*/6204static __inline__ vector signed char __ATTRS_o_ai6205vec_mul(vector signed char __a, vector signed char __b) {6206 return __a * __b;6207}6208 6209static __inline__ vector unsigned char __ATTRS_o_ai6210vec_mul(vector unsigned char __a, vector unsigned char __b) {6211 return __a * __b;6212}6213 6214static __inline__ vector signed short __ATTRS_o_ai6215vec_mul(vector signed short __a, vector signed short __b) {6216 return __a * __b;6217}6218 6219static __inline__ vector unsigned short __ATTRS_o_ai6220vec_mul(vector unsigned short __a, vector unsigned short __b) {6221 return __a * __b;6222}6223 6224static __inline__ vector signed int __ATTRS_o_ai6225vec_mul(vector signed int __a, vector signed int __b) {6226 return __a * __b;6227}6228 6229static __inline__ vector unsigned int __ATTRS_o_ai6230vec_mul(vector unsigned int __a, vector unsigned int __b) {6231 return __a * __b;6232}6233 6234#ifdef __VSX__6235static __inline__ vector signed long long __ATTRS_o_ai6236vec_mul(vector signed long long __a, vector signed long long __b) {6237 return __a * __b;6238}6239 6240static __inline__ vector unsigned long long __ATTRS_o_ai6241vec_mul(vector unsigned long long __a, vector unsigned long long __b) {6242 return __a * __b;6243}6244#endif6245 6246static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,6247 vector float __b) {6248 return __a * __b;6249}6250 6251#ifdef __VSX__6252static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,6253 vector double __b) {6254 return __a * __b;6255}6256#endif6257 6258/* The vmulos* and vmules* instructions have a big endian bias, so6259 we must reverse the meaning of "even" and "odd" for little endian. */6260 6261/* vec_mule */6262 6263static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,6264 vector signed char __b) {6265#ifdef __LITTLE_ENDIAN__6266 return __builtin_altivec_vmulosb(__a, __b);6267#else6268 return __builtin_altivec_vmulesb(__a, __b);6269#endif6270}6271 6272static __inline__ vector unsigned short __ATTRS_o_ai6273vec_mule(vector unsigned char __a, vector unsigned char __b) {6274#ifdef __LITTLE_ENDIAN__6275 return __builtin_altivec_vmuloub(__a, __b);6276#else6277 return __builtin_altivec_vmuleub(__a, __b);6278#endif6279}6280 6281static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,6282 vector short __b) {6283#ifdef __LITTLE_ENDIAN__6284 return __builtin_altivec_vmulosh(__a, __b);6285#else6286 return __builtin_altivec_vmulesh(__a, __b);6287#endif6288}6289 6290static __inline__ vector unsigned int __ATTRS_o_ai6291vec_mule(vector unsigned short __a, vector unsigned short __b) {6292#ifdef __LITTLE_ENDIAN__6293 return __builtin_altivec_vmulouh(__a, __b);6294#else6295 return __builtin_altivec_vmuleuh(__a, __b);6296#endif6297}6298 6299#ifdef __POWER8_VECTOR__6300static __inline__ vector signed long long __ATTRS_o_ai6301vec_mule(vector signed int __a, vector signed int __b) {6302#ifdef __LITTLE_ENDIAN__6303 return __builtin_altivec_vmulosw(__a, __b);6304#else6305 return __builtin_altivec_vmulesw(__a, __b);6306#endif6307}6308 6309static __inline__ vector unsigned long long __ATTRS_o_ai6310vec_mule(vector unsigned int __a, vector unsigned int __b) {6311#ifdef __LITTLE_ENDIAN__6312 return __builtin_altivec_vmulouw(__a, __b);6313#else6314 return __builtin_altivec_vmuleuw(__a, __b);6315#endif6316}6317#endif6318 6319#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)6320static __inline__ vector signed __int128 __ATTRS_o_ai6321vec_mule(vector signed long long __a, vector signed long long __b) {6322#ifdef __LITTLE_ENDIAN__6323 return __builtin_altivec_vmulosd(__a, __b);6324#else6325 return __builtin_altivec_vmulesd(__a, __b);6326#endif6327}6328 6329static __inline__ vector unsigned __int128 __ATTRS_o_ai6330vec_mule(vector unsigned long long __a, vector unsigned long long __b) {6331#ifdef __LITTLE_ENDIAN__6332 return __builtin_altivec_vmuloud(__a, __b);6333#else6334 return __builtin_altivec_vmuleud(__a, __b);6335#endif6336}6337#endif6338 6339/* vec_vmulesb */6340 6341static __inline__ vector short __attribute__((__always_inline__))6342vec_vmulesb(vector signed char __a, vector signed char __b) {6343#ifdef __LITTLE_ENDIAN__6344 return __builtin_altivec_vmulosb(__a, __b);6345#else6346 return __builtin_altivec_vmulesb(__a, __b);6347#endif6348}6349 6350/* vec_vmuleub */6351 6352static __inline__ vector unsigned short __attribute__((__always_inline__))6353vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {6354#ifdef __LITTLE_ENDIAN__6355 return __builtin_altivec_vmuloub(__a, __b);6356#else6357 return __builtin_altivec_vmuleub(__a, __b);6358#endif6359}6360 6361/* vec_vmulesh */6362 6363static __inline__ vector int __attribute__((__always_inline__))6364vec_vmulesh(vector short __a, vector short __b) {6365#ifdef __LITTLE_ENDIAN__6366 return __builtin_altivec_vmulosh(__a, __b);6367#else6368 return __builtin_altivec_vmulesh(__a, __b);6369#endif6370}6371 6372/* vec_vmuleuh */6373 6374static __inline__ vector unsigned int __attribute__((__always_inline__))6375vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {6376#ifdef __LITTLE_ENDIAN__6377 return __builtin_altivec_vmulouh(__a, __b);6378#else6379 return __builtin_altivec_vmuleuh(__a, __b);6380#endif6381}6382 6383/* vec_mulh */6384 6385#ifdef __POWER10_VECTOR__6386static __inline__ vector signed int __ATTRS_o_ai6387vec_mulh(vector signed int __a, vector signed int __b) {6388 return __builtin_altivec_vmulhsw(__a, __b);6389}6390 6391static __inline__ vector unsigned int __ATTRS_o_ai6392vec_mulh(vector unsigned int __a, vector unsigned int __b) {6393 return __builtin_altivec_vmulhuw(__a, __b);6394}6395 6396static __inline__ vector signed long long __ATTRS_o_ai6397vec_mulh(vector signed long long __a, vector signed long long __b) {6398 return __builtin_altivec_vmulhsd(__a, __b);6399}6400 6401static __inline__ vector unsigned long long __ATTRS_o_ai6402vec_mulh(vector unsigned long long __a, vector unsigned long long __b) {6403 return __builtin_altivec_vmulhud(__a, __b);6404}6405#endif6406 6407/* vec_mulo */6408 6409static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,6410 vector signed char __b) {6411#ifdef __LITTLE_ENDIAN__6412 return __builtin_altivec_vmulesb(__a, __b);6413#else6414 return __builtin_altivec_vmulosb(__a, __b);6415#endif6416}6417 6418static __inline__ vector unsigned short __ATTRS_o_ai6419vec_mulo(vector unsigned char __a, vector unsigned char __b) {6420#ifdef __LITTLE_ENDIAN__6421 return __builtin_altivec_vmuleub(__a, __b);6422#else6423 return __builtin_altivec_vmuloub(__a, __b);6424#endif6425}6426 6427static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,6428 vector short __b) {6429#ifdef __LITTLE_ENDIAN__6430 return __builtin_altivec_vmulesh(__a, __b);6431#else6432 return __builtin_altivec_vmulosh(__a, __b);6433#endif6434}6435 6436static __inline__ vector unsigned int __ATTRS_o_ai6437vec_mulo(vector unsigned short __a, vector unsigned short __b) {6438#ifdef __LITTLE_ENDIAN__6439 return __builtin_altivec_vmuleuh(__a, __b);6440#else6441 return __builtin_altivec_vmulouh(__a, __b);6442#endif6443}6444 6445#ifdef __POWER8_VECTOR__6446static __inline__ vector signed long long __ATTRS_o_ai6447vec_mulo(vector signed int __a, vector signed int __b) {6448#ifdef __LITTLE_ENDIAN__6449 return __builtin_altivec_vmulesw(__a, __b);6450#else6451 return __builtin_altivec_vmulosw(__a, __b);6452#endif6453}6454 6455static __inline__ vector unsigned long long __ATTRS_o_ai6456vec_mulo(vector unsigned int __a, vector unsigned int __b) {6457#ifdef __LITTLE_ENDIAN__6458 return __builtin_altivec_vmuleuw(__a, __b);6459#else6460 return __builtin_altivec_vmulouw(__a, __b);6461#endif6462}6463#endif6464 6465#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)6466static __inline__ vector signed __int128 __ATTRS_o_ai6467vec_mulo(vector signed long long __a, vector signed long long __b) {6468#ifdef __LITTLE_ENDIAN__6469 return __builtin_altivec_vmulesd(__a, __b);6470#else6471 return __builtin_altivec_vmulosd(__a, __b);6472#endif6473}6474 6475static __inline__ vector unsigned __int128 __ATTRS_o_ai6476vec_mulo(vector unsigned long long __a, vector unsigned long long __b) {6477#ifdef __LITTLE_ENDIAN__6478 return __builtin_altivec_vmuleud(__a, __b);6479#else6480 return __builtin_altivec_vmuloud(__a, __b);6481#endif6482}6483#endif6484 6485/* vec_vmulosb */6486 6487static __inline__ vector short __attribute__((__always_inline__))6488vec_vmulosb(vector signed char __a, vector signed char __b) {6489#ifdef __LITTLE_ENDIAN__6490 return __builtin_altivec_vmulesb(__a, __b);6491#else6492 return __builtin_altivec_vmulosb(__a, __b);6493#endif6494}6495 6496/* vec_vmuloub */6497 6498static __inline__ vector unsigned short __attribute__((__always_inline__))6499vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {6500#ifdef __LITTLE_ENDIAN__6501 return __builtin_altivec_vmuleub(__a, __b);6502#else6503 return __builtin_altivec_vmuloub(__a, __b);6504#endif6505}6506 6507/* vec_vmulosh */6508 6509static __inline__ vector int __attribute__((__always_inline__))6510vec_vmulosh(vector short __a, vector short __b) {6511#ifdef __LITTLE_ENDIAN__6512 return __builtin_altivec_vmulesh(__a, __b);6513#else6514 return __builtin_altivec_vmulosh(__a, __b);6515#endif6516}6517 6518/* vec_vmulouh */6519 6520static __inline__ vector unsigned int __attribute__((__always_inline__))6521vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {6522#ifdef __LITTLE_ENDIAN__6523 return __builtin_altivec_vmuleuh(__a, __b);6524#else6525 return __builtin_altivec_vmulouh(__a, __b);6526#endif6527}6528 6529/* vec_nand */6530 6531#ifdef __POWER8_VECTOR__6532static __inline__ vector signed char __ATTRS_o_ai6533vec_nand(vector signed char __a, vector signed char __b) {6534 return ~(__a & __b);6535}6536 6537static __inline__ vector signed char __ATTRS_o_ai6538vec_nand(vector signed char __a, vector bool char __b) {6539 return ~(__a & (vector signed char)__b);6540}6541 6542static __inline__ vector signed char __ATTRS_o_ai6543vec_nand(vector bool char __a, vector signed char __b) {6544 return (vector signed char)~(__a & (vector bool char)__b);6545}6546 6547static __inline__ vector unsigned char __ATTRS_o_ai6548vec_nand(vector unsigned char __a, vector unsigned char __b) {6549 return ~(__a & __b);6550}6551 6552static __inline__ vector unsigned char __ATTRS_o_ai6553vec_nand(vector unsigned char __a, vector bool char __b) {6554 return ~(__a & (vector unsigned char)__b);6555}6556 6557static __inline__ vector unsigned char __ATTRS_o_ai6558vec_nand(vector bool char __a, vector unsigned char __b) {6559 return (vector unsigned char)~(__a & (vector bool char)__b);6560}6561 6562static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,6563 vector bool char __b) {6564 return ~(__a & __b);6565}6566 6567static __inline__ vector signed short __ATTRS_o_ai6568vec_nand(vector signed short __a, vector signed short __b) {6569 return ~(__a & __b);6570}6571 6572static __inline__ vector signed short __ATTRS_o_ai6573vec_nand(vector signed short __a, vector bool short __b) {6574 return ~(__a & (vector signed short)__b);6575}6576 6577static __inline__ vector signed short __ATTRS_o_ai6578vec_nand(vector bool short __a, vector signed short __b) {6579 return (vector signed short)~(__a & (vector bool short)__b);6580}6581 6582static __inline__ vector unsigned short __ATTRS_o_ai6583vec_nand(vector unsigned short __a, vector unsigned short __b) {6584 return ~(__a & __b);6585}6586 6587static __inline__ vector unsigned short __ATTRS_o_ai6588vec_nand(vector unsigned short __a, vector bool short __b) {6589 return ~(__a & (vector unsigned short)__b);6590}6591 6592static __inline__ vector bool short __ATTRS_o_ai6593vec_nand(vector bool short __a, vector bool short __b) {6594 return ~(__a & __b);6595}6596 6597static __inline__ vector signed int __ATTRS_o_ai6598vec_nand(vector signed int __a, vector signed int __b) {6599 return ~(__a & __b);6600}6601 6602static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,6603 vector bool int __b) {6604 return ~(__a & (vector signed int)__b);6605}6606 6607static __inline__ vector signed int __ATTRS_o_ai6608vec_nand(vector bool int __a, vector signed int __b) {6609 return (vector signed int)~(__a & (vector bool int)__b);6610}6611 6612static __inline__ vector unsigned int __ATTRS_o_ai6613vec_nand(vector unsigned int __a, vector unsigned int __b) {6614 return ~(__a & __b);6615}6616 6617static __inline__ vector unsigned int __ATTRS_o_ai6618vec_nand(vector unsigned int __a, vector bool int __b) {6619 return ~(__a & (vector unsigned int)__b);6620}6621 6622static __inline__ vector unsigned int __ATTRS_o_ai6623vec_nand(vector bool int __a, vector unsigned int __b) {6624 return (vector unsigned int)~(__a & (vector bool int)__b);6625}6626 6627static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,6628 vector bool int __b) {6629 return ~(__a & __b);6630}6631 6632static __inline__ vector float __ATTRS_o_ai6633vec_nand(vector float __a, vector float __b) {6634 return (vector float)(~((vector unsigned int)__a &6635 (vector unsigned int)__b));6636}6637 6638static __inline__ vector signed long long __ATTRS_o_ai6639vec_nand(vector signed long long __a, vector signed long long __b) {6640 return ~(__a & __b);6641}6642 6643static __inline__ vector signed long long __ATTRS_o_ai6644vec_nand(vector signed long long __a, vector bool long long __b) {6645 return ~(__a & (vector signed long long)__b);6646}6647 6648static __inline__ vector signed long long __ATTRS_o_ai6649vec_nand(vector bool long long __a, vector signed long long __b) {6650 return (vector signed long long)~(__a & (vector bool long long)__b);6651}6652 6653static __inline__ vector unsigned long long __ATTRS_o_ai6654vec_nand(vector unsigned long long __a, vector unsigned long long __b) {6655 return ~(__a & __b);6656}6657 6658static __inline__ vector unsigned long long __ATTRS_o_ai6659vec_nand(vector unsigned long long __a, vector bool long long __b) {6660 return ~(__a & (vector unsigned long long)__b);6661}6662 6663static __inline__ vector unsigned long long __ATTRS_o_ai6664vec_nand(vector bool long long __a, vector unsigned long long __b) {6665 return (vector unsigned long long)~(__a & (vector bool long long)__b);6666}6667 6668static __inline__ vector bool long long __ATTRS_o_ai6669vec_nand(vector bool long long __a, vector bool long long __b) {6670 return ~(__a & __b);6671}6672 6673static __inline__ vector double __ATTRS_o_ai6674vec_nand(vector double __a, vector double __b) {6675 return (vector double)(~((vector unsigned long long)__a &6676 (vector unsigned long long)__b));6677}6678 6679#endif6680 6681/* vec_nmadd */6682 6683#ifdef __VSX__6684static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,6685 vector float __b,6686 vector float __c) {6687 return __builtin_vsx_xvnmaddasp(__a, __b, __c);6688}6689 6690static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,6691 vector double __b,6692 vector double __c) {6693 return __builtin_vsx_xvnmaddadp(__a, __b, __c);6694}6695#endif6696 6697/* vec_nmsub */6698 6699static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,6700 vector float __b,6701 vector float __c) {6702#ifdef __VSX__6703 return __builtin_vsx_xvnmsubasp(__a, __b, __c);6704#else6705 return __builtin_altivec_vnmsubfp(__a, __b, __c);6706#endif6707}6708 6709#ifdef __VSX__6710static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,6711 vector double __b,6712 vector double __c) {6713 return __builtin_vsx_xvnmsubadp(__a, __b, __c);6714}6715#endif6716 6717/* vec_vnmsubfp */6718 6719static __inline__ vector float __attribute__((__always_inline__))6720vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {6721 return __builtin_altivec_vnmsubfp(__a, __b, __c);6722}6723 6724/* vec_nor */6725 6726#define __builtin_altivec_vnor vec_nor6727 6728static __inline__ vector signed char __ATTRS_o_ai6729vec_nor(vector signed char __a, vector signed char __b) {6730 return ~(__a | __b);6731}6732 6733static __inline__ vector unsigned char __ATTRS_o_ai6734vec_nor(vector unsigned char __a, vector unsigned char __b) {6735 return ~(__a | __b);6736}6737 6738static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,6739 vector bool char __b) {6740 return ~(__a | __b);6741}6742 6743static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,6744 vector short __b) {6745 return ~(__a | __b);6746}6747 6748static __inline__ vector unsigned short __ATTRS_o_ai6749vec_nor(vector unsigned short __a, vector unsigned short __b) {6750 return ~(__a | __b);6751}6752 6753static __inline__ vector bool short __ATTRS_o_ai6754vec_nor(vector bool short __a, vector bool short __b) {6755 return ~(__a | __b);6756}6757 6758static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,6759 vector int __b) {6760 return ~(__a | __b);6761}6762 6763static __inline__ vector unsigned int __ATTRS_o_ai6764vec_nor(vector unsigned int __a, vector unsigned int __b) {6765 return ~(__a | __b);6766}6767 6768static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,6769 vector bool int __b) {6770 return ~(__a | __b);6771}6772 6773static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,6774 vector float __b) {6775 vector unsigned int __res =6776 ~((vector unsigned int)__a | (vector unsigned int)__b);6777 return (vector float)__res;6778}6779 6780#ifdef __VSX__6781static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,6782 vector double __b) {6783 vector unsigned long long __res =6784 ~((vector unsigned long long)__a | (vector unsigned long long)__b);6785 return (vector double)__res;6786}6787#endif6788 6789/* vec_vnor */6790 6791static __inline__ vector signed char __ATTRS_o_ai6792vec_vnor(vector signed char __a, vector signed char __b) {6793 return ~(__a | __b);6794}6795 6796static __inline__ vector unsigned char __ATTRS_o_ai6797vec_vnor(vector unsigned char __a, vector unsigned char __b) {6798 return ~(__a | __b);6799}6800 6801static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,6802 vector bool char __b) {6803 return ~(__a | __b);6804}6805 6806static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,6807 vector short __b) {6808 return ~(__a | __b);6809}6810 6811static __inline__ vector unsigned short __ATTRS_o_ai6812vec_vnor(vector unsigned short __a, vector unsigned short __b) {6813 return ~(__a | __b);6814}6815 6816static __inline__ vector bool short __ATTRS_o_ai6817vec_vnor(vector bool short __a, vector bool short __b) {6818 return ~(__a | __b);6819}6820 6821static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,6822 vector int __b) {6823 return ~(__a | __b);6824}6825 6826static __inline__ vector unsigned int __ATTRS_o_ai6827vec_vnor(vector unsigned int __a, vector unsigned int __b) {6828 return ~(__a | __b);6829}6830 6831static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,6832 vector bool int __b) {6833 return ~(__a | __b);6834}6835 6836static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,6837 vector float __b) {6838 vector unsigned int __res =6839 ~((vector unsigned int)__a | (vector unsigned int)__b);6840 return (vector float)__res;6841}6842 6843#ifdef __VSX__6844static __inline__ vector signed long long __ATTRS_o_ai6845vec_nor(vector signed long long __a, vector signed long long __b) {6846 return ~(__a | __b);6847}6848 6849static __inline__ vector unsigned long long __ATTRS_o_ai6850vec_nor(vector unsigned long long __a, vector unsigned long long __b) {6851 return ~(__a | __b);6852}6853 6854static __inline__ vector bool long long __ATTRS_o_ai6855vec_nor(vector bool long long __a, vector bool long long __b) {6856 return ~(__a | __b);6857}6858#endif6859 6860/* vec_or */6861 6862#define __builtin_altivec_vor vec_or6863 6864static __inline__ vector signed char __ATTRS_o_ai6865vec_or(vector signed char __a, vector signed char __b) {6866 return __a | __b;6867}6868 6869static __inline__ vector signed char __ATTRS_o_ai6870vec_or(vector bool char __a, vector signed char __b) {6871 return (vector signed char)__a | __b;6872}6873 6874static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,6875 vector bool char __b) {6876 return __a | (vector signed char)__b;6877}6878 6879static __inline__ vector unsigned char __ATTRS_o_ai6880vec_or(vector unsigned char __a, vector unsigned char __b) {6881 return __a | __b;6882}6883 6884static __inline__ vector unsigned char __ATTRS_o_ai6885vec_or(vector bool char __a, vector unsigned char __b) {6886 return (vector unsigned char)__a | __b;6887}6888 6889static __inline__ vector unsigned char __ATTRS_o_ai6890vec_or(vector unsigned char __a, vector bool char __b) {6891 return __a | (vector unsigned char)__b;6892}6893 6894static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,6895 vector bool char __b) {6896 return __a | __b;6897}6898 6899static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,6900 vector short __b) {6901 return __a | __b;6902}6903 6904static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,6905 vector short __b) {6906 return (vector short)__a | __b;6907}6908 6909static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,6910 vector bool short __b) {6911 return __a | (vector short)__b;6912}6913 6914static __inline__ vector unsigned short __ATTRS_o_ai6915vec_or(vector unsigned short __a, vector unsigned short __b) {6916 return __a | __b;6917}6918 6919static __inline__ vector unsigned short __ATTRS_o_ai6920vec_or(vector bool short __a, vector unsigned short __b) {6921 return (vector unsigned short)__a | __b;6922}6923 6924static __inline__ vector unsigned short __ATTRS_o_ai6925vec_or(vector unsigned short __a, vector bool short __b) {6926 return __a | (vector unsigned short)__b;6927}6928 6929static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,6930 vector bool short __b) {6931 return __a | __b;6932}6933 6934static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,6935 vector int __b) {6936 return __a | __b;6937}6938 6939static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,6940 vector int __b) {6941 return (vector int)__a | __b;6942}6943 6944static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,6945 vector bool int __b) {6946 return __a | (vector int)__b;6947}6948 6949static __inline__ vector unsigned int __ATTRS_o_ai6950vec_or(vector unsigned int __a, vector unsigned int __b) {6951 return __a | __b;6952}6953 6954static __inline__ vector unsigned int __ATTRS_o_ai6955vec_or(vector bool int __a, vector unsigned int __b) {6956 return (vector unsigned int)__a | __b;6957}6958 6959static __inline__ vector unsigned int __ATTRS_o_ai6960vec_or(vector unsigned int __a, vector bool int __b) {6961 return __a | (vector unsigned int)__b;6962}6963 6964static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,6965 vector bool int __b) {6966 return __a | __b;6967}6968 6969static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,6970 vector float __b) {6971 vector unsigned int __res =6972 (vector unsigned int)__a | (vector unsigned int)__b;6973 return (vector float)__res;6974}6975 6976static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,6977 vector float __b) {6978 vector unsigned int __res =6979 (vector unsigned int)__a | (vector unsigned int)__b;6980 return (vector float)__res;6981}6982 6983static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,6984 vector bool int __b) {6985 vector unsigned int __res =6986 (vector unsigned int)__a | (vector unsigned int)__b;6987 return (vector float)__res;6988}6989 6990#ifdef __VSX__6991static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,6992 vector double __b) {6993 return (vector double)((vector unsigned long long)__a |6994 (vector unsigned long long)__b);6995}6996 6997static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,6998 vector bool long long __b) {6999 return (vector double)((vector unsigned long long)__a |7000 (vector unsigned long long)__b);7001}7002 7003static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,7004 vector double __b) {7005 return (vector double)((vector unsigned long long)__a |7006 (vector unsigned long long)__b);7007}7008 7009static __inline__ vector signed long long __ATTRS_o_ai7010vec_or(vector signed long long __a, vector signed long long __b) {7011 return __a | __b;7012}7013 7014static __inline__ vector signed long long __ATTRS_o_ai7015vec_or(vector bool long long __a, vector signed long long __b) {7016 return (vector signed long long)__a | __b;7017}7018 7019static __inline__ vector signed long long __ATTRS_o_ai7020vec_or(vector signed long long __a, vector bool long long __b) {7021 return __a | (vector signed long long)__b;7022}7023 7024static __inline__ vector unsigned long long __ATTRS_o_ai7025vec_or(vector unsigned long long __a, vector unsigned long long __b) {7026 return __a | __b;7027}7028 7029static __inline__ vector unsigned long long __ATTRS_o_ai7030vec_or(vector bool long long __a, vector unsigned long long __b) {7031 return (vector unsigned long long)__a | __b;7032}7033 7034static __inline__ vector unsigned long long __ATTRS_o_ai7035vec_or(vector unsigned long long __a, vector bool long long __b) {7036 return __a | (vector unsigned long long)__b;7037}7038 7039static __inline__ vector bool long long __ATTRS_o_ai7040vec_or(vector bool long long __a, vector bool long long __b) {7041 return __a | __b;7042}7043#endif7044 7045#ifdef __POWER8_VECTOR__7046static __inline__ vector signed char __ATTRS_o_ai7047vec_orc(vector signed char __a, vector signed char __b) {7048 return __a | ~__b;7049}7050 7051static __inline__ vector signed char __ATTRS_o_ai7052vec_orc(vector signed char __a, vector bool char __b) {7053 return __a | (vector signed char)~__b;7054}7055 7056static __inline__ vector signed char __ATTRS_o_ai7057vec_orc(vector bool char __a, vector signed char __b) {7058 return (vector signed char)(__a | (vector bool char)~__b);7059}7060 7061static __inline__ vector unsigned char __ATTRS_o_ai7062vec_orc(vector unsigned char __a, vector unsigned char __b) {7063 return __a | ~__b;7064}7065 7066static __inline__ vector unsigned char __ATTRS_o_ai7067vec_orc(vector unsigned char __a, vector bool char __b) {7068 return __a | (vector unsigned char)~__b;7069}7070 7071static __inline__ vector unsigned char __ATTRS_o_ai7072vec_orc(vector bool char __a, vector unsigned char __b) {7073 return (vector unsigned char)(__a | (vector bool char)~__b);7074}7075 7076static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,7077 vector bool char __b) {7078 return __a | ~__b;7079}7080 7081static __inline__ vector signed short __ATTRS_o_ai7082vec_orc(vector signed short __a, vector signed short __b) {7083 return __a | ~__b;7084}7085 7086static __inline__ vector signed short __ATTRS_o_ai7087vec_orc(vector signed short __a, vector bool short __b) {7088 return __a | (vector signed short)~__b;7089}7090 7091static __inline__ vector signed short __ATTRS_o_ai7092vec_orc(vector bool short __a, vector signed short __b) {7093 return (vector signed short)(__a | (vector bool short)~__b);7094}7095 7096static __inline__ vector unsigned short __ATTRS_o_ai7097vec_orc(vector unsigned short __a, vector unsigned short __b) {7098 return __a | ~__b;7099}7100 7101static __inline__ vector unsigned short __ATTRS_o_ai7102vec_orc(vector unsigned short __a, vector bool short __b) {7103 return __a | (vector unsigned short)~__b;7104}7105 7106static __inline__ vector unsigned short __ATTRS_o_ai7107vec_orc(vector bool short __a, vector unsigned short __b) {7108 return (vector unsigned short)(__a | (vector bool short)~__b);7109}7110 7111static __inline__ vector bool short __ATTRS_o_ai7112vec_orc(vector bool short __a, vector bool short __b) {7113 return __a | ~__b;7114}7115 7116static __inline__ vector signed int __ATTRS_o_ai7117vec_orc(vector signed int __a, vector signed int __b) {7118 return __a | ~__b;7119}7120 7121static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,7122 vector bool int __b) {7123 return __a | (vector signed int)~__b;7124}7125 7126static __inline__ vector signed int __ATTRS_o_ai7127vec_orc(vector bool int __a, vector signed int __b) {7128 return (vector signed int)(__a | (vector bool int)~__b);7129}7130 7131static __inline__ vector unsigned int __ATTRS_o_ai7132vec_orc(vector unsigned int __a, vector unsigned int __b) {7133 return __a | ~__b;7134}7135 7136static __inline__ vector unsigned int __ATTRS_o_ai7137vec_orc(vector unsigned int __a, vector bool int __b) {7138 return __a | (vector unsigned int)~__b;7139}7140 7141static __inline__ vector unsigned int __ATTRS_o_ai7142vec_orc(vector bool int __a, vector unsigned int __b) {7143 return (vector unsigned int)(__a | (vector bool int)~__b);7144}7145 7146static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,7147 vector bool int __b) {7148 return __a | ~__b;7149}7150 7151static __inline__ vector float __ATTRS_o_ai7152vec_orc(vector bool int __a, vector float __b) {7153 return (vector float)(__a | ~(vector bool int)__b);7154}7155 7156static __inline__ vector float __ATTRS_o_ai7157vec_orc(vector float __a, vector bool int __b) {7158 return (vector float)((vector bool int)__a | ~__b);7159}7160 7161static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a,7162 vector float __b) {7163 return (vector float)((vector unsigned int)__a | ~(vector unsigned int)__b);7164}7165 7166static __inline__ vector signed long long __ATTRS_o_ai7167vec_orc(vector signed long long __a, vector signed long long __b) {7168 return __a | ~__b;7169}7170 7171static __inline__ vector signed long long __ATTRS_o_ai7172vec_orc(vector signed long long __a, vector bool long long __b) {7173 return __a | (vector signed long long)~__b;7174}7175 7176static __inline__ vector signed long long __ATTRS_o_ai7177vec_orc(vector bool long long __a, vector signed long long __b) {7178 return (vector signed long long)(__a | (vector bool long long)~__b);7179}7180 7181static __inline__ vector unsigned long long __ATTRS_o_ai7182vec_orc(vector unsigned long long __a, vector unsigned long long __b) {7183 return __a | ~__b;7184}7185 7186static __inline__ vector unsigned long long __ATTRS_o_ai7187vec_orc(vector unsigned long long __a, vector bool long long __b) {7188 return __a | (vector unsigned long long)~__b;7189}7190 7191static __inline__ vector unsigned long long __ATTRS_o_ai7192vec_orc(vector bool long long __a, vector unsigned long long __b) {7193 return (vector unsigned long long)(__a | (vector bool long long)~__b);7194}7195 7196static __inline__ vector bool long long __ATTRS_o_ai7197vec_orc(vector bool long long __a, vector bool long long __b) {7198 return __a | ~__b;7199}7200 7201static __inline__ vector double __ATTRS_o_ai7202vec_orc(vector double __a, vector bool long long __b) {7203 return (vector double)((vector bool long long)__a | ~__b);7204}7205 7206static __inline__ vector double __ATTRS_o_ai7207vec_orc(vector bool long long __a, vector double __b) {7208 return (vector double)(__a | ~(vector bool long long)__b);7209}7210 7211static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a,7212 vector double __b) {7213 return (vector double)((vector unsigned long long)__a |7214 ~(vector unsigned long long)__b);7215}7216#endif7217 7218/* vec_vor */7219 7220static __inline__ vector signed char __ATTRS_o_ai7221vec_vor(vector signed char __a, vector signed char __b) {7222 return __a | __b;7223}7224 7225static __inline__ vector signed char __ATTRS_o_ai7226vec_vor(vector bool char __a, vector signed char __b) {7227 return (vector signed char)__a | __b;7228}7229 7230static __inline__ vector signed char __ATTRS_o_ai7231vec_vor(vector signed char __a, vector bool char __b) {7232 return __a | (vector signed char)__b;7233}7234 7235static __inline__ vector unsigned char __ATTRS_o_ai7236vec_vor(vector unsigned char __a, vector unsigned char __b) {7237 return __a | __b;7238}7239 7240static __inline__ vector unsigned char __ATTRS_o_ai7241vec_vor(vector bool char __a, vector unsigned char __b) {7242 return (vector unsigned char)__a | __b;7243}7244 7245static __inline__ vector unsigned char __ATTRS_o_ai7246vec_vor(vector unsigned char __a, vector bool char __b) {7247 return __a | (vector unsigned char)__b;7248}7249 7250static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,7251 vector bool char __b) {7252 return __a | __b;7253}7254 7255static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,7256 vector short __b) {7257 return __a | __b;7258}7259 7260static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,7261 vector short __b) {7262 return (vector short)__a | __b;7263}7264 7265static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,7266 vector bool short __b) {7267 return __a | (vector short)__b;7268}7269 7270static __inline__ vector unsigned short __ATTRS_o_ai7271vec_vor(vector unsigned short __a, vector unsigned short __b) {7272 return __a | __b;7273}7274 7275static __inline__ vector unsigned short __ATTRS_o_ai7276vec_vor(vector bool short __a, vector unsigned short __b) {7277 return (vector unsigned short)__a | __b;7278}7279 7280static __inline__ vector unsigned short __ATTRS_o_ai7281vec_vor(vector unsigned short __a, vector bool short __b) {7282 return __a | (vector unsigned short)__b;7283}7284 7285static __inline__ vector bool short __ATTRS_o_ai7286vec_vor(vector bool short __a, vector bool short __b) {7287 return __a | __b;7288}7289 7290static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,7291 vector int __b) {7292 return __a | __b;7293}7294 7295static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,7296 vector int __b) {7297 return (vector int)__a | __b;7298}7299 7300static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,7301 vector bool int __b) {7302 return __a | (vector int)__b;7303}7304 7305static __inline__ vector unsigned int __ATTRS_o_ai7306vec_vor(vector unsigned int __a, vector unsigned int __b) {7307 return __a | __b;7308}7309 7310static __inline__ vector unsigned int __ATTRS_o_ai7311vec_vor(vector bool int __a, vector unsigned int __b) {7312 return (vector unsigned int)__a | __b;7313}7314 7315static __inline__ vector unsigned int __ATTRS_o_ai7316vec_vor(vector unsigned int __a, vector bool int __b) {7317 return __a | (vector unsigned int)__b;7318}7319 7320static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,7321 vector bool int __b) {7322 return __a | __b;7323}7324 7325static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,7326 vector float __b) {7327 vector unsigned int __res =7328 (vector unsigned int)__a | (vector unsigned int)__b;7329 return (vector float)__res;7330}7331 7332static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,7333 vector float __b) {7334 vector unsigned int __res =7335 (vector unsigned int)__a | (vector unsigned int)__b;7336 return (vector float)__res;7337}7338 7339static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,7340 vector bool int __b) {7341 vector unsigned int __res =7342 (vector unsigned int)__a | (vector unsigned int)__b;7343 return (vector float)__res;7344}7345 7346#ifdef __VSX__7347static __inline__ vector signed long long __ATTRS_o_ai7348vec_vor(vector signed long long __a, vector signed long long __b) {7349 return __a | __b;7350}7351 7352static __inline__ vector signed long long __ATTRS_o_ai7353vec_vor(vector bool long long __a, vector signed long long __b) {7354 return (vector signed long long)__a | __b;7355}7356 7357static __inline__ vector signed long long __ATTRS_o_ai7358vec_vor(vector signed long long __a, vector bool long long __b) {7359 return __a | (vector signed long long)__b;7360}7361 7362static __inline__ vector unsigned long long __ATTRS_o_ai7363vec_vor(vector unsigned long long __a, vector unsigned long long __b) {7364 return __a | __b;7365}7366 7367static __inline__ vector unsigned long long __ATTRS_o_ai7368vec_vor(vector bool long long __a, vector unsigned long long __b) {7369 return (vector unsigned long long)__a | __b;7370}7371 7372static __inline__ vector unsigned long long __ATTRS_o_ai7373vec_vor(vector unsigned long long __a, vector bool long long __b) {7374 return __a | (vector unsigned long long)__b;7375}7376 7377static __inline__ vector bool long long __ATTRS_o_ai7378vec_vor(vector bool long long __a, vector bool long long __b) {7379 return __a | __b;7380}7381#endif7382 7383/* vec_pack */7384 7385/* The various vector pack instructions have a big-endian bias, so for7386 little endian we must handle reversed element numbering. */7387 7388static __inline__ vector signed char __ATTRS_o_ai7389vec_pack(vector signed short __a, vector signed short __b) {7390#ifdef __LITTLE_ENDIAN__7391 return (vector signed char)vec_perm(7392 __a, __b,7393 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,7394 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));7395#else7396 return (vector signed char)vec_perm(7397 __a, __b,7398 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,7399 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));7400#endif7401}7402 7403static __inline__ vector unsigned char __ATTRS_o_ai7404vec_pack(vector unsigned short __a, vector unsigned short __b) {7405#ifdef __LITTLE_ENDIAN__7406 return (vector unsigned char)vec_perm(7407 __a, __b,7408 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,7409 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));7410#else7411 return (vector unsigned char)vec_perm(7412 __a, __b,7413 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,7414 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));7415#endif7416}7417 7418static __inline__ vector bool char __ATTRS_o_ai7419vec_pack(vector bool short __a, vector bool short __b) {7420#ifdef __LITTLE_ENDIAN__7421 return (vector bool char)vec_perm(7422 __a, __b,7423 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,7424 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));7425#else7426 return (vector bool char)vec_perm(7427 __a, __b,7428 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,7429 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));7430#endif7431}7432 7433static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,7434 vector int __b) {7435#ifdef __LITTLE_ENDIAN__7436 return (vector short)vec_perm(7437 __a, __b,7438 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,7439 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));7440#else7441 return (vector short)vec_perm(7442 __a, __b,7443 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,7444 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));7445#endif7446}7447 7448static __inline__ vector unsigned short __ATTRS_o_ai7449vec_pack(vector unsigned int __a, vector unsigned int __b) {7450#ifdef __LITTLE_ENDIAN__7451 return (vector unsigned short)vec_perm(7452 __a, __b,7453 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,7454 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));7455#else7456 return (vector unsigned short)vec_perm(7457 __a, __b,7458 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,7459 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));7460#endif7461}7462 7463static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,7464 vector bool int __b) {7465#ifdef __LITTLE_ENDIAN__7466 return (vector bool short)vec_perm(7467 __a, __b,7468 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,7469 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));7470#else7471 return (vector bool short)vec_perm(7472 __a, __b,7473 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,7474 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));7475#endif7476}7477 7478#ifdef __VSX__7479static __inline__ vector signed int __ATTRS_o_ai7480vec_pack(vector signed long long __a, vector signed long long __b) {7481#ifdef __LITTLE_ENDIAN__7482 return (vector signed int)vec_perm(7483 __a, __b,7484 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,7485 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));7486#else7487 return (vector signed int)vec_perm(7488 __a, __b,7489 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,7490 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));7491#endif7492}7493static __inline__ vector unsigned int __ATTRS_o_ai7494vec_pack(vector unsigned long long __a, vector unsigned long long __b) {7495#ifdef __LITTLE_ENDIAN__7496 return (vector unsigned int)vec_perm(7497 __a, __b,7498 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,7499 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));7500#else7501 return (vector unsigned int)vec_perm(7502 __a, __b,7503 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,7504 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));7505#endif7506}7507 7508static __inline__ vector bool int __ATTRS_o_ai7509vec_pack(vector bool long long __a, vector bool long long __b) {7510#ifdef __LITTLE_ENDIAN__7511 return (vector bool int)vec_perm(7512 __a, __b,7513 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,7514 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));7515#else7516 return (vector bool int)vec_perm(7517 __a, __b,7518 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,7519 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));7520#endif7521}7522 7523static __inline__ vector float __ATTRS_o_ai7524vec_pack(vector double __a, vector double __b) {7525 return (vector float) (__a[0], __a[1], __b[0], __b[1]);7526}7527#endif7528 7529#ifdef __POWER9_VECTOR__7530static __inline__ vector unsigned short __ATTRS_o_ai7531vec_pack_to_short_fp32(vector float __a, vector float __b) {7532 vector float __resa = __builtin_vsx_xvcvsphp(__a);7533 vector float __resb = __builtin_vsx_xvcvsphp(__b);7534#ifdef __LITTLE_ENDIAN__7535 return (vector unsigned short)vec_mergee(__resa, __resb);7536#else7537 return (vector unsigned short)vec_mergeo(__resa, __resb);7538#endif7539}7540 7541#endif7542/* vec_vpkuhum */7543 7544#define __builtin_altivec_vpkuhum vec_vpkuhum7545 7546static __inline__ vector signed char __ATTRS_o_ai7547vec_vpkuhum(vector signed short __a, vector signed short __b) {7548#ifdef __LITTLE_ENDIAN__7549 return (vector signed char)vec_perm(7550 __a, __b,7551 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,7552 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));7553#else7554 return (vector signed char)vec_perm(7555 __a, __b,7556 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,7557 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));7558#endif7559}7560 7561static __inline__ vector unsigned char __ATTRS_o_ai7562vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {7563#ifdef __LITTLE_ENDIAN__7564 return (vector unsigned char)vec_perm(7565 __a, __b,7566 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,7567 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));7568#else7569 return (vector unsigned char)vec_perm(7570 __a, __b,7571 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,7572 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));7573#endif7574}7575 7576static __inline__ vector bool char __ATTRS_o_ai7577vec_vpkuhum(vector bool short __a, vector bool short __b) {7578#ifdef __LITTLE_ENDIAN__7579 return (vector bool char)vec_perm(7580 __a, __b,7581 (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,7582 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));7583#else7584 return (vector bool char)vec_perm(7585 __a, __b,7586 (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,7587 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));7588#endif7589}7590 7591/* vec_vpkuwum */7592 7593#define __builtin_altivec_vpkuwum vec_vpkuwum7594 7595static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,7596 vector int __b) {7597#ifdef __LITTLE_ENDIAN__7598 return (vector short)vec_perm(7599 __a, __b,7600 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,7601 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));7602#else7603 return (vector short)vec_perm(7604 __a, __b,7605 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,7606 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));7607#endif7608}7609 7610static __inline__ vector unsigned short __ATTRS_o_ai7611vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {7612#ifdef __LITTLE_ENDIAN__7613 return (vector unsigned short)vec_perm(7614 __a, __b,7615 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,7616 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));7617#else7618 return (vector unsigned short)vec_perm(7619 __a, __b,7620 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,7621 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));7622#endif7623}7624 7625static __inline__ vector bool short __ATTRS_o_ai7626vec_vpkuwum(vector bool int __a, vector bool int __b) {7627#ifdef __LITTLE_ENDIAN__7628 return (vector bool short)vec_perm(7629 __a, __b,7630 (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,7631 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));7632#else7633 return (vector bool short)vec_perm(7634 __a, __b,7635 (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,7636 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));7637#endif7638}7639 7640/* vec_vpkudum */7641 7642#ifdef __POWER8_VECTOR__7643#define __builtin_altivec_vpkudum vec_vpkudum7644 7645static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,7646 vector long long __b) {7647#ifdef __LITTLE_ENDIAN__7648 return (vector int)vec_perm(7649 __a, __b,7650 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,7651 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));7652#else7653 return (vector int)vec_perm(7654 __a, __b,7655 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,7656 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));7657#endif7658}7659 7660static __inline__ vector unsigned int __ATTRS_o_ai7661vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {7662#ifdef __LITTLE_ENDIAN__7663 return (vector unsigned int)vec_perm(7664 __a, __b,7665 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,7666 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));7667#else7668 return (vector unsigned int)vec_perm(7669 __a, __b,7670 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,7671 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));7672#endif7673}7674 7675static __inline__ vector bool int __ATTRS_o_ai7676vec_vpkudum(vector bool long long __a, vector bool long long __b) {7677#ifdef __LITTLE_ENDIAN__7678 return (vector bool int)vec_perm(7679 (vector long long)__a, (vector long long)__b,7680 (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,7681 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));7682#else7683 return (vector bool int)vec_perm(7684 (vector long long)__a, (vector long long)__b,7685 (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,7686 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));7687#endif7688}7689#endif7690 7691/* vec_packpx */7692 7693static __inline__ vector pixel __attribute__((__always_inline__))7694vec_packpx(vector unsigned int __a, vector unsigned int __b) {7695#ifdef __LITTLE_ENDIAN__7696 return (vector pixel)__builtin_altivec_vpkpx(__b, __a);7697#else7698 return (vector pixel)__builtin_altivec_vpkpx(__a, __b);7699#endif7700}7701 7702/* vec_vpkpx */7703 7704static __inline__ vector pixel __attribute__((__always_inline__))7705vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {7706#ifdef __LITTLE_ENDIAN__7707 return (vector pixel)__builtin_altivec_vpkpx(__b, __a);7708#else7709 return (vector pixel)__builtin_altivec_vpkpx(__a, __b);7710#endif7711}7712 7713/* vec_packs */7714 7715static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,7716 vector short __b) {7717#ifdef __LITTLE_ENDIAN__7718 return __builtin_altivec_vpkshss(__b, __a);7719#else7720 return __builtin_altivec_vpkshss(__a, __b);7721#endif7722}7723 7724static __inline__ vector unsigned char __ATTRS_o_ai7725vec_packs(vector unsigned short __a, vector unsigned short __b) {7726#ifdef __LITTLE_ENDIAN__7727 return __builtin_altivec_vpkuhus(__b, __a);7728#else7729 return __builtin_altivec_vpkuhus(__a, __b);7730#endif7731}7732 7733static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,7734 vector int __b) {7735#ifdef __LITTLE_ENDIAN__7736 return __builtin_altivec_vpkswss(__b, __a);7737#else7738 return __builtin_altivec_vpkswss(__a, __b);7739#endif7740}7741 7742static __inline__ vector unsigned short __ATTRS_o_ai7743vec_packs(vector unsigned int __a, vector unsigned int __b) {7744#ifdef __LITTLE_ENDIAN__7745 return __builtin_altivec_vpkuwus(__b, __a);7746#else7747 return __builtin_altivec_vpkuwus(__a, __b);7748#endif7749}7750 7751#ifdef __POWER8_VECTOR__7752static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,7753 vector long long __b) {7754#ifdef __LITTLE_ENDIAN__7755 return __builtin_altivec_vpksdss(__b, __a);7756#else7757 return __builtin_altivec_vpksdss(__a, __b);7758#endif7759}7760 7761static __inline__ vector unsigned int __ATTRS_o_ai7762vec_packs(vector unsigned long long __a, vector unsigned long long __b) {7763#ifdef __LITTLE_ENDIAN__7764 return __builtin_altivec_vpkudus(__b, __a);7765#else7766 return __builtin_altivec_vpkudus(__a, __b);7767#endif7768}7769#endif7770 7771/* vec_vpkshss */7772 7773static __inline__ vector signed char __attribute__((__always_inline__))7774vec_vpkshss(vector short __a, vector short __b) {7775#ifdef __LITTLE_ENDIAN__7776 return __builtin_altivec_vpkshss(__b, __a);7777#else7778 return __builtin_altivec_vpkshss(__a, __b);7779#endif7780}7781 7782/* vec_vpksdss */7783 7784#ifdef __POWER8_VECTOR__7785static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,7786 vector long long __b) {7787#ifdef __LITTLE_ENDIAN__7788 return __builtin_altivec_vpksdss(__b, __a);7789#else7790 return __builtin_altivec_vpksdss(__a, __b);7791#endif7792}7793#endif7794 7795/* vec_vpkuhus */7796 7797static __inline__ vector unsigned char __attribute__((__always_inline__))7798vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {7799#ifdef __LITTLE_ENDIAN__7800 return __builtin_altivec_vpkuhus(__b, __a);7801#else7802 return __builtin_altivec_vpkuhus(__a, __b);7803#endif7804}7805 7806/* vec_vpkudus */7807 7808#ifdef __POWER8_VECTOR__7809static __inline__ vector unsigned int __attribute__((__always_inline__))7810vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {7811#ifdef __LITTLE_ENDIAN__7812 return __builtin_altivec_vpkudus(__b, __a);7813#else7814 return __builtin_altivec_vpkudus(__a, __b);7815#endif7816}7817#endif7818 7819/* vec_vpkswss */7820 7821static __inline__ vector signed short __attribute__((__always_inline__))7822vec_vpkswss(vector int __a, vector int __b) {7823#ifdef __LITTLE_ENDIAN__7824 return __builtin_altivec_vpkswss(__b, __a);7825#else7826 return __builtin_altivec_vpkswss(__a, __b);7827#endif7828}7829 7830/* vec_vpkuwus */7831 7832static __inline__ vector unsigned short __attribute__((__always_inline__))7833vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {7834#ifdef __LITTLE_ENDIAN__7835 return __builtin_altivec_vpkuwus(__b, __a);7836#else7837 return __builtin_altivec_vpkuwus(__a, __b);7838#endif7839}7840 7841/* vec_packsu */7842 7843static __inline__ vector unsigned char __ATTRS_o_ai7844vec_packsu(vector short __a, vector short __b) {7845#ifdef __LITTLE_ENDIAN__7846 return __builtin_altivec_vpkshus(__b, __a);7847#else7848 return __builtin_altivec_vpkshus(__a, __b);7849#endif7850}7851 7852static __inline__ vector unsigned char __ATTRS_o_ai7853vec_packsu(vector unsigned short __a, vector unsigned short __b) {7854#ifdef __LITTLE_ENDIAN__7855 return __builtin_altivec_vpkuhus(__b, __a);7856#else7857 return __builtin_altivec_vpkuhus(__a, __b);7858#endif7859}7860 7861static __inline__ vector unsigned short __ATTRS_o_ai7862vec_packsu(vector int __a, vector int __b) {7863#ifdef __LITTLE_ENDIAN__7864 return __builtin_altivec_vpkswus(__b, __a);7865#else7866 return __builtin_altivec_vpkswus(__a, __b);7867#endif7868}7869 7870static __inline__ vector unsigned short __ATTRS_o_ai7871vec_packsu(vector unsigned int __a, vector unsigned int __b) {7872#ifdef __LITTLE_ENDIAN__7873 return __builtin_altivec_vpkuwus(__b, __a);7874#else7875 return __builtin_altivec_vpkuwus(__a, __b);7876#endif7877}7878 7879#ifdef __POWER8_VECTOR__7880static __inline__ vector unsigned int __ATTRS_o_ai7881vec_packsu(vector long long __a, vector long long __b) {7882#ifdef __LITTLE_ENDIAN__7883 return __builtin_altivec_vpksdus(__b, __a);7884#else7885 return __builtin_altivec_vpksdus(__a, __b);7886#endif7887}7888 7889static __inline__ vector unsigned int __ATTRS_o_ai7890vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {7891#ifdef __LITTLE_ENDIAN__7892 return __builtin_altivec_vpkudus(__b, __a);7893#else7894 return __builtin_altivec_vpkudus(__a, __b);7895#endif7896}7897#endif7898 7899/* vec_vpkshus */7900 7901static __inline__ vector unsigned char __ATTRS_o_ai7902vec_vpkshus(vector short __a, vector short __b) {7903#ifdef __LITTLE_ENDIAN__7904 return __builtin_altivec_vpkshus(__b, __a);7905#else7906 return __builtin_altivec_vpkshus(__a, __b);7907#endif7908}7909 7910static __inline__ vector unsigned char __ATTRS_o_ai7911vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {7912#ifdef __LITTLE_ENDIAN__7913 return __builtin_altivec_vpkuhus(__b, __a);7914#else7915 return __builtin_altivec_vpkuhus(__a, __b);7916#endif7917}7918 7919/* vec_vpkswus */7920 7921static __inline__ vector unsigned short __ATTRS_o_ai7922vec_vpkswus(vector int __a, vector int __b) {7923#ifdef __LITTLE_ENDIAN__7924 return __builtin_altivec_vpkswus(__b, __a);7925#else7926 return __builtin_altivec_vpkswus(__a, __b);7927#endif7928}7929 7930static __inline__ vector unsigned short __ATTRS_o_ai7931vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {7932#ifdef __LITTLE_ENDIAN__7933 return __builtin_altivec_vpkuwus(__b, __a);7934#else7935 return __builtin_altivec_vpkuwus(__a, __b);7936#endif7937}7938 7939/* vec_vpksdus */7940 7941#ifdef __POWER8_VECTOR__7942static __inline__ vector unsigned int __ATTRS_o_ai7943vec_vpksdus(vector long long __a, vector long long __b) {7944#ifdef __LITTLE_ENDIAN__7945 return __builtin_altivec_vpksdus(__b, __a);7946#else7947 return __builtin_altivec_vpksdus(__a, __b);7948#endif7949}7950#endif7951 7952/* vec_perm */7953 7954// The vperm instruction is defined architecturally with a big-endian bias.7955// For little endian, we swap the input operands and invert the permute7956// control vector. Only the rightmost 5 bits matter, so we could use7957// a vector of all 31s instead of all 255s to perform the inversion.7958// However, when the PCV is not a constant, using 255 has an advantage7959// in that the vec_xor can be recognized as a vec_nor (and for P8 and7960// later, possibly a vec_nand).7961 7962static __inline__ vector signed char __ATTRS_o_ai vec_perm(7963 vector signed char __a, vector signed char __b, vector unsigned char __c) {7964#ifdef __LITTLE_ENDIAN__7965 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,7966 255, 255, 255, 255, 255, 255, 255, 255};7967 __d = vec_xor(__c, __d);7968 return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,7969 (vector int)__a, __d);7970#else7971 return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,7972 (vector int)__b, __c);7973#endif7974}7975 7976static __inline__ vector unsigned char __ATTRS_o_ai7977vec_perm(vector unsigned char __a, vector unsigned char __b,7978 vector unsigned char __c) {7979#ifdef __LITTLE_ENDIAN__7980 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,7981 255, 255, 255, 255, 255, 255, 255, 255};7982 __d = vec_xor(__c, __d);7983 return (vector unsigned char)__builtin_altivec_vperm_4si(7984 (vector int)__b, (vector int)__a, __d);7985#else7986 return (vector unsigned char)__builtin_altivec_vperm_4si(7987 (vector int)__a, (vector int)__b, __c);7988#endif7989}7990 7991static __inline__ vector bool char __ATTRS_o_ai7992vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {7993#ifdef __LITTLE_ENDIAN__7994 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,7995 255, 255, 255, 255, 255, 255, 255, 255};7996 __d = vec_xor(__c, __d);7997 return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,7998 (vector int)__a, __d);7999#else8000 return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,8001 (vector int)__b, __c);8002#endif8003}8004 8005static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,8006 vector signed short __b,8007 vector unsigned char __c) {8008#ifdef __LITTLE_ENDIAN__8009 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8010 255, 255, 255, 255, 255, 255, 255, 255};8011 __d = vec_xor(__c, __d);8012 return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,8013 (vector int)__a, __d);8014#else8015 return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,8016 (vector int)__b, __c);8017#endif8018}8019 8020static __inline__ vector unsigned short __ATTRS_o_ai8021vec_perm(vector unsigned short __a, vector unsigned short __b,8022 vector unsigned char __c) {8023#ifdef __LITTLE_ENDIAN__8024 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8025 255, 255, 255, 255, 255, 255, 255, 255};8026 __d = vec_xor(__c, __d);8027 return (vector unsigned short)__builtin_altivec_vperm_4si(8028 (vector int)__b, (vector int)__a, __d);8029#else8030 return (vector unsigned short)__builtin_altivec_vperm_4si(8031 (vector int)__a, (vector int)__b, __c);8032#endif8033}8034 8035static __inline__ vector bool short __ATTRS_o_ai vec_perm(8036 vector bool short __a, vector bool short __b, vector unsigned char __c) {8037#ifdef __LITTLE_ENDIAN__8038 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8039 255, 255, 255, 255, 255, 255, 255, 255};8040 __d = vec_xor(__c, __d);8041 return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,8042 (vector int)__a, __d);8043#else8044 return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,8045 (vector int)__b, __c);8046#endif8047}8048 8049static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,8050 vector pixel __b,8051 vector unsigned char __c) {8052#ifdef __LITTLE_ENDIAN__8053 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8054 255, 255, 255, 255, 255, 255, 255, 255};8055 __d = vec_xor(__c, __d);8056 return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,8057 (vector int)__a, __d);8058#else8059 return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,8060 (vector int)__b, __c);8061#endif8062}8063 8064static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,8065 vector signed int __b,8066 vector unsigned char __c) {8067#ifdef __LITTLE_ENDIAN__8068 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8069 255, 255, 255, 255, 255, 255, 255, 255};8070 __d = vec_xor(__c, __d);8071 return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);8072#else8073 return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);8074#endif8075}8076 8077static __inline__ vector unsigned int __ATTRS_o_ai8078vec_perm(vector unsigned int __a, vector unsigned int __b,8079 vector unsigned char __c) {8080#ifdef __LITTLE_ENDIAN__8081 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8082 255, 255, 255, 255, 255, 255, 255, 255};8083 __d = vec_xor(__c, __d);8084 return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,8085 (vector int)__a, __d);8086#else8087 return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,8088 (vector int)__b, __c);8089#endif8090}8091 8092static __inline__ vector bool int __ATTRS_o_ai8093vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {8094#ifdef __LITTLE_ENDIAN__8095 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8096 255, 255, 255, 255, 255, 255, 255, 255};8097 __d = vec_xor(__c, __d);8098 return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,8099 (vector int)__a, __d);8100#else8101 return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,8102 (vector int)__b, __c);8103#endif8104}8105 8106static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,8107 vector float __b,8108 vector unsigned char __c) {8109#ifdef __LITTLE_ENDIAN__8110 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8111 255, 255, 255, 255, 255, 255, 255, 255};8112 __d = vec_xor(__c, __d);8113 return (vector float)__builtin_altivec_vperm_4si((vector int)__b,8114 (vector int)__a, __d);8115#else8116 return (vector float)__builtin_altivec_vperm_4si((vector int)__a,8117 (vector int)__b, __c);8118#endif8119}8120 8121#ifdef __VSX__8122static __inline__ vector long long __ATTRS_o_ai8123vec_perm(vector signed long long __a, vector signed long long __b,8124 vector unsigned char __c) {8125#ifdef __LITTLE_ENDIAN__8126 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8127 255, 255, 255, 255, 255, 255, 255, 255};8128 __d = vec_xor(__c, __d);8129 return (vector signed long long)__builtin_altivec_vperm_4si(8130 (vector int)__b, (vector int)__a, __d);8131#else8132 return (vector signed long long)__builtin_altivec_vperm_4si(8133 (vector int)__a, (vector int)__b, __c);8134#endif8135}8136 8137static __inline__ vector unsigned long long __ATTRS_o_ai8138vec_perm(vector unsigned long long __a, vector unsigned long long __b,8139 vector unsigned char __c) {8140#ifdef __LITTLE_ENDIAN__8141 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8142 255, 255, 255, 255, 255, 255, 255, 255};8143 __d = vec_xor(__c, __d);8144 return (vector unsigned long long)__builtin_altivec_vperm_4si(8145 (vector int)__b, (vector int)__a, __d);8146#else8147 return (vector unsigned long long)__builtin_altivec_vperm_4si(8148 (vector int)__a, (vector int)__b, __c);8149#endif8150}8151 8152static __inline__ vector bool long long __ATTRS_o_ai8153vec_perm(vector bool long long __a, vector bool long long __b,8154 vector unsigned char __c) {8155#ifdef __LITTLE_ENDIAN__8156 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8157 255, 255, 255, 255, 255, 255, 255, 255};8158 __d = vec_xor(__c, __d);8159 return (vector bool long long)__builtin_altivec_vperm_4si(8160 (vector int)__b, (vector int)__a, __d);8161#else8162 return (vector bool long long)__builtin_altivec_vperm_4si(8163 (vector int)__a, (vector int)__b, __c);8164#endif8165}8166 8167static __inline__ vector double __ATTRS_o_ai8168vec_perm(vector double __a, vector double __b, vector unsigned char __c) {8169#ifdef __LITTLE_ENDIAN__8170 vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,8171 255, 255, 255, 255, 255, 255, 255, 255};8172 __d = vec_xor(__c, __d);8173 return (vector double)__builtin_altivec_vperm_4si((vector int)__b,8174 (vector int)__a, __d);8175#else8176 return (vector double)__builtin_altivec_vperm_4si((vector int)__a,8177 (vector int)__b, __c);8178#endif8179}8180#endif8181 8182/* vec_vperm */8183 8184static __inline__ vector signed char __ATTRS_o_ai vec_vperm(8185 vector signed char __a, vector signed char __b, vector unsigned char __c) {8186 return vec_perm(__a, __b, __c);8187}8188 8189static __inline__ vector unsigned char __ATTRS_o_ai8190vec_vperm(vector unsigned char __a, vector unsigned char __b,8191 vector unsigned char __c) {8192 return vec_perm(__a, __b, __c);8193}8194 8195static __inline__ vector bool char __ATTRS_o_ai vec_vperm(8196 vector bool char __a, vector bool char __b, vector unsigned char __c) {8197 return vec_perm(__a, __b, __c);8198}8199 8200static __inline__ vector short __ATTRS_o_ai8201vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {8202 return vec_perm(__a, __b, __c);8203}8204 8205static __inline__ vector unsigned short __ATTRS_o_ai8206vec_vperm(vector unsigned short __a, vector unsigned short __b,8207 vector unsigned char __c) {8208 return vec_perm(__a, __b, __c);8209}8210 8211static __inline__ vector bool short __ATTRS_o_ai vec_vperm(8212 vector bool short __a, vector bool short __b, vector unsigned char __c) {8213 return vec_perm(__a, __b, __c);8214}8215 8216static __inline__ vector pixel __ATTRS_o_ai8217vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {8218 return vec_perm(__a, __b, __c);8219}8220 8221static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,8222 vector int __b,8223 vector unsigned char __c) {8224 return vec_perm(__a, __b, __c);8225}8226 8227static __inline__ vector unsigned int __ATTRS_o_ai8228vec_vperm(vector unsigned int __a, vector unsigned int __b,8229 vector unsigned char __c) {8230 return vec_perm(__a, __b, __c);8231}8232 8233static __inline__ vector bool int __ATTRS_o_ai8234vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {8235 return vec_perm(__a, __b, __c);8236}8237 8238static __inline__ vector float __ATTRS_o_ai8239vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {8240 return vec_perm(__a, __b, __c);8241}8242 8243#ifdef __VSX__8244static __inline__ vector long long __ATTRS_o_ai vec_vperm(8245 vector long long __a, vector long long __b, vector unsigned char __c) {8246 return vec_perm(__a, __b, __c);8247}8248 8249static __inline__ vector unsigned long long __ATTRS_o_ai8250vec_vperm(vector unsigned long long __a, vector unsigned long long __b,8251 vector unsigned char __c) {8252 return vec_perm(__a, __b, __c);8253}8254 8255static __inline__ vector double __ATTRS_o_ai8256vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {8257 return vec_perm(__a, __b, __c);8258}8259#endif8260 8261/* vec_re */8262 8263static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {8264#ifdef __VSX__8265 return __builtin_vsx_xvresp(__a);8266#else8267 return __builtin_altivec_vrefp(__a);8268#endif8269}8270 8271#ifdef __VSX__8272static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {8273 return __builtin_vsx_xvredp(__a);8274}8275#endif8276 8277/* vec_vrefp */8278 8279static __inline__ vector float __attribute__((__always_inline__))8280vec_vrefp(vector float __a) {8281 return __builtin_altivec_vrefp(__a);8282}8283 8284/* vec_rl */8285 8286static __inline__ vector signed char __ATTRS_o_ai8287vec_rl(vector signed char __a, vector unsigned char __b) {8288 return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);8289}8290 8291static __inline__ vector unsigned char __ATTRS_o_ai8292vec_rl(vector unsigned char __a, vector unsigned char __b) {8293 return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);8294}8295 8296static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,8297 vector unsigned short __b) {8298 return __builtin_altivec_vrlh(__a, __b);8299}8300 8301static __inline__ vector unsigned short __ATTRS_o_ai8302vec_rl(vector unsigned short __a, vector unsigned short __b) {8303 return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);8304}8305 8306static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,8307 vector unsigned int __b) {8308 return __builtin_altivec_vrlw(__a, __b);8309}8310 8311static __inline__ vector unsigned int __ATTRS_o_ai8312vec_rl(vector unsigned int __a, vector unsigned int __b) {8313 return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);8314}8315 8316#ifdef __POWER8_VECTOR__8317static __inline__ vector signed long long __ATTRS_o_ai8318vec_rl(vector signed long long __a, vector unsigned long long __b) {8319 return __builtin_altivec_vrld(__a, __b);8320}8321 8322static __inline__ vector unsigned long long __ATTRS_o_ai8323vec_rl(vector unsigned long long __a, vector unsigned long long __b) {8324 return (vector unsigned long long)__builtin_altivec_vrld(8325 (vector long long)__a, __b);8326}8327#endif8328 8329#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)8330static __inline__ vector signed __int128 __ATTRS_o_ai8331vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) {8332 return (vector signed __int128)(((vector unsigned __int128)__b8333 << (vector unsigned __int128)__a) |8334 ((vector unsigned __int128)__b >>8335 ((__CHAR_BIT__ *8336 sizeof(vector unsigned __int128)) -8337 (vector unsigned __int128)__a)));8338}8339 8340static __inline__ vector unsigned __int128 __ATTRS_o_ai8341vec_rl(vector unsigned __int128 __a, vector unsigned __int128 __b) {8342 return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector unsigned __int128)) - __a));8343}8344#endif8345 8346/* vec_rlmi */8347#ifdef __POWER9_VECTOR__8348static __inline__ vector unsigned int __ATTRS_o_ai8349vec_rlmi(vector unsigned int __a, vector unsigned int __b,8350 vector unsigned int __c) {8351 return __builtin_altivec_vrlwmi(__a, __c, __b);8352}8353 8354static __inline__ vector unsigned long long __ATTRS_o_ai8355vec_rlmi(vector unsigned long long __a, vector unsigned long long __b,8356 vector unsigned long long __c) {8357 return __builtin_altivec_vrldmi(__a, __c, __b);8358}8359#endif8360 8361#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)8362static __inline__ vector unsigned __int128 __ATTRS_o_ai8363vec_rlmi(vector unsigned __int128 __a, vector unsigned __int128 __b,8364 vector unsigned __int128 __c) {8365 return __builtin_altivec_vrlqmi(__a, __c, __b);8366}8367 8368static __inline__ vector signed __int128 __ATTRS_o_ai8369vec_rlmi(vector signed __int128 __a, vector signed __int128 __b,8370 vector signed __int128 __c) {8371 return (vector signed __int128)__builtin_altivec_vrlqmi(8372 (vector unsigned __int128)__a, (vector unsigned __int128)__c,8373 (vector unsigned __int128)__b);8374}8375#endif8376 8377/* vec_rlnm */8378#ifdef __POWER9_VECTOR__8379static __inline__ vector unsigned int __ATTRS_o_ai8380vec_rlnm(vector unsigned int __a, vector unsigned int __b,8381 vector unsigned int __c) {8382 vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };8383 return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));8384}8385 8386static __inline__ vector unsigned long long __ATTRS_o_ai8387vec_rlnm(vector unsigned long long __a, vector unsigned long long __b,8388 vector unsigned long long __c) {8389 vector unsigned long long OneByte = { 0x8, 0x8 };8390 return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));8391}8392#endif8393 8394#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)8395static __inline__ vector unsigned __int128 __ATTRS_o_ai8396vec_rlnm(vector unsigned __int128 __a, vector unsigned __int128 __b,8397 vector unsigned __int128 __c) {8398 // Merge __b and __c using an appropriate shuffle.8399 vector unsigned char TmpB = (vector unsigned char)__b;8400 vector unsigned char TmpC = (vector unsigned char)__c;8401 vector unsigned char MaskAndShift =8402#ifdef __LITTLE_ENDIAN__8403 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,8404 1, -1, -1, -1, -1, -1);8405#else8406 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,8407 -1, -1, -1, -1, -1, -1, -1);8408#endif8409 return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);8410}8411 8412static __inline__ vector signed __int128 __ATTRS_o_ai8413vec_rlnm(vector signed __int128 __a, vector signed __int128 __b,8414 vector signed __int128 __c) {8415 // Merge __b and __c using an appropriate shuffle.8416 vector unsigned char TmpB = (vector unsigned char)__b;8417 vector unsigned char TmpC = (vector unsigned char)__c;8418 vector unsigned char MaskAndShift =8419#ifdef __LITTLE_ENDIAN__8420 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,8421 1, -1, -1, -1, -1, -1);8422#else8423 __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,8424 -1, -1, -1, -1, -1, -1, -1);8425#endif8426 return (vector signed __int128)__builtin_altivec_vrlqnm(8427 (vector unsigned __int128)__a, (vector unsigned __int128)MaskAndShift);8428}8429#endif8430 8431/* vec_vrlb */8432 8433static __inline__ vector signed char __ATTRS_o_ai8434vec_vrlb(vector signed char __a, vector unsigned char __b) {8435 return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);8436}8437 8438static __inline__ vector unsigned char __ATTRS_o_ai8439vec_vrlb(vector unsigned char __a, vector unsigned char __b) {8440 return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);8441}8442 8443/* vec_vrlh */8444 8445static __inline__ vector short __ATTRS_o_ai8446vec_vrlh(vector short __a, vector unsigned short __b) {8447 return __builtin_altivec_vrlh(__a, __b);8448}8449 8450static __inline__ vector unsigned short __ATTRS_o_ai8451vec_vrlh(vector unsigned short __a, vector unsigned short __b) {8452 return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);8453}8454 8455/* vec_vrlw */8456 8457static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,8458 vector unsigned int __b) {8459 return __builtin_altivec_vrlw(__a, __b);8460}8461 8462static __inline__ vector unsigned int __ATTRS_o_ai8463vec_vrlw(vector unsigned int __a, vector unsigned int __b) {8464 return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);8465}8466 8467/* vec_round */8468 8469static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {8470 return __builtin_altivec_vrfin(__a);8471}8472 8473#ifdef __VSX__8474#ifdef __XL_COMPAT_ALTIVEC__8475static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a);8476static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {8477 double __fpscr = __builtin_readflm();8478 __builtin_setrnd(0);8479 vector double __rounded = vec_rint(__a);8480 __builtin_setflm(__fpscr);8481 return __rounded;8482}8483#else8484static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {8485 return __builtin_vsx_xvrdpi(__a);8486}8487#endif8488 8489/* vec_rint */8490 8491static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {8492 return __builtin_vsx_xvrspic(__a);8493}8494 8495static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {8496 return __builtin_vsx_xvrdpic(__a);8497}8498 8499/* vec_roundc */8500 8501static __inline__ vector float __ATTRS_o_ai vec_roundc(vector float __a) {8502 return __builtin_vsx_xvrspic(__a);8503}8504 8505static __inline__ vector double __ATTRS_o_ai vec_roundc(vector double __a) {8506 return __builtin_vsx_xvrdpic(__a);8507}8508 8509/* vec_nearbyint */8510 8511static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {8512 return __builtin_vsx_xvrspi(__a);8513}8514 8515static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {8516 return __builtin_vsx_xvrdpi(__a);8517}8518#endif8519 8520/* vec_vrfin */8521 8522static __inline__ vector float __attribute__((__always_inline__))8523vec_vrfin(vector float __a) {8524 return __builtin_altivec_vrfin(__a);8525}8526 8527/* vec_sqrt */8528 8529#ifdef __VSX__8530static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {8531 return __builtin_vsx_xvsqrtsp(__a);8532}8533 8534static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {8535 return __builtin_vsx_xvsqrtdp(__a);8536}8537#endif8538 8539/* vec_rsqrte */8540 8541static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {8542#ifdef __VSX__8543 return __builtin_vsx_xvrsqrtesp(__a);8544#else8545 return __builtin_altivec_vrsqrtefp(__a);8546#endif8547}8548 8549#ifdef __VSX__8550static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {8551 return __builtin_vsx_xvrsqrtedp(__a);8552}8553#endif8554 8555static vector float __ATTRS_o_ai vec_rsqrt(vector float __a) {8556 return __builtin_ppc_rsqrtf(__a);8557}8558 8559#ifdef __VSX__8560static vector double __ATTRS_o_ai vec_rsqrt(vector double __a) {8561 return __builtin_ppc_rsqrtd(__a);8562}8563#endif8564 8565/* vec_vrsqrtefp */8566 8567static __inline__ __vector float __attribute__((__always_inline__))8568vec_vrsqrtefp(vector float __a) {8569 return __builtin_altivec_vrsqrtefp(__a);8570}8571 8572/* vec_xvtsqrt */8573 8574#ifdef __VSX__8575static __inline__ int __ATTRS_o_ai vec_test_swsqrt(vector double __a) {8576 return __builtin_vsx_xvtsqrtdp(__a);8577}8578 8579static __inline__ int __ATTRS_o_ai vec_test_swsqrts(vector float __a) {8580 return __builtin_vsx_xvtsqrtsp(__a);8581}8582#endif8583 8584/* vec_sel */8585 8586#define __builtin_altivec_vsel_4si vec_sel8587 8588static __inline__ vector signed char __ATTRS_o_ai vec_sel(8589 vector signed char __a, vector signed char __b, vector unsigned char __c) {8590 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);8591}8592 8593static __inline__ vector signed char __ATTRS_o_ai8594vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {8595 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);8596}8597 8598static __inline__ vector unsigned char __ATTRS_o_ai8599vec_sel(vector unsigned char __a, vector unsigned char __b,8600 vector unsigned char __c) {8601 return (__a & ~__c) | (__b & __c);8602}8603 8604static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(8605 vector unsigned char __a, vector unsigned char __b, vector bool char __c) {8606 return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);8607}8608 8609static __inline__ vector bool char __ATTRS_o_ai8610vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {8611 return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);8612}8613 8614static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,8615 vector bool char __b,8616 vector bool char __c) {8617 return (__a & ~__c) | (__b & __c);8618}8619 8620static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,8621 vector short __b,8622 vector unsigned short __c) {8623 return (__a & ~(vector short)__c) | (__b & (vector short)__c);8624}8625 8626static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,8627 vector short __b,8628 vector bool short __c) {8629 return (__a & ~(vector short)__c) | (__b & (vector short)__c);8630}8631 8632static __inline__ vector unsigned short __ATTRS_o_ai8633vec_sel(vector unsigned short __a, vector unsigned short __b,8634 vector unsigned short __c) {8635 return (__a & ~__c) | (__b & __c);8636}8637 8638static __inline__ vector unsigned short __ATTRS_o_ai8639vec_sel(vector unsigned short __a, vector unsigned short __b,8640 vector bool short __c) {8641 return (__a & ~(vector unsigned short)__c) |8642 (__b & (vector unsigned short)__c);8643}8644 8645static __inline__ vector bool short __ATTRS_o_ai vec_sel(8646 vector bool short __a, vector bool short __b, vector unsigned short __c) {8647 return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);8648}8649 8650static __inline__ vector bool short __ATTRS_o_ai8651vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {8652 return (__a & ~__c) | (__b & __c);8653}8654 8655static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,8656 vector int __b,8657 vector unsigned int __c) {8658 return (__a & ~(vector int)__c) | (__b & (vector int)__c);8659}8660 8661static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,8662 vector int __b,8663 vector bool int __c) {8664 return (__a & ~(vector int)__c) | (__b & (vector int)__c);8665}8666 8667static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(8668 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {8669 return (__a & ~__c) | (__b & __c);8670}8671 8672static __inline__ vector unsigned int __ATTRS_o_ai8673vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {8674 return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);8675}8676 8677static __inline__ vector bool int __ATTRS_o_ai8678vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {8679 return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);8680}8681 8682static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,8683 vector bool int __b,8684 vector bool int __c) {8685 return (__a & ~__c) | (__b & __c);8686}8687 8688static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,8689 vector float __b,8690 vector unsigned int __c) {8691 vector int __res = ((vector int)__a & ~(vector int)__c) |8692 ((vector int)__b & (vector int)__c);8693 return (vector float)__res;8694}8695 8696static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,8697 vector float __b,8698 vector bool int __c) {8699 vector int __res = ((vector int)__a & ~(vector int)__c) |8700 ((vector int)__b & (vector int)__c);8701 return (vector float)__res;8702}8703 8704#ifdef __VSX__8705static __inline__ vector double __ATTRS_o_ai8706vec_sel(vector double __a, vector double __b, vector bool long long __c) {8707 vector long long __res = ((vector long long)__a & ~(vector long long)__c) |8708 ((vector long long)__b & (vector long long)__c);8709 return (vector double)__res;8710}8711 8712static __inline__ vector double __ATTRS_o_ai8713vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {8714 vector long long __res = ((vector long long)__a & ~(vector long long)__c) |8715 ((vector long long)__b & (vector long long)__c);8716 return (vector double)__res;8717}8718 8719static __inline__ vector bool long long __ATTRS_o_ai8720vec_sel(vector bool long long __a, vector bool long long __b,8721 vector bool long long __c) {8722 return (__a & ~__c) | (__b & __c);8723}8724 8725static __inline__ vector bool long long __ATTRS_o_ai8726vec_sel(vector bool long long __a, vector bool long long __b,8727 vector unsigned long long __c) {8728 return (__a & ~(vector bool long long)__c) |8729 (__b & (vector bool long long)__c);8730}8731 8732static __inline__ vector signed long long __ATTRS_o_ai8733vec_sel(vector signed long long __a, vector signed long long __b,8734 vector bool long long __c) {8735 return (__a & ~(vector signed long long)__c) |8736 (__b & (vector signed long long)__c);8737}8738 8739static __inline__ vector signed long long __ATTRS_o_ai8740vec_sel(vector signed long long __a, vector signed long long __b,8741 vector unsigned long long __c) {8742 return (__a & ~(vector signed long long)__c) |8743 (__b & (vector signed long long)__c);8744}8745 8746static __inline__ vector unsigned long long __ATTRS_o_ai8747vec_sel(vector unsigned long long __a, vector unsigned long long __b,8748 vector bool long long __c) {8749 return (__a & ~(vector unsigned long long)__c) |8750 (__b & (vector unsigned long long)__c);8751}8752 8753static __inline__ vector unsigned long long __ATTRS_o_ai8754vec_sel(vector unsigned long long __a, vector unsigned long long __b,8755 vector unsigned long long __c) {8756 return (__a & ~__c) | (__b & __c);8757}8758#endif8759 8760/* vec_vsel */8761 8762static __inline__ vector signed char __ATTRS_o_ai vec_vsel(8763 vector signed char __a, vector signed char __b, vector unsigned char __c) {8764 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);8765}8766 8767static __inline__ vector signed char __ATTRS_o_ai8768vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {8769 return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);8770}8771 8772static __inline__ vector unsigned char __ATTRS_o_ai8773vec_vsel(vector unsigned char __a, vector unsigned char __b,8774 vector unsigned char __c) {8775 return (__a & ~__c) | (__b & __c);8776}8777 8778static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(8779 vector unsigned char __a, vector unsigned char __b, vector bool char __c) {8780 return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);8781}8782 8783static __inline__ vector bool char __ATTRS_o_ai8784vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {8785 return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);8786}8787 8788static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,8789 vector bool char __b,8790 vector bool char __c) {8791 return (__a & ~__c) | (__b & __c);8792}8793 8794static __inline__ vector short __ATTRS_o_ai8795vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {8796 return (__a & ~(vector short)__c) | (__b & (vector short)__c);8797}8798 8799static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,8800 vector short __b,8801 vector bool short __c) {8802 return (__a & ~(vector short)__c) | (__b & (vector short)__c);8803}8804 8805static __inline__ vector unsigned short __ATTRS_o_ai8806vec_vsel(vector unsigned short __a, vector unsigned short __b,8807 vector unsigned short __c) {8808 return (__a & ~__c) | (__b & __c);8809}8810 8811static __inline__ vector unsigned short __ATTRS_o_ai8812vec_vsel(vector unsigned short __a, vector unsigned short __b,8813 vector bool short __c) {8814 return (__a & ~(vector unsigned short)__c) |8815 (__b & (vector unsigned short)__c);8816}8817 8818static __inline__ vector bool short __ATTRS_o_ai vec_vsel(8819 vector bool short __a, vector bool short __b, vector unsigned short __c) {8820 return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);8821}8822 8823static __inline__ vector bool short __ATTRS_o_ai8824vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {8825 return (__a & ~__c) | (__b & __c);8826}8827 8828static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,8829 vector int __b,8830 vector unsigned int __c) {8831 return (__a & ~(vector int)__c) | (__b & (vector int)__c);8832}8833 8834static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,8835 vector int __b,8836 vector bool int __c) {8837 return (__a & ~(vector int)__c) | (__b & (vector int)__c);8838}8839 8840static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(8841 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {8842 return (__a & ~__c) | (__b & __c);8843}8844 8845static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(8846 vector unsigned int __a, vector unsigned int __b, vector bool int __c) {8847 return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);8848}8849 8850static __inline__ vector bool int __ATTRS_o_ai8851vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {8852 return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);8853}8854 8855static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,8856 vector bool int __b,8857 vector bool int __c) {8858 return (__a & ~__c) | (__b & __c);8859}8860 8861static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,8862 vector float __b,8863 vector unsigned int __c) {8864 vector int __res = ((vector int)__a & ~(vector int)__c) |8865 ((vector int)__b & (vector int)__c);8866 return (vector float)__res;8867}8868 8869static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,8870 vector float __b,8871 vector bool int __c) {8872 vector int __res = ((vector int)__a & ~(vector int)__c) |8873 ((vector int)__b & (vector int)__c);8874 return (vector float)__res;8875}8876 8877/* vec_sl */8878 8879// vec_sl does modulo arithmetic on __b first, so __b is allowed to be more8880// than the length of __a.8881static __inline__ vector unsigned char __ATTRS_o_ai8882vec_sl(vector unsigned char __a, vector unsigned char __b) {8883 return __a << (__b %8884 (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));8885}8886 8887static __inline__ vector signed char __ATTRS_o_ai8888vec_sl(vector signed char __a, vector unsigned char __b) {8889 return (vector signed char)vec_sl((vector unsigned char)__a, __b);8890}8891 8892static __inline__ vector unsigned short __ATTRS_o_ai8893vec_sl(vector unsigned short __a, vector unsigned short __b) {8894 return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *8895 __CHAR_BIT__));8896}8897 8898static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,8899 vector unsigned short __b) {8900 return (vector short)vec_sl((vector unsigned short)__a, __b);8901}8902 8903static __inline__ vector unsigned int __ATTRS_o_ai8904vec_sl(vector unsigned int __a, vector unsigned int __b) {8905 return __a << (__b %8906 (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));8907}8908 8909static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,8910 vector unsigned int __b) {8911 return (vector int)vec_sl((vector unsigned int)__a, __b);8912}8913 8914#ifdef __POWER8_VECTOR__8915static __inline__ vector unsigned long long __ATTRS_o_ai8916vec_sl(vector unsigned long long __a, vector unsigned long long __b) {8917 return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *8918 __CHAR_BIT__));8919}8920 8921static __inline__ vector long long __ATTRS_o_ai8922vec_sl(vector long long __a, vector unsigned long long __b) {8923 return (vector long long)vec_sl((vector unsigned long long)__a, __b);8924}8925#elif defined(__VSX__)8926static __inline__ vector unsigned char __ATTRS_o_ai8927vec_vspltb(vector unsigned char __a, unsigned char __b);8928static __inline__ vector unsigned long long __ATTRS_o_ai8929vec_sl(vector unsigned long long __a, vector unsigned long long __b) {8930 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);8931 8932 // Big endian element one (the right doubleword) can be left shifted as-is.8933 // The other element needs to be swapped into the right doubleword and8934 // shifted. Then the right doublewords of the two result vectors are merged.8935 vector signed long long __rightelt =8936 (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,8937 (vector signed int)__b);8938#ifdef __LITTLE_ENDIAN__8939 __rightelt = (vector signed long long)__builtin_altivec_vsl(8940 (vector signed int)__rightelt,8941 (vector signed int)vec_vspltb((vector unsigned char)__b, 0));8942#else8943 __rightelt = (vector signed long long)__builtin_altivec_vsl(8944 (vector signed int)__rightelt,8945 (vector signed int)vec_vspltb((vector unsigned char)__b, 15));8946#endif8947 __a = __builtin_shufflevector(__a, __a, 1, 0);8948 __b = __builtin_shufflevector(__b, __b, 1, 0);8949 vector signed long long __leftelt =8950 (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,8951 (vector signed int)__b);8952#ifdef __LITTLE_ENDIAN__8953 __leftelt = (vector signed long long)__builtin_altivec_vsl(8954 (vector signed int)__leftelt,8955 (vector signed int)vec_vspltb((vector unsigned char)__b, 0));8956 return (vector unsigned long long)__builtin_shufflevector(__rightelt,8957 __leftelt, 0, 2);8958#else8959 __leftelt = (vector signed long long)__builtin_altivec_vsl(8960 (vector signed int)__leftelt,8961 (vector signed int)vec_vspltb((vector unsigned char)__b, 15));8962 return (vector unsigned long long)__builtin_shufflevector(__leftelt,8963 __rightelt, 1, 3);8964#endif8965}8966 8967static __inline__ vector long long __ATTRS_o_ai8968vec_sl(vector long long __a, vector unsigned long long __b) {8969 return (vector long long)vec_sl((vector unsigned long long)__a, __b);8970}8971#endif /* __VSX__ */8972 8973/* vec_vslb */8974 8975#define __builtin_altivec_vslb vec_vslb8976 8977static __inline__ vector signed char __ATTRS_o_ai8978vec_vslb(vector signed char __a, vector unsigned char __b) {8979 return vec_sl(__a, __b);8980}8981 8982static __inline__ vector unsigned char __ATTRS_o_ai8983vec_vslb(vector unsigned char __a, vector unsigned char __b) {8984 return vec_sl(__a, __b);8985}8986 8987/* vec_vslh */8988 8989#define __builtin_altivec_vslh vec_vslh8990 8991static __inline__ vector short __ATTRS_o_ai8992vec_vslh(vector short __a, vector unsigned short __b) {8993 return vec_sl(__a, __b);8994}8995 8996static __inline__ vector unsigned short __ATTRS_o_ai8997vec_vslh(vector unsigned short __a, vector unsigned short __b) {8998 return vec_sl(__a, __b);8999}9000 9001/* vec_vslw */9002 9003#define __builtin_altivec_vslw vec_vslw9004 9005static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,9006 vector unsigned int __b) {9007 return vec_sl(__a, __b);9008}9009 9010static __inline__ vector unsigned int __ATTRS_o_ai9011vec_vslw(vector unsigned int __a, vector unsigned int __b) {9012 return vec_sl(__a, __b);9013}9014 9015/* vec_sld */9016 9017#define __builtin_altivec_vsldoi_4si vec_sld9018 9019static __inline__ vector signed char __ATTRS_o_ai vec_sld(9020 vector signed char __a, vector signed char __b, unsigned const int __c) {9021 unsigned char __d = __c & 0x0F;9022#ifdef __LITTLE_ENDIAN__9023 return vec_perm(9024 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9025 20 - __d, 21 - __d, 22 - __d, 23 - __d,9026 24 - __d, 25 - __d, 26 - __d, 27 - __d,9027 28 - __d, 29 - __d, 30 - __d, 31 - __d));9028#else9029 return vec_perm(9030 __a, __b,9031 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9032 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9033 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9034#endif9035}9036 9037static __inline__ vector unsigned char __ATTRS_o_ai9038vec_sld(vector unsigned char __a, vector unsigned char __b,9039 unsigned const int __c) {9040 unsigned char __d = __c & 0x0F;9041#ifdef __LITTLE_ENDIAN__9042 return vec_perm(9043 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9044 20 - __d, 21 - __d, 22 - __d, 23 - __d,9045 24 - __d, 25 - __d, 26 - __d, 27 - __d,9046 28 - __d, 29 - __d, 30 - __d, 31 - __d));9047#else9048 return vec_perm(9049 __a, __b,9050 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9051 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9052 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9053#endif9054}9055 9056static __inline__ vector bool char __ATTRS_o_ai9057vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {9058 unsigned char __d = __c & 0x0F;9059#ifdef __LITTLE_ENDIAN__9060 return vec_perm(9061 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9062 20 - __d, 21 - __d, 22 - __d, 23 - __d,9063 24 - __d, 25 - __d, 26 - __d, 27 - __d,9064 28 - __d, 29 - __d, 30 - __d, 31 - __d));9065#else9066 return vec_perm(9067 __a, __b,9068 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9069 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9070 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9071#endif9072}9073 9074static __inline__ vector signed short __ATTRS_o_ai vec_sld(9075 vector signed short __a, vector signed short __b, unsigned const int __c) {9076 unsigned char __d = __c & 0x0F;9077#ifdef __LITTLE_ENDIAN__9078 return vec_perm(9079 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9080 20 - __d, 21 - __d, 22 - __d, 23 - __d,9081 24 - __d, 25 - __d, 26 - __d, 27 - __d,9082 28 - __d, 29 - __d, 30 - __d, 31 - __d));9083#else9084 return vec_perm(9085 __a, __b,9086 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9087 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9088 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9089#endif9090}9091 9092static __inline__ vector unsigned short __ATTRS_o_ai9093vec_sld(vector unsigned short __a, vector unsigned short __b,9094 unsigned const int __c) {9095 unsigned char __d = __c & 0x0F;9096#ifdef __LITTLE_ENDIAN__9097 return vec_perm(9098 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9099 20 - __d, 21 - __d, 22 - __d, 23 - __d,9100 24 - __d, 25 - __d, 26 - __d, 27 - __d,9101 28 - __d, 29 - __d, 30 - __d, 31 - __d));9102#else9103 return vec_perm(9104 __a, __b,9105 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9106 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9107 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9108#endif9109}9110 9111static __inline__ vector bool short __ATTRS_o_ai9112vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {9113 unsigned char __d = __c & 0x0F;9114#ifdef __LITTLE_ENDIAN__9115 return vec_perm(9116 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9117 20 - __d, 21 - __d, 22 - __d, 23 - __d,9118 24 - __d, 25 - __d, 26 - __d, 27 - __d,9119 28 - __d, 29 - __d, 30 - __d, 31 - __d));9120#else9121 return vec_perm(9122 __a, __b,9123 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9124 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9125 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9126#endif9127}9128 9129static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,9130 vector pixel __b,9131 unsigned const int __c) {9132 unsigned char __d = __c & 0x0F;9133#ifdef __LITTLE_ENDIAN__9134 return vec_perm(9135 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9136 20 - __d, 21 - __d, 22 - __d, 23 - __d,9137 24 - __d, 25 - __d, 26 - __d, 27 - __d,9138 28 - __d, 29 - __d, 30 - __d, 31 - __d));9139#else9140 return vec_perm(9141 __a, __b,9142 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9143 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9144 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9145#endif9146}9147 9148static __inline__ vector signed int __ATTRS_o_ai9149vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {9150 unsigned char __d = __c & 0x0F;9151#ifdef __LITTLE_ENDIAN__9152 return vec_perm(9153 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9154 20 - __d, 21 - __d, 22 - __d, 23 - __d,9155 24 - __d, 25 - __d, 26 - __d, 27 - __d,9156 28 - __d, 29 - __d, 30 - __d, 31 - __d));9157#else9158 return vec_perm(9159 __a, __b,9160 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9161 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9162 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9163#endif9164}9165 9166static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(9167 vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {9168 unsigned char __d = __c & 0x0F;9169#ifdef __LITTLE_ENDIAN__9170 return vec_perm(9171 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9172 20 - __d, 21 - __d, 22 - __d, 23 - __d,9173 24 - __d, 25 - __d, 26 - __d, 27 - __d,9174 28 - __d, 29 - __d, 30 - __d, 31 - __d));9175#else9176 return vec_perm(9177 __a, __b,9178 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9179 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9180 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9181#endif9182}9183 9184static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,9185 vector bool int __b,9186 unsigned const int __c) {9187 unsigned char __d = __c & 0x0F;9188#ifdef __LITTLE_ENDIAN__9189 return vec_perm(9190 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9191 20 - __d, 21 - __d, 22 - __d, 23 - __d,9192 24 - __d, 25 - __d, 26 - __d, 27 - __d,9193 28 - __d, 29 - __d, 30 - __d, 31 - __d));9194#else9195 return vec_perm(9196 __a, __b,9197 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9198 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9199 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9200#endif9201}9202 9203static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,9204 vector float __b,9205 unsigned const int __c) {9206 unsigned char __d = __c & 0x0F;9207#ifdef __LITTLE_ENDIAN__9208 return vec_perm(9209 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9210 20 - __d, 21 - __d, 22 - __d, 23 - __d,9211 24 - __d, 25 - __d, 26 - __d, 27 - __d,9212 28 - __d, 29 - __d, 30 - __d, 31 - __d));9213#else9214 return vec_perm(9215 __a, __b,9216 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9217 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9218 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9219#endif9220}9221 9222#ifdef __VSX__9223static __inline__ vector bool long long __ATTRS_o_ai9224vec_sld(vector bool long long __a, vector bool long long __b,9225 unsigned const int __c) {9226 unsigned char __d = __c & 0x0F;9227#ifdef __LITTLE_ENDIAN__9228 return vec_perm(9229 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9230 20 - __d, 21 - __d, 22 - __d, 23 - __d,9231 24 - __d, 25 - __d, 26 - __d, 27 - __d,9232 28 - __d, 29 - __d, 30 - __d, 31 - __d));9233#else9234 return vec_perm(9235 __a, __b,9236 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9237 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9238 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9239#endif9240}9241 9242static __inline__ vector signed long long __ATTRS_o_ai9243vec_sld(vector signed long long __a, vector signed long long __b,9244 unsigned const int __c) {9245 unsigned char __d = __c & 0x0F;9246#ifdef __LITTLE_ENDIAN__9247 return vec_perm(9248 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9249 20 - __d, 21 - __d, 22 - __d, 23 - __d,9250 24 - __d, 25 - __d, 26 - __d, 27 - __d,9251 28 - __d, 29 - __d, 30 - __d, 31 - __d));9252#else9253 return vec_perm(9254 __a, __b,9255 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9256 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9257 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9258#endif9259}9260 9261static __inline__ vector unsigned long long __ATTRS_o_ai9262vec_sld(vector unsigned long long __a, vector unsigned long long __b,9263 unsigned const int __c) {9264 unsigned char __d = __c & 0x0F;9265#ifdef __LITTLE_ENDIAN__9266 return vec_perm(9267 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9268 20 - __d, 21 - __d, 22 - __d, 23 - __d,9269 24 - __d, 25 - __d, 26 - __d, 27 - __d,9270 28 - __d, 29 - __d, 30 - __d, 31 - __d));9271#else9272 return vec_perm(9273 __a, __b,9274 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9275 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9276 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9277#endif9278}9279 9280static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,9281 vector double __b,9282 unsigned const int __c) {9283 unsigned char __d = __c & 0x0F;9284#ifdef __LITTLE_ENDIAN__9285 return vec_perm(9286 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9287 20 - __d, 21 - __d, 22 - __d, 23 - __d,9288 24 - __d, 25 - __d, 26 - __d, 27 - __d,9289 28 - __d, 29 - __d, 30 - __d, 31 - __d));9290#else9291 return vec_perm(9292 __a, __b,9293 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9294 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9295 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9296#endif9297}9298#endif9299 9300/* vec_sldw */9301static __inline__ vector signed char __ATTRS_o_ai vec_sldw(9302 vector signed char __a, vector signed char __b, unsigned const int __c) {9303 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9304}9305 9306static __inline__ vector unsigned char __ATTRS_o_ai9307vec_sldw(vector unsigned char __a, vector unsigned char __b,9308 unsigned const int __c) {9309 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9310}9311 9312static __inline__ vector signed short __ATTRS_o_ai vec_sldw(9313 vector signed short __a, vector signed short __b, unsigned const int __c) {9314 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9315}9316 9317static __inline__ vector unsigned short __ATTRS_o_ai9318vec_sldw(vector unsigned short __a, vector unsigned short __b,9319 unsigned const int __c) {9320 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9321}9322 9323static __inline__ vector signed int __ATTRS_o_ai9324vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {9325 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9326}9327 9328static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(9329 vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {9330 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9331}9332 9333static __inline__ vector float __ATTRS_o_ai vec_sldw(9334 vector float __a, vector float __b, unsigned const int __c) {9335 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9336}9337 9338#ifdef __VSX__9339static __inline__ vector signed long long __ATTRS_o_ai9340vec_sldw(vector signed long long __a, vector signed long long __b,9341 unsigned const int __c) {9342 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9343}9344 9345static __inline__ vector unsigned long long __ATTRS_o_ai9346vec_sldw(vector unsigned long long __a, vector unsigned long long __b,9347 unsigned const int __c) {9348 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9349}9350 9351static __inline__ vector double __ATTRS_o_ai vec_sldw(9352 vector double __a, vector double __b, unsigned const int __c) {9353 return vec_sld(__a, __b, ((__c << 2) & 0x0F));9354}9355#endif9356 9357#ifdef __POWER9_VECTOR__9358/* vec_slv */9359static __inline__ vector unsigned char __ATTRS_o_ai9360vec_slv(vector unsigned char __a, vector unsigned char __b) {9361 return __builtin_altivec_vslv(__a, __b);9362}9363 9364/* vec_srv */9365static __inline__ vector unsigned char __ATTRS_o_ai9366vec_srv(vector unsigned char __a, vector unsigned char __b) {9367 return __builtin_altivec_vsrv(__a, __b);9368}9369#endif9370 9371/* vec_vsldoi */9372 9373static __inline__ vector signed char __ATTRS_o_ai9374vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {9375 unsigned char __d = __c & 0x0F;9376#ifdef __LITTLE_ENDIAN__9377 return vec_perm(9378 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9379 20 - __d, 21 - __d, 22 - __d, 23 - __d,9380 24 - __d, 25 - __d, 26 - __d, 27 - __d,9381 28 - __d, 29 - __d, 30 - __d, 31 - __d));9382#else9383 return vec_perm(9384 __a, __b,9385 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9386 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9387 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9388#endif9389}9390 9391static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(9392 vector unsigned char __a, vector unsigned char __b, unsigned char __c) {9393 unsigned char __d = __c & 0x0F;9394#ifdef __LITTLE_ENDIAN__9395 return vec_perm(9396 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9397 20 - __d, 21 - __d, 22 - __d, 23 - __d,9398 24 - __d, 25 - __d, 26 - __d, 27 - __d,9399 28 - __d, 29 - __d, 30 - __d, 31 - __d));9400#else9401 return vec_perm(9402 __a, __b,9403 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9404 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9405 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9406#endif9407}9408 9409static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,9410 vector short __b,9411 unsigned char __c) {9412 unsigned char __d = __c & 0x0F;9413#ifdef __LITTLE_ENDIAN__9414 return vec_perm(9415 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9416 20 - __d, 21 - __d, 22 - __d, 23 - __d,9417 24 - __d, 25 - __d, 26 - __d, 27 - __d,9418 28 - __d, 29 - __d, 30 - __d, 31 - __d));9419#else9420 return vec_perm(9421 __a, __b,9422 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9423 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9424 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9425#endif9426}9427 9428static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(9429 vector unsigned short __a, vector unsigned short __b, unsigned char __c) {9430 unsigned char __d = __c & 0x0F;9431#ifdef __LITTLE_ENDIAN__9432 return vec_perm(9433 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9434 20 - __d, 21 - __d, 22 - __d, 23 - __d,9435 24 - __d, 25 - __d, 26 - __d, 27 - __d,9436 28 - __d, 29 - __d, 30 - __d, 31 - __d));9437#else9438 return vec_perm(9439 __a, __b,9440 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9441 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9442 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9443#endif9444}9445 9446static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,9447 vector pixel __b,9448 unsigned char __c) {9449 unsigned char __d = __c & 0x0F;9450#ifdef __LITTLE_ENDIAN__9451 return vec_perm(9452 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9453 20 - __d, 21 - __d, 22 - __d, 23 - __d,9454 24 - __d, 25 - __d, 26 - __d, 27 - __d,9455 28 - __d, 29 - __d, 30 - __d, 31 - __d));9456#else9457 return vec_perm(9458 __a, __b,9459 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9460 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9461 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9462#endif9463}9464 9465static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,9466 vector int __b,9467 unsigned char __c) {9468 unsigned char __d = __c & 0x0F;9469#ifdef __LITTLE_ENDIAN__9470 return vec_perm(9471 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9472 20 - __d, 21 - __d, 22 - __d, 23 - __d,9473 24 - __d, 25 - __d, 26 - __d, 27 - __d,9474 28 - __d, 29 - __d, 30 - __d, 31 - __d));9475#else9476 return vec_perm(9477 __a, __b,9478 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9479 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9480 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9481#endif9482}9483 9484static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(9485 vector unsigned int __a, vector unsigned int __b, unsigned char __c) {9486 unsigned char __d = __c & 0x0F;9487#ifdef __LITTLE_ENDIAN__9488 return vec_perm(9489 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9490 20 - __d, 21 - __d, 22 - __d, 23 - __d,9491 24 - __d, 25 - __d, 26 - __d, 27 - __d,9492 28 - __d, 29 - __d, 30 - __d, 31 - __d));9493#else9494 return vec_perm(9495 __a, __b,9496 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9497 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9498 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9499#endif9500}9501 9502static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,9503 vector float __b,9504 unsigned char __c) {9505 unsigned char __d = __c & 0x0F;9506#ifdef __LITTLE_ENDIAN__9507 return vec_perm(9508 __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,9509 20 - __d, 21 - __d, 22 - __d, 23 - __d,9510 24 - __d, 25 - __d, 26 - __d, 27 - __d,9511 28 - __d, 29 - __d, 30 - __d, 31 - __d));9512#else9513 return vec_perm(9514 __a, __b,9515 (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,9516 __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,9517 __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));9518#endif9519}9520 9521/* vec_sll */9522 9523static __inline__ vector signed char __ATTRS_o_ai9524vec_sll(vector signed char __a, vector unsigned char __b) {9525 return (vector signed char)__builtin_altivec_vsl((vector int)__a,9526 (vector int)__b);9527}9528 9529static __inline__ vector signed char __ATTRS_o_ai9530vec_sll(vector signed char __a, vector unsigned short __b) {9531 return (vector signed char)__builtin_altivec_vsl((vector int)__a,9532 (vector int)__b);9533}9534 9535static __inline__ vector signed char __ATTRS_o_ai9536vec_sll(vector signed char __a, vector unsigned int __b) {9537 return (vector signed char)__builtin_altivec_vsl((vector int)__a,9538 (vector int)__b);9539}9540 9541static __inline__ vector unsigned char __ATTRS_o_ai9542vec_sll(vector unsigned char __a, vector unsigned char __b) {9543 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,9544 (vector int)__b);9545}9546 9547static __inline__ vector unsigned char __ATTRS_o_ai9548vec_sll(vector unsigned char __a, vector unsigned short __b) {9549 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,9550 (vector int)__b);9551}9552 9553static __inline__ vector unsigned char __ATTRS_o_ai9554vec_sll(vector unsigned char __a, vector unsigned int __b) {9555 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,9556 (vector int)__b);9557}9558 9559static __inline__ vector bool char __ATTRS_o_ai9560vec_sll(vector bool char __a, vector unsigned char __b) {9561 return (vector bool char)__builtin_altivec_vsl((vector int)__a,9562 (vector int)__b);9563}9564 9565static __inline__ vector bool char __ATTRS_o_ai9566vec_sll(vector bool char __a, vector unsigned short __b) {9567 return (vector bool char)__builtin_altivec_vsl((vector int)__a,9568 (vector int)__b);9569}9570 9571static __inline__ vector bool char __ATTRS_o_ai9572vec_sll(vector bool char __a, vector unsigned int __b) {9573 return (vector bool char)__builtin_altivec_vsl((vector int)__a,9574 (vector int)__b);9575}9576 9577static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,9578 vector unsigned char __b) {9579 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9580}9581 9582static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,9583 vector unsigned short __b) {9584 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9585}9586 9587static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,9588 vector unsigned int __b) {9589 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9590}9591 9592static __inline__ vector unsigned short __ATTRS_o_ai9593vec_sll(vector unsigned short __a, vector unsigned char __b) {9594 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,9595 (vector int)__b);9596}9597 9598static __inline__ vector unsigned short __ATTRS_o_ai9599vec_sll(vector unsigned short __a, vector unsigned short __b) {9600 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,9601 (vector int)__b);9602}9603 9604static __inline__ vector unsigned short __ATTRS_o_ai9605vec_sll(vector unsigned short __a, vector unsigned int __b) {9606 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,9607 (vector int)__b);9608}9609 9610static __inline__ vector bool short __ATTRS_o_ai9611vec_sll(vector bool short __a, vector unsigned char __b) {9612 return (vector bool short)__builtin_altivec_vsl((vector int)__a,9613 (vector int)__b);9614}9615 9616static __inline__ vector bool short __ATTRS_o_ai9617vec_sll(vector bool short __a, vector unsigned short __b) {9618 return (vector bool short)__builtin_altivec_vsl((vector int)__a,9619 (vector int)__b);9620}9621 9622static __inline__ vector bool short __ATTRS_o_ai9623vec_sll(vector bool short __a, vector unsigned int __b) {9624 return (vector bool short)__builtin_altivec_vsl((vector int)__a,9625 (vector int)__b);9626}9627 9628static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,9629 vector unsigned char __b) {9630 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9631}9632 9633static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,9634 vector unsigned short __b) {9635 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9636}9637 9638static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,9639 vector unsigned int __b) {9640 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9641}9642 9643static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,9644 vector unsigned char __b) {9645 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);9646}9647 9648static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,9649 vector unsigned short __b) {9650 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);9651}9652 9653static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,9654 vector unsigned int __b) {9655 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);9656}9657 9658static __inline__ vector unsigned int __ATTRS_o_ai9659vec_sll(vector unsigned int __a, vector unsigned char __b) {9660 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,9661 (vector int)__b);9662}9663 9664static __inline__ vector unsigned int __ATTRS_o_ai9665vec_sll(vector unsigned int __a, vector unsigned short __b) {9666 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,9667 (vector int)__b);9668}9669 9670static __inline__ vector unsigned int __ATTRS_o_ai9671vec_sll(vector unsigned int __a, vector unsigned int __b) {9672 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,9673 (vector int)__b);9674}9675 9676static __inline__ vector bool int __ATTRS_o_ai9677vec_sll(vector bool int __a, vector unsigned char __b) {9678 return (vector bool int)__builtin_altivec_vsl((vector int)__a,9679 (vector int)__b);9680}9681 9682static __inline__ vector bool int __ATTRS_o_ai9683vec_sll(vector bool int __a, vector unsigned short __b) {9684 return (vector bool int)__builtin_altivec_vsl((vector int)__a,9685 (vector int)__b);9686}9687 9688static __inline__ vector bool int __ATTRS_o_ai9689vec_sll(vector bool int __a, vector unsigned int __b) {9690 return (vector bool int)__builtin_altivec_vsl((vector int)__a,9691 (vector int)__b);9692}9693 9694#ifdef __VSX__9695static __inline__ vector signed long long __ATTRS_o_ai9696vec_sll(vector signed long long __a, vector unsigned char __b) {9697 return (vector signed long long)__builtin_altivec_vsl((vector int)__a,9698 (vector int)__b);9699}9700 9701static __inline__ vector unsigned long long __ATTRS_o_ai9702vec_sll(vector unsigned long long __a, vector unsigned char __b) {9703 return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,9704 (vector int)__b);9705}9706#endif9707 9708/* vec_vsl */9709 9710static __inline__ vector signed char __ATTRS_o_ai9711vec_vsl(vector signed char __a, vector unsigned char __b) {9712 return (vector signed char)__builtin_altivec_vsl((vector int)__a,9713 (vector int)__b);9714}9715 9716static __inline__ vector signed char __ATTRS_o_ai9717vec_vsl(vector signed char __a, vector unsigned short __b) {9718 return (vector signed char)__builtin_altivec_vsl((vector int)__a,9719 (vector int)__b);9720}9721 9722static __inline__ vector signed char __ATTRS_o_ai9723vec_vsl(vector signed char __a, vector unsigned int __b) {9724 return (vector signed char)__builtin_altivec_vsl((vector int)__a,9725 (vector int)__b);9726}9727 9728static __inline__ vector unsigned char __ATTRS_o_ai9729vec_vsl(vector unsigned char __a, vector unsigned char __b) {9730 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,9731 (vector int)__b);9732}9733 9734static __inline__ vector unsigned char __ATTRS_o_ai9735vec_vsl(vector unsigned char __a, vector unsigned short __b) {9736 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,9737 (vector int)__b);9738}9739 9740static __inline__ vector unsigned char __ATTRS_o_ai9741vec_vsl(vector unsigned char __a, vector unsigned int __b) {9742 return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,9743 (vector int)__b);9744}9745 9746static __inline__ vector bool char __ATTRS_o_ai9747vec_vsl(vector bool char __a, vector unsigned char __b) {9748 return (vector bool char)__builtin_altivec_vsl((vector int)__a,9749 (vector int)__b);9750}9751 9752static __inline__ vector bool char __ATTRS_o_ai9753vec_vsl(vector bool char __a, vector unsigned short __b) {9754 return (vector bool char)__builtin_altivec_vsl((vector int)__a,9755 (vector int)__b);9756}9757 9758static __inline__ vector bool char __ATTRS_o_ai9759vec_vsl(vector bool char __a, vector unsigned int __b) {9760 return (vector bool char)__builtin_altivec_vsl((vector int)__a,9761 (vector int)__b);9762}9763 9764static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,9765 vector unsigned char __b) {9766 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9767}9768 9769static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,9770 vector unsigned short __b) {9771 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9772}9773 9774static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,9775 vector unsigned int __b) {9776 return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9777}9778 9779static __inline__ vector unsigned short __ATTRS_o_ai9780vec_vsl(vector unsigned short __a, vector unsigned char __b) {9781 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,9782 (vector int)__b);9783}9784 9785static __inline__ vector unsigned short __ATTRS_o_ai9786vec_vsl(vector unsigned short __a, vector unsigned short __b) {9787 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,9788 (vector int)__b);9789}9790 9791static __inline__ vector unsigned short __ATTRS_o_ai9792vec_vsl(vector unsigned short __a, vector unsigned int __b) {9793 return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,9794 (vector int)__b);9795}9796 9797static __inline__ vector bool short __ATTRS_o_ai9798vec_vsl(vector bool short __a, vector unsigned char __b) {9799 return (vector bool short)__builtin_altivec_vsl((vector int)__a,9800 (vector int)__b);9801}9802 9803static __inline__ vector bool short __ATTRS_o_ai9804vec_vsl(vector bool short __a, vector unsigned short __b) {9805 return (vector bool short)__builtin_altivec_vsl((vector int)__a,9806 (vector int)__b);9807}9808 9809static __inline__ vector bool short __ATTRS_o_ai9810vec_vsl(vector bool short __a, vector unsigned int __b) {9811 return (vector bool short)__builtin_altivec_vsl((vector int)__a,9812 (vector int)__b);9813}9814 9815static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,9816 vector unsigned char __b) {9817 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9818}9819 9820static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,9821 vector unsigned short __b) {9822 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9823}9824 9825static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,9826 vector unsigned int __b) {9827 return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);9828}9829 9830static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,9831 vector unsigned char __b) {9832 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);9833}9834 9835static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,9836 vector unsigned short __b) {9837 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);9838}9839 9840static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,9841 vector unsigned int __b) {9842 return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);9843}9844 9845static __inline__ vector unsigned int __ATTRS_o_ai9846vec_vsl(vector unsigned int __a, vector unsigned char __b) {9847 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,9848 (vector int)__b);9849}9850 9851static __inline__ vector unsigned int __ATTRS_o_ai9852vec_vsl(vector unsigned int __a, vector unsigned short __b) {9853 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,9854 (vector int)__b);9855}9856 9857static __inline__ vector unsigned int __ATTRS_o_ai9858vec_vsl(vector unsigned int __a, vector unsigned int __b) {9859 return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,9860 (vector int)__b);9861}9862 9863static __inline__ vector bool int __ATTRS_o_ai9864vec_vsl(vector bool int __a, vector unsigned char __b) {9865 return (vector bool int)__builtin_altivec_vsl((vector int)__a,9866 (vector int)__b);9867}9868 9869static __inline__ vector bool int __ATTRS_o_ai9870vec_vsl(vector bool int __a, vector unsigned short __b) {9871 return (vector bool int)__builtin_altivec_vsl((vector int)__a,9872 (vector int)__b);9873}9874 9875static __inline__ vector bool int __ATTRS_o_ai9876vec_vsl(vector bool int __a, vector unsigned int __b) {9877 return (vector bool int)__builtin_altivec_vsl((vector int)__a,9878 (vector int)__b);9879}9880 9881/* vec_slo */9882 9883static __inline__ vector signed char __ATTRS_o_ai9884vec_slo(vector signed char __a, vector signed char __b) {9885 return (vector signed char)__builtin_altivec_vslo((vector int)__a,9886 (vector int)__b);9887}9888 9889static __inline__ vector signed char __ATTRS_o_ai9890vec_slo(vector signed char __a, vector unsigned char __b) {9891 return (vector signed char)__builtin_altivec_vslo((vector int)__a,9892 (vector int)__b);9893}9894 9895static __inline__ vector unsigned char __ATTRS_o_ai9896vec_slo(vector unsigned char __a, vector signed char __b) {9897 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,9898 (vector int)__b);9899}9900 9901static __inline__ vector unsigned char __ATTRS_o_ai9902vec_slo(vector unsigned char __a, vector unsigned char __b) {9903 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,9904 (vector int)__b);9905}9906 9907static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,9908 vector signed char __b) {9909 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);9910}9911 9912static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,9913 vector unsigned char __b) {9914 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);9915}9916 9917static __inline__ vector unsigned short __ATTRS_o_ai9918vec_slo(vector unsigned short __a, vector signed char __b) {9919 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,9920 (vector int)__b);9921}9922 9923static __inline__ vector unsigned short __ATTRS_o_ai9924vec_slo(vector unsigned short __a, vector unsigned char __b) {9925 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,9926 (vector int)__b);9927}9928 9929static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,9930 vector signed char __b) {9931 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);9932}9933 9934static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,9935 vector unsigned char __b) {9936 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);9937}9938 9939static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,9940 vector signed char __b) {9941 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);9942}9943 9944static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,9945 vector unsigned char __b) {9946 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);9947}9948 9949static __inline__ vector unsigned int __ATTRS_o_ai9950vec_slo(vector unsigned int __a, vector signed char __b) {9951 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,9952 (vector int)__b);9953}9954 9955static __inline__ vector unsigned int __ATTRS_o_ai9956vec_slo(vector unsigned int __a, vector unsigned char __b) {9957 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,9958 (vector int)__b);9959}9960 9961static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,9962 vector signed char __b) {9963 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);9964}9965 9966static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,9967 vector unsigned char __b) {9968 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);9969}9970 9971#ifdef __VSX__9972static __inline__ vector signed long long __ATTRS_o_ai9973vec_slo(vector signed long long __a, vector signed char __b) {9974 return (vector signed long long)__builtin_altivec_vslo((vector int)__a,9975 (vector int)__b);9976}9977 9978static __inline__ vector signed long long __ATTRS_o_ai9979vec_slo(vector signed long long __a, vector unsigned char __b) {9980 return (vector signed long long)__builtin_altivec_vslo((vector int)__a,9981 (vector int)__b);9982}9983 9984static __inline__ vector unsigned long long __ATTRS_o_ai9985vec_slo(vector unsigned long long __a, vector signed char __b) {9986 return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,9987 (vector int)__b);9988}9989 9990static __inline__ vector unsigned long long __ATTRS_o_ai9991vec_slo(vector unsigned long long __a, vector unsigned char __b) {9992 return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,9993 (vector int)__b);9994}9995#endif9996 9997/* vec_vslo */9998 9999static __inline__ vector signed char __ATTRS_o_ai10000vec_vslo(vector signed char __a, vector signed char __b) {10001 return (vector signed char)__builtin_altivec_vslo((vector int)__a,10002 (vector int)__b);10003}10004 10005static __inline__ vector signed char __ATTRS_o_ai10006vec_vslo(vector signed char __a, vector unsigned char __b) {10007 return (vector signed char)__builtin_altivec_vslo((vector int)__a,10008 (vector int)__b);10009}10010 10011static __inline__ vector unsigned char __ATTRS_o_ai10012vec_vslo(vector unsigned char __a, vector signed char __b) {10013 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,10014 (vector int)__b);10015}10016 10017static __inline__ vector unsigned char __ATTRS_o_ai10018vec_vslo(vector unsigned char __a, vector unsigned char __b) {10019 return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,10020 (vector int)__b);10021}10022 10023static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,10024 vector signed char __b) {10025 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);10026}10027 10028static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,10029 vector unsigned char __b) {10030 return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);10031}10032 10033static __inline__ vector unsigned short __ATTRS_o_ai10034vec_vslo(vector unsigned short __a, vector signed char __b) {10035 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,10036 (vector int)__b);10037}10038 10039static __inline__ vector unsigned short __ATTRS_o_ai10040vec_vslo(vector unsigned short __a, vector unsigned char __b) {10041 return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,10042 (vector int)__b);10043}10044 10045static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,10046 vector signed char __b) {10047 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);10048}10049 10050static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,10051 vector unsigned char __b) {10052 return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);10053}10054 10055static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,10056 vector signed char __b) {10057 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);10058}10059 10060static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,10061 vector unsigned char __b) {10062 return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);10063}10064 10065static __inline__ vector unsigned int __ATTRS_o_ai10066vec_vslo(vector unsigned int __a, vector signed char __b) {10067 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,10068 (vector int)__b);10069}10070 10071static __inline__ vector unsigned int __ATTRS_o_ai10072vec_vslo(vector unsigned int __a, vector unsigned char __b) {10073 return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,10074 (vector int)__b);10075}10076 10077static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,10078 vector signed char __b) {10079 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);10080}10081 10082static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,10083 vector unsigned char __b) {10084 return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);10085}10086 10087/* vec_splat */10088 10089static __inline__ vector signed char __ATTRS_o_ai10090vec_splat(vector signed char __a, unsigned const int __b) {10091 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));10092}10093 10094static __inline__ vector unsigned char __ATTRS_o_ai10095vec_splat(vector unsigned char __a, unsigned const int __b) {10096 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));10097}10098 10099static __inline__ vector bool char __ATTRS_o_ai10100vec_splat(vector bool char __a, unsigned const int __b) {10101 return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));10102}10103 10104static __inline__ vector signed short __ATTRS_o_ai10105vec_splat(vector signed short __a, unsigned const int __b) {10106 unsigned char b0 = (__b & 0x07) * 2;10107 unsigned char b1 = b0 + 1;10108 return vec_perm(__a, __a,10109 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,10110 b0, b1, b0, b1, b0, b1));10111}10112 10113static __inline__ vector unsigned short __ATTRS_o_ai10114vec_splat(vector unsigned short __a, unsigned const int __b) {10115 unsigned char b0 = (__b & 0x07) * 2;10116 unsigned char b1 = b0 + 1;10117 return vec_perm(__a, __a,10118 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,10119 b0, b1, b0, b1, b0, b1));10120}10121 10122static __inline__ vector bool short __ATTRS_o_ai10123vec_splat(vector bool short __a, unsigned const int __b) {10124 unsigned char b0 = (__b & 0x07) * 2;10125 unsigned char b1 = b0 + 1;10126 return vec_perm(__a, __a,10127 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,10128 b0, b1, b0, b1, b0, b1));10129}10130 10131static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,10132 unsigned const int __b) {10133 unsigned char b0 = (__b & 0x07) * 2;10134 unsigned char b1 = b0 + 1;10135 return vec_perm(__a, __a,10136 (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,10137 b0, b1, b0, b1, b0, b1));10138}10139 10140static __inline__ vector signed int __ATTRS_o_ai10141vec_splat(vector signed int __a, unsigned const int __b) {10142 unsigned char b0 = (__b & 0x03) * 4;10143 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;10144 return vec_perm(__a, __a,10145 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,10146 b2, b3, b0, b1, b2, b3));10147}10148 10149static __inline__ vector unsigned int __ATTRS_o_ai10150vec_splat(vector unsigned int __a, unsigned const int __b) {10151 unsigned char b0 = (__b & 0x03) * 4;10152 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;10153 return vec_perm(__a, __a,10154 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,10155 b2, b3, b0, b1, b2, b3));10156}10157 10158static __inline__ vector bool int __ATTRS_o_ai10159vec_splat(vector bool int __a, unsigned const int __b) {10160 unsigned char b0 = (__b & 0x03) * 4;10161 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;10162 return vec_perm(__a, __a,10163 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,10164 b2, b3, b0, b1, b2, b3));10165}10166 10167static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,10168 unsigned const int __b) {10169 unsigned char b0 = (__b & 0x03) * 4;10170 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;10171 return vec_perm(__a, __a,10172 (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,10173 b2, b3, b0, b1, b2, b3));10174}10175 10176#ifdef __VSX__10177static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,10178 unsigned const int __b) {10179 unsigned char b0 = (__b & 0x01) * 8;10180 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,10181 b6 = b0 + 6, b7 = b0 + 7;10182 return vec_perm(__a, __a,10183 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,10184 b2, b3, b4, b5, b6, b7));10185}10186static __inline__ vector bool long long __ATTRS_o_ai10187vec_splat(vector bool long long __a, unsigned const int __b) {10188 unsigned char b0 = (__b & 0x01) * 8;10189 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,10190 b6 = b0 + 6, b7 = b0 + 7;10191 return vec_perm(__a, __a,10192 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,10193 b2, b3, b4, b5, b6, b7));10194}10195static __inline__ vector signed long long __ATTRS_o_ai10196vec_splat(vector signed long long __a, unsigned const int __b) {10197 unsigned char b0 = (__b & 0x01) * 8;10198 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,10199 b6 = b0 + 6, b7 = b0 + 7;10200 return vec_perm(__a, __a,10201 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,10202 b2, b3, b4, b5, b6, b7));10203}10204static __inline__ vector unsigned long long __ATTRS_o_ai10205vec_splat(vector unsigned long long __a, unsigned const int __b) {10206 unsigned char b0 = (__b & 0x01) * 8;10207 unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,10208 b6 = b0 + 6, b7 = b0 + 7;10209 return vec_perm(__a, __a,10210 (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,10211 b2, b3, b4, b5, b6, b7));10212}10213#endif10214 10215/* vec_vspltb */10216 10217#define __builtin_altivec_vspltb vec_vspltb10218 10219static __inline__ vector signed char __ATTRS_o_ai10220vec_vspltb(vector signed char __a, unsigned char __b) {10221 return vec_perm(__a, __a, (vector unsigned char)(__b));10222}10223 10224static __inline__ vector unsigned char __ATTRS_o_ai10225vec_vspltb(vector unsigned char __a, unsigned char __b) {10226 return vec_perm(__a, __a, (vector unsigned char)(__b));10227}10228 10229static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,10230 unsigned char __b) {10231 return vec_perm(__a, __a, (vector unsigned char)(__b));10232}10233 10234/* vec_vsplth */10235 10236#define __builtin_altivec_vsplth vec_vsplth10237 10238static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,10239 unsigned char __b) {10240 __b *= 2;10241 unsigned char b1 = __b + 1;10242 return vec_perm(__a, __a,10243 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,10244 __b, b1, __b, b1, __b, b1, __b, b1));10245}10246 10247static __inline__ vector unsigned short __ATTRS_o_ai10248vec_vsplth(vector unsigned short __a, unsigned char __b) {10249 __b *= 2;10250 unsigned char b1 = __b + 1;10251 return vec_perm(__a, __a,10252 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,10253 __b, b1, __b, b1, __b, b1, __b, b1));10254}10255 10256static __inline__ vector bool short __ATTRS_o_ai10257vec_vsplth(vector bool short __a, unsigned char __b) {10258 __b *= 2;10259 unsigned char b1 = __b + 1;10260 return vec_perm(__a, __a,10261 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,10262 __b, b1, __b, b1, __b, b1, __b, b1));10263}10264 10265static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,10266 unsigned char __b) {10267 __b *= 2;10268 unsigned char b1 = __b + 1;10269 return vec_perm(__a, __a,10270 (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,10271 __b, b1, __b, b1, __b, b1, __b, b1));10272}10273 10274/* vec_vspltw */10275 10276#define __builtin_altivec_vspltw vec_vspltw10277 10278static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,10279 unsigned char __b) {10280 __b *= 4;10281 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;10282 return vec_perm(__a, __a,10283 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,10284 b1, b2, b3, __b, b1, b2, b3));10285}10286 10287static __inline__ vector unsigned int __ATTRS_o_ai10288vec_vspltw(vector unsigned int __a, unsigned char __b) {10289 __b *= 4;10290 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;10291 return vec_perm(__a, __a,10292 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,10293 b1, b2, b3, __b, b1, b2, b3));10294}10295 10296static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,10297 unsigned char __b) {10298 __b *= 4;10299 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;10300 return vec_perm(__a, __a,10301 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,10302 b1, b2, b3, __b, b1, b2, b3));10303}10304 10305static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,10306 unsigned char __b) {10307 __b *= 4;10308 unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;10309 return vec_perm(__a, __a,10310 (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,10311 b1, b2, b3, __b, b1, b2, b3));10312}10313 10314/* vec_splat_s8 */10315 10316#define __builtin_altivec_vspltisb vec_splat_s810317 10318// FIXME: parameter should be treated as 5-bit signed literal10319static __inline__ vector signed char __ATTRS_o_ai10320vec_splat_s8(signed char __a) {10321 return (vector signed char)(__a);10322}10323 10324/* vec_vspltisb */10325 10326// FIXME: parameter should be treated as 5-bit signed literal10327static __inline__ vector signed char __ATTRS_o_ai10328vec_vspltisb(signed char __a) {10329 return (vector signed char)(__a);10330}10331 10332/* vec_splat_s16 */10333 10334#define __builtin_altivec_vspltish vec_splat_s1610335 10336// FIXME: parameter should be treated as 5-bit signed literal10337static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {10338 return (vector short)(__a);10339}10340 10341/* vec_vspltish */10342 10343// FIXME: parameter should be treated as 5-bit signed literal10344static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {10345 return (vector short)(__a);10346}10347 10348/* vec_splat_s32 */10349 10350#define __builtin_altivec_vspltisw vec_splat_s3210351 10352// FIXME: parameter should be treated as 5-bit signed literal10353static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {10354 return (vector int)(__a);10355}10356 10357/* vec_vspltisw */10358 10359// FIXME: parameter should be treated as 5-bit signed literal10360static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {10361 return (vector int)(__a);10362}10363 10364/* vec_splat_u8 */10365 10366// FIXME: parameter should be treated as 5-bit signed literal10367static __inline__ vector unsigned char __ATTRS_o_ai10368vec_splat_u8(unsigned char __a) {10369 return (vector unsigned char)(__a);10370}10371 10372/* vec_splat_u16 */10373 10374// FIXME: parameter should be treated as 5-bit signed literal10375static __inline__ vector unsigned short __ATTRS_o_ai10376vec_splat_u16(signed char __a) {10377 return (vector unsigned short)(__a);10378}10379 10380/* vec_splat_u32 */10381 10382// FIXME: parameter should be treated as 5-bit signed literal10383static __inline__ vector unsigned int __ATTRS_o_ai10384vec_splat_u32(signed char __a) {10385 return (vector unsigned int)(__a);10386}10387 10388/* vec_sr */10389 10390// vec_sr does modulo arithmetic on __b first, so __b is allowed to be more10391// than the length of __a.10392static __inline__ vector unsigned char __ATTRS_o_ai10393vec_sr(vector unsigned char __a, vector unsigned char __b) {10394 return __a >>10395 (__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));10396}10397 10398static __inline__ vector signed char __ATTRS_o_ai10399vec_sr(vector signed char __a, vector unsigned char __b) {10400 return (vector signed char)vec_sr((vector unsigned char)__a, __b);10401}10402 10403static __inline__ vector unsigned short __ATTRS_o_ai10404vec_sr(vector unsigned short __a, vector unsigned short __b) {10405 return __a >>10406 (__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));10407}10408 10409static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,10410 vector unsigned short __b) {10411 return (vector short)vec_sr((vector unsigned short)__a, __b);10412}10413 10414static __inline__ vector unsigned int __ATTRS_o_ai10415vec_sr(vector unsigned int __a, vector unsigned int __b) {10416 return __a >>10417 (__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));10418}10419 10420static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,10421 vector unsigned int __b) {10422 return (vector int)vec_sr((vector unsigned int)__a, __b);10423}10424 10425#ifdef __POWER8_VECTOR__10426static __inline__ vector unsigned long long __ATTRS_o_ai10427vec_sr(vector unsigned long long __a, vector unsigned long long __b) {10428 return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *10429 __CHAR_BIT__));10430}10431 10432static __inline__ vector long long __ATTRS_o_ai10433vec_sr(vector long long __a, vector unsigned long long __b) {10434 return (vector long long)vec_sr((vector unsigned long long)__a, __b);10435}10436#elif defined(__VSX__)10437static __inline__ vector unsigned long long __ATTRS_o_ai10438vec_sr(vector unsigned long long __a, vector unsigned long long __b) {10439 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);10440 10441 // Big endian element zero (the left doubleword) can be right shifted as-is.10442 // However the shift amount must be in the right doubleword.10443 // The other element needs to be swapped into the left doubleword and10444 // shifted. Then the left doublewords of the two result vectors are merged.10445 vector unsigned long long __swapshift =10446 __builtin_shufflevector(__b, __b, 1, 0);10447 vector unsigned long long __leftelt =10448 (vector unsigned long long)__builtin_altivec_vsro(10449 (vector signed int)__a, (vector signed int)__swapshift);10450#ifdef __LITTLE_ENDIAN__10451 __leftelt = (vector unsigned long long)__builtin_altivec_vsr(10452 (vector signed int)__leftelt,10453 (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 0));10454#else10455 __leftelt = (vector unsigned long long)__builtin_altivec_vsr(10456 (vector signed int)__leftelt,10457 (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 15));10458#endif10459 __a = __builtin_shufflevector(__a, __a, 1, 0);10460 vector unsigned long long __rightelt =10461 (vector unsigned long long)__builtin_altivec_vsro((vector signed int)__a,10462 (vector signed int)__b);10463#ifdef __LITTLE_ENDIAN__10464 __rightelt = (vector unsigned long long)__builtin_altivec_vsr(10465 (vector signed int)__rightelt,10466 (vector signed int)vec_vspltb((vector unsigned char)__b, 0));10467 return __builtin_shufflevector(__rightelt, __leftelt, 1, 3);10468#else10469 __rightelt = (vector unsigned long long)__builtin_altivec_vsr(10470 (vector signed int)__rightelt,10471 (vector signed int)vec_vspltb((vector unsigned char)__b, 15));10472 return __builtin_shufflevector(__leftelt, __rightelt, 0, 2);10473#endif10474}10475 10476static __inline__ vector long long __ATTRS_o_ai10477vec_sr(vector long long __a, vector unsigned long long __b) {10478 return (vector long long)vec_sr((vector unsigned long long)__a, __b);10479}10480#endif /* __VSX__ */10481 10482/* vec_vsrb */10483 10484#define __builtin_altivec_vsrb vec_vsrb10485 10486static __inline__ vector signed char __ATTRS_o_ai10487vec_vsrb(vector signed char __a, vector unsigned char __b) {10488 return vec_sr(__a, __b);10489}10490 10491static __inline__ vector unsigned char __ATTRS_o_ai10492vec_vsrb(vector unsigned char __a, vector unsigned char __b) {10493 return vec_sr(__a, __b);10494}10495 10496/* vec_vsrh */10497 10498#define __builtin_altivec_vsrh vec_vsrh10499 10500static __inline__ vector short __ATTRS_o_ai10501vec_vsrh(vector short __a, vector unsigned short __b) {10502 return vec_sr(__a, __b);10503}10504 10505static __inline__ vector unsigned short __ATTRS_o_ai10506vec_vsrh(vector unsigned short __a, vector unsigned short __b) {10507 return vec_sr(__a, __b);10508}10509 10510/* vec_vsrw */10511 10512#define __builtin_altivec_vsrw vec_vsrw10513 10514static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,10515 vector unsigned int __b) {10516 return vec_sr(__a, __b);10517}10518 10519static __inline__ vector unsigned int __ATTRS_o_ai10520vec_vsrw(vector unsigned int __a, vector unsigned int __b) {10521 return vec_sr(__a, __b);10522}10523 10524/* vec_sra */10525 10526static __inline__ vector signed char __ATTRS_o_ai10527vec_sra(vector signed char __a, vector unsigned char __b) {10528 return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);10529}10530 10531static __inline__ vector unsigned char __ATTRS_o_ai10532vec_sra(vector unsigned char __a, vector unsigned char __b) {10533 return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);10534}10535 10536static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,10537 vector unsigned short __b) {10538 return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);10539}10540 10541static __inline__ vector unsigned short __ATTRS_o_ai10542vec_sra(vector unsigned short __a, vector unsigned short __b) {10543 return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);10544}10545 10546static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,10547 vector unsigned int __b) {10548 return __builtin_altivec_vsraw(__a, __b);10549}10550 10551static __inline__ vector unsigned int __ATTRS_o_ai10552vec_sra(vector unsigned int __a, vector unsigned int __b) {10553 return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);10554}10555 10556#ifdef __POWER8_VECTOR__10557static __inline__ vector signed long long __ATTRS_o_ai10558vec_sra(vector signed long long __a, vector unsigned long long __b) {10559 return __a >> __b;10560}10561 10562static __inline__ vector unsigned long long __ATTRS_o_ai10563vec_sra(vector unsigned long long __a, vector unsigned long long __b) {10564 return (vector unsigned long long)((vector signed long long)__a >> __b);10565}10566#elif defined(__VSX__)10567static __inline__ vector signed long long __ATTRS_o_ai10568vec_sra(vector signed long long __a, vector unsigned long long __b) {10569 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);10570 return __a >> __b;10571}10572 10573static __inline__ vector unsigned long long __ATTRS_o_ai10574vec_sra(vector unsigned long long __a, vector unsigned long long __b) {10575 __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);10576 return (vector unsigned long long)((vector signed long long)__a >> __b);10577}10578#endif /* __VSX__ */10579 10580/* vec_vsrab */10581 10582static __inline__ vector signed char __ATTRS_o_ai10583vec_vsrab(vector signed char __a, vector unsigned char __b) {10584 return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);10585}10586 10587static __inline__ vector unsigned char __ATTRS_o_ai10588vec_vsrab(vector unsigned char __a, vector unsigned char __b) {10589 return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);10590}10591 10592/* vec_vsrah */10593 10594static __inline__ vector short __ATTRS_o_ai10595vec_vsrah(vector short __a, vector unsigned short __b) {10596 return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);10597}10598 10599static __inline__ vector unsigned short __ATTRS_o_ai10600vec_vsrah(vector unsigned short __a, vector unsigned short __b) {10601 return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);10602}10603 10604/* vec_vsraw */10605 10606static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,10607 vector unsigned int __b) {10608 return __builtin_altivec_vsraw(__a, __b);10609}10610 10611static __inline__ vector unsigned int __ATTRS_o_ai10612vec_vsraw(vector unsigned int __a, vector unsigned int __b) {10613 return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);10614}10615 10616/* vec_srl */10617 10618static __inline__ vector signed char __ATTRS_o_ai10619vec_srl(vector signed char __a, vector unsigned char __b) {10620 return (vector signed char)__builtin_altivec_vsr((vector int)__a,10621 (vector int)__b);10622}10623 10624static __inline__ vector signed char __ATTRS_o_ai10625vec_srl(vector signed char __a, vector unsigned short __b) {10626 return (vector signed char)__builtin_altivec_vsr((vector int)__a,10627 (vector int)__b);10628}10629 10630static __inline__ vector signed char __ATTRS_o_ai10631vec_srl(vector signed char __a, vector unsigned int __b) {10632 return (vector signed char)__builtin_altivec_vsr((vector int)__a,10633 (vector int)__b);10634}10635 10636static __inline__ vector unsigned char __ATTRS_o_ai10637vec_srl(vector unsigned char __a, vector unsigned char __b) {10638 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,10639 (vector int)__b);10640}10641 10642static __inline__ vector unsigned char __ATTRS_o_ai10643vec_srl(vector unsigned char __a, vector unsigned short __b) {10644 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,10645 (vector int)__b);10646}10647 10648static __inline__ vector unsigned char __ATTRS_o_ai10649vec_srl(vector unsigned char __a, vector unsigned int __b) {10650 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,10651 (vector int)__b);10652}10653 10654static __inline__ vector bool char __ATTRS_o_ai10655vec_srl(vector bool char __a, vector unsigned char __b) {10656 return (vector bool char)__builtin_altivec_vsr((vector int)__a,10657 (vector int)__b);10658}10659 10660static __inline__ vector bool char __ATTRS_o_ai10661vec_srl(vector bool char __a, vector unsigned short __b) {10662 return (vector bool char)__builtin_altivec_vsr((vector int)__a,10663 (vector int)__b);10664}10665 10666static __inline__ vector bool char __ATTRS_o_ai10667vec_srl(vector bool char __a, vector unsigned int __b) {10668 return (vector bool char)__builtin_altivec_vsr((vector int)__a,10669 (vector int)__b);10670}10671 10672static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,10673 vector unsigned char __b) {10674 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10675}10676 10677static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,10678 vector unsigned short __b) {10679 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10680}10681 10682static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,10683 vector unsigned int __b) {10684 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10685}10686 10687static __inline__ vector unsigned short __ATTRS_o_ai10688vec_srl(vector unsigned short __a, vector unsigned char __b) {10689 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,10690 (vector int)__b);10691}10692 10693static __inline__ vector unsigned short __ATTRS_o_ai10694vec_srl(vector unsigned short __a, vector unsigned short __b) {10695 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,10696 (vector int)__b);10697}10698 10699static __inline__ vector unsigned short __ATTRS_o_ai10700vec_srl(vector unsigned short __a, vector unsigned int __b) {10701 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,10702 (vector int)__b);10703}10704 10705static __inline__ vector bool short __ATTRS_o_ai10706vec_srl(vector bool short __a, vector unsigned char __b) {10707 return (vector bool short)__builtin_altivec_vsr((vector int)__a,10708 (vector int)__b);10709}10710 10711static __inline__ vector bool short __ATTRS_o_ai10712vec_srl(vector bool short __a, vector unsigned short __b) {10713 return (vector bool short)__builtin_altivec_vsr((vector int)__a,10714 (vector int)__b);10715}10716 10717static __inline__ vector bool short __ATTRS_o_ai10718vec_srl(vector bool short __a, vector unsigned int __b) {10719 return (vector bool short)__builtin_altivec_vsr((vector int)__a,10720 (vector int)__b);10721}10722 10723static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,10724 vector unsigned char __b) {10725 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10726}10727 10728static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,10729 vector unsigned short __b) {10730 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10731}10732 10733static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,10734 vector unsigned int __b) {10735 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10736}10737 10738static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,10739 vector unsigned char __b) {10740 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);10741}10742 10743static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,10744 vector unsigned short __b) {10745 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);10746}10747 10748static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,10749 vector unsigned int __b) {10750 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);10751}10752 10753static __inline__ vector unsigned int __ATTRS_o_ai10754vec_srl(vector unsigned int __a, vector unsigned char __b) {10755 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,10756 (vector int)__b);10757}10758 10759static __inline__ vector unsigned int __ATTRS_o_ai10760vec_srl(vector unsigned int __a, vector unsigned short __b) {10761 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,10762 (vector int)__b);10763}10764 10765static __inline__ vector unsigned int __ATTRS_o_ai10766vec_srl(vector unsigned int __a, vector unsigned int __b) {10767 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,10768 (vector int)__b);10769}10770 10771static __inline__ vector bool int __ATTRS_o_ai10772vec_srl(vector bool int __a, vector unsigned char __b) {10773 return (vector bool int)__builtin_altivec_vsr((vector int)__a,10774 (vector int)__b);10775}10776 10777static __inline__ vector bool int __ATTRS_o_ai10778vec_srl(vector bool int __a, vector unsigned short __b) {10779 return (vector bool int)__builtin_altivec_vsr((vector int)__a,10780 (vector int)__b);10781}10782 10783static __inline__ vector bool int __ATTRS_o_ai10784vec_srl(vector bool int __a, vector unsigned int __b) {10785 return (vector bool int)__builtin_altivec_vsr((vector int)__a,10786 (vector int)__b);10787}10788 10789#ifdef __VSX__10790static __inline__ vector signed long long __ATTRS_o_ai10791vec_srl(vector signed long long __a, vector unsigned char __b) {10792 return (vector signed long long)__builtin_altivec_vsr((vector int)__a,10793 (vector int)__b);10794}10795 10796static __inline__ vector unsigned long long __ATTRS_o_ai10797vec_srl(vector unsigned long long __a, vector unsigned char __b) {10798 return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,10799 (vector int)__b);10800}10801#endif10802 10803/* vec_vsr */10804 10805static __inline__ vector signed char __ATTRS_o_ai10806vec_vsr(vector signed char __a, vector unsigned char __b) {10807 return (vector signed char)__builtin_altivec_vsr((vector int)__a,10808 (vector int)__b);10809}10810 10811static __inline__ vector signed char __ATTRS_o_ai10812vec_vsr(vector signed char __a, vector unsigned short __b) {10813 return (vector signed char)__builtin_altivec_vsr((vector int)__a,10814 (vector int)__b);10815}10816 10817static __inline__ vector signed char __ATTRS_o_ai10818vec_vsr(vector signed char __a, vector unsigned int __b) {10819 return (vector signed char)__builtin_altivec_vsr((vector int)__a,10820 (vector int)__b);10821}10822 10823static __inline__ vector unsigned char __ATTRS_o_ai10824vec_vsr(vector unsigned char __a, vector unsigned char __b) {10825 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,10826 (vector int)__b);10827}10828 10829static __inline__ vector unsigned char __ATTRS_o_ai10830vec_vsr(vector unsigned char __a, vector unsigned short __b) {10831 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,10832 (vector int)__b);10833}10834 10835static __inline__ vector unsigned char __ATTRS_o_ai10836vec_vsr(vector unsigned char __a, vector unsigned int __b) {10837 return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,10838 (vector int)__b);10839}10840 10841static __inline__ vector bool char __ATTRS_o_ai10842vec_vsr(vector bool char __a, vector unsigned char __b) {10843 return (vector bool char)__builtin_altivec_vsr((vector int)__a,10844 (vector int)__b);10845}10846 10847static __inline__ vector bool char __ATTRS_o_ai10848vec_vsr(vector bool char __a, vector unsigned short __b) {10849 return (vector bool char)__builtin_altivec_vsr((vector int)__a,10850 (vector int)__b);10851}10852 10853static __inline__ vector bool char __ATTRS_o_ai10854vec_vsr(vector bool char __a, vector unsigned int __b) {10855 return (vector bool char)__builtin_altivec_vsr((vector int)__a,10856 (vector int)__b);10857}10858 10859static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,10860 vector unsigned char __b) {10861 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10862}10863 10864static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,10865 vector unsigned short __b) {10866 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10867}10868 10869static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,10870 vector unsigned int __b) {10871 return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10872}10873 10874static __inline__ vector unsigned short __ATTRS_o_ai10875vec_vsr(vector unsigned short __a, vector unsigned char __b) {10876 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,10877 (vector int)__b);10878}10879 10880static __inline__ vector unsigned short __ATTRS_o_ai10881vec_vsr(vector unsigned short __a, vector unsigned short __b) {10882 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,10883 (vector int)__b);10884}10885 10886static __inline__ vector unsigned short __ATTRS_o_ai10887vec_vsr(vector unsigned short __a, vector unsigned int __b) {10888 return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,10889 (vector int)__b);10890}10891 10892static __inline__ vector bool short __ATTRS_o_ai10893vec_vsr(vector bool short __a, vector unsigned char __b) {10894 return (vector bool short)__builtin_altivec_vsr((vector int)__a,10895 (vector int)__b);10896}10897 10898static __inline__ vector bool short __ATTRS_o_ai10899vec_vsr(vector bool short __a, vector unsigned short __b) {10900 return (vector bool short)__builtin_altivec_vsr((vector int)__a,10901 (vector int)__b);10902}10903 10904static __inline__ vector bool short __ATTRS_o_ai10905vec_vsr(vector bool short __a, vector unsigned int __b) {10906 return (vector bool short)__builtin_altivec_vsr((vector int)__a,10907 (vector int)__b);10908}10909 10910static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,10911 vector unsigned char __b) {10912 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10913}10914 10915static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,10916 vector unsigned short __b) {10917 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10918}10919 10920static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,10921 vector unsigned int __b) {10922 return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);10923}10924 10925static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,10926 vector unsigned char __b) {10927 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);10928}10929 10930static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,10931 vector unsigned short __b) {10932 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);10933}10934 10935static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,10936 vector unsigned int __b) {10937 return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);10938}10939 10940static __inline__ vector unsigned int __ATTRS_o_ai10941vec_vsr(vector unsigned int __a, vector unsigned char __b) {10942 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,10943 (vector int)__b);10944}10945 10946static __inline__ vector unsigned int __ATTRS_o_ai10947vec_vsr(vector unsigned int __a, vector unsigned short __b) {10948 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,10949 (vector int)__b);10950}10951 10952static __inline__ vector unsigned int __ATTRS_o_ai10953vec_vsr(vector unsigned int __a, vector unsigned int __b) {10954 return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,10955 (vector int)__b);10956}10957 10958static __inline__ vector bool int __ATTRS_o_ai10959vec_vsr(vector bool int __a, vector unsigned char __b) {10960 return (vector bool int)__builtin_altivec_vsr((vector int)__a,10961 (vector int)__b);10962}10963 10964static __inline__ vector bool int __ATTRS_o_ai10965vec_vsr(vector bool int __a, vector unsigned short __b) {10966 return (vector bool int)__builtin_altivec_vsr((vector int)__a,10967 (vector int)__b);10968}10969 10970static __inline__ vector bool int __ATTRS_o_ai10971vec_vsr(vector bool int __a, vector unsigned int __b) {10972 return (vector bool int)__builtin_altivec_vsr((vector int)__a,10973 (vector int)__b);10974}10975 10976/* vec_sro */10977 10978static __inline__ vector signed char __ATTRS_o_ai10979vec_sro(vector signed char __a, vector signed char __b) {10980 return (vector signed char)__builtin_altivec_vsro((vector int)__a,10981 (vector int)__b);10982}10983 10984static __inline__ vector signed char __ATTRS_o_ai10985vec_sro(vector signed char __a, vector unsigned char __b) {10986 return (vector signed char)__builtin_altivec_vsro((vector int)__a,10987 (vector int)__b);10988}10989 10990static __inline__ vector unsigned char __ATTRS_o_ai10991vec_sro(vector unsigned char __a, vector signed char __b) {10992 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,10993 (vector int)__b);10994}10995 10996static __inline__ vector unsigned char __ATTRS_o_ai10997vec_sro(vector unsigned char __a, vector unsigned char __b) {10998 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,10999 (vector int)__b);11000}11001 11002static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,11003 vector signed char __b) {11004 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11005}11006 11007static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,11008 vector unsigned char __b) {11009 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11010}11011 11012static __inline__ vector unsigned short __ATTRS_o_ai11013vec_sro(vector unsigned short __a, vector signed char __b) {11014 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,11015 (vector int)__b);11016}11017 11018static __inline__ vector unsigned short __ATTRS_o_ai11019vec_sro(vector unsigned short __a, vector unsigned char __b) {11020 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,11021 (vector int)__b);11022}11023 11024static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,11025 vector signed char __b) {11026 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11027}11028 11029static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,11030 vector unsigned char __b) {11031 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11032}11033 11034static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,11035 vector signed char __b) {11036 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);11037}11038 11039static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,11040 vector unsigned char __b) {11041 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);11042}11043 11044static __inline__ vector unsigned int __ATTRS_o_ai11045vec_sro(vector unsigned int __a, vector signed char __b) {11046 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,11047 (vector int)__b);11048}11049 11050static __inline__ vector unsigned int __ATTRS_o_ai11051vec_sro(vector unsigned int __a, vector unsigned char __b) {11052 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,11053 (vector int)__b);11054}11055 11056static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,11057 vector signed char __b) {11058 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11059}11060 11061static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,11062 vector unsigned char __b) {11063 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11064}11065 11066#ifdef __VSX__11067static __inline__ vector signed long long __ATTRS_o_ai11068vec_sro(vector signed long long __a, vector signed char __b) {11069 return (vector signed long long)__builtin_altivec_vsro((vector int)__a,11070 (vector int)__b);11071}11072 11073static __inline__ vector signed long long __ATTRS_o_ai11074vec_sro(vector signed long long __a, vector unsigned char __b) {11075 return (vector signed long long)__builtin_altivec_vsro((vector int)__a,11076 (vector int)__b);11077}11078 11079static __inline__ vector unsigned long long __ATTRS_o_ai11080vec_sro(vector unsigned long long __a, vector signed char __b) {11081 return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,11082 (vector int)__b);11083}11084 11085static __inline__ vector unsigned long long __ATTRS_o_ai11086vec_sro(vector unsigned long long __a, vector unsigned char __b) {11087 return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,11088 (vector int)__b);11089}11090#endif11091 11092/* vec_vsro */11093 11094static __inline__ vector signed char __ATTRS_o_ai11095vec_vsro(vector signed char __a, vector signed char __b) {11096 return (vector signed char)__builtin_altivec_vsro((vector int)__a,11097 (vector int)__b);11098}11099 11100static __inline__ vector signed char __ATTRS_o_ai11101vec_vsro(vector signed char __a, vector unsigned char __b) {11102 return (vector signed char)__builtin_altivec_vsro((vector int)__a,11103 (vector int)__b);11104}11105 11106static __inline__ vector unsigned char __ATTRS_o_ai11107vec_vsro(vector unsigned char __a, vector signed char __b) {11108 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,11109 (vector int)__b);11110}11111 11112static __inline__ vector unsigned char __ATTRS_o_ai11113vec_vsro(vector unsigned char __a, vector unsigned char __b) {11114 return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,11115 (vector int)__b);11116}11117 11118static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,11119 vector signed char __b) {11120 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11121}11122 11123static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,11124 vector unsigned char __b) {11125 return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11126}11127 11128static __inline__ vector unsigned short __ATTRS_o_ai11129vec_vsro(vector unsigned short __a, vector signed char __b) {11130 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,11131 (vector int)__b);11132}11133 11134static __inline__ vector unsigned short __ATTRS_o_ai11135vec_vsro(vector unsigned short __a, vector unsigned char __b) {11136 return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,11137 (vector int)__b);11138}11139 11140static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,11141 vector signed char __b) {11142 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11143}11144 11145static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,11146 vector unsigned char __b) {11147 return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11148}11149 11150static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,11151 vector signed char __b) {11152 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);11153}11154 11155static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,11156 vector unsigned char __b) {11157 return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);11158}11159 11160static __inline__ vector unsigned int __ATTRS_o_ai11161vec_vsro(vector unsigned int __a, vector signed char __b) {11162 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,11163 (vector int)__b);11164}11165 11166static __inline__ vector unsigned int __ATTRS_o_ai11167vec_vsro(vector unsigned int __a, vector unsigned char __b) {11168 return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,11169 (vector int)__b);11170}11171 11172static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,11173 vector signed char __b) {11174 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11175}11176 11177static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,11178 vector unsigned char __b) {11179 return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);11180}11181 11182/* vec_st */11183 11184static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,11185 vector signed char *__c) {11186 __builtin_altivec_stvx((vector int)__a, __b, __c);11187}11188 11189static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,11190 signed char *__c) {11191 __builtin_altivec_stvx((vector int)__a, __b, __c);11192}11193 11194static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,11195 vector unsigned char *__c) {11196 __builtin_altivec_stvx((vector int)__a, __b, __c);11197}11198 11199static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,11200 unsigned char *__c) {11201 __builtin_altivec_stvx((vector int)__a, __b, __c);11202}11203 11204static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,11205 signed char *__c) {11206 __builtin_altivec_stvx((vector int)__a, __b, __c);11207}11208 11209static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,11210 unsigned char *__c) {11211 __builtin_altivec_stvx((vector int)__a, __b, __c);11212}11213 11214static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,11215 vector bool char *__c) {11216 __builtin_altivec_stvx((vector int)__a, __b, __c);11217}11218 11219static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,11220 vector short *__c) {11221 __builtin_altivec_stvx((vector int)__a, __b, __c);11222}11223 11224static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,11225 short *__c) {11226 __builtin_altivec_stvx((vector int)__a, __b, __c);11227}11228 11229static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,11230 vector unsigned short *__c) {11231 __builtin_altivec_stvx((vector int)__a, __b, __c);11232}11233 11234static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,11235 unsigned short *__c) {11236 __builtin_altivec_stvx((vector int)__a, __b, __c);11237}11238 11239static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,11240 short *__c) {11241 __builtin_altivec_stvx((vector int)__a, __b, __c);11242}11243 11244static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,11245 unsigned short *__c) {11246 __builtin_altivec_stvx((vector int)__a, __b, __c);11247}11248 11249static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,11250 vector bool short *__c) {11251 __builtin_altivec_stvx((vector int)__a, __b, __c);11252}11253 11254static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,11255 short *__c) {11256 __builtin_altivec_stvx((vector int)__a, __b, __c);11257}11258 11259static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,11260 unsigned short *__c) {11261 __builtin_altivec_stvx((vector int)__a, __b, __c);11262}11263 11264static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,11265 vector pixel *__c) {11266 __builtin_altivec_stvx((vector int)__a, __b, __c);11267}11268 11269static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b,11270 vector int *__c) {11271 __builtin_altivec_stvx(__a, __b, __c);11272}11273 11274static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b, int *__c) {11275 __builtin_altivec_stvx(__a, __b, __c);11276}11277 11278static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,11279 vector unsigned int *__c) {11280 __builtin_altivec_stvx((vector int)__a, __b, __c);11281}11282 11283static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,11284 unsigned int *__c) {11285 __builtin_altivec_stvx((vector int)__a, __b, __c);11286}11287 11288static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,11289 int *__c) {11290 __builtin_altivec_stvx((vector int)__a, __b, __c);11291}11292 11293static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,11294 unsigned int *__c) {11295 __builtin_altivec_stvx((vector int)__a, __b, __c);11296}11297 11298static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,11299 vector bool int *__c) {11300 __builtin_altivec_stvx((vector int)__a, __b, __c);11301}11302 11303static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,11304 vector float *__c) {11305 __builtin_altivec_stvx((vector int)__a, __b, __c);11306}11307 11308static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,11309 float *__c) {11310 __builtin_altivec_stvx((vector int)__a, __b, __c);11311}11312 11313/* vec_stvx */11314 11315static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,11316 vector signed char *__c) {11317 __builtin_altivec_stvx((vector int)__a, __b, __c);11318}11319 11320static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,11321 signed char *__c) {11322 __builtin_altivec_stvx((vector int)__a, __b, __c);11323}11324 11325static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,11326 vector unsigned char *__c) {11327 __builtin_altivec_stvx((vector int)__a, __b, __c);11328}11329 11330static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,11331 unsigned char *__c) {11332 __builtin_altivec_stvx((vector int)__a, __b, __c);11333}11334 11335static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,11336 signed char *__c) {11337 __builtin_altivec_stvx((vector int)__a, __b, __c);11338}11339 11340static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,11341 unsigned char *__c) {11342 __builtin_altivec_stvx((vector int)__a, __b, __c);11343}11344 11345static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,11346 vector bool char *__c) {11347 __builtin_altivec_stvx((vector int)__a, __b, __c);11348}11349 11350static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,11351 vector short *__c) {11352 __builtin_altivec_stvx((vector int)__a, __b, __c);11353}11354 11355static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,11356 short *__c) {11357 __builtin_altivec_stvx((vector int)__a, __b, __c);11358}11359 11360static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,11361 vector unsigned short *__c) {11362 __builtin_altivec_stvx((vector int)__a, __b, __c);11363}11364 11365static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,11366 unsigned short *__c) {11367 __builtin_altivec_stvx((vector int)__a, __b, __c);11368}11369 11370static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,11371 short *__c) {11372 __builtin_altivec_stvx((vector int)__a, __b, __c);11373}11374 11375static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,11376 unsigned short *__c) {11377 __builtin_altivec_stvx((vector int)__a, __b, __c);11378}11379 11380static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,11381 vector bool short *__c) {11382 __builtin_altivec_stvx((vector int)__a, __b, __c);11383}11384 11385static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,11386 short *__c) {11387 __builtin_altivec_stvx((vector int)__a, __b, __c);11388}11389 11390static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,11391 unsigned short *__c) {11392 __builtin_altivec_stvx((vector int)__a, __b, __c);11393}11394 11395static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,11396 vector pixel *__c) {11397 __builtin_altivec_stvx((vector int)__a, __b, __c);11398}11399 11400static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,11401 vector int *__c) {11402 __builtin_altivec_stvx(__a, __b, __c);11403}11404 11405static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,11406 int *__c) {11407 __builtin_altivec_stvx(__a, __b, __c);11408}11409 11410static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,11411 vector unsigned int *__c) {11412 __builtin_altivec_stvx((vector int)__a, __b, __c);11413}11414 11415static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,11416 unsigned int *__c) {11417 __builtin_altivec_stvx((vector int)__a, __b, __c);11418}11419 11420static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,11421 int *__c) {11422 __builtin_altivec_stvx((vector int)__a, __b, __c);11423}11424 11425static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,11426 unsigned int *__c) {11427 __builtin_altivec_stvx((vector int)__a, __b, __c);11428}11429 11430static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,11431 vector bool int *__c) {11432 __builtin_altivec_stvx((vector int)__a, __b, __c);11433}11434 11435static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,11436 vector float *__c) {11437 __builtin_altivec_stvx((vector int)__a, __b, __c);11438}11439 11440static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,11441 float *__c) {11442 __builtin_altivec_stvx((vector int)__a, __b, __c);11443}11444 11445/* vec_ste */11446 11447static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b,11448 signed char *__c) {11449 __builtin_altivec_stvebx((vector char)__a, __b, __c);11450}11451 11452static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, long __b,11453 unsigned char *__c) {11454 __builtin_altivec_stvebx((vector char)__a, __b, __c);11455}11456 11457static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,11458 signed char *__c) {11459 __builtin_altivec_stvebx((vector char)__a, __b, __c);11460}11461 11462static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,11463 unsigned char *__c) {11464 __builtin_altivec_stvebx((vector char)__a, __b, __c);11465}11466 11467static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, long __b,11468 short *__c) {11469 __builtin_altivec_stvehx(__a, __b, __c);11470}11471 11472static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, long __b,11473 unsigned short *__c) {11474 __builtin_altivec_stvehx((vector short)__a, __b, __c);11475}11476 11477static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,11478 short *__c) {11479 __builtin_altivec_stvehx((vector short)__a, __b, __c);11480}11481 11482static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,11483 unsigned short *__c) {11484 __builtin_altivec_stvehx((vector short)__a, __b, __c);11485}11486 11487static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,11488 short *__c) {11489 __builtin_altivec_stvehx((vector short)__a, __b, __c);11490}11491 11492static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,11493 unsigned short *__c) {11494 __builtin_altivec_stvehx((vector short)__a, __b, __c);11495}11496 11497static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, long __b, int *__c) {11498 __builtin_altivec_stvewx(__a, __b, __c);11499}11500 11501static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, long __b,11502 unsigned int *__c) {11503 __builtin_altivec_stvewx((vector int)__a, __b, __c);11504}11505 11506static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,11507 int *__c) {11508 __builtin_altivec_stvewx((vector int)__a, __b, __c);11509}11510 11511static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,11512 unsigned int *__c) {11513 __builtin_altivec_stvewx((vector int)__a, __b, __c);11514}11515 11516static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, long __b,11517 float *__c) {11518 __builtin_altivec_stvewx((vector int)__a, __b, __c);11519}11520 11521/* vec_stvebx */11522 11523static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b,11524 signed char *__c) {11525 __builtin_altivec_stvebx((vector char)__a, __b, __c);11526}11527 11528static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,11529 long __b, unsigned char *__c) {11530 __builtin_altivec_stvebx((vector char)__a, __b, __c);11531}11532 11533static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,11534 signed char *__c) {11535 __builtin_altivec_stvebx((vector char)__a, __b, __c);11536}11537 11538static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,11539 unsigned char *__c) {11540 __builtin_altivec_stvebx((vector char)__a, __b, __c);11541}11542 11543/* vec_stvehx */11544 11545static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b,11546 short *__c) {11547 __builtin_altivec_stvehx(__a, __b, __c);11548}11549 11550static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,11551 long __b, unsigned short *__c) {11552 __builtin_altivec_stvehx((vector short)__a, __b, __c);11553}11554 11555static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,11556 short *__c) {11557 __builtin_altivec_stvehx((vector short)__a, __b, __c);11558}11559 11560static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,11561 unsigned short *__c) {11562 __builtin_altivec_stvehx((vector short)__a, __b, __c);11563}11564 11565static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,11566 short *__c) {11567 __builtin_altivec_stvehx((vector short)__a, __b, __c);11568}11569 11570static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,11571 unsigned short *__c) {11572 __builtin_altivec_stvehx((vector short)__a, __b, __c);11573}11574 11575/* vec_stvewx */11576 11577static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b,11578 int *__c) {11579 __builtin_altivec_stvewx(__a, __b, __c);11580}11581 11582static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, long __b,11583 unsigned int *__c) {11584 __builtin_altivec_stvewx((vector int)__a, __b, __c);11585}11586 11587static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,11588 int *__c) {11589 __builtin_altivec_stvewx((vector int)__a, __b, __c);11590}11591 11592static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,11593 unsigned int *__c) {11594 __builtin_altivec_stvewx((vector int)__a, __b, __c);11595}11596 11597static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, long __b,11598 float *__c) {11599 __builtin_altivec_stvewx((vector int)__a, __b, __c);11600}11601 11602/* vec_stl */11603 11604static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,11605 vector signed char *__c) {11606 __builtin_altivec_stvxl((vector int)__a, __b, __c);11607}11608 11609static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,11610 signed char *__c) {11611 __builtin_altivec_stvxl((vector int)__a, __b, __c);11612}11613 11614static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,11615 vector unsigned char *__c) {11616 __builtin_altivec_stvxl((vector int)__a, __b, __c);11617}11618 11619static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,11620 unsigned char *__c) {11621 __builtin_altivec_stvxl((vector int)__a, __b, __c);11622}11623 11624static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,11625 signed char *__c) {11626 __builtin_altivec_stvxl((vector int)__a, __b, __c);11627}11628 11629static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,11630 unsigned char *__c) {11631 __builtin_altivec_stvxl((vector int)__a, __b, __c);11632}11633 11634static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,11635 vector bool char *__c) {11636 __builtin_altivec_stvxl((vector int)__a, __b, __c);11637}11638 11639static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,11640 vector short *__c) {11641 __builtin_altivec_stvxl((vector int)__a, __b, __c);11642}11643 11644static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,11645 short *__c) {11646 __builtin_altivec_stvxl((vector int)__a, __b, __c);11647}11648 11649static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,11650 vector unsigned short *__c) {11651 __builtin_altivec_stvxl((vector int)__a, __b, __c);11652}11653 11654static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,11655 unsigned short *__c) {11656 __builtin_altivec_stvxl((vector int)__a, __b, __c);11657}11658 11659static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,11660 short *__c) {11661 __builtin_altivec_stvxl((vector int)__a, __b, __c);11662}11663 11664static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,11665 unsigned short *__c) {11666 __builtin_altivec_stvxl((vector int)__a, __b, __c);11667}11668 11669static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,11670 vector bool short *__c) {11671 __builtin_altivec_stvxl((vector int)__a, __b, __c);11672}11673 11674static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,11675 short *__c) {11676 __builtin_altivec_stvxl((vector int)__a, __b, __c);11677}11678 11679static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,11680 unsigned short *__c) {11681 __builtin_altivec_stvxl((vector int)__a, __b, __c);11682}11683 11684static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,11685 vector pixel *__c) {11686 __builtin_altivec_stvxl((vector int)__a, __b, __c);11687}11688 11689static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,11690 vector int *__c) {11691 __builtin_altivec_stvxl(__a, __b, __c);11692}11693 11694static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {11695 __builtin_altivec_stvxl(__a, __b, __c);11696}11697 11698static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,11699 vector unsigned int *__c) {11700 __builtin_altivec_stvxl((vector int)__a, __b, __c);11701}11702 11703static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,11704 unsigned int *__c) {11705 __builtin_altivec_stvxl((vector int)__a, __b, __c);11706}11707 11708static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,11709 int *__c) {11710 __builtin_altivec_stvxl((vector int)__a, __b, __c);11711}11712 11713static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,11714 unsigned int *__c) {11715 __builtin_altivec_stvxl((vector int)__a, __b, __c);11716}11717 11718static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,11719 vector bool int *__c) {11720 __builtin_altivec_stvxl((vector int)__a, __b, __c);11721}11722 11723static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,11724 vector float *__c) {11725 __builtin_altivec_stvxl((vector int)__a, __b, __c);11726}11727 11728static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,11729 float *__c) {11730 __builtin_altivec_stvxl((vector int)__a, __b, __c);11731}11732 11733/* vec_stvxl */11734 11735static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,11736 vector signed char *__c) {11737 __builtin_altivec_stvxl((vector int)__a, __b, __c);11738}11739 11740static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,11741 signed char *__c) {11742 __builtin_altivec_stvxl((vector int)__a, __b, __c);11743}11744 11745static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,11746 vector unsigned char *__c) {11747 __builtin_altivec_stvxl((vector int)__a, __b, __c);11748}11749 11750static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,11751 unsigned char *__c) {11752 __builtin_altivec_stvxl((vector int)__a, __b, __c);11753}11754 11755static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,11756 signed char *__c) {11757 __builtin_altivec_stvxl((vector int)__a, __b, __c);11758}11759 11760static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,11761 unsigned char *__c) {11762 __builtin_altivec_stvxl((vector int)__a, __b, __c);11763}11764 11765static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,11766 vector bool char *__c) {11767 __builtin_altivec_stvxl((vector int)__a, __b, __c);11768}11769 11770static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,11771 vector short *__c) {11772 __builtin_altivec_stvxl((vector int)__a, __b, __c);11773}11774 11775static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,11776 short *__c) {11777 __builtin_altivec_stvxl((vector int)__a, __b, __c);11778}11779 11780static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,11781 int __b,11782 vector unsigned short *__c) {11783 __builtin_altivec_stvxl((vector int)__a, __b, __c);11784}11785 11786static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,11787 int __b, unsigned short *__c) {11788 __builtin_altivec_stvxl((vector int)__a, __b, __c);11789}11790 11791static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,11792 short *__c) {11793 __builtin_altivec_stvxl((vector int)__a, __b, __c);11794}11795 11796static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,11797 unsigned short *__c) {11798 __builtin_altivec_stvxl((vector int)__a, __b, __c);11799}11800 11801static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,11802 vector bool short *__c) {11803 __builtin_altivec_stvxl((vector int)__a, __b, __c);11804}11805 11806static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,11807 short *__c) {11808 __builtin_altivec_stvxl((vector int)__a, __b, __c);11809}11810 11811static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,11812 unsigned short *__c) {11813 __builtin_altivec_stvxl((vector int)__a, __b, __c);11814}11815 11816static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,11817 vector pixel *__c) {11818 __builtin_altivec_stvxl((vector int)__a, __b, __c);11819}11820 11821static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,11822 vector int *__c) {11823 __builtin_altivec_stvxl(__a, __b, __c);11824}11825 11826static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,11827 int *__c) {11828 __builtin_altivec_stvxl(__a, __b, __c);11829}11830 11831static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,11832 vector unsigned int *__c) {11833 __builtin_altivec_stvxl((vector int)__a, __b, __c);11834}11835 11836static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,11837 unsigned int *__c) {11838 __builtin_altivec_stvxl((vector int)__a, __b, __c);11839}11840 11841static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,11842 int *__c) {11843 __builtin_altivec_stvxl((vector int)__a, __b, __c);11844}11845 11846static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,11847 unsigned int *__c) {11848 __builtin_altivec_stvxl((vector int)__a, __b, __c);11849}11850 11851static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,11852 vector bool int *__c) {11853 __builtin_altivec_stvxl((vector int)__a, __b, __c);11854}11855 11856static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,11857 vector float *__c) {11858 __builtin_altivec_stvxl((vector int)__a, __b, __c);11859}11860 11861static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,11862 float *__c) {11863 __builtin_altivec_stvxl((vector int)__a, __b, __c);11864}11865 11866/* vec_sub */11867 11868static __inline__ vector signed char __ATTRS_o_ai11869vec_sub(vector signed char __a, vector signed char __b) {11870 return __a - __b;11871}11872 11873static __inline__ vector signed char __ATTRS_o_ai11874vec_sub(vector bool char __a, vector signed char __b) {11875 return (vector signed char)__a - __b;11876}11877 11878static __inline__ vector signed char __ATTRS_o_ai11879vec_sub(vector signed char __a, vector bool char __b) {11880 return __a - (vector signed char)__b;11881}11882 11883static __inline__ vector unsigned char __ATTRS_o_ai11884vec_sub(vector unsigned char __a, vector unsigned char __b) {11885 return __a - __b;11886}11887 11888static __inline__ vector unsigned char __ATTRS_o_ai11889vec_sub(vector bool char __a, vector unsigned char __b) {11890 return (vector unsigned char)__a - __b;11891}11892 11893static __inline__ vector unsigned char __ATTRS_o_ai11894vec_sub(vector unsigned char __a, vector bool char __b) {11895 return __a - (vector unsigned char)__b;11896}11897 11898static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,11899 vector short __b) {11900 return __a - __b;11901}11902 11903static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,11904 vector short __b) {11905 return (vector short)__a - __b;11906}11907 11908static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,11909 vector bool short __b) {11910 return __a - (vector short)__b;11911}11912 11913static __inline__ vector unsigned short __ATTRS_o_ai11914vec_sub(vector unsigned short __a, vector unsigned short __b) {11915 return __a - __b;11916}11917 11918static __inline__ vector unsigned short __ATTRS_o_ai11919vec_sub(vector bool short __a, vector unsigned short __b) {11920 return (vector unsigned short)__a - __b;11921}11922 11923static __inline__ vector unsigned short __ATTRS_o_ai11924vec_sub(vector unsigned short __a, vector bool short __b) {11925 return __a - (vector unsigned short)__b;11926}11927 11928static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,11929 vector int __b) {11930 return __a - __b;11931}11932 11933static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,11934 vector int __b) {11935 return (vector int)__a - __b;11936}11937 11938static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,11939 vector bool int __b) {11940 return __a - (vector int)__b;11941}11942 11943static __inline__ vector unsigned int __ATTRS_o_ai11944vec_sub(vector unsigned int __a, vector unsigned int __b) {11945 return __a - __b;11946}11947 11948static __inline__ vector unsigned int __ATTRS_o_ai11949vec_sub(vector bool int __a, vector unsigned int __b) {11950 return (vector unsigned int)__a - __b;11951}11952 11953static __inline__ vector unsigned int __ATTRS_o_ai11954vec_sub(vector unsigned int __a, vector bool int __b) {11955 return __a - (vector unsigned int)__b;11956}11957 11958#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \11959 defined(__SIZEOF_INT128__)11960static __inline__ vector signed __int128 __ATTRS_o_ai11961vec_sub(vector signed __int128 __a, vector signed __int128 __b) {11962 return __a - __b;11963}11964 11965static __inline__ vector unsigned __int128 __ATTRS_o_ai11966vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {11967 return __a - __b;11968}11969#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&11970 // defined(__SIZEOF_INT128__)11971 11972#ifdef __VSX__11973static __inline__ vector signed long long __ATTRS_o_ai11974vec_sub(vector signed long long __a, vector signed long long __b) {11975 return __a - __b;11976}11977 11978static __inline__ vector unsigned long long __ATTRS_o_ai11979vec_sub(vector unsigned long long __a, vector unsigned long long __b) {11980 return __a - __b;11981}11982 11983static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,11984 vector double __b) {11985 return __a - __b;11986}11987#endif11988 11989static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,11990 vector float __b) {11991 return __a - __b;11992}11993 11994/* vec_vsububm */11995 11996#define __builtin_altivec_vsububm vec_vsububm11997 11998static __inline__ vector signed char __ATTRS_o_ai11999vec_vsububm(vector signed char __a, vector signed char __b) {12000 return __a - __b;12001}12002 12003static __inline__ vector signed char __ATTRS_o_ai12004vec_vsububm(vector bool char __a, vector signed char __b) {12005 return (vector signed char)__a - __b;12006}12007 12008static __inline__ vector signed char __ATTRS_o_ai12009vec_vsububm(vector signed char __a, vector bool char __b) {12010 return __a - (vector signed char)__b;12011}12012 12013static __inline__ vector unsigned char __ATTRS_o_ai12014vec_vsububm(vector unsigned char __a, vector unsigned char __b) {12015 return __a - __b;12016}12017 12018static __inline__ vector unsigned char __ATTRS_o_ai12019vec_vsububm(vector bool char __a, vector unsigned char __b) {12020 return (vector unsigned char)__a - __b;12021}12022 12023static __inline__ vector unsigned char __ATTRS_o_ai12024vec_vsububm(vector unsigned char __a, vector bool char __b) {12025 return __a - (vector unsigned char)__b;12026}12027 12028/* vec_vsubuhm */12029 12030#define __builtin_altivec_vsubuhm vec_vsubuhm12031 12032static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,12033 vector short __b) {12034 return __a - __b;12035}12036 12037static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,12038 vector short __b) {12039 return (vector short)__a - __b;12040}12041 12042static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,12043 vector bool short __b) {12044 return __a - (vector short)__b;12045}12046 12047static __inline__ vector unsigned short __ATTRS_o_ai12048vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {12049 return __a - __b;12050}12051 12052static __inline__ vector unsigned short __ATTRS_o_ai12053vec_vsubuhm(vector bool short __a, vector unsigned short __b) {12054 return (vector unsigned short)__a - __b;12055}12056 12057static __inline__ vector unsigned short __ATTRS_o_ai12058vec_vsubuhm(vector unsigned short __a, vector bool short __b) {12059 return __a - (vector unsigned short)__b;12060}12061 12062/* vec_vsubuwm */12063 12064#define __builtin_altivec_vsubuwm vec_vsubuwm12065 12066static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,12067 vector int __b) {12068 return __a - __b;12069}12070 12071static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,12072 vector int __b) {12073 return (vector int)__a - __b;12074}12075 12076static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,12077 vector bool int __b) {12078 return __a - (vector int)__b;12079}12080 12081static __inline__ vector unsigned int __ATTRS_o_ai12082vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {12083 return __a - __b;12084}12085 12086static __inline__ vector unsigned int __ATTRS_o_ai12087vec_vsubuwm(vector bool int __a, vector unsigned int __b) {12088 return (vector unsigned int)__a - __b;12089}12090 12091static __inline__ vector unsigned int __ATTRS_o_ai12092vec_vsubuwm(vector unsigned int __a, vector bool int __b) {12093 return __a - (vector unsigned int)__b;12094}12095 12096/* vec_vsubfp */12097 12098#define __builtin_altivec_vsubfp vec_vsubfp12099 12100static __inline__ vector float __attribute__((__always_inline__))12101vec_vsubfp(vector float __a, vector float __b) {12102 return __a - __b;12103}12104 12105/* vec_subc */12106 12107static __inline__ vector signed int __ATTRS_o_ai12108vec_subc(vector signed int __a, vector signed int __b) {12109 return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,12110 (vector unsigned int) __b);12111}12112 12113static __inline__ vector unsigned int __ATTRS_o_ai12114vec_subc(vector unsigned int __a, vector unsigned int __b) {12115 return __builtin_altivec_vsubcuw(__a, __b);12116}12117 12118#ifdef __POWER8_VECTOR__12119#ifdef __SIZEOF_INT128__12120static __inline__ vector unsigned __int128 __ATTRS_o_ai12121vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {12122 return __builtin_altivec_vsubcuq(__a, __b);12123}12124 12125static __inline__ vector signed __int128 __ATTRS_o_ai12126vec_subc(vector signed __int128 __a, vector signed __int128 __b) {12127 return (vector signed __int128)__builtin_altivec_vsubcuq(12128 (vector unsigned __int128)__a, (vector unsigned __int128)__b);12129}12130#endif12131 12132static __inline__ vector unsigned char __attribute__((__always_inline__))12133vec_subc_u128(vector unsigned char __a, vector unsigned char __b) {12134 return (vector unsigned char)__builtin_altivec_vsubcuq_c(12135 (vector unsigned char)__a, (vector unsigned char)__b);12136}12137#endif // __POWER8_VECTOR__12138 12139/* vec_vsubcuw */12140 12141static __inline__ vector unsigned int __attribute__((__always_inline__))12142vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {12143 return __builtin_altivec_vsubcuw(__a, __b);12144}12145 12146/* vec_subs */12147 12148static __inline__ vector signed char __ATTRS_o_ai12149vec_subs(vector signed char __a, vector signed char __b) {12150 return __builtin_altivec_vsubsbs(__a, __b);12151}12152 12153static __inline__ vector signed char __ATTRS_o_ai12154vec_subs(vector bool char __a, vector signed char __b) {12155 return __builtin_altivec_vsubsbs((vector signed char)__a, __b);12156}12157 12158static __inline__ vector signed char __ATTRS_o_ai12159vec_subs(vector signed char __a, vector bool char __b) {12160 return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);12161}12162 12163static __inline__ vector unsigned char __ATTRS_o_ai12164vec_subs(vector unsigned char __a, vector unsigned char __b) {12165 return __builtin_altivec_vsububs(__a, __b);12166}12167 12168static __inline__ vector unsigned char __ATTRS_o_ai12169vec_subs(vector bool char __a, vector unsigned char __b) {12170 return __builtin_altivec_vsububs((vector unsigned char)__a, __b);12171}12172 12173static __inline__ vector unsigned char __ATTRS_o_ai12174vec_subs(vector unsigned char __a, vector bool char __b) {12175 return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);12176}12177 12178static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,12179 vector short __b) {12180 return __builtin_altivec_vsubshs(__a, __b);12181}12182 12183static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,12184 vector short __b) {12185 return __builtin_altivec_vsubshs((vector short)__a, __b);12186}12187 12188static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,12189 vector bool short __b) {12190 return __builtin_altivec_vsubshs(__a, (vector short)__b);12191}12192 12193static __inline__ vector unsigned short __ATTRS_o_ai12194vec_subs(vector unsigned short __a, vector unsigned short __b) {12195 return __builtin_altivec_vsubuhs(__a, __b);12196}12197 12198static __inline__ vector unsigned short __ATTRS_o_ai12199vec_subs(vector bool short __a, vector unsigned short __b) {12200 return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);12201}12202 12203static __inline__ vector unsigned short __ATTRS_o_ai12204vec_subs(vector unsigned short __a, vector bool short __b) {12205 return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);12206}12207 12208static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,12209 vector int __b) {12210 return __builtin_altivec_vsubsws(__a, __b);12211}12212 12213static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,12214 vector int __b) {12215 return __builtin_altivec_vsubsws((vector int)__a, __b);12216}12217 12218static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,12219 vector bool int __b) {12220 return __builtin_altivec_vsubsws(__a, (vector int)__b);12221}12222 12223static __inline__ vector unsigned int __ATTRS_o_ai12224vec_subs(vector unsigned int __a, vector unsigned int __b) {12225 return __builtin_altivec_vsubuws(__a, __b);12226}12227 12228static __inline__ vector unsigned int __ATTRS_o_ai12229vec_subs(vector bool int __a, vector unsigned int __b) {12230 return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);12231}12232 12233static __inline__ vector unsigned int __ATTRS_o_ai12234vec_subs(vector unsigned int __a, vector bool int __b) {12235 return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);12236}12237 12238/* vec_vsubsbs */12239 12240static __inline__ vector signed char __ATTRS_o_ai12241vec_vsubsbs(vector signed char __a, vector signed char __b) {12242 return __builtin_altivec_vsubsbs(__a, __b);12243}12244 12245static __inline__ vector signed char __ATTRS_o_ai12246vec_vsubsbs(vector bool char __a, vector signed char __b) {12247 return __builtin_altivec_vsubsbs((vector signed char)__a, __b);12248}12249 12250static __inline__ vector signed char __ATTRS_o_ai12251vec_vsubsbs(vector signed char __a, vector bool char __b) {12252 return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);12253}12254 12255/* vec_vsububs */12256 12257static __inline__ vector unsigned char __ATTRS_o_ai12258vec_vsububs(vector unsigned char __a, vector unsigned char __b) {12259 return __builtin_altivec_vsububs(__a, __b);12260}12261 12262static __inline__ vector unsigned char __ATTRS_o_ai12263vec_vsububs(vector bool char __a, vector unsigned char __b) {12264 return __builtin_altivec_vsububs((vector unsigned char)__a, __b);12265}12266 12267static __inline__ vector unsigned char __ATTRS_o_ai12268vec_vsububs(vector unsigned char __a, vector bool char __b) {12269 return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);12270}12271 12272/* vec_vsubshs */12273 12274static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,12275 vector short __b) {12276 return __builtin_altivec_vsubshs(__a, __b);12277}12278 12279static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,12280 vector short __b) {12281 return __builtin_altivec_vsubshs((vector short)__a, __b);12282}12283 12284static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,12285 vector bool short __b) {12286 return __builtin_altivec_vsubshs(__a, (vector short)__b);12287}12288 12289/* vec_vsubuhs */12290 12291static __inline__ vector unsigned short __ATTRS_o_ai12292vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {12293 return __builtin_altivec_vsubuhs(__a, __b);12294}12295 12296static __inline__ vector unsigned short __ATTRS_o_ai12297vec_vsubuhs(vector bool short __a, vector unsigned short __b) {12298 return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);12299}12300 12301static __inline__ vector unsigned short __ATTRS_o_ai12302vec_vsubuhs(vector unsigned short __a, vector bool short __b) {12303 return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);12304}12305 12306/* vec_vsubsws */12307 12308static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,12309 vector int __b) {12310 return __builtin_altivec_vsubsws(__a, __b);12311}12312 12313static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,12314 vector int __b) {12315 return __builtin_altivec_vsubsws((vector int)__a, __b);12316}12317 12318static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,12319 vector bool int __b) {12320 return __builtin_altivec_vsubsws(__a, (vector int)__b);12321}12322 12323/* vec_vsubuws */12324 12325static __inline__ vector unsigned int __ATTRS_o_ai12326vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {12327 return __builtin_altivec_vsubuws(__a, __b);12328}12329 12330static __inline__ vector unsigned int __ATTRS_o_ai12331vec_vsubuws(vector bool int __a, vector unsigned int __b) {12332 return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);12333}12334 12335static __inline__ vector unsigned int __ATTRS_o_ai12336vec_vsubuws(vector unsigned int __a, vector bool int __b) {12337 return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);12338}12339 12340#ifdef __POWER8_VECTOR__12341/* vec_vsubuqm */12342 12343#ifdef __SIZEOF_INT128__12344static __inline__ vector signed __int128 __ATTRS_o_ai12345vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {12346 return __a - __b;12347}12348 12349static __inline__ vector unsigned __int128 __ATTRS_o_ai12350vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {12351 return __a - __b;12352}12353#endif12354 12355static __inline__ vector unsigned char __attribute__((__always_inline__))12356vec_sub_u128(vector unsigned char __a, vector unsigned char __b) {12357 return (vector unsigned char)__builtin_altivec_vsubuqm(__a, __b);12358}12359 12360/* vec_vsubeuqm */12361 12362#ifdef __SIZEOF_INT128__12363static __inline__ vector signed __int128 __ATTRS_o_ai12364vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,12365 vector signed __int128 __c) {12366 return (vector signed __int128)__builtin_altivec_vsubeuqm(12367 (vector unsigned __int128)__a, (vector unsigned __int128)__b,12368 (vector unsigned __int128)__c);12369}12370 12371static __inline__ vector unsigned __int128 __ATTRS_o_ai12372vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,12373 vector unsigned __int128 __c) {12374 return __builtin_altivec_vsubeuqm(__a, __b, __c);12375}12376 12377static __inline__ vector signed __int128 __ATTRS_o_ai12378vec_sube(vector signed __int128 __a, vector signed __int128 __b,12379 vector signed __int128 __c) {12380 return (vector signed __int128)__builtin_altivec_vsubeuqm(12381 (vector unsigned __int128)__a, (vector unsigned __int128)__b,12382 (vector unsigned __int128)__c);12383}12384 12385static __inline__ vector unsigned __int128 __ATTRS_o_ai12386vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,12387 vector unsigned __int128 __c) {12388 return __builtin_altivec_vsubeuqm(__a, __b, __c);12389}12390#endif12391 12392static __inline__ vector unsigned char __attribute__((__always_inline__))12393vec_sube_u128(vector unsigned char __a, vector unsigned char __b,12394 vector unsigned char __c) {12395 return (vector unsigned char)__builtin_altivec_vsubeuqm_c(12396 (vector unsigned char)__a, (vector unsigned char)__b,12397 (vector unsigned char)__c);12398}12399 12400/* vec_vsubcuq */12401 12402#ifdef __SIZEOF_INT128__12403static __inline__ vector signed __int128 __ATTRS_o_ai12404vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {12405 return (vector signed __int128)__builtin_altivec_vsubcuq(12406 (vector unsigned __int128)__a, (vector unsigned __int128)__b);12407}12408 12409static __inline__ vector unsigned __int128 __ATTRS_o_ai12410vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {12411 return __builtin_altivec_vsubcuq(__a, __b);12412}12413 12414/* vec_vsubecuq */12415 12416static __inline__ vector signed __int128 __ATTRS_o_ai12417vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,12418 vector signed __int128 __c) {12419 return (vector signed __int128)__builtin_altivec_vsubecuq(12420 (vector unsigned __int128)__a, (vector unsigned __int128)__b,12421 (vector unsigned __int128)__c);12422}12423 12424static __inline__ vector unsigned __int128 __ATTRS_o_ai12425vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,12426 vector unsigned __int128 __c) {12427 return __builtin_altivec_vsubecuq(__a, __b, __c);12428}12429#endif12430 12431#ifdef __powerpc64__12432static __inline__ vector signed int __ATTRS_o_ai12433vec_subec(vector signed int __a, vector signed int __b,12434 vector signed int __c) {12435 return vec_addec(__a, ~__b, __c);12436}12437 12438static __inline__ vector unsigned int __ATTRS_o_ai12439vec_subec(vector unsigned int __a, vector unsigned int __b,12440 vector unsigned int __c) {12441 return vec_addec(__a, ~__b, __c);12442}12443#endif12444 12445#ifdef __SIZEOF_INT128__12446static __inline__ vector signed __int128 __ATTRS_o_ai12447vec_subec(vector signed __int128 __a, vector signed __int128 __b,12448 vector signed __int128 __c) {12449 return (vector signed __int128)__builtin_altivec_vsubecuq(12450 (vector unsigned __int128)__a, (vector unsigned __int128)__b,12451 (vector unsigned __int128)__c);12452}12453 12454static __inline__ vector unsigned __int128 __ATTRS_o_ai12455vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,12456 vector unsigned __int128 __c) {12457 return __builtin_altivec_vsubecuq(__a, __b, __c);12458}12459#endif12460 12461static __inline__ vector unsigned char __attribute__((__always_inline__))12462vec_subec_u128(vector unsigned char __a, vector unsigned char __b,12463 vector unsigned char __c) {12464 return (vector unsigned char)__builtin_altivec_vsubecuq_c(12465 (vector unsigned char)__a, (vector unsigned char)__b,12466 (vector unsigned char)__c);12467}12468#endif // __POWER8_VECTOR__12469 12470static __inline__ vector signed int __ATTRS_o_ai12471vec_sube(vector signed int __a, vector signed int __b,12472 vector signed int __c) {12473 vector signed int __mask = {1, 1, 1, 1};12474 vector signed int __carry = __c & __mask;12475 return vec_adde(__a, ~__b, __carry);12476}12477 12478static __inline__ vector unsigned int __ATTRS_o_ai12479vec_sube(vector unsigned int __a, vector unsigned int __b,12480 vector unsigned int __c) {12481 vector unsigned int __mask = {1, 1, 1, 1};12482 vector unsigned int __carry = __c & __mask;12483 return vec_adde(__a, ~__b, __carry);12484}12485/* vec_sum4s */12486 12487static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,12488 vector int __b) {12489 return __builtin_altivec_vsum4sbs(__a, __b);12490}12491 12492static __inline__ vector unsigned int __ATTRS_o_ai12493vec_sum4s(vector unsigned char __a, vector unsigned int __b) {12494 return __builtin_altivec_vsum4ubs(__a, __b);12495}12496 12497static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,12498 vector int __b) {12499 return __builtin_altivec_vsum4shs(__a, __b);12500}12501 12502/* vec_vsum4sbs */12503 12504static __inline__ vector int __attribute__((__always_inline__))12505vec_vsum4sbs(vector signed char __a, vector int __b) {12506 return __builtin_altivec_vsum4sbs(__a, __b);12507}12508 12509/* vec_vsum4ubs */12510 12511static __inline__ vector unsigned int __attribute__((__always_inline__))12512vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {12513 return __builtin_altivec_vsum4ubs(__a, __b);12514}12515 12516/* vec_vsum4shs */12517 12518static __inline__ vector int __attribute__((__always_inline__))12519vec_vsum4shs(vector signed short __a, vector int __b) {12520 return __builtin_altivec_vsum4shs(__a, __b);12521}12522 12523/* vec_sum2s */12524 12525/* The vsum2sws instruction has a big-endian bias, so that the second12526 input vector and the result always reference big-endian elements12527 1 and 3 (little-endian element 0 and 2). For ease of porting the12528 programmer wants elements 1 and 3 in both cases, so for little12529 endian we must perform some permutes. */12530 12531static __inline__ vector signed int __attribute__((__always_inline__))12532vec_sum2s(vector int __a, vector int __b) {12533#ifdef __LITTLE_ENDIAN__12534 vector int __c = (vector signed int)vec_perm(12535 __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,12536 8, 9, 10, 11));12537 __c = __builtin_altivec_vsum2sws(__a, __c);12538 return (vector signed int)vec_perm(12539 __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,12540 8, 9, 10, 11));12541#else12542 return __builtin_altivec_vsum2sws(__a, __b);12543#endif12544}12545 12546/* vec_vsum2sws */12547 12548static __inline__ vector signed int __attribute__((__always_inline__))12549vec_vsum2sws(vector int __a, vector int __b) {12550#ifdef __LITTLE_ENDIAN__12551 vector int __c = (vector signed int)vec_perm(12552 __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,12553 8, 9, 10, 11));12554 __c = __builtin_altivec_vsum2sws(__a, __c);12555 return (vector signed int)vec_perm(12556 __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,12557 8, 9, 10, 11));12558#else12559 return __builtin_altivec_vsum2sws(__a, __b);12560#endif12561}12562 12563/* vec_sums */12564 12565/* The vsumsws instruction has a big-endian bias, so that the second12566 input vector and the result always reference big-endian element 312567 (little-endian element 0). For ease of porting the programmer12568 wants element 3 in both cases, so for little endian we must perform12569 some permutes. */12570 12571static __inline__ vector signed int __attribute__((__always_inline__))12572vec_sums(vector signed int __a, vector signed int __b) {12573#ifdef __LITTLE_ENDIAN__12574 __b = (vector signed int)vec_splat(__b, 3);12575 __b = __builtin_altivec_vsumsws(__a, __b);12576 return (vector signed int)(0, 0, 0, __b[0]);12577#else12578 return __builtin_altivec_vsumsws(__a, __b);12579#endif12580}12581 12582/* vec_vsumsws */12583 12584static __inline__ vector signed int __attribute__((__always_inline__))12585vec_vsumsws(vector signed int __a, vector signed int __b) {12586#ifdef __LITTLE_ENDIAN__12587 __b = (vector signed int)vec_splat(__b, 3);12588 __b = __builtin_altivec_vsumsws(__a, __b);12589 return (vector signed int)(0, 0, 0, __b[0]);12590#else12591 return __builtin_altivec_vsumsws(__a, __b);12592#endif12593}12594 12595/* vec_trunc */12596 12597static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {12598#ifdef __VSX__12599 return __builtin_vsx_xvrspiz(__a);12600#else12601 return __builtin_altivec_vrfiz(__a);12602#endif12603}12604 12605#ifdef __VSX__12606static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {12607 return __builtin_vsx_xvrdpiz(__a);12608}12609#endif12610 12611/* vec_roundz */12612static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a) {12613 return vec_trunc(__a);12614}12615 12616#ifdef __VSX__12617static __inline__ vector double __ATTRS_o_ai vec_roundz(vector double __a) {12618 return vec_trunc(__a);12619}12620#endif12621 12622/* vec_vrfiz */12623 12624static __inline__ vector float __attribute__((__always_inline__))12625vec_vrfiz(vector float __a) {12626 return __builtin_altivec_vrfiz(__a);12627}12628 12629/* vec_unpackh */12630 12631/* The vector unpack instructions all have a big-endian bias, so for12632 little endian we must reverse the meanings of "high" and "low." */12633#ifdef __LITTLE_ENDIAN__12634#define vec_vupkhpx(__a) __builtin_altivec_vupklpx((vector short)(__a))12635#define vec_vupklpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))12636#else12637#define vec_vupkhpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))12638#define vec_vupklpx(__a) __builtin_altivec_vupklpx((vector short)(__a))12639#endif12640 12641static __inline__ vector short __ATTRS_o_ai12642vec_unpackh(vector signed char __a) {12643#ifdef __LITTLE_ENDIAN__12644 return __builtin_altivec_vupklsb((vector char)__a);12645#else12646 return __builtin_altivec_vupkhsb((vector char)__a);12647#endif12648}12649 12650static __inline__ vector bool short __ATTRS_o_ai12651vec_unpackh(vector bool char __a) {12652#ifdef __LITTLE_ENDIAN__12653 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);12654#else12655 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);12656#endif12657}12658 12659static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {12660#ifdef __LITTLE_ENDIAN__12661 return __builtin_altivec_vupklsh(__a);12662#else12663 return __builtin_altivec_vupkhsh(__a);12664#endif12665}12666 12667static __inline__ vector bool int __ATTRS_o_ai12668vec_unpackh(vector bool short __a) {12669#ifdef __LITTLE_ENDIAN__12670 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);12671#else12672 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);12673#endif12674}12675 12676static __inline__ vector unsigned int __ATTRS_o_ai12677vec_unpackh(vector pixel __a) {12678#ifdef __LITTLE_ENDIAN__12679 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);12680#else12681 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);12682#endif12683}12684 12685#ifdef __POWER8_VECTOR__12686static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {12687#ifdef __LITTLE_ENDIAN__12688 return __builtin_altivec_vupklsw(__a);12689#else12690 return __builtin_altivec_vupkhsw(__a);12691#endif12692}12693 12694static __inline__ vector bool long long __ATTRS_o_ai12695vec_unpackh(vector bool int __a) {12696#ifdef __LITTLE_ENDIAN__12697 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);12698#else12699 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);12700#endif12701}12702 12703static __inline__ vector double __ATTRS_o_ai12704vec_unpackh(vector float __a) {12705 return (vector double)(__a[0], __a[1]);12706}12707#endif12708 12709/* vec_vupkhsb */12710 12711static __inline__ vector short __ATTRS_o_ai12712vec_vupkhsb(vector signed char __a) {12713#ifdef __LITTLE_ENDIAN__12714 return __builtin_altivec_vupklsb((vector char)__a);12715#else12716 return __builtin_altivec_vupkhsb((vector char)__a);12717#endif12718}12719 12720static __inline__ vector bool short __ATTRS_o_ai12721vec_vupkhsb(vector bool char __a) {12722#ifdef __LITTLE_ENDIAN__12723 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);12724#else12725 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);12726#endif12727}12728 12729/* vec_vupkhsh */12730 12731static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {12732#ifdef __LITTLE_ENDIAN__12733 return __builtin_altivec_vupklsh(__a);12734#else12735 return __builtin_altivec_vupkhsh(__a);12736#endif12737}12738 12739static __inline__ vector bool int __ATTRS_o_ai12740vec_vupkhsh(vector bool short __a) {12741#ifdef __LITTLE_ENDIAN__12742 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);12743#else12744 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);12745#endif12746}12747 12748static __inline__ vector unsigned int __ATTRS_o_ai12749vec_vupkhsh(vector pixel __a) {12750#ifdef __LITTLE_ENDIAN__12751 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);12752#else12753 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);12754#endif12755}12756 12757/* vec_vupkhsw */12758 12759#ifdef __POWER8_VECTOR__12760static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {12761#ifdef __LITTLE_ENDIAN__12762 return __builtin_altivec_vupklsw(__a);12763#else12764 return __builtin_altivec_vupkhsw(__a);12765#endif12766}12767 12768static __inline__ vector bool long long __ATTRS_o_ai12769vec_vupkhsw(vector bool int __a) {12770#ifdef __LITTLE_ENDIAN__12771 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);12772#else12773 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);12774#endif12775}12776#endif12777 12778/* vec_unpackl */12779 12780static __inline__ vector short __ATTRS_o_ai12781vec_unpackl(vector signed char __a) {12782#ifdef __LITTLE_ENDIAN__12783 return __builtin_altivec_vupkhsb((vector char)__a);12784#else12785 return __builtin_altivec_vupklsb((vector char)__a);12786#endif12787}12788 12789static __inline__ vector bool short __ATTRS_o_ai12790vec_unpackl(vector bool char __a) {12791#ifdef __LITTLE_ENDIAN__12792 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);12793#else12794 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);12795#endif12796}12797 12798static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {12799#ifdef __LITTLE_ENDIAN__12800 return __builtin_altivec_vupkhsh(__a);12801#else12802 return __builtin_altivec_vupklsh(__a);12803#endif12804}12805 12806static __inline__ vector bool int __ATTRS_o_ai12807vec_unpackl(vector bool short __a) {12808#ifdef __LITTLE_ENDIAN__12809 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);12810#else12811 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);12812#endif12813}12814 12815static __inline__ vector unsigned int __ATTRS_o_ai12816vec_unpackl(vector pixel __a) {12817#ifdef __LITTLE_ENDIAN__12818 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);12819#else12820 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);12821#endif12822}12823 12824#ifdef __POWER8_VECTOR__12825static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {12826#ifdef __LITTLE_ENDIAN__12827 return __builtin_altivec_vupkhsw(__a);12828#else12829 return __builtin_altivec_vupklsw(__a);12830#endif12831}12832 12833static __inline__ vector bool long long __ATTRS_o_ai12834vec_unpackl(vector bool int __a) {12835#ifdef __LITTLE_ENDIAN__12836 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);12837#else12838 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);12839#endif12840}12841 12842static __inline__ vector double __ATTRS_o_ai12843vec_unpackl(vector float __a) {12844 return (vector double)(__a[2], __a[3]);12845}12846#endif12847 12848/* vec_vupklsb */12849 12850static __inline__ vector short __ATTRS_o_ai12851vec_vupklsb(vector signed char __a) {12852#ifdef __LITTLE_ENDIAN__12853 return __builtin_altivec_vupkhsb((vector char)__a);12854#else12855 return __builtin_altivec_vupklsb((vector char)__a);12856#endif12857}12858 12859static __inline__ vector bool short __ATTRS_o_ai12860vec_vupklsb(vector bool char __a) {12861#ifdef __LITTLE_ENDIAN__12862 return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);12863#else12864 return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);12865#endif12866}12867 12868/* vec_vupklsh */12869 12870static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {12871#ifdef __LITTLE_ENDIAN__12872 return __builtin_altivec_vupkhsh(__a);12873#else12874 return __builtin_altivec_vupklsh(__a);12875#endif12876}12877 12878static __inline__ vector bool int __ATTRS_o_ai12879vec_vupklsh(vector bool short __a) {12880#ifdef __LITTLE_ENDIAN__12881 return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);12882#else12883 return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);12884#endif12885}12886 12887static __inline__ vector unsigned int __ATTRS_o_ai12888vec_vupklsh(vector pixel __a) {12889#ifdef __LITTLE_ENDIAN__12890 return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);12891#else12892 return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);12893#endif12894}12895 12896/* vec_vupklsw */12897 12898#ifdef __POWER8_VECTOR__12899static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {12900#ifdef __LITTLE_ENDIAN__12901 return __builtin_altivec_vupkhsw(__a);12902#else12903 return __builtin_altivec_vupklsw(__a);12904#endif12905}12906 12907static __inline__ vector bool long long __ATTRS_o_ai12908vec_vupklsw(vector bool int __a) {12909#ifdef __LITTLE_ENDIAN__12910 return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);12911#else12912 return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);12913#endif12914}12915#endif12916 12917/* vec_vsx_ld */12918 12919#ifdef __VSX__12920 12921static __inline__ vector bool int __ATTRS_o_ai12922vec_vsx_ld(int __a, const vector bool int *__b) {12923 return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);12924}12925 12926static __inline__ vector signed int __ATTRS_o_ai12927vec_vsx_ld(int __a, const vector signed int *__b) {12928 return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);12929}12930 12931static __inline__ vector signed int __ATTRS_o_ai12932vec_vsx_ld(int __a, const signed int *__b) {12933 return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);12934}12935 12936static __inline__ vector unsigned int __ATTRS_o_ai12937vec_vsx_ld(int __a, const vector unsigned int *__b) {12938 return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);12939}12940 12941static __inline__ vector unsigned int __ATTRS_o_ai12942vec_vsx_ld(int __a, const unsigned int *__b) {12943 return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);12944}12945 12946static __inline__ vector float __ATTRS_o_ai12947vec_vsx_ld(int __a, const vector float *__b) {12948 return (vector float)__builtin_vsx_lxvw4x(__a, __b);12949}12950 12951static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,12952 const float *__b) {12953 return (vector float)__builtin_vsx_lxvw4x(__a, __b);12954}12955 12956static __inline__ vector signed long long __ATTRS_o_ai12957vec_vsx_ld(int __a, const vector signed long long *__b) {12958 return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);12959}12960 12961static __inline__ vector unsigned long long __ATTRS_o_ai12962vec_vsx_ld(int __a, const vector unsigned long long *__b) {12963 return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);12964}12965 12966static __inline__ vector double __ATTRS_o_ai12967vec_vsx_ld(int __a, const vector double *__b) {12968 return (vector double)__builtin_vsx_lxvd2x(__a, __b);12969}12970 12971static __inline__ vector double __ATTRS_o_ai12972vec_vsx_ld(int __a, const double *__b) {12973 return (vector double)__builtin_vsx_lxvd2x(__a, __b);12974}12975 12976static __inline__ vector bool short __ATTRS_o_ai12977vec_vsx_ld(int __a, const vector bool short *__b) {12978 return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);12979}12980 12981static __inline__ vector signed short __ATTRS_o_ai12982vec_vsx_ld(int __a, const vector signed short *__b) {12983 return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);12984}12985 12986static __inline__ vector signed short __ATTRS_o_ai12987vec_vsx_ld(int __a, const signed short *__b) {12988 return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);12989}12990 12991static __inline__ vector unsigned short __ATTRS_o_ai12992vec_vsx_ld(int __a, const vector unsigned short *__b) {12993 return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);12994}12995 12996static __inline__ vector unsigned short __ATTRS_o_ai12997vec_vsx_ld(int __a, const unsigned short *__b) {12998 return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);12999}13000 13001static __inline__ vector bool char __ATTRS_o_ai13002vec_vsx_ld(int __a, const vector bool char *__b) {13003 return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);13004}13005 13006static __inline__ vector signed char __ATTRS_o_ai13007vec_vsx_ld(int __a, const vector signed char *__b) {13008 return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);13009}13010 13011static __inline__ vector signed char __ATTRS_o_ai13012vec_vsx_ld(int __a, const signed char *__b) {13013 return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);13014}13015 13016static __inline__ vector unsigned char __ATTRS_o_ai13017vec_vsx_ld(int __a, const vector unsigned char *__b) {13018 return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);13019}13020 13021static __inline__ vector unsigned char __ATTRS_o_ai13022vec_vsx_ld(int __a, const unsigned char *__b) {13023 return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);13024}13025 13026#endif13027 13028/* vec_vsx_st */13029 13030#ifdef __VSX__13031 13032static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,13033 vector bool int *__c) {13034 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13035}13036 13037static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,13038 signed int *__c) {13039 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13040}13041 13042static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,13043 unsigned int *__c) {13044 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13045}13046 13047static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,13048 vector signed int *__c) {13049 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13050}13051 13052static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,13053 signed int *__c) {13054 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13055}13056 13057static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,13058 vector unsigned int *__c) {13059 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13060}13061 13062static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,13063 unsigned int *__c) {13064 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13065}13066 13067static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,13068 vector float *__c) {13069 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13070}13071 13072static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,13073 float *__c) {13074 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13075}13076 13077static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,13078 int __b,13079 vector signed long long *__c) {13080 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);13081}13082 13083static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,13084 int __b,13085 vector unsigned long long *__c) {13086 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);13087}13088 13089static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,13090 vector double *__c) {13091 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);13092}13093 13094static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,13095 double *__c) {13096 __builtin_vsx_stxvd2x((vector double)__a, __b, __c);13097}13098 13099static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,13100 vector bool short *__c) {13101 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13102}13103 13104static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,13105 signed short *__c) {13106 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13107}13108 13109static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,13110 unsigned short *__c) {13111 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13112}13113static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,13114 vector signed short *__c) {13115 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13116}13117 13118static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,13119 signed short *__c) {13120 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13121}13122 13123static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,13124 int __b,13125 vector unsigned short *__c) {13126 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13127}13128 13129static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,13130 int __b, unsigned short *__c) {13131 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13132}13133 13134static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,13135 vector bool char *__c) {13136 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13137}13138 13139static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,13140 signed char *__c) {13141 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13142}13143 13144static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,13145 unsigned char *__c) {13146 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13147}13148 13149static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,13150 vector signed char *__c) {13151 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13152}13153 13154static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,13155 signed char *__c) {13156 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13157}13158 13159static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,13160 int __b,13161 vector unsigned char *__c) {13162 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13163}13164 13165static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,13166 int __b, unsigned char *__c) {13167 __builtin_vsx_stxvw4x((vector int)__a, __b, __c);13168}13169 13170#endif13171 13172#ifdef __VSX__13173#define vec_xxpermdi __builtin_vsx_xxpermdi13174#define vec_xxsldwi __builtin_vsx_xxsldwi13175#define vec_permi(__a, __b, __c) \13176 _Generic((__a), vector signed long long \13177 : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \13178 (((__c)&0x1) + 2)), \13179 vector unsigned long long \13180 : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \13181 (((__c)&0x1) + 2)), \13182 vector double \13183 : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \13184 (((__c)&0x1) + 2)))13185#endif13186 13187/* vec_xor */13188 13189#define __builtin_altivec_vxor vec_xor13190 13191static __inline__ vector signed char __ATTRS_o_ai13192vec_xor(vector signed char __a, vector signed char __b) {13193 return __a ^ __b;13194}13195 13196static __inline__ vector signed char __ATTRS_o_ai13197vec_xor(vector bool char __a, vector signed char __b) {13198 return (vector signed char)__a ^ __b;13199}13200 13201static __inline__ vector signed char __ATTRS_o_ai13202vec_xor(vector signed char __a, vector bool char __b) {13203 return __a ^ (vector signed char)__b;13204}13205 13206static __inline__ vector unsigned char __ATTRS_o_ai13207vec_xor(vector unsigned char __a, vector unsigned char __b) {13208 return __a ^ __b;13209}13210 13211static __inline__ vector unsigned char __ATTRS_o_ai13212vec_xor(vector bool char __a, vector unsigned char __b) {13213 return (vector unsigned char)__a ^ __b;13214}13215 13216static __inline__ vector unsigned char __ATTRS_o_ai13217vec_xor(vector unsigned char __a, vector bool char __b) {13218 return __a ^ (vector unsigned char)__b;13219}13220 13221static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,13222 vector bool char __b) {13223 return __a ^ __b;13224}13225 13226static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,13227 vector short __b) {13228 return __a ^ __b;13229}13230 13231static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,13232 vector short __b) {13233 return (vector short)__a ^ __b;13234}13235 13236static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,13237 vector bool short __b) {13238 return __a ^ (vector short)__b;13239}13240 13241static __inline__ vector unsigned short __ATTRS_o_ai13242vec_xor(vector unsigned short __a, vector unsigned short __b) {13243 return __a ^ __b;13244}13245 13246static __inline__ vector unsigned short __ATTRS_o_ai13247vec_xor(vector bool short __a, vector unsigned short __b) {13248 return (vector unsigned short)__a ^ __b;13249}13250 13251static __inline__ vector unsigned short __ATTRS_o_ai13252vec_xor(vector unsigned short __a, vector bool short __b) {13253 return __a ^ (vector unsigned short)__b;13254}13255 13256static __inline__ vector bool short __ATTRS_o_ai13257vec_xor(vector bool short __a, vector bool short __b) {13258 return __a ^ __b;13259}13260 13261static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,13262 vector int __b) {13263 return __a ^ __b;13264}13265 13266static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,13267 vector int __b) {13268 return (vector int)__a ^ __b;13269}13270 13271static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,13272 vector bool int __b) {13273 return __a ^ (vector int)__b;13274}13275 13276static __inline__ vector unsigned int __ATTRS_o_ai13277vec_xor(vector unsigned int __a, vector unsigned int __b) {13278 return __a ^ __b;13279}13280 13281static __inline__ vector unsigned int __ATTRS_o_ai13282vec_xor(vector bool int __a, vector unsigned int __b) {13283 return (vector unsigned int)__a ^ __b;13284}13285 13286static __inline__ vector unsigned int __ATTRS_o_ai13287vec_xor(vector unsigned int __a, vector bool int __b) {13288 return __a ^ (vector unsigned int)__b;13289}13290 13291static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,13292 vector bool int __b) {13293 return __a ^ __b;13294}13295 13296static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,13297 vector float __b) {13298 vector unsigned int __res =13299 (vector unsigned int)__a ^ (vector unsigned int)__b;13300 return (vector float)__res;13301}13302 13303static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,13304 vector float __b) {13305 vector unsigned int __res =13306 (vector unsigned int)__a ^ (vector unsigned int)__b;13307 return (vector float)__res;13308}13309 13310static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,13311 vector bool int __b) {13312 vector unsigned int __res =13313 (vector unsigned int)__a ^ (vector unsigned int)__b;13314 return (vector float)__res;13315}13316 13317#ifdef __VSX__13318static __inline__ vector signed long long __ATTRS_o_ai13319vec_xor(vector signed long long __a, vector signed long long __b) {13320 return __a ^ __b;13321}13322 13323static __inline__ vector signed long long __ATTRS_o_ai13324vec_xor(vector bool long long __a, vector signed long long __b) {13325 return (vector signed long long)__a ^ __b;13326}13327 13328static __inline__ vector signed long long __ATTRS_o_ai13329vec_xor(vector signed long long __a, vector bool long long __b) {13330 return __a ^ (vector signed long long)__b;13331}13332 13333static __inline__ vector unsigned long long __ATTRS_o_ai13334vec_xor(vector unsigned long long __a, vector unsigned long long __b) {13335 return __a ^ __b;13336}13337 13338static __inline__ vector unsigned long long __ATTRS_o_ai13339vec_xor(vector bool long long __a, vector unsigned long long __b) {13340 return (vector unsigned long long)__a ^ __b;13341}13342 13343static __inline__ vector unsigned long long __ATTRS_o_ai13344vec_xor(vector unsigned long long __a, vector bool long long __b) {13345 return __a ^ (vector unsigned long long)__b;13346}13347 13348static __inline__ vector bool long long __ATTRS_o_ai13349vec_xor(vector bool long long __a, vector bool long long __b) {13350 return __a ^ __b;13351}13352 13353static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,13354 vector double __b) {13355 return (vector double)((vector unsigned long long)__a ^13356 (vector unsigned long long)__b);13357}13358 13359static __inline__ vector double __ATTRS_o_ai13360vec_xor(vector double __a, vector bool long long __b) {13361 return (vector double)((vector unsigned long long)__a ^13362 (vector unsigned long long)__b);13363}13364 13365static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,13366 vector double __b) {13367 return (vector double)((vector unsigned long long)__a ^13368 (vector unsigned long long)__b);13369}13370#endif13371 13372/* vec_vxor */13373 13374static __inline__ vector signed char __ATTRS_o_ai13375vec_vxor(vector signed char __a, vector signed char __b) {13376 return __a ^ __b;13377}13378 13379static __inline__ vector signed char __ATTRS_o_ai13380vec_vxor(vector bool char __a, vector signed char __b) {13381 return (vector signed char)__a ^ __b;13382}13383 13384static __inline__ vector signed char __ATTRS_o_ai13385vec_vxor(vector signed char __a, vector bool char __b) {13386 return __a ^ (vector signed char)__b;13387}13388 13389static __inline__ vector unsigned char __ATTRS_o_ai13390vec_vxor(vector unsigned char __a, vector unsigned char __b) {13391 return __a ^ __b;13392}13393 13394static __inline__ vector unsigned char __ATTRS_o_ai13395vec_vxor(vector bool char __a, vector unsigned char __b) {13396 return (vector unsigned char)__a ^ __b;13397}13398 13399static __inline__ vector unsigned char __ATTRS_o_ai13400vec_vxor(vector unsigned char __a, vector bool char __b) {13401 return __a ^ (vector unsigned char)__b;13402}13403 13404static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,13405 vector bool char __b) {13406 return __a ^ __b;13407}13408 13409static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,13410 vector short __b) {13411 return __a ^ __b;13412}13413 13414static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,13415 vector short __b) {13416 return (vector short)__a ^ __b;13417}13418 13419static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,13420 vector bool short __b) {13421 return __a ^ (vector short)__b;13422}13423 13424static __inline__ vector unsigned short __ATTRS_o_ai13425vec_vxor(vector unsigned short __a, vector unsigned short __b) {13426 return __a ^ __b;13427}13428 13429static __inline__ vector unsigned short __ATTRS_o_ai13430vec_vxor(vector bool short __a, vector unsigned short __b) {13431 return (vector unsigned short)__a ^ __b;13432}13433 13434static __inline__ vector unsigned short __ATTRS_o_ai13435vec_vxor(vector unsigned short __a, vector bool short __b) {13436 return __a ^ (vector unsigned short)__b;13437}13438 13439static __inline__ vector bool short __ATTRS_o_ai13440vec_vxor(vector bool short __a, vector bool short __b) {13441 return __a ^ __b;13442}13443 13444static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,13445 vector int __b) {13446 return __a ^ __b;13447}13448 13449static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,13450 vector int __b) {13451 return (vector int)__a ^ __b;13452}13453 13454static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,13455 vector bool int __b) {13456 return __a ^ (vector int)__b;13457}13458 13459static __inline__ vector unsigned int __ATTRS_o_ai13460vec_vxor(vector unsigned int __a, vector unsigned int __b) {13461 return __a ^ __b;13462}13463 13464static __inline__ vector unsigned int __ATTRS_o_ai13465vec_vxor(vector bool int __a, vector unsigned int __b) {13466 return (vector unsigned int)__a ^ __b;13467}13468 13469static __inline__ vector unsigned int __ATTRS_o_ai13470vec_vxor(vector unsigned int __a, vector bool int __b) {13471 return __a ^ (vector unsigned int)__b;13472}13473 13474static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,13475 vector bool int __b) {13476 return __a ^ __b;13477}13478 13479static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,13480 vector float __b) {13481 vector unsigned int __res =13482 (vector unsigned int)__a ^ (vector unsigned int)__b;13483 return (vector float)__res;13484}13485 13486static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,13487 vector float __b) {13488 vector unsigned int __res =13489 (vector unsigned int)__a ^ (vector unsigned int)__b;13490 return (vector float)__res;13491}13492 13493static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,13494 vector bool int __b) {13495 vector unsigned int __res =13496 (vector unsigned int)__a ^ (vector unsigned int)__b;13497 return (vector float)__res;13498}13499 13500#ifdef __VSX__13501static __inline__ vector signed long long __ATTRS_o_ai13502vec_vxor(vector signed long long __a, vector signed long long __b) {13503 return __a ^ __b;13504}13505 13506static __inline__ vector signed long long __ATTRS_o_ai13507vec_vxor(vector bool long long __a, vector signed long long __b) {13508 return (vector signed long long)__a ^ __b;13509}13510 13511static __inline__ vector signed long long __ATTRS_o_ai13512vec_vxor(vector signed long long __a, vector bool long long __b) {13513 return __a ^ (vector signed long long)__b;13514}13515 13516static __inline__ vector unsigned long long __ATTRS_o_ai13517vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {13518 return __a ^ __b;13519}13520 13521static __inline__ vector unsigned long long __ATTRS_o_ai13522vec_vxor(vector bool long long __a, vector unsigned long long __b) {13523 return (vector unsigned long long)__a ^ __b;13524}13525 13526static __inline__ vector unsigned long long __ATTRS_o_ai13527vec_vxor(vector unsigned long long __a, vector bool long long __b) {13528 return __a ^ (vector unsigned long long)__b;13529}13530 13531static __inline__ vector bool long long __ATTRS_o_ai13532vec_vxor(vector bool long long __a, vector bool long long __b) {13533 return __a ^ __b;13534}13535#endif13536 13537/* ------------------------ extensions for CBEA ----------------------------- */13538 13539/* vec_extract */13540 13541static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,13542 signed int __b) {13543 return __a[__b & 0xf];13544}13545 13546static __inline__ unsigned char __ATTRS_o_ai13547vec_extract(vector unsigned char __a, signed int __b) {13548 return __a[__b & 0xf];13549}13550 13551static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,13552 signed int __b) {13553 return __a[__b & 0xf];13554}13555 13556static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,13557 signed int __b) {13558 return __a[__b & 0x7];13559}13560 13561static __inline__ unsigned short __ATTRS_o_ai13562vec_extract(vector unsigned short __a, signed int __b) {13563 return __a[__b & 0x7];13564}13565 13566static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,13567 signed int __b) {13568 return __a[__b & 0x7];13569}13570 13571static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,13572 signed int __b) {13573 return __a[__b & 0x3];13574}13575 13576static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,13577 signed int __b) {13578 return __a[__b & 0x3];13579}13580 13581static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,13582 signed int __b) {13583 return __a[__b & 0x3];13584}13585 13586#ifdef __VSX__13587static __inline__ signed long long __ATTRS_o_ai13588vec_extract(vector signed long long __a, signed int __b) {13589 return __a[__b & 0x1];13590}13591 13592static __inline__ unsigned long long __ATTRS_o_ai13593vec_extract(vector unsigned long long __a, signed int __b) {13594 return __a[__b & 0x1];13595}13596 13597static __inline__ unsigned long long __ATTRS_o_ai13598vec_extract(vector bool long long __a, signed int __b) {13599 return __a[__b & 0x1];13600}13601 13602static __inline__ double __ATTRS_o_ai vec_extract(vector double __a,13603 signed int __b) {13604 return __a[__b & 0x1];13605}13606#endif13607 13608static __inline__ float __ATTRS_o_ai vec_extract(vector float __a,13609 signed int __b) {13610 return __a[__b & 0x3];13611}13612 13613#ifdef __POWER9_VECTOR__13614 13615#define vec_insert4b __builtin_vsx_insertword13616#define vec_extract4b __builtin_vsx_extractuword13617 13618/* vec_extract_exp */13619 13620static __inline__ vector unsigned int __ATTRS_o_ai13621vec_extract_exp(vector float __a) {13622 return __builtin_vsx_xvxexpsp(__a);13623}13624 13625static __inline__ vector unsigned long long __ATTRS_o_ai13626vec_extract_exp(vector double __a) {13627 return __builtin_vsx_xvxexpdp(__a);13628}13629 13630/* vec_extract_sig */13631 13632static __inline__ vector unsigned int __ATTRS_o_ai13633vec_extract_sig(vector float __a) {13634 return __builtin_vsx_xvxsigsp(__a);13635}13636 13637static __inline__ vector unsigned long long __ATTRS_o_ai13638vec_extract_sig (vector double __a) {13639 return __builtin_vsx_xvxsigdp(__a);13640}13641 13642static __inline__ vector float __ATTRS_o_ai13643vec_extract_fp32_from_shorth(vector unsigned short __a) {13644 vector unsigned short __b =13645#ifdef __LITTLE_ENDIAN__13646 __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);13647#else13648 __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);13649#endif13650 return __builtin_vsx_xvcvhpsp(__b);13651}13652 13653static __inline__ vector float __ATTRS_o_ai13654vec_extract_fp32_from_shortl(vector unsigned short __a) {13655 vector unsigned short __b =13656#ifdef __LITTLE_ENDIAN__13657 __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);13658#else13659 __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);13660#endif13661 return __builtin_vsx_xvcvhpsp(__b);13662}13663#endif /* __POWER9_VECTOR__ */13664 13665/* vec_insert */13666 13667static __inline__ vector signed char __ATTRS_o_ai13668vec_insert(signed char __a, vector signed char __b, int __c) {13669 __b[__c & 0xF] = __a;13670 return __b;13671}13672 13673static __inline__ vector unsigned char __ATTRS_o_ai13674vec_insert(unsigned char __a, vector unsigned char __b, int __c) {13675 __b[__c & 0xF] = __a;13676 return __b;13677}13678 13679static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,13680 vector bool char __b,13681 int __c) {13682 __b[__c & 0xF] = __a;13683 return __b;13684}13685 13686static __inline__ vector signed short __ATTRS_o_ai13687vec_insert(signed short __a, vector signed short __b, int __c) {13688 __b[__c & 0x7] = __a;13689 return __b;13690}13691 13692static __inline__ vector unsigned short __ATTRS_o_ai13693vec_insert(unsigned short __a, vector unsigned short __b, int __c) {13694 __b[__c & 0x7] = __a;13695 return __b;13696}13697 13698static __inline__ vector bool short __ATTRS_o_ai13699vec_insert(unsigned short __a, vector bool short __b, int __c) {13700 __b[__c & 0x7] = __a;13701 return __b;13702}13703 13704static __inline__ vector signed int __ATTRS_o_ai13705vec_insert(signed int __a, vector signed int __b, int __c) {13706 __b[__c & 0x3] = __a;13707 return __b;13708}13709 13710static __inline__ vector unsigned int __ATTRS_o_ai13711vec_insert(unsigned int __a, vector unsigned int __b, int __c) {13712 __b[__c & 0x3] = __a;13713 return __b;13714}13715 13716static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,13717 vector bool int __b,13718 int __c) {13719 __b[__c & 0x3] = __a;13720 return __b;13721}13722 13723#ifdef __VSX__13724static __inline__ vector signed long long __ATTRS_o_ai13725vec_insert(signed long long __a, vector signed long long __b, int __c) {13726 __b[__c & 0x1] = __a;13727 return __b;13728}13729 13730static __inline__ vector unsigned long long __ATTRS_o_ai13731vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {13732 __b[__c & 0x1] = __a;13733 return __b;13734}13735 13736static __inline__ vector bool long long __ATTRS_o_ai13737vec_insert(unsigned long long __a, vector bool long long __b, int __c) {13738 __b[__c & 0x1] = __a;13739 return __b;13740}13741static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,13742 vector double __b,13743 int __c) {13744 __b[__c & 0x1] = __a;13745 return __b;13746}13747#endif13748 13749static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,13750 vector float __b,13751 int __c) {13752 __b[__c & 0x3] = __a;13753 return __b;13754}13755 13756/* vec_lvlx */13757 13758static __inline__ vector signed char __ATTRS_o_ai13759vec_lvlx(int __a, const signed char *__b) {13760 return vec_perm(vec_ld(__a, __b), (vector signed char)(0),13761 vec_lvsl(__a, __b));13762}13763 13764static __inline__ vector signed char __ATTRS_o_ai13765vec_lvlx(int __a, const vector signed char *__b) {13766 return vec_perm(vec_ld(__a, __b), (vector signed char)(0),13767 vec_lvsl(__a, (unsigned char *)__b));13768}13769 13770static __inline__ vector unsigned char __ATTRS_o_ai13771vec_lvlx(int __a, const unsigned char *__b) {13772 return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),13773 vec_lvsl(__a, __b));13774}13775 13776static __inline__ vector unsigned char __ATTRS_o_ai13777vec_lvlx(int __a, const vector unsigned char *__b) {13778 return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),13779 vec_lvsl(__a, (unsigned char *)__b));13780}13781 13782static __inline__ vector bool char __ATTRS_o_ai13783vec_lvlx(int __a, const vector bool char *__b) {13784 return vec_perm(vec_ld(__a, __b), (vector bool char)(0),13785 vec_lvsl(__a, (unsigned char *)__b));13786}13787 13788static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,13789 const short *__b) {13790 return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));13791}13792 13793static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,13794 const vector short *__b) {13795 return vec_perm(vec_ld(__a, __b), (vector short)(0),13796 vec_lvsl(__a, (unsigned char *)__b));13797}13798 13799static __inline__ vector unsigned short __ATTRS_o_ai13800vec_lvlx(int __a, const unsigned short *__b) {13801 return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),13802 vec_lvsl(__a, __b));13803}13804 13805static __inline__ vector unsigned short __ATTRS_o_ai13806vec_lvlx(int __a, const vector unsigned short *__b) {13807 return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),13808 vec_lvsl(__a, (unsigned char *)__b));13809}13810 13811static __inline__ vector bool short __ATTRS_o_ai13812vec_lvlx(int __a, const vector bool short *__b) {13813 return vec_perm(vec_ld(__a, __b), (vector bool short)(0),13814 vec_lvsl(__a, (unsigned char *)__b));13815}13816 13817static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,13818 const vector pixel *__b) {13819 return vec_perm(vec_ld(__a, __b), (vector pixel)(0),13820 vec_lvsl(__a, (unsigned char *)__b));13821}13822 13823static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {13824 return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));13825}13826 13827static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,13828 const vector int *__b) {13829 return vec_perm(vec_ld(__a, __b), (vector int)(0),13830 vec_lvsl(__a, (unsigned char *)__b));13831}13832 13833static __inline__ vector unsigned int __ATTRS_o_ai13834vec_lvlx(int __a, const unsigned int *__b) {13835 return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),13836 vec_lvsl(__a, __b));13837}13838 13839static __inline__ vector unsigned int __ATTRS_o_ai13840vec_lvlx(int __a, const vector unsigned int *__b) {13841 return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),13842 vec_lvsl(__a, (unsigned char *)__b));13843}13844 13845static __inline__ vector bool int __ATTRS_o_ai13846vec_lvlx(int __a, const vector bool int *__b) {13847 return vec_perm(vec_ld(__a, __b), (vector bool int)(0),13848 vec_lvsl(__a, (unsigned char *)__b));13849}13850 13851static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,13852 const float *__b) {13853 return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));13854}13855 13856static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,13857 const vector float *__b) {13858 return vec_perm(vec_ld(__a, __b), (vector float)(0),13859 vec_lvsl(__a, (unsigned char *)__b));13860}13861 13862/* vec_lvlxl */13863 13864static __inline__ vector signed char __ATTRS_o_ai13865vec_lvlxl(int __a, const signed char *__b) {13866 return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),13867 vec_lvsl(__a, __b));13868}13869 13870static __inline__ vector signed char __ATTRS_o_ai13871vec_lvlxl(int __a, const vector signed char *__b) {13872 return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),13873 vec_lvsl(__a, (unsigned char *)__b));13874}13875 13876static __inline__ vector unsigned char __ATTRS_o_ai13877vec_lvlxl(int __a, const unsigned char *__b) {13878 return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),13879 vec_lvsl(__a, __b));13880}13881 13882static __inline__ vector unsigned char __ATTRS_o_ai13883vec_lvlxl(int __a, const vector unsigned char *__b) {13884 return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),13885 vec_lvsl(__a, (unsigned char *)__b));13886}13887 13888static __inline__ vector bool char __ATTRS_o_ai13889vec_lvlxl(int __a, const vector bool char *__b) {13890 return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),13891 vec_lvsl(__a, (unsigned char *)__b));13892}13893 13894static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,13895 const short *__b) {13896 return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));13897}13898 13899static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,13900 const vector short *__b) {13901 return vec_perm(vec_ldl(__a, __b), (vector short)(0),13902 vec_lvsl(__a, (unsigned char *)__b));13903}13904 13905static __inline__ vector unsigned short __ATTRS_o_ai13906vec_lvlxl(int __a, const unsigned short *__b) {13907 return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),13908 vec_lvsl(__a, __b));13909}13910 13911static __inline__ vector unsigned short __ATTRS_o_ai13912vec_lvlxl(int __a, const vector unsigned short *__b) {13913 return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),13914 vec_lvsl(__a, (unsigned char *)__b));13915}13916 13917static __inline__ vector bool short __ATTRS_o_ai13918vec_lvlxl(int __a, const vector bool short *__b) {13919 return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),13920 vec_lvsl(__a, (unsigned char *)__b));13921}13922 13923static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,13924 const vector pixel *__b) {13925 return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),13926 vec_lvsl(__a, (unsigned char *)__b));13927}13928 13929static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {13930 return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));13931}13932 13933static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,13934 const vector int *__b) {13935 return vec_perm(vec_ldl(__a, __b), (vector int)(0),13936 vec_lvsl(__a, (unsigned char *)__b));13937}13938 13939static __inline__ vector unsigned int __ATTRS_o_ai13940vec_lvlxl(int __a, const unsigned int *__b) {13941 return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),13942 vec_lvsl(__a, __b));13943}13944 13945static __inline__ vector unsigned int __ATTRS_o_ai13946vec_lvlxl(int __a, const vector unsigned int *__b) {13947 return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),13948 vec_lvsl(__a, (unsigned char *)__b));13949}13950 13951static __inline__ vector bool int __ATTRS_o_ai13952vec_lvlxl(int __a, const vector bool int *__b) {13953 return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),13954 vec_lvsl(__a, (unsigned char *)__b));13955}13956 13957static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,13958 const float *__b) {13959 return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));13960}13961 13962static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,13963 vector float *__b) {13964 return vec_perm(vec_ldl(__a, __b), (vector float)(0),13965 vec_lvsl(__a, (unsigned char *)__b));13966}13967 13968/* vec_lvrx */13969 13970static __inline__ vector signed char __ATTRS_o_ai13971vec_lvrx(int __a, const signed char *__b) {13972 return vec_perm((vector signed char)(0), vec_ld(__a, __b),13973 vec_lvsl(__a, __b));13974}13975 13976static __inline__ vector signed char __ATTRS_o_ai13977vec_lvrx(int __a, const vector signed char *__b) {13978 return vec_perm((vector signed char)(0), vec_ld(__a, __b),13979 vec_lvsl(__a, (unsigned char *)__b));13980}13981 13982static __inline__ vector unsigned char __ATTRS_o_ai13983vec_lvrx(int __a, const unsigned char *__b) {13984 return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),13985 vec_lvsl(__a, __b));13986}13987 13988static __inline__ vector unsigned char __ATTRS_o_ai13989vec_lvrx(int __a, const vector unsigned char *__b) {13990 return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),13991 vec_lvsl(__a, (unsigned char *)__b));13992}13993 13994static __inline__ vector bool char __ATTRS_o_ai13995vec_lvrx(int __a, const vector bool char *__b) {13996 return vec_perm((vector bool char)(0), vec_ld(__a, __b),13997 vec_lvsl(__a, (unsigned char *)__b));13998}13999 14000static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,14001 const short *__b) {14002 return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));14003}14004 14005static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,14006 const vector short *__b) {14007 return vec_perm((vector short)(0), vec_ld(__a, __b),14008 vec_lvsl(__a, (unsigned char *)__b));14009}14010 14011static __inline__ vector unsigned short __ATTRS_o_ai14012vec_lvrx(int __a, const unsigned short *__b) {14013 return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),14014 vec_lvsl(__a, __b));14015}14016 14017static __inline__ vector unsigned short __ATTRS_o_ai14018vec_lvrx(int __a, const vector unsigned short *__b) {14019 return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),14020 vec_lvsl(__a, (unsigned char *)__b));14021}14022 14023static __inline__ vector bool short __ATTRS_o_ai14024vec_lvrx(int __a, const vector bool short *__b) {14025 return vec_perm((vector bool short)(0), vec_ld(__a, __b),14026 vec_lvsl(__a, (unsigned char *)__b));14027}14028 14029static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,14030 const vector pixel *__b) {14031 return vec_perm((vector pixel)(0), vec_ld(__a, __b),14032 vec_lvsl(__a, (unsigned char *)__b));14033}14034 14035static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {14036 return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));14037}14038 14039static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,14040 const vector int *__b) {14041 return vec_perm((vector int)(0), vec_ld(__a, __b),14042 vec_lvsl(__a, (unsigned char *)__b));14043}14044 14045static __inline__ vector unsigned int __ATTRS_o_ai14046vec_lvrx(int __a, const unsigned int *__b) {14047 return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),14048 vec_lvsl(__a, __b));14049}14050 14051static __inline__ vector unsigned int __ATTRS_o_ai14052vec_lvrx(int __a, const vector unsigned int *__b) {14053 return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),14054 vec_lvsl(__a, (unsigned char *)__b));14055}14056 14057static __inline__ vector bool int __ATTRS_o_ai14058vec_lvrx(int __a, const vector bool int *__b) {14059 return vec_perm((vector bool int)(0), vec_ld(__a, __b),14060 vec_lvsl(__a, (unsigned char *)__b));14061}14062 14063static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,14064 const float *__b) {14065 return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));14066}14067 14068static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,14069 const vector float *__b) {14070 return vec_perm((vector float)(0), vec_ld(__a, __b),14071 vec_lvsl(__a, (unsigned char *)__b));14072}14073 14074/* vec_lvrxl */14075 14076static __inline__ vector signed char __ATTRS_o_ai14077vec_lvrxl(int __a, const signed char *__b) {14078 return vec_perm((vector signed char)(0), vec_ldl(__a, __b),14079 vec_lvsl(__a, __b));14080}14081 14082static __inline__ vector signed char __ATTRS_o_ai14083vec_lvrxl(int __a, const vector signed char *__b) {14084 return vec_perm((vector signed char)(0), vec_ldl(__a, __b),14085 vec_lvsl(__a, (unsigned char *)__b));14086}14087 14088static __inline__ vector unsigned char __ATTRS_o_ai14089vec_lvrxl(int __a, const unsigned char *__b) {14090 return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),14091 vec_lvsl(__a, __b));14092}14093 14094static __inline__ vector unsigned char __ATTRS_o_ai14095vec_lvrxl(int __a, const vector unsigned char *__b) {14096 return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),14097 vec_lvsl(__a, (unsigned char *)__b));14098}14099 14100static __inline__ vector bool char __ATTRS_o_ai14101vec_lvrxl(int __a, const vector bool char *__b) {14102 return vec_perm((vector bool char)(0), vec_ldl(__a, __b),14103 vec_lvsl(__a, (unsigned char *)__b));14104}14105 14106static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,14107 const short *__b) {14108 return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));14109}14110 14111static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,14112 const vector short *__b) {14113 return vec_perm((vector short)(0), vec_ldl(__a, __b),14114 vec_lvsl(__a, (unsigned char *)__b));14115}14116 14117static __inline__ vector unsigned short __ATTRS_o_ai14118vec_lvrxl(int __a, const unsigned short *__b) {14119 return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),14120 vec_lvsl(__a, __b));14121}14122 14123static __inline__ vector unsigned short __ATTRS_o_ai14124vec_lvrxl(int __a, const vector unsigned short *__b) {14125 return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),14126 vec_lvsl(__a, (unsigned char *)__b));14127}14128 14129static __inline__ vector bool short __ATTRS_o_ai14130vec_lvrxl(int __a, const vector bool short *__b) {14131 return vec_perm((vector bool short)(0), vec_ldl(__a, __b),14132 vec_lvsl(__a, (unsigned char *)__b));14133}14134 14135static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,14136 const vector pixel *__b) {14137 return vec_perm((vector pixel)(0), vec_ldl(__a, __b),14138 vec_lvsl(__a, (unsigned char *)__b));14139}14140 14141static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {14142 return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));14143}14144 14145static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,14146 const vector int *__b) {14147 return vec_perm((vector int)(0), vec_ldl(__a, __b),14148 vec_lvsl(__a, (unsigned char *)__b));14149}14150 14151static __inline__ vector unsigned int __ATTRS_o_ai14152vec_lvrxl(int __a, const unsigned int *__b) {14153 return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),14154 vec_lvsl(__a, __b));14155}14156 14157static __inline__ vector unsigned int __ATTRS_o_ai14158vec_lvrxl(int __a, const vector unsigned int *__b) {14159 return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),14160 vec_lvsl(__a, (unsigned char *)__b));14161}14162 14163static __inline__ vector bool int __ATTRS_o_ai14164vec_lvrxl(int __a, const vector bool int *__b) {14165 return vec_perm((vector bool int)(0), vec_ldl(__a, __b),14166 vec_lvsl(__a, (unsigned char *)__b));14167}14168 14169static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,14170 const float *__b) {14171 return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));14172}14173 14174static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,14175 const vector float *__b) {14176 return vec_perm((vector float)(0), vec_ldl(__a, __b),14177 vec_lvsl(__a, (unsigned char *)__b));14178}14179 14180/* vec_stvlx */14181 14182static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,14183 signed char *__c) {14184 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14185 __c);14186}14187 14188static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,14189 vector signed char *__c) {14190 return vec_st(14191 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14192 __b, __c);14193}14194 14195static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,14196 unsigned char *__c) {14197 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14198 __c);14199}14200 14201static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,14202 vector unsigned char *__c) {14203 return vec_st(14204 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14205 __b, __c);14206}14207 14208static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,14209 vector bool char *__c) {14210 return vec_st(14211 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14212 __b, __c);14213}14214 14215static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,14216 short *__c) {14217 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14218 __c);14219}14220 14221static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,14222 vector short *__c) {14223 return vec_st(14224 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14225 __b, __c);14226}14227 14228static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,14229 int __b, unsigned short *__c) {14230 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14231 __c);14232}14233 14234static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,14235 int __b,14236 vector unsigned short *__c) {14237 return vec_st(14238 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14239 __b, __c);14240}14241 14242static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,14243 vector bool short *__c) {14244 return vec_st(14245 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14246 __b, __c);14247}14248 14249static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,14250 vector pixel *__c) {14251 return vec_st(14252 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14253 __b, __c);14254}14255 14256static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,14257 int *__c) {14258 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14259 __c);14260}14261 14262static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,14263 vector int *__c) {14264 return vec_st(14265 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14266 __b, __c);14267}14268 14269static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,14270 unsigned int *__c) {14271 return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14272 __c);14273}14274 14275static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,14276 vector unsigned int *__c) {14277 return vec_st(14278 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14279 __b, __c);14280}14281 14282static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,14283 vector bool int *__c) {14284 return vec_st(14285 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14286 __b, __c);14287}14288 14289static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,14290 vector float *__c) {14291 return vec_st(14292 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14293 __b, __c);14294}14295 14296/* vec_stvlxl */14297 14298static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,14299 signed char *__c) {14300 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14301 __c);14302}14303 14304static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,14305 vector signed char *__c) {14306 return vec_stl(14307 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14308 __b, __c);14309}14310 14311static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,14312 int __b, unsigned char *__c) {14313 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14314 __c);14315}14316 14317static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,14318 int __b,14319 vector unsigned char *__c) {14320 return vec_stl(14321 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14322 __b, __c);14323}14324 14325static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,14326 vector bool char *__c) {14327 return vec_stl(14328 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14329 __b, __c);14330}14331 14332static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,14333 short *__c) {14334 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14335 __c);14336}14337 14338static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,14339 vector short *__c) {14340 return vec_stl(14341 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14342 __b, __c);14343}14344 14345static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,14346 int __b, unsigned short *__c) {14347 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14348 __c);14349}14350 14351static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,14352 int __b,14353 vector unsigned short *__c) {14354 return vec_stl(14355 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14356 __b, __c);14357}14358 14359static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,14360 vector bool short *__c) {14361 return vec_stl(14362 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14363 __b, __c);14364}14365 14366static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,14367 vector pixel *__c) {14368 return vec_stl(14369 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14370 __b, __c);14371}14372 14373static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,14374 int *__c) {14375 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14376 __c);14377}14378 14379static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,14380 vector int *__c) {14381 return vec_stl(14382 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14383 __b, __c);14384}14385 14386static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,14387 unsigned int *__c) {14388 return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,14389 __c);14390}14391 14392static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,14393 vector unsigned int *__c) {14394 return vec_stl(14395 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14396 __b, __c);14397}14398 14399static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,14400 vector bool int *__c) {14401 return vec_stl(14402 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14403 __b, __c);14404}14405 14406static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,14407 vector float *__c) {14408 return vec_stl(14409 vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),14410 __b, __c);14411}14412 14413/* vec_stvrx */14414 14415static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,14416 signed char *__c) {14417 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14418 __c);14419}14420 14421static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,14422 vector signed char *__c) {14423 return vec_st(14424 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14425 __b, __c);14426}14427 14428static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,14429 unsigned char *__c) {14430 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14431 __c);14432}14433 14434static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,14435 vector unsigned char *__c) {14436 return vec_st(14437 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14438 __b, __c);14439}14440 14441static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,14442 vector bool char *__c) {14443 return vec_st(14444 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14445 __b, __c);14446}14447 14448static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,14449 short *__c) {14450 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14451 __c);14452}14453 14454static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,14455 vector short *__c) {14456 return vec_st(14457 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14458 __b, __c);14459}14460 14461static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,14462 int __b, unsigned short *__c) {14463 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14464 __c);14465}14466 14467static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,14468 int __b,14469 vector unsigned short *__c) {14470 return vec_st(14471 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14472 __b, __c);14473}14474 14475static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,14476 vector bool short *__c) {14477 return vec_st(14478 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14479 __b, __c);14480}14481 14482static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,14483 vector pixel *__c) {14484 return vec_st(14485 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14486 __b, __c);14487}14488 14489static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,14490 int *__c) {14491 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14492 __c);14493}14494 14495static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,14496 vector int *__c) {14497 return vec_st(14498 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14499 __b, __c);14500}14501 14502static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,14503 unsigned int *__c) {14504 return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14505 __c);14506}14507 14508static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,14509 vector unsigned int *__c) {14510 return vec_st(14511 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14512 __b, __c);14513}14514 14515static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,14516 vector bool int *__c) {14517 return vec_st(14518 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14519 __b, __c);14520}14521 14522static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,14523 vector float *__c) {14524 return vec_st(14525 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14526 __b, __c);14527}14528 14529/* vec_stvrxl */14530 14531static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,14532 signed char *__c) {14533 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14534 __c);14535}14536 14537static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,14538 vector signed char *__c) {14539 return vec_stl(14540 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14541 __b, __c);14542}14543 14544static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,14545 int __b, unsigned char *__c) {14546 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14547 __c);14548}14549 14550static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,14551 int __b,14552 vector unsigned char *__c) {14553 return vec_stl(14554 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14555 __b, __c);14556}14557 14558static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,14559 vector bool char *__c) {14560 return vec_stl(14561 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14562 __b, __c);14563}14564 14565static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,14566 short *__c) {14567 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14568 __c);14569}14570 14571static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,14572 vector short *__c) {14573 return vec_stl(14574 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14575 __b, __c);14576}14577 14578static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,14579 int __b, unsigned short *__c) {14580 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14581 __c);14582}14583 14584static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,14585 int __b,14586 vector unsigned short *__c) {14587 return vec_stl(14588 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14589 __b, __c);14590}14591 14592static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,14593 vector bool short *__c) {14594 return vec_stl(14595 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14596 __b, __c);14597}14598 14599static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,14600 vector pixel *__c) {14601 return vec_stl(14602 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14603 __b, __c);14604}14605 14606static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,14607 int *__c) {14608 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14609 __c);14610}14611 14612static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,14613 vector int *__c) {14614 return vec_stl(14615 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14616 __b, __c);14617}14618 14619static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,14620 unsigned int *__c) {14621 return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,14622 __c);14623}14624 14625static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,14626 vector unsigned int *__c) {14627 return vec_stl(14628 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14629 __b, __c);14630}14631 14632static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,14633 vector bool int *__c) {14634 return vec_stl(14635 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14636 __b, __c);14637}14638 14639static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,14640 vector float *__c) {14641 return vec_stl(14642 vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),14643 __b, __c);14644}14645 14646/* vec_promote */14647 14648static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,14649 int __b) {14650 const vector signed char __zero = (vector signed char)0;14651 vector signed char __res =14652 __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1,14653 -1, -1, -1, -1, -1, -1, -1, -1);14654 __res[__b & 0xf] = __a;14655 return __res;14656}14657 14658static __inline__ vector unsigned char __ATTRS_o_ai14659vec_promote(unsigned char __a, int __b) {14660 const vector unsigned char __zero = (vector unsigned char)(0);14661 vector unsigned char __res =14662 __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1,14663 -1, -1, -1, -1, -1, -1, -1, -1);14664 __res[__b & 0xf] = __a;14665 return __res;14666}14667 14668static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {14669 const vector short __zero = (vector short)(0);14670 vector short __res =14671 __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1);14672 __res[__b & 0x7] = __a;14673 return __res;14674}14675 14676static __inline__ vector unsigned short __ATTRS_o_ai14677vec_promote(unsigned short __a, int __b) {14678 const vector unsigned short __zero = (vector unsigned short)(0);14679 vector unsigned short __res =14680 __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1);14681 __res[__b & 0x7] = __a;14682 return __res;14683}14684 14685static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {14686 const vector int __zero = (vector int)(0);14687 vector int __res = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);14688 __res[__b & 0x3] = __a;14689 return __res;14690}14691 14692static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,14693 int __b) {14694 const vector unsigned int __zero = (vector unsigned int)(0);14695 vector unsigned int __res =14696 __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);14697 __res[__b & 0x3] = __a;14698 return __res;14699}14700 14701static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {14702 const vector float __zero = (vector float)(0);14703 vector float __res = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);14704 __res[__b & 0x3] = __a;14705 return __res;14706}14707 14708#ifdef __VSX__14709static __inline__ vector double __ATTRS_o_ai vec_promote(double __a, int __b) {14710 const vector double __zero = (vector double)(0);14711 vector double __res = __builtin_shufflevector(__zero, __zero, -1, -1);14712 __res[__b & 0x1] = __a;14713 return __res;14714}14715 14716static __inline__ vector signed long long __ATTRS_o_ai14717vec_promote(signed long long __a, int __b) {14718 const vector signed long long __zero = (vector signed long long)(0);14719 vector signed long long __res =14720 __builtin_shufflevector(__zero, __zero, -1, -1);14721 __res[__b & 0x1] = __a;14722 return __res;14723}14724 14725static __inline__ vector unsigned long long __ATTRS_o_ai14726vec_promote(unsigned long long __a, int __b) {14727 const vector unsigned long long __zero = (vector unsigned long long)(0);14728 vector unsigned long long __res =14729 __builtin_shufflevector(__zero, __zero, -1, -1);14730 __res[__b & 0x1] = __a;14731 return __res;14732}14733#endif14734 14735/* vec_splats */14736 14737static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {14738 return (vector signed char)(__a);14739}14740 14741static __inline__ vector unsigned char __ATTRS_o_ai14742vec_splats(unsigned char __a) {14743 return (vector unsigned char)(__a);14744}14745 14746static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {14747 return (vector short)(__a);14748}14749 14750static __inline__ vector unsigned short __ATTRS_o_ai14751vec_splats(unsigned short __a) {14752 return (vector unsigned short)(__a);14753}14754 14755static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {14756 return (vector int)(__a);14757}14758 14759static __inline__ vector unsigned int __ATTRS_o_ai14760vec_splats(unsigned int __a) {14761 return (vector unsigned int)(__a);14762}14763 14764#ifdef __VSX__14765static __inline__ vector signed long long __ATTRS_o_ai14766vec_splats(signed long long __a) {14767 return (vector signed long long)(__a);14768}14769 14770static __inline__ vector unsigned long long __ATTRS_o_ai14771vec_splats(unsigned long long __a) {14772 return (vector unsigned long long)(__a);14773}14774 14775#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \14776 defined(__SIZEOF_INT128__)14777static __inline__ vector signed __int128 __ATTRS_o_ai14778vec_splats(signed __int128 __a) {14779 return (vector signed __int128)(__a);14780}14781 14782static __inline__ vector unsigned __int128 __ATTRS_o_ai14783vec_splats(unsigned __int128 __a) {14784 return (vector unsigned __int128)(__a);14785}14786 14787#endif14788 14789static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {14790 return (vector double)(__a);14791}14792#endif14793 14794static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {14795 return (vector float)(__a);14796}14797 14798/* ----------------------------- predicates --------------------------------- */14799 14800/* vec_all_eq */14801 14802static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,14803 vector signed char __b) {14804 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14805 (vector char)__b);14806}14807 14808static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,14809 vector bool char __b) {14810 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14811 (vector char)__b);14812}14813 14814static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,14815 vector unsigned char __b) {14816 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14817 (vector char)__b);14818}14819 14820static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,14821 vector bool char __b) {14822 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14823 (vector char)__b);14824}14825 14826static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,14827 vector signed char __b) {14828 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14829 (vector char)__b);14830}14831 14832static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,14833 vector unsigned char __b) {14834 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14835 (vector char)__b);14836}14837 14838static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,14839 vector bool char __b) {14840 return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,14841 (vector char)__b);14842}14843 14844static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,14845 vector short __b) {14846 return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);14847}14848 14849static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,14850 vector bool short __b) {14851 return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);14852}14853 14854static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,14855 vector unsigned short __b) {14856 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,14857 (vector short)__b);14858}14859 14860static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,14861 vector bool short __b) {14862 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,14863 (vector short)__b);14864}14865 14866static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,14867 vector short __b) {14868 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,14869 (vector short)__b);14870}14871 14872static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,14873 vector unsigned short __b) {14874 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,14875 (vector short)__b);14876}14877 14878static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,14879 vector bool short __b) {14880 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,14881 (vector short)__b);14882}14883 14884static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,14885 vector pixel __b) {14886 return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,14887 (vector short)__b);14888}14889 14890static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {14891 return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);14892}14893 14894static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,14895 vector bool int __b) {14896 return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);14897}14898 14899static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,14900 vector unsigned int __b) {14901 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,14902 (vector int)__b);14903}14904 14905static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,14906 vector bool int __b) {14907 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,14908 (vector int)__b);14909}14910 14911static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,14912 vector int __b) {14913 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,14914 (vector int)__b);14915}14916 14917static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,14918 vector unsigned int __b) {14919 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,14920 (vector int)__b);14921}14922 14923static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,14924 vector bool int __b) {14925 return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,14926 (vector int)__b);14927}14928 14929#ifdef __VSX__14930static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,14931 vector signed long long __b) {14932#ifdef __POWER8_VECTOR__14933 return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);14934#else14935 // No vcmpequd on Power7 so we xor the two vectors and compare against zero as14936 // 32-bit elements.14937 return vec_all_eq((vector signed int)vec_xor(__a, __b), (vector signed int)0);14938#endif14939}14940 14941static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,14942 vector bool long long __b) {14943 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);14944}14945 14946static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,14947 vector unsigned long long __b) {14948 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);14949}14950 14951static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,14952 vector bool long long __b) {14953 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);14954}14955 14956static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,14957 vector long long __b) {14958 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);14959}14960 14961static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,14962 vector unsigned long long __b) {14963 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);14964}14965 14966static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,14967 vector bool long long __b) {14968 return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);14969}14970#endif14971 14972static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,14973 vector float __b) {14974#ifdef __VSX__14975 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);14976#else14977 return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);14978#endif14979}14980 14981#ifdef __VSX__14982static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,14983 vector double __b) {14984 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);14985}14986#endif14987 14988#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)14989static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a,14990 vector signed __int128 __b) {14991 return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,14992 (vector signed __int128)__b);14993}14994 14995static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a,14996 vector unsigned __int128 __b) {14997 return __builtin_altivec_vcmpequq_p(__CR6_LT, __a,14998 (vector signed __int128)__b);14999}15000 15001static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool __int128 __a,15002 vector bool __int128 __b) {15003 return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,15004 (vector signed __int128)__b);15005}15006#endif15007 15008/* vec_all_ge */15009 15010static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,15011 vector signed char __b) {15012 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);15013}15014 15015static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,15016 vector bool char __b) {15017 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);15018}15019 15020static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,15021 vector unsigned char __b) {15022 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);15023}15024 15025static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,15026 vector bool char __b) {15027 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);15028}15029 15030static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,15031 vector signed char __b) {15032 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, (vector signed char)__a);15033}15034 15035static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,15036 vector unsigned char __b) {15037 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);15038}15039 15040static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,15041 vector bool char __b) {15042 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,15043 (vector unsigned char)__a);15044}15045 15046static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,15047 vector short __b) {15048 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);15049}15050 15051static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,15052 vector bool short __b) {15053 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);15054}15055 15056static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,15057 vector unsigned short __b) {15058 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);15059}15060 15061static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,15062 vector bool short __b) {15063 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,15064 __a);15065}15066 15067static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,15068 vector short __b) {15069 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, (vector signed short)__a);15070}15071 15072static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,15073 vector unsigned short __b) {15074 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,15075 (vector unsigned short)__a);15076}15077 15078static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,15079 vector bool short __b) {15080 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,15081 (vector unsigned short)__a);15082}15083 15084static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {15085 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);15086}15087 15088static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,15089 vector bool int __b) {15090 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);15091}15092 15093static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,15094 vector unsigned int __b) {15095 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);15096}15097 15098static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,15099 vector bool int __b) {15100 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);15101}15102 15103static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,15104 vector int __b) {15105 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, (vector signed int)__a);15106}15107 15108static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,15109 vector unsigned int __b) {15110 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);15111}15112 15113static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,15114 vector bool int __b) {15115 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,15116 (vector unsigned int)__a);15117}15118 15119#ifdef __VSX__15120static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,15121 vector signed long long __b) {15122 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);15123}15124static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,15125 vector bool long long __b) {15126 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,15127 __a);15128}15129 15130static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,15131 vector unsigned long long __b) {15132 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);15133}15134 15135static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,15136 vector bool long long __b) {15137 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,15138 __a);15139}15140 15141static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,15142 vector signed long long __b) {15143 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b,15144 (vector signed long long)__a);15145}15146 15147static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,15148 vector unsigned long long __b) {15149 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,15150 (vector unsigned long long)__a);15151}15152 15153static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,15154 vector bool long long __b) {15155 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,15156 (vector unsigned long long)__a);15157}15158#endif15159 15160static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,15161 vector float __b) {15162#ifdef __VSX__15163 return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);15164#else15165 return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);15166#endif15167}15168 15169#ifdef __VSX__15170static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,15171 vector double __b) {15172 return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);15173}15174#endif15175 15176#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)15177static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed __int128 __a,15178 vector signed __int128 __b) {15179 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __b, __a);15180}15181 15182static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned __int128 __a,15183 vector unsigned __int128 __b) {15184 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __b, __a);15185}15186#endif15187 15188/* vec_all_gt */15189 15190static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,15191 vector signed char __b) {15192 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);15193}15194 15195static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,15196 vector bool char __b) {15197 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);15198}15199 15200static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,15201 vector unsigned char __b) {15202 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);15203}15204 15205static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,15206 vector bool char __b) {15207 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);15208}15209 15210static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,15211 vector signed char __b) {15212 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__a, __b);15213}15214 15215static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,15216 vector unsigned char __b) {15217 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);15218}15219 15220static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,15221 vector bool char __b) {15222 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,15223 (vector unsigned char)__b);15224}15225 15226static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,15227 vector short __b) {15228 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);15229}15230 15231static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,15232 vector bool short __b) {15233 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);15234}15235 15236static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,15237 vector unsigned short __b) {15238 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);15239}15240 15241static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,15242 vector bool short __b) {15243 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,15244 (vector unsigned short)__b);15245}15246 15247static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,15248 vector short __b) {15249 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector signed short)__a, __b);15250}15251 15252static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,15253 vector unsigned short __b) {15254 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,15255 __b);15256}15257 15258static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,15259 vector bool short __b) {15260 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,15261 (vector unsigned short)__b);15262}15263 15264static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {15265 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);15266}15267 15268static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,15269 vector bool int __b) {15270 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);15271}15272 15273static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,15274 vector unsigned int __b) {15275 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);15276}15277 15278static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,15279 vector bool int __b) {15280 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);15281}15282 15283static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,15284 vector int __b) {15285 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector signed int)__a, __b);15286}15287 15288static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,15289 vector unsigned int __b) {15290 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);15291}15292 15293static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,15294 vector bool int __b) {15295 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,15296 (vector unsigned int)__b);15297}15298 15299#ifdef __VSX__15300static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,15301 vector signed long long __b) {15302 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);15303}15304static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,15305 vector bool long long __b) {15306 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,15307 (vector signed long long)__b);15308}15309 15310static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,15311 vector unsigned long long __b) {15312 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);15313}15314 15315static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,15316 vector bool long long __b) {15317 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,15318 (vector unsigned long long)__b);15319}15320 15321static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,15322 vector signed long long __b) {15323 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__a,15324 __b);15325}15326 15327static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,15328 vector unsigned long long __b) {15329 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,15330 __b);15331}15332 15333static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,15334 vector bool long long __b) {15335 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,15336 (vector unsigned long long)__b);15337}15338#endif15339 15340static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,15341 vector float __b) {15342#ifdef __VSX__15343 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);15344#else15345 return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);15346#endif15347}15348 15349#ifdef __VSX__15350static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,15351 vector double __b) {15352 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);15353}15354#endif15355 15356#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)15357static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed __int128 __a,15358 vector signed __int128 __b) {15359 return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __a, __b);15360}15361 15362static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned __int128 __a,15363 vector unsigned __int128 __b) {15364 return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __a, __b);15365}15366#endif15367 15368/* vec_all_in */15369 15370static __inline__ int __attribute__((__always_inline__))15371vec_all_in(vector float __a, vector float __b) {15372 return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);15373}15374 15375/* vec_all_le */15376 15377static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,15378 vector signed char __b) {15379 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);15380}15381 15382static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,15383 vector bool char __b) {15384 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);15385}15386 15387static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,15388 vector unsigned char __b) {15389 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);15390}15391 15392static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,15393 vector bool char __b) {15394 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);15395}15396 15397static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,15398 vector signed char __b) {15399 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__a, __b);15400}15401 15402static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,15403 vector unsigned char __b) {15404 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);15405}15406 15407static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,15408 vector bool char __b) {15409 return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,15410 (vector unsigned char)__b);15411}15412 15413static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,15414 vector short __b) {15415 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);15416}15417 15418static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,15419 vector bool short __b) {15420 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);15421}15422 15423static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,15424 vector unsigned short __b) {15425 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);15426}15427 15428static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,15429 vector bool short __b) {15430 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,15431 (vector unsigned short)__b);15432}15433 15434static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,15435 vector short __b) {15436 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector signed short)__a, __b);15437}15438 15439static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,15440 vector unsigned short __b) {15441 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,15442 __b);15443}15444 15445static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,15446 vector bool short __b) {15447 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,15448 (vector unsigned short)__b);15449}15450 15451static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {15452 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);15453}15454 15455static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,15456 vector bool int __b) {15457 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);15458}15459 15460static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,15461 vector unsigned int __b) {15462 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);15463}15464 15465static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,15466 vector bool int __b) {15467 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);15468}15469 15470static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,15471 vector int __b) {15472 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector signed int)__a, __b);15473}15474 15475static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,15476 vector unsigned int __b) {15477 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);15478}15479 15480static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,15481 vector bool int __b) {15482 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,15483 (vector unsigned int)__b);15484}15485 15486#ifdef __VSX__15487static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,15488 vector signed long long __b) {15489 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);15490}15491 15492static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,15493 vector unsigned long long __b) {15494 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);15495}15496 15497static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,15498 vector bool long long __b) {15499 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,15500 (vector signed long long)__b);15501}15502 15503static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,15504 vector bool long long __b) {15505 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,15506 (vector unsigned long long)__b);15507}15508 15509static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,15510 vector signed long long __b) {15511 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__a,15512 __b);15513}15514 15515static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,15516 vector unsigned long long __b) {15517 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,15518 __b);15519}15520 15521static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,15522 vector bool long long __b) {15523 return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,15524 (vector unsigned long long)__b);15525}15526#endif15527 15528static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,15529 vector float __b) {15530#ifdef __VSX__15531 return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);15532#else15533 return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);15534#endif15535}15536 15537#ifdef __VSX__15538static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,15539 vector double __b) {15540 return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);15541}15542#endif15543 15544#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)15545static __inline__ int __ATTRS_o_ai vec_all_le(vector signed __int128 __a,15546 vector signed __int128 __b) {15547 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __a, __b);15548}15549 15550static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned __int128 __a,15551 vector unsigned __int128 __b) {15552 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __a, __b);15553}15554#endif15555 15556/* vec_all_lt */15557 15558static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,15559 vector signed char __b) {15560 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);15561}15562 15563static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,15564 vector bool char __b) {15565 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);15566}15567 15568static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,15569 vector unsigned char __b) {15570 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);15571}15572 15573static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,15574 vector bool char __b) {15575 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);15576}15577 15578static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,15579 vector signed char __b) {15580 return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, (vector signed char)__a);15581}15582 15583static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,15584 vector unsigned char __b) {15585 return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);15586}15587 15588static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,15589 vector bool char __b) {15590 return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,15591 (vector unsigned char)__a);15592}15593 15594static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,15595 vector short __b) {15596 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);15597}15598 15599static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,15600 vector bool short __b) {15601 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);15602}15603 15604static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,15605 vector unsigned short __b) {15606 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);15607}15608 15609static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,15610 vector bool short __b) {15611 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,15612 __a);15613}15614 15615static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,15616 vector short __b) {15617 return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, (vector signed short)__a);15618}15619 15620static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,15621 vector unsigned short __b) {15622 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,15623 (vector unsigned short)__a);15624}15625 15626static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,15627 vector bool short __b) {15628 return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,15629 (vector unsigned short)__a);15630}15631 15632static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {15633 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);15634}15635 15636static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,15637 vector bool int __b) {15638 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);15639}15640 15641static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,15642 vector unsigned int __b) {15643 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);15644}15645 15646static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,15647 vector bool int __b) {15648 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);15649}15650 15651static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,15652 vector int __b) {15653 return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, (vector signed int)__a);15654}15655 15656static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,15657 vector unsigned int __b) {15658 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);15659}15660 15661static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,15662 vector bool int __b) {15663 return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,15664 (vector unsigned int)__a);15665}15666 15667#ifdef __VSX__15668static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,15669 vector signed long long __b) {15670 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);15671}15672 15673static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,15674 vector unsigned long long __b) {15675 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);15676}15677 15678static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,15679 vector bool long long __b) {15680 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,15681 __a);15682}15683 15684static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,15685 vector bool long long __b) {15686 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,15687 __a);15688}15689 15690static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,15691 vector signed long long __b) {15692 return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b,15693 (vector signed long long)__a);15694}15695 15696static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,15697 vector unsigned long long __b) {15698 return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,15699 (vector unsigned long long)__a);15700}15701 15702static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,15703 vector bool long long __b) {15704 return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,15705 (vector unsigned long long)__a);15706}15707#endif15708 15709static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,15710 vector float __b) {15711#ifdef __VSX__15712 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);15713#else15714 return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);15715#endif15716}15717 15718#ifdef __VSX__15719static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,15720 vector double __b) {15721 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);15722}15723#endif15724 15725#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)15726static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed __int128 __a,15727 vector signed __int128 __b) {15728 return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __b, __a);15729}15730 15731static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned __int128 __a,15732 vector unsigned __int128 __b) {15733 return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __b, __a);15734}15735#endif15736 15737/* vec_all_nan */15738 15739static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {15740#ifdef __VSX__15741 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);15742#else15743 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);15744#endif15745}15746 15747#ifdef __VSX__15748static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {15749 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);15750}15751#endif15752 15753/* vec_all_ne */15754 15755static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,15756 vector signed char __b) {15757 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15758 (vector char)__b);15759}15760 15761static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,15762 vector bool char __b) {15763 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15764 (vector char)__b);15765}15766 15767static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,15768 vector unsigned char __b) {15769 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15770 (vector char)__b);15771}15772 15773static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,15774 vector bool char __b) {15775 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15776 (vector char)__b);15777}15778 15779static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,15780 vector signed char __b) {15781 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15782 (vector char)__b);15783}15784 15785static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,15786 vector unsigned char __b) {15787 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15788 (vector char)__b);15789}15790 15791static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,15792 vector bool char __b) {15793 return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,15794 (vector char)__b);15795}15796 15797static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,15798 vector short __b) {15799 return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);15800}15801 15802static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,15803 vector bool short __b) {15804 return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);15805}15806 15807static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,15808 vector unsigned short __b) {15809 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,15810 (vector short)__b);15811}15812 15813static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,15814 vector bool short __b) {15815 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,15816 (vector short)__b);15817}15818 15819static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,15820 vector short __b) {15821 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,15822 (vector short)__b);15823}15824 15825static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,15826 vector unsigned short __b) {15827 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,15828 (vector short)__b);15829}15830 15831static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,15832 vector bool short __b) {15833 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,15834 (vector short)__b);15835}15836 15837static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,15838 vector pixel __b) {15839 return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,15840 (vector short)__b);15841}15842 15843static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {15844 return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);15845}15846 15847static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,15848 vector bool int __b) {15849 return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);15850}15851 15852static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,15853 vector unsigned int __b) {15854 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,15855 (vector int)__b);15856}15857 15858static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,15859 vector bool int __b) {15860 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,15861 (vector int)__b);15862}15863 15864static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,15865 vector int __b) {15866 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,15867 (vector int)__b);15868}15869 15870static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,15871 vector unsigned int __b) {15872 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,15873 (vector int)__b);15874}15875 15876static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,15877 vector bool int __b) {15878 return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,15879 (vector int)__b);15880}15881 15882#ifdef __VSX__15883static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,15884 vector signed long long __b) {15885 return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);15886}15887 15888static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,15889 vector unsigned long long __b) {15890 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,15891 (vector long long)__b);15892}15893 15894static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,15895 vector bool long long __b) {15896 return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,15897 (vector signed long long)__b);15898}15899 15900static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,15901 vector bool long long __b) {15902 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,15903 (vector signed long long)__b);15904}15905 15906static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,15907 vector signed long long __b) {15908 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,15909 (vector signed long long)__b);15910}15911 15912static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,15913 vector unsigned long long __b) {15914 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,15915 (vector signed long long)__b);15916}15917 15918static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,15919 vector bool long long __b) {15920 return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,15921 (vector signed long long)__b);15922}15923#endif15924 15925static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,15926 vector float __b) {15927#ifdef __VSX__15928 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);15929#else15930 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);15931#endif15932}15933 15934#ifdef __VSX__15935static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,15936 vector double __b) {15937 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);15938}15939#endif15940 15941#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)15942static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a,15943 vector signed __int128 __b) {15944 return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,15945 __b);15946}15947 15948static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a,15949 vector unsigned __int128 __b) {15950 return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a,15951 (vector signed __int128)__b);15952}15953 15954static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool __int128 __a,15955 vector bool __int128 __b) {15956 return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,15957 (vector signed __int128)__b);15958}15959#endif15960 15961/* vec_all_nge */15962 15963static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,15964 vector float __b) {15965#ifdef __VSX__15966 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);15967#else15968 return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);15969#endif15970}15971 15972#ifdef __VSX__15973static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,15974 vector double __b) {15975 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);15976}15977#endif15978 15979/* vec_all_ngt */15980 15981static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,15982 vector float __b) {15983#ifdef __VSX__15984 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);15985#else15986 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);15987#endif15988}15989 15990#ifdef __VSX__15991static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,15992 vector double __b) {15993 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);15994}15995#endif15996 15997/* vec_all_nle */15998 15999static __inline__ int __ATTRS_o_ai16000vec_all_nle(vector float __a, vector float __b) {16001#ifdef __VSX__16002 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __b, __a);16003#else16004 return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);16005#endif16006}16007 16008#ifdef __VSX__16009static __inline__ int __ATTRS_o_ai vec_all_nle(vector double __a,16010 vector double __b) {16011 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __b, __a);16012}16013#endif16014 16015/* vec_all_nlt */16016 16017static __inline__ int __ATTRS_o_ai16018vec_all_nlt(vector float __a, vector float __b) {16019#ifdef __VSX__16020 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __b, __a);16021#else16022 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);16023#endif16024}16025 16026#ifdef __VSX__16027static __inline__ int __ATTRS_o_ai vec_all_nlt(vector double __a,16028 vector double __b) {16029 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __b, __a);16030}16031#endif16032 16033/* vec_all_numeric */16034 16035static __inline__ int __ATTRS_o_ai16036vec_all_numeric(vector float __a) {16037#ifdef __VSX__16038 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __a);16039#else16040 return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);16041#endif16042}16043 16044#ifdef __VSX__16045static __inline__ int __ATTRS_o_ai vec_all_numeric(vector double __a) {16046 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __a);16047}16048#endif16049 16050/* vec_any_eq */16051 16052static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,16053 vector signed char __b) {16054 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16055 (vector char)__b);16056}16057 16058static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,16059 vector bool char __b) {16060 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16061 (vector char)__b);16062}16063 16064static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,16065 vector unsigned char __b) {16066 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16067 (vector char)__b);16068}16069 16070static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,16071 vector bool char __b) {16072 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16073 (vector char)__b);16074}16075 16076static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,16077 vector signed char __b) {16078 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16079 (vector char)__b);16080}16081 16082static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,16083 vector unsigned char __b) {16084 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16085 (vector char)__b);16086}16087 16088static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,16089 vector bool char __b) {16090 return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,16091 (vector char)__b);16092}16093 16094static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,16095 vector short __b) {16096 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);16097}16098 16099static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,16100 vector bool short __b) {16101 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);16102}16103 16104static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,16105 vector unsigned short __b) {16106 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,16107 (vector short)__b);16108}16109 16110static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,16111 vector bool short __b) {16112 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,16113 (vector short)__b);16114}16115 16116static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,16117 vector short __b) {16118 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,16119 (vector short)__b);16120}16121 16122static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,16123 vector unsigned short __b) {16124 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,16125 (vector short)__b);16126}16127 16128static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,16129 vector bool short __b) {16130 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,16131 (vector short)__b);16132}16133 16134static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,16135 vector pixel __b) {16136 return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,16137 (vector short)__b);16138}16139 16140static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {16141 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);16142}16143 16144static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,16145 vector bool int __b) {16146 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);16147}16148 16149static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,16150 vector unsigned int __b) {16151 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,16152 (vector int)__b);16153}16154 16155static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,16156 vector bool int __b) {16157 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,16158 (vector int)__b);16159}16160 16161static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,16162 vector int __b) {16163 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,16164 (vector int)__b);16165}16166 16167static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,16168 vector unsigned int __b) {16169 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,16170 (vector int)__b);16171}16172 16173static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,16174 vector bool int __b) {16175 return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,16176 (vector int)__b);16177}16178 16179#ifdef __VSX__16180static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,16181 vector signed long long __b) {16182 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);16183}16184 16185static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,16186 vector unsigned long long __b) {16187 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,16188 (vector long long)__b);16189}16190 16191static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,16192 vector bool long long __b) {16193 return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,16194 (vector signed long long)__b);16195}16196 16197static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,16198 vector bool long long __b) {16199 return __builtin_altivec_vcmpequd_p(16200 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);16201}16202 16203static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,16204 vector signed long long __b) {16205 return __builtin_altivec_vcmpequd_p(16206 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);16207}16208 16209static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,16210 vector unsigned long long __b) {16211 return __builtin_altivec_vcmpequd_p(16212 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);16213}16214 16215static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,16216 vector bool long long __b) {16217 return __builtin_altivec_vcmpequd_p(16218 __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);16219}16220#endif16221 16222static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,16223 vector float __b) {16224#ifdef __VSX__16225 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);16226#else16227 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);16228#endif16229}16230 16231#ifdef __VSX__16232static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,16233 vector double __b) {16234 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);16235}16236#endif16237 16238#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)16239static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a,16240 vector signed __int128 __b) {16241 return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV,16242 (vector unsigned __int128)__a, __b);16243}16244 16245static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a,16246 vector unsigned __int128 __b) {16247 return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a,16248 (vector signed __int128)__b);16249}16250 16251static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool __int128 __a,16252 vector bool __int128 __b) {16253 return __builtin_altivec_vcmpequq_p(16254 __CR6_EQ_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);16255}16256#endif16257 16258/* vec_any_ge */16259 16260static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,16261 vector signed char __b) {16262 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);16263}16264 16265static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,16266 vector bool char __b) {16267 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,16268 __a);16269}16270 16271static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,16272 vector unsigned char __b) {16273 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);16274}16275 16276static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,16277 vector bool char __b) {16278 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,16279 __a);16280}16281 16282static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,16283 vector signed char __b) {16284 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b,16285 (vector signed char)__a);16286}16287 16288static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,16289 vector unsigned char __b) {16290 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,16291 (vector unsigned char)__a);16292}16293 16294static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,16295 vector bool char __b) {16296 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,16297 (vector unsigned char)__a);16298}16299 16300static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,16301 vector short __b) {16302 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);16303}16304 16305static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,16306 vector bool short __b) {16307 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);16308}16309 16310static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,16311 vector unsigned short __b) {16312 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);16313}16314 16315static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,16316 vector bool short __b) {16317 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,16318 __a);16319}16320 16321static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,16322 vector short __b) {16323 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b,16324 (vector signed short)__a);16325}16326 16327static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,16328 vector unsigned short __b) {16329 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,16330 (vector unsigned short)__a);16331}16332 16333static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,16334 vector bool short __b) {16335 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,16336 (vector unsigned short)__a);16337}16338 16339static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {16340 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);16341}16342 16343static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,16344 vector bool int __b) {16345 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);16346}16347 16348static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,16349 vector unsigned int __b) {16350 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);16351}16352 16353static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,16354 vector bool int __b) {16355 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,16356 __a);16357}16358 16359static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,16360 vector int __b) {16361 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b,16362 (vector signed int)__a);16363}16364 16365static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,16366 vector unsigned int __b) {16367 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,16368 (vector unsigned int)__a);16369}16370 16371static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,16372 vector bool int __b) {16373 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,16374 (vector unsigned int)__a);16375}16376 16377#ifdef __VSX__16378static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,16379 vector signed long long __b) {16380 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);16381}16382 16383static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,16384 vector unsigned long long __b) {16385 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);16386}16387 16388static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,16389 vector bool long long __b) {16390 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,16391 (vector signed long long)__b, __a);16392}16393 16394static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,16395 vector bool long long __b) {16396 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,16397 (vector unsigned long long)__b, __a);16398}16399 16400static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,16401 vector signed long long __b) {16402 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b,16403 (vector signed long long)__a);16404}16405 16406static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,16407 vector unsigned long long __b) {16408 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,16409 (vector unsigned long long)__a);16410}16411 16412static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,16413 vector bool long long __b) {16414 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,16415 (vector unsigned long long)__b,16416 (vector unsigned long long)__a);16417}16418#endif16419 16420static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,16421 vector float __b) {16422#ifdef __VSX__16423 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);16424#else16425 return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);16426#endif16427}16428 16429#ifdef __VSX__16430static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,16431 vector double __b) {16432 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);16433}16434#endif16435 16436#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)16437static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed __int128 __a,16438 vector signed __int128 __b) {16439 return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __b, __a);16440}16441 16442static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned __int128 __a,16443 vector unsigned __int128 __b) {16444 return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __b, __a);16445}16446#endif16447 16448/* vec_any_gt */16449 16450static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,16451 vector signed char __b) {16452 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);16453}16454 16455static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,16456 vector bool char __b) {16457 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,16458 (vector signed char)__b);16459}16460 16461static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,16462 vector unsigned char __b) {16463 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);16464}16465 16466static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,16467 vector bool char __b) {16468 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,16469 (vector unsigned char)__b);16470}16471 16472static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,16473 vector signed char __b) {16474 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__a,16475 __b);16476}16477 16478static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,16479 vector unsigned char __b) {16480 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,16481 __b);16482}16483 16484static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,16485 vector bool char __b) {16486 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,16487 (vector unsigned char)__b);16488}16489 16490static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,16491 vector short __b) {16492 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);16493}16494 16495static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,16496 vector bool short __b) {16497 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);16498}16499 16500static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,16501 vector unsigned short __b) {16502 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);16503}16504 16505static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,16506 vector bool short __b) {16507 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,16508 (vector unsigned short)__b);16509}16510 16511static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,16512 vector short __b) {16513 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector signed short)__a,16514 __b);16515}16516 16517static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,16518 vector unsigned short __b) {16519 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,16520 __b);16521}16522 16523static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,16524 vector bool short __b) {16525 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,16526 (vector unsigned short)__b);16527}16528 16529static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {16530 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);16531}16532 16533static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,16534 vector bool int __b) {16535 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);16536}16537 16538static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,16539 vector unsigned int __b) {16540 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);16541}16542 16543static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,16544 vector bool int __b) {16545 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,16546 (vector unsigned int)__b);16547}16548 16549static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,16550 vector int __b) {16551 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector signed int)__a,16552 __b);16553}16554 16555static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,16556 vector unsigned int __b) {16557 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,16558 __b);16559}16560 16561static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,16562 vector bool int __b) {16563 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,16564 (vector unsigned int)__b);16565}16566 16567#ifdef __VSX__16568static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,16569 vector signed long long __b) {16570 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);16571}16572 16573static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,16574 vector unsigned long long __b) {16575 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);16576}16577 16578static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,16579 vector bool long long __b) {16580 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,16581 (vector signed long long)__b);16582}16583 16584static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,16585 vector bool long long __b) {16586 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,16587 (vector unsigned long long)__b);16588}16589 16590static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,16591 vector signed long long __b) {16592 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,16593 (vector signed long long)__a, __b);16594}16595 16596static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,16597 vector unsigned long long __b) {16598 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,16599 (vector unsigned long long)__a, __b);16600}16601 16602static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,16603 vector bool long long __b) {16604 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,16605 (vector unsigned long long)__a,16606 (vector unsigned long long)__b);16607}16608#endif16609 16610static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,16611 vector float __b) {16612#ifdef __VSX__16613 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);16614#else16615 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);16616#endif16617}16618 16619#ifdef __VSX__16620static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,16621 vector double __b) {16622 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);16623}16624#endif16625 16626#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)16627static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed __int128 __a,16628 vector signed __int128 __b) {16629 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __a, __b);16630}16631 16632static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned __int128 __a,16633 vector unsigned __int128 __b) {16634 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __a, __b);16635}16636#endif16637 16638/* vec_any_le */16639 16640static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,16641 vector signed char __b) {16642 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);16643}16644 16645static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,16646 vector bool char __b) {16647 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,16648 (vector signed char)__b);16649}16650 16651static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,16652 vector unsigned char __b) {16653 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);16654}16655 16656static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,16657 vector bool char __b) {16658 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,16659 (vector unsigned char)__b);16660}16661 16662static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,16663 vector signed char __b) {16664 return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__a,16665 __b);16666}16667 16668static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,16669 vector unsigned char __b) {16670 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,16671 __b);16672}16673 16674static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,16675 vector bool char __b) {16676 return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,16677 (vector unsigned char)__b);16678}16679 16680static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,16681 vector short __b) {16682 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);16683}16684 16685static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,16686 vector bool short __b) {16687 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);16688}16689 16690static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,16691 vector unsigned short __b) {16692 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);16693}16694 16695static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,16696 vector bool short __b) {16697 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,16698 (vector unsigned short)__b);16699}16700 16701static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,16702 vector short __b) {16703 return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector signed short)__a,16704 __b);16705}16706 16707static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,16708 vector unsigned short __b) {16709 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,16710 __b);16711}16712 16713static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,16714 vector bool short __b) {16715 return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,16716 (vector unsigned short)__b);16717}16718 16719static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {16720 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);16721}16722 16723static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,16724 vector bool int __b) {16725 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);16726}16727 16728static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,16729 vector unsigned int __b) {16730 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);16731}16732 16733static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,16734 vector bool int __b) {16735 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,16736 (vector unsigned int)__b);16737}16738 16739static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,16740 vector int __b) {16741 return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector signed int)__a,16742 __b);16743}16744 16745static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,16746 vector unsigned int __b) {16747 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,16748 __b);16749}16750 16751static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,16752 vector bool int __b) {16753 return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,16754 (vector unsigned int)__b);16755}16756 16757#ifdef __VSX__16758static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,16759 vector signed long long __b) {16760 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);16761}16762 16763static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,16764 vector unsigned long long __b) {16765 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);16766}16767 16768static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,16769 vector bool long long __b) {16770 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,16771 (vector signed long long)__b);16772}16773 16774static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,16775 vector bool long long __b) {16776 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,16777 (vector unsigned long long)__b);16778}16779 16780static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,16781 vector signed long long __b) {16782 return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,16783 (vector signed long long)__a, __b);16784}16785 16786static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,16787 vector unsigned long long __b) {16788 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,16789 (vector unsigned long long)__a, __b);16790}16791 16792static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,16793 vector bool long long __b) {16794 return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,16795 (vector unsigned long long)__a,16796 (vector unsigned long long)__b);16797}16798#endif16799 16800static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,16801 vector float __b) {16802#ifdef __VSX__16803 return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);16804#else16805 return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);16806#endif16807}16808 16809#ifdef __VSX__16810static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,16811 vector double __b) {16812 return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);16813}16814#endif16815 16816#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)16817static __inline__ int __ATTRS_o_ai vec_any_le(vector signed __int128 __a,16818 vector signed __int128 __b) {16819 return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __a, __b);16820}16821 16822static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned __int128 __a,16823 vector unsigned __int128 __b) {16824 return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __a, __b);16825}16826#endif16827 16828/* vec_any_lt */16829 16830static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,16831 vector signed char __b) {16832 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);16833}16834 16835static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,16836 vector bool char __b) {16837 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,16838 __a);16839}16840 16841static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,16842 vector unsigned char __b) {16843 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);16844}16845 16846static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,16847 vector bool char __b) {16848 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,16849 __a);16850}16851 16852static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,16853 vector signed char __b) {16854 return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b,16855 (vector signed char)__a);16856}16857 16858static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,16859 vector unsigned char __b) {16860 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,16861 (vector unsigned char)__a);16862}16863 16864static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,16865 vector bool char __b) {16866 return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,16867 (vector unsigned char)__a);16868}16869 16870static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,16871 vector short __b) {16872 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);16873}16874 16875static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,16876 vector bool short __b) {16877 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);16878}16879 16880static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,16881 vector unsigned short __b) {16882 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);16883}16884 16885static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,16886 vector bool short __b) {16887 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,16888 __a);16889}16890 16891static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,16892 vector short __b) {16893 return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b,16894 (vector signed short)__a);16895}16896 16897static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,16898 vector unsigned short __b) {16899 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,16900 (vector unsigned short)__a);16901}16902 16903static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,16904 vector bool short __b) {16905 return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,16906 (vector unsigned short)__a);16907}16908 16909static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {16910 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);16911}16912 16913static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,16914 vector bool int __b) {16915 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);16916}16917 16918static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,16919 vector unsigned int __b) {16920 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);16921}16922 16923static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,16924 vector bool int __b) {16925 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,16926 __a);16927}16928 16929static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,16930 vector int __b) {16931 return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b,16932 (vector signed int)__a);16933}16934 16935static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,16936 vector unsigned int __b) {16937 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,16938 (vector unsigned int)__a);16939}16940 16941static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,16942 vector bool int __b) {16943 return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,16944 (vector unsigned int)__a);16945}16946 16947#ifdef __VSX__16948static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,16949 vector signed long long __b) {16950 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);16951}16952 16953static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,16954 vector unsigned long long __b) {16955 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);16956}16957 16958static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,16959 vector bool long long __b) {16960 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,16961 (vector signed long long)__b, __a);16962}16963 16964static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,16965 vector bool long long __b) {16966 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,16967 (vector unsigned long long)__b, __a);16968}16969 16970static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,16971 vector signed long long __b) {16972 return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b,16973 (vector signed long long)__a);16974}16975 16976static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,16977 vector unsigned long long __b) {16978 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,16979 (vector unsigned long long)__a);16980}16981 16982static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,16983 vector bool long long __b) {16984 return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,16985 (vector unsigned long long)__b,16986 (vector unsigned long long)__a);16987}16988#endif16989 16990static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,16991 vector float __b) {16992#ifdef __VSX__16993 return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);16994#else16995 return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);16996#endif16997}16998 16999#ifdef __VSX__17000static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,17001 vector double __b) {17002 return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);17003}17004#endif17005 17006#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)17007static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed __int128 __a,17008 vector signed __int128 __b) {17009 return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __b, __a);17010}17011 17012static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,17013 vector unsigned __int128 __b) {17014 return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __b, __a);17015}17016#endif17017 17018/* vec_any_nan */17019 17020static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {17021#ifdef __VSX__17022 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);17023#else17024 return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);17025#endif17026}17027#ifdef __VSX__17028static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {17029 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);17030}17031#endif17032 17033/* vec_any_ne */17034 17035static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,17036 vector signed char __b) {17037 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17038 (vector char)__b);17039}17040 17041static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,17042 vector bool char __b) {17043 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17044 (vector char)__b);17045}17046 17047static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,17048 vector unsigned char __b) {17049 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17050 (vector char)__b);17051}17052 17053static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,17054 vector bool char __b) {17055 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17056 (vector char)__b);17057}17058 17059static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,17060 vector signed char __b) {17061 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17062 (vector char)__b);17063}17064 17065static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,17066 vector unsigned char __b) {17067 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17068 (vector char)__b);17069}17070 17071static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,17072 vector bool char __b) {17073 return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,17074 (vector char)__b);17075}17076 17077static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,17078 vector short __b) {17079 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);17080}17081 17082static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,17083 vector bool short __b) {17084 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);17085}17086 17087static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,17088 vector unsigned short __b) {17089 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,17090 (vector short)__b);17091}17092 17093static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,17094 vector bool short __b) {17095 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,17096 (vector short)__b);17097}17098 17099static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,17100 vector short __b) {17101 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,17102 (vector short)__b);17103}17104 17105static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,17106 vector unsigned short __b) {17107 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,17108 (vector short)__b);17109}17110 17111static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,17112 vector bool short __b) {17113 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,17114 (vector short)__b);17115}17116 17117static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,17118 vector pixel __b) {17119 return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,17120 (vector short)__b);17121}17122 17123static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {17124 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);17125}17126 17127static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,17128 vector bool int __b) {17129 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);17130}17131 17132static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,17133 vector unsigned int __b) {17134 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,17135 (vector int)__b);17136}17137 17138static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,17139 vector bool int __b) {17140 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,17141 (vector int)__b);17142}17143 17144static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,17145 vector int __b) {17146 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,17147 (vector int)__b);17148}17149 17150static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,17151 vector unsigned int __b) {17152 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,17153 (vector int)__b);17154}17155 17156static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,17157 vector bool int __b) {17158 return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,17159 (vector int)__b);17160}17161 17162#ifdef __VSX__17163static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,17164 vector signed long long __b) {17165#ifdef __POWER8_VECTOR__17166 return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);17167#else17168 // Take advantage of the optimized sequence for vec_all_eq when vcmpequd is17169 // not available.17170 return !vec_all_eq(__a, __b);17171#endif17172}17173 17174static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,17175 vector unsigned long long __b) {17176 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);17177}17178 17179static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,17180 vector bool long long __b) {17181 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);17182}17183 17184static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,17185 vector bool long long __b) {17186 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);17187}17188 17189static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,17190 vector signed long long __b) {17191 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);17192}17193 17194static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,17195 vector unsigned long long __b) {17196 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);17197}17198 17199static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,17200 vector bool long long __b) {17201 return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);17202}17203#endif17204 17205static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,17206 vector float __b) {17207#ifdef __VSX__17208 return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);17209#else17210 return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);17211#endif17212}17213 17214#ifdef __VSX__17215static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,17216 vector double __b) {17217 return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);17218}17219#endif17220 17221#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)17222static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a,17223 vector signed __int128 __b) {17224 return __builtin_altivec_vcmpequq_p(__CR6_LT_REV,17225 (vector unsigned __int128)__a, __b);17226}17227 17228static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,17229 vector unsigned __int128 __b) {17230 return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a,17231 (vector signed __int128)__b);17232}17233 17234static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool __int128 __a,17235 vector bool __int128 __b) {17236 return __builtin_altivec_vcmpequq_p(17237 __CR6_LT_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);17238}17239#endif17240 17241/* vec_any_nge */17242 17243static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,17244 vector float __b) {17245#ifdef __VSX__17246 return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);17247#else17248 return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);17249#endif17250}17251 17252#ifdef __VSX__17253static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,17254 vector double __b) {17255 return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);17256}17257#endif17258 17259/* vec_any_ngt */17260 17261static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,17262 vector float __b) {17263#ifdef __VSX__17264 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);17265#else17266 return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);17267#endif17268}17269 17270#ifdef __VSX__17271static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,17272 vector double __b) {17273 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);17274}17275#endif17276 17277/* vec_any_nle */17278 17279static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,17280 vector float __b) {17281#ifdef __VSX__17282 return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);17283#else17284 return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);17285#endif17286}17287 17288#ifdef __VSX__17289static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,17290 vector double __b) {17291 return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);17292}17293#endif17294 17295/* vec_any_nlt */17296 17297static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,17298 vector float __b) {17299#ifdef __VSX__17300 return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);17301#else17302 return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);17303#endif17304}17305 17306#ifdef __VSX__17307static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,17308 vector double __b) {17309 return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);17310}17311#endif17312 17313/* vec_any_numeric */17314 17315static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {17316#ifdef __VSX__17317 return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);17318#else17319 return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);17320#endif17321}17322 17323#ifdef __VSX__17324static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {17325 return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);17326}17327#endif17328 17329/* vec_any_out */17330 17331static __inline__ int __attribute__((__always_inline__))17332vec_any_out(vector float __a, vector float __b) {17333 return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);17334}17335 17336/* Power 8 Crypto functions17337Note: We diverge from the current GCC implementation with regard17338to cryptography and related functions as follows:17339- Only the SHA and AES instructions and builtins are disabled by -mno-crypto17340- The remaining ones are only available on Power8 and up so17341 require -mpower8-vector17342The justification for this is that export requirements require that17343Category:Vector.Crypto is optional (i.e. compliant hardware may not provide17344support). As a result, we need to be able to turn off support for those.17345The remaining ones (currently controlled by -mcrypto for GCC) still17346need to be provided on compliant hardware even if Vector.Crypto is not17347provided.17348*/17349#ifdef __CRYPTO__17350#define vec_sbox_be __builtin_altivec_crypto_vsbox17351#define vec_cipher_be __builtin_altivec_crypto_vcipher17352#define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast17353#define vec_ncipher_be __builtin_altivec_crypto_vncipher17354#define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast17355 17356#ifdef __VSX__17357static __inline__ vector unsigned char __attribute__((__always_inline__))17358__builtin_crypto_vsbox(vector unsigned char __a) {17359 return __builtin_altivec_crypto_vsbox(__a);17360}17361 17362static __inline__ vector unsigned char __attribute__((__always_inline__))17363__builtin_crypto_vcipher(vector unsigned char __a,17364 vector unsigned char __b) {17365 return __builtin_altivec_crypto_vcipher(__a, __b);17366}17367 17368static __inline__ vector unsigned char __attribute__((__always_inline__))17369__builtin_crypto_vcipherlast(vector unsigned char __a,17370 vector unsigned char __b) {17371 return __builtin_altivec_crypto_vcipherlast(__a, __b);17372}17373 17374static __inline__ vector unsigned char __attribute__((__always_inline__))17375__builtin_crypto_vncipher(vector unsigned char __a,17376 vector unsigned char __b) {17377 return __builtin_altivec_crypto_vncipher(__a, __b);17378}17379 17380static __inline__ vector unsigned char __attribute__((__always_inline__))17381__builtin_crypto_vncipherlast(vector unsigned char __a,17382 vector unsigned char __b) {17383 return __builtin_altivec_crypto_vncipherlast(__a, __b);17384}17385#endif /* __VSX__ */17386 17387#define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad17388#define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw17389 17390#define vec_shasigma_be(X, Y, Z) \17391 _Generic((X), vector unsigned int \17392 : __builtin_crypto_vshasigmaw, vector unsigned long long \17393 : __builtin_crypto_vshasigmad)((X), (Y), (Z))17394#endif17395 17396#ifdef __POWER8_VECTOR__17397static __inline__ vector bool char __ATTRS_o_ai17398vec_permxor(vector bool char __a, vector bool char __b,17399 vector bool char __c) {17400 return (vector bool char)__builtin_altivec_crypto_vpermxor(17401 (vector unsigned char)__a, (vector unsigned char)__b,17402 (vector unsigned char)__c);17403}17404 17405static __inline__ vector signed char __ATTRS_o_ai17406vec_permxor(vector signed char __a, vector signed char __b,17407 vector signed char __c) {17408 return (vector signed char)__builtin_altivec_crypto_vpermxor(17409 (vector unsigned char)__a, (vector unsigned char)__b,17410 (vector unsigned char)__c);17411}17412 17413static __inline__ vector unsigned char __ATTRS_o_ai17414vec_permxor(vector unsigned char __a, vector unsigned char __b,17415 vector unsigned char __c) {17416 return __builtin_altivec_crypto_vpermxor(__a, __b, __c);17417}17418 17419static __inline__ vector unsigned char __ATTRS_o_ai17420__builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,17421 vector unsigned char __c) {17422 return __builtin_altivec_crypto_vpermxor(__a, __b, __c);17423}17424 17425static __inline__ vector unsigned short __ATTRS_o_ai17426__builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,17427 vector unsigned short __c) {17428 return (vector unsigned short)__builtin_altivec_crypto_vpermxor(17429 (vector unsigned char)__a, (vector unsigned char)__b,17430 (vector unsigned char)__c);17431}17432 17433static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(17434 vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {17435 return (vector unsigned int)__builtin_altivec_crypto_vpermxor(17436 (vector unsigned char)__a, (vector unsigned char)__b,17437 (vector unsigned char)__c);17438}17439 17440static __inline__ vector unsigned long long __ATTRS_o_ai17441__builtin_crypto_vpermxor(vector unsigned long long __a,17442 vector unsigned long long __b,17443 vector unsigned long long __c) {17444 return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(17445 (vector unsigned char)__a, (vector unsigned char)__b,17446 (vector unsigned char)__c);17447}17448 17449static __inline__ vector unsigned char __ATTRS_o_ai17450__builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {17451 return __builtin_altivec_crypto_vpmsumb(__a, __b);17452}17453 17454static __inline__ vector unsigned short __ATTRS_o_ai17455__builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {17456 return __builtin_altivec_crypto_vpmsumh(__a, __b);17457}17458 17459static __inline__ vector unsigned int __ATTRS_o_ai17460__builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {17461 return __builtin_altivec_crypto_vpmsumw(__a, __b);17462}17463 17464static __inline__ vector unsigned long long __ATTRS_o_ai17465__builtin_crypto_vpmsumb(vector unsigned long long __a,17466 vector unsigned long long __b) {17467 return __builtin_altivec_crypto_vpmsumd(__a, __b);17468}17469 17470static __inline__ vector signed char __ATTRS_o_ai17471vec_vgbbd(vector signed char __a) {17472 return (vector signed char)__builtin_altivec_vgbbd((vector unsigned char)__a);17473}17474 17475#define vec_pmsum_be __builtin_crypto_vpmsumb17476#define vec_gb __builtin_altivec_vgbbd17477 17478static __inline__ vector unsigned char __ATTRS_o_ai17479vec_vgbbd(vector unsigned char __a) {17480 return __builtin_altivec_vgbbd(__a);17481}17482 17483static __inline__ vector signed long long __ATTRS_o_ai17484vec_gbb(vector signed long long __a) {17485 return (vector signed long long)__builtin_altivec_vgbbd(17486 (vector unsigned char)__a);17487}17488 17489static __inline__ vector unsigned long long __ATTRS_o_ai17490vec_gbb(vector unsigned long long __a) {17491 return (vector unsigned long long)__builtin_altivec_vgbbd(17492 (vector unsigned char)__a);17493}17494 17495static __inline__ vector long long __ATTRS_o_ai17496vec_vbpermq(vector signed char __a, vector signed char __b) {17497 return (vector long long)__builtin_altivec_vbpermq((vector unsigned char)__a,17498 (vector unsigned char)__b);17499}17500 17501static __inline__ vector long long __ATTRS_o_ai17502vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {17503 return (vector long long)__builtin_altivec_vbpermq(__a, __b);17504}17505 17506#if defined(__powerpc64__) && defined(__SIZEOF_INT128__)17507static __inline__ vector unsigned long long __ATTRS_o_ai17508vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {17509 return __builtin_altivec_vbpermq((vector unsigned char)__a,17510 (vector unsigned char)__b);17511}17512#endif17513static __inline__ vector unsigned char __ATTRS_o_ai17514vec_bperm(vector unsigned char __a, vector unsigned char __b) {17515 return (vector unsigned char)__builtin_altivec_vbpermq(__a, __b);17516}17517#endif // __POWER8_VECTOR__17518#ifdef __POWER9_VECTOR__17519static __inline__ vector unsigned long long __ATTRS_o_ai17520vec_bperm(vector unsigned long long __a, vector unsigned char __b) {17521 return __builtin_altivec_vbpermd(__a, __b);17522}17523#endif17524 17525 17526/* vec_reve */17527 17528static __inline__ __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {17529 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,17530 5, 4, 3, 2, 1, 0);17531}17532 17533static __inline__ __ATTRS_o_ai vector signed char17534vec_reve(vector signed char __a) {17535 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,17536 5, 4, 3, 2, 1, 0);17537}17538 17539static __inline__ __ATTRS_o_ai vector unsigned char17540vec_reve(vector unsigned char __a) {17541 return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,17542 5, 4, 3, 2, 1, 0);17543}17544 17545static __inline__ __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {17546 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);17547}17548 17549static __inline__ __ATTRS_o_ai vector signed int17550vec_reve(vector signed int __a) {17551 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);17552}17553 17554static __inline__ __ATTRS_o_ai vector unsigned int17555vec_reve(vector unsigned int __a) {17556 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);17557}17558 17559static __inline__ __ATTRS_o_ai vector bool short17560vec_reve(vector bool short __a) {17561 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);17562}17563 17564static __inline__ __ATTRS_o_ai vector signed short17565vec_reve(vector signed short __a) {17566 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);17567}17568 17569static __inline__ __ATTRS_o_ai vector unsigned short17570vec_reve(vector unsigned short __a) {17571 return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);17572}17573 17574static __inline__ __ATTRS_o_ai vector float vec_reve(vector float __a) {17575 return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);17576}17577 17578#ifdef __VSX__17579static __inline__ __ATTRS_o_ai vector bool long long17580vec_reve(vector bool long long __a) {17581 return __builtin_shufflevector(__a, __a, 1, 0);17582}17583 17584static __inline__ __ATTRS_o_ai vector signed long long17585vec_reve(vector signed long long __a) {17586 return __builtin_shufflevector(__a, __a, 1, 0);17587}17588 17589static __inline__ __ATTRS_o_ai vector unsigned long long17590vec_reve(vector unsigned long long __a) {17591 return __builtin_shufflevector(__a, __a, 1, 0);17592}17593 17594static __inline__ __ATTRS_o_ai vector double vec_reve(vector double __a) {17595 return __builtin_shufflevector(__a, __a, 1, 0);17596}17597#endif17598 17599/* vec_revb */17600static __inline__ vector bool char __ATTRS_o_ai17601vec_revb(vector bool char __a) {17602 return __a;17603}17604 17605static __inline__ vector signed char __ATTRS_o_ai17606vec_revb(vector signed char __a) {17607 return __a;17608}17609 17610static __inline__ vector unsigned char __ATTRS_o_ai17611vec_revb(vector unsigned char __a) {17612 return __a;17613}17614 17615static __inline__ vector bool short __ATTRS_o_ai17616vec_revb(vector bool short __a) {17617 vector unsigned char __indices =17618 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };17619 return vec_perm(__a, __a, __indices);17620}17621 17622static __inline__ vector signed short __ATTRS_o_ai17623vec_revb(vector signed short __a) {17624 vector unsigned char __indices =17625 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };17626 return vec_perm(__a, __a, __indices);17627}17628 17629static __inline__ vector unsigned short __ATTRS_o_ai17630vec_revb(vector unsigned short __a) {17631 vector unsigned char __indices =17632 { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };17633 return vec_perm(__a, __a, __indices);17634}17635 17636static __inline__ vector bool int __ATTRS_o_ai17637vec_revb(vector bool int __a) {17638 vector unsigned char __indices =17639 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };17640 return vec_perm(__a, __a, __indices);17641}17642 17643static __inline__ vector signed int __ATTRS_o_ai17644vec_revb(vector signed int __a) {17645 vector unsigned char __indices =17646 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };17647 return vec_perm(__a, __a, __indices);17648}17649 17650static __inline__ vector unsigned int __ATTRS_o_ai17651vec_revb(vector unsigned int __a) {17652 vector unsigned char __indices =17653 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };17654 return vec_perm(__a, __a, __indices);17655}17656 17657static __inline__ vector float __ATTRS_o_ai17658vec_revb(vector float __a) {17659 vector unsigned char __indices =17660 { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };17661 return vec_perm(__a, __a, __indices);17662}17663 17664#ifdef __VSX__17665static __inline__ vector bool long long __ATTRS_o_ai17666vec_revb(vector bool long long __a) {17667 vector unsigned char __indices =17668 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };17669 return vec_perm(__a, __a, __indices);17670}17671 17672static __inline__ vector signed long long __ATTRS_o_ai17673vec_revb(vector signed long long __a) {17674 vector unsigned char __indices =17675 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };17676 return vec_perm(__a, __a, __indices);17677}17678 17679static __inline__ vector unsigned long long __ATTRS_o_ai17680vec_revb(vector unsigned long long __a) {17681 vector unsigned char __indices =17682 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };17683 return vec_perm(__a, __a, __indices);17684}17685 17686static __inline__ vector double __ATTRS_o_ai17687vec_revb(vector double __a) {17688 vector unsigned char __indices =17689 { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };17690 return vec_perm(__a, __a, __indices);17691}17692#endif /* End __VSX__ */17693 17694#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \17695 defined(__SIZEOF_INT128__)17696static __inline__ vector signed __int128 __ATTRS_o_ai17697vec_revb(vector signed __int128 __a) {17698 vector unsigned char __indices =17699 { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };17700 return (vector signed __int128)vec_perm((vector signed int)__a,17701 (vector signed int)__a,17702 __indices);17703}17704 17705static __inline__ vector unsigned __int128 __ATTRS_o_ai17706vec_revb(vector unsigned __int128 __a) {17707 vector unsigned char __indices =17708 { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };17709 return (vector unsigned __int128)vec_perm((vector signed int)__a,17710 (vector signed int)__a,17711 __indices);17712}17713#endif /* END __POWER8_VECTOR__ && __powerpc64__ */17714 17715/* vec_xl */17716 17717#define vec_xld2 vec_xl17718#define vec_xlw4 vec_xl17719typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));17720typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));17721typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));17722typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));17723typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));17724typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));17725typedef vector float unaligned_vec_float __attribute__((aligned(1)));17726 17727static __inline__ __ATTRS_o_ai vector signed char17728vec_xl(ptrdiff_t __offset, const signed char *__ptr) {17729 return *(unaligned_vec_schar *)(__ptr + __offset);17730}17731 17732static __inline__ __ATTRS_o_ai vector unsigned char17733vec_xl(ptrdiff_t __offset, const unsigned char *__ptr) {17734 return *(unaligned_vec_uchar*)(__ptr + __offset);17735}17736 17737static __inline__ __ATTRS_o_ai vector signed short17738vec_xl(ptrdiff_t __offset, const signed short *__ptr) {17739 signed char *__addr = (signed char *)__ptr + __offset;17740 return *(unaligned_vec_sshort *)__addr;17741}17742 17743static __inline__ __ATTRS_o_ai vector unsigned short17744vec_xl(ptrdiff_t __offset, const unsigned short *__ptr) {17745 signed char *__addr = (signed char *)__ptr + __offset;17746 return *(unaligned_vec_ushort *)__addr;17747}17748 17749static __inline__ __ATTRS_o_ai vector signed int17750vec_xl(ptrdiff_t __offset, const signed int *__ptr) {17751 signed char *__addr = (signed char *)__ptr + __offset;17752 return *(unaligned_vec_sint *)__addr;17753}17754 17755static __inline__ __ATTRS_o_ai vector unsigned int17756vec_xl(ptrdiff_t __offset, const unsigned int *__ptr) {17757 signed char *__addr = (signed char *)__ptr + __offset;17758 return *(unaligned_vec_uint *)__addr;17759}17760 17761static __inline__ __ATTRS_o_ai vector float vec_xl(ptrdiff_t __offset,17762 const float *__ptr) {17763 signed char *__addr = (signed char *)__ptr + __offset;17764 return *(unaligned_vec_float *)__addr;17765}17766 17767#ifdef __VSX__17768typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));17769typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));17770typedef vector double unaligned_vec_double __attribute__((aligned(1)));17771 17772static __inline__ __ATTRS_o_ai vector signed long long17773vec_xl(ptrdiff_t __offset, const signed long long *__ptr) {17774 signed char *__addr = (signed char *)__ptr + __offset;17775 return *(unaligned_vec_sll *)__addr;17776}17777 17778static __inline__ __ATTRS_o_ai vector unsigned long long17779vec_xl(ptrdiff_t __offset, const unsigned long long *__ptr) {17780 signed char *__addr = (signed char *)__ptr + __offset;17781 return *(unaligned_vec_ull *)__addr;17782}17783 17784static __inline__ __ATTRS_o_ai vector double vec_xl(ptrdiff_t __offset,17785 const double *__ptr) {17786 signed char *__addr = (signed char *)__ptr + __offset;17787 return *(unaligned_vec_double *)__addr;17788}17789#endif17790 17791#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \17792 defined(__SIZEOF_INT128__)17793typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));17794typedef vector unsigned __int128 unaligned_vec_ui12817795 __attribute__((aligned(1)));17796static __inline__ __ATTRS_o_ai vector signed __int12817797vec_xl(ptrdiff_t __offset, const signed __int128 *__ptr) {17798 signed char *__addr = (signed char *)__ptr + __offset;17799 return *(unaligned_vec_si128 *)__addr;17800}17801 17802static __inline__ __ATTRS_o_ai vector unsigned __int12817803vec_xl(ptrdiff_t __offset, const unsigned __int128 *__ptr) {17804 signed char *__addr = (signed char *)__ptr + __offset;17805 return *(unaligned_vec_ui128 *)__addr;17806}17807#endif17808 17809/* vec_xl_be */17810 17811#ifdef __LITTLE_ENDIAN__17812static __inline__ vector signed char __ATTRS_o_ai17813vec_xl_be(ptrdiff_t __offset, const signed char *__ptr) {17814 vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);17815 return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,17816 13, 12, 11, 10, 9, 8);17817}17818 17819static __inline__ vector unsigned char __ATTRS_o_ai17820vec_xl_be(ptrdiff_t __offset, const unsigned char *__ptr) {17821 vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);17822 return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,17823 13, 12, 11, 10, 9, 8);17824}17825 17826static __inline__ vector signed short __ATTRS_o_ai17827vec_xl_be(ptrdiff_t __offset, const signed short *__ptr) {17828 vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);17829 return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);17830}17831 17832static __inline__ vector unsigned short __ATTRS_o_ai17833vec_xl_be(ptrdiff_t __offset, const unsigned short *__ptr) {17834 vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);17835 return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);17836}17837 17838static __inline__ vector signed int __ATTRS_o_ai17839vec_xl_be(signed long long __offset, const signed int *__ptr) {17840 return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);17841}17842 17843static __inline__ vector unsigned int __ATTRS_o_ai17844vec_xl_be(signed long long __offset, const unsigned int *__ptr) {17845 return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);17846}17847 17848static __inline__ vector float __ATTRS_o_ai17849vec_xl_be(signed long long __offset, const float *__ptr) {17850 return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);17851}17852 17853#ifdef __VSX__17854static __inline__ vector signed long long __ATTRS_o_ai17855vec_xl_be(signed long long __offset, const signed long long *__ptr) {17856 return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);17857}17858 17859static __inline__ vector unsigned long long __ATTRS_o_ai17860vec_xl_be(signed long long __offset, const unsigned long long *__ptr) {17861 return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);17862}17863 17864static __inline__ vector double __ATTRS_o_ai17865vec_xl_be(signed long long __offset, const double *__ptr) {17866 return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);17867}17868#endif17869 17870#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \17871 defined(__SIZEOF_INT128__)17872static __inline__ vector signed __int128 __ATTRS_o_ai17873vec_xl_be(signed long long __offset, const signed __int128 *__ptr) {17874 return vec_xl(__offset, __ptr);17875}17876 17877static __inline__ vector unsigned __int128 __ATTRS_o_ai17878vec_xl_be(signed long long __offset, const unsigned __int128 *__ptr) {17879 return vec_xl(__offset, __ptr);17880}17881#endif17882#else17883 #define vec_xl_be vec_xl17884#endif17885 17886#if defined(__POWER10_VECTOR__) && defined(__VSX__) && \17887 defined(__SIZEOF_INT128__)17888 17889/* vec_xl_sext */17890 17891static __inline__ vector signed __int128 __ATTRS_o_ai17892vec_xl_sext(ptrdiff_t __offset, const signed char *__pointer) {17893 return (vector signed __int128)*(__pointer + __offset);17894}17895 17896static __inline__ vector signed __int128 __ATTRS_o_ai17897vec_xl_sext(ptrdiff_t __offset, const signed short *__pointer) {17898 return (vector signed __int128)*(__pointer + __offset);17899}17900 17901static __inline__ vector signed __int128 __ATTRS_o_ai17902vec_xl_sext(ptrdiff_t __offset, const signed int *__pointer) {17903 return (vector signed __int128)*(__pointer + __offset);17904}17905 17906static __inline__ vector signed __int128 __ATTRS_o_ai17907vec_xl_sext(ptrdiff_t __offset, const signed long long *__pointer) {17908 return (vector signed __int128)*(__pointer + __offset);17909}17910 17911/* vec_xl_zext */17912 17913static __inline__ vector unsigned __int128 __ATTRS_o_ai17914vec_xl_zext(ptrdiff_t __offset, const unsigned char *__pointer) {17915 return (vector unsigned __int128)*(__pointer + __offset);17916}17917 17918static __inline__ vector unsigned __int128 __ATTRS_o_ai17919vec_xl_zext(ptrdiff_t __offset, const unsigned short *__pointer) {17920 return (vector unsigned __int128)*(__pointer + __offset);17921}17922 17923static __inline__ vector unsigned __int128 __ATTRS_o_ai17924vec_xl_zext(ptrdiff_t __offset, const unsigned int *__pointer) {17925 return (vector unsigned __int128)*(__pointer + __offset);17926}17927 17928static __inline__ vector unsigned __int128 __ATTRS_o_ai17929vec_xl_zext(ptrdiff_t __offset, const unsigned long long *__pointer) {17930 return (vector unsigned __int128)*(__pointer + __offset);17931}17932 17933#endif17934 17935/* vec_xlds */17936#ifdef __VSX__17937static __inline__ vector signed long long __ATTRS_o_ai17938vec_xlds(ptrdiff_t __offset, const signed long long *__ptr) {17939 signed long long *__addr = (signed long long*)((signed char *)__ptr + __offset);17940 return (vector signed long long) *__addr;17941}17942 17943static __inline__ vector unsigned long long __ATTRS_o_ai17944vec_xlds(ptrdiff_t __offset, const unsigned long long *__ptr) {17945 unsigned long long *__addr = (unsigned long long *)((signed char *)__ptr + __offset);17946 return (unaligned_vec_ull) *__addr;17947}17948 17949static __inline__ vector double __ATTRS_o_ai vec_xlds(ptrdiff_t __offset,17950 const double *__ptr) {17951 double *__addr = (double*)((signed char *)__ptr + __offset);17952 return (unaligned_vec_double) *__addr;17953}17954 17955/* vec_load_splats */17956static __inline__ vector signed int __ATTRS_o_ai17957vec_load_splats(signed long long __offset, const signed int *__ptr) {17958 signed int *__addr = (signed int*)((signed char *)__ptr + __offset);17959 return (vector signed int)*__addr;17960}17961 17962static __inline__ vector signed int __ATTRS_o_ai17963vec_load_splats(unsigned long long __offset, const signed int *__ptr) {17964 signed int *__addr = (signed int*)((signed char *)__ptr + __offset);17965 return (vector signed int)*__addr;17966}17967 17968static __inline__ vector unsigned int __ATTRS_o_ai17969vec_load_splats(signed long long __offset, const unsigned int *__ptr) {17970 unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);17971 return (vector unsigned int)*__addr;17972}17973 17974static __inline__ vector unsigned int __ATTRS_o_ai17975vec_load_splats(unsigned long long __offset, const unsigned int *__ptr) {17976 unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);17977 return (vector unsigned int)*__addr;17978}17979 17980static __inline__ vector float __ATTRS_o_ai17981vec_load_splats(signed long long __offset, const float *__ptr) {17982 float *__addr = (float*)((signed char *)__ptr + __offset);17983 return (vector float)*__addr;17984}17985 17986static __inline__ vector float __ATTRS_o_ai17987vec_load_splats(unsigned long long __offset, const float *__ptr) {17988 float *__addr = (float*)((signed char *)__ptr + __offset);17989 return (vector float)*__addr;17990}17991#endif17992 17993/* vec_xst */17994 17995#define vec_xstd2 vec_xst17996#define vec_xstw4 vec_xst17997static __inline__ __ATTRS_o_ai void17998vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr) {17999 *(unaligned_vec_schar *)(__ptr + __offset) = __vec;18000}18001 18002static __inline__ __ATTRS_o_ai void18003vec_xst(vector unsigned char __vec, ptrdiff_t __offset, unsigned char *__ptr) {18004 *(unaligned_vec_uchar *)(__ptr + __offset) = __vec;18005}18006 18007static __inline__ __ATTRS_o_ai void18008vec_xst(vector signed short __vec, ptrdiff_t __offset, signed short *__ptr) {18009 signed char *__addr = (signed char *)__ptr + __offset;18010 *(unaligned_vec_sshort *)__addr = __vec;18011}18012 18013static __inline__ __ATTRS_o_ai void vec_xst(vector unsigned short __vec,18014 ptrdiff_t __offset,18015 unsigned short *__ptr) {18016 signed char *__addr = (signed char *)__ptr + __offset;18017 *(unaligned_vec_ushort *)__addr = __vec;18018}18019 18020static __inline__ __ATTRS_o_ai void18021vec_xst(vector signed int __vec, ptrdiff_t __offset, signed int *__ptr) {18022 signed char *__addr = (signed char *)__ptr + __offset;18023 *(unaligned_vec_sint *)__addr = __vec;18024}18025 18026static __inline__ __ATTRS_o_ai void18027vec_xst(vector unsigned int __vec, ptrdiff_t __offset, unsigned int *__ptr) {18028 signed char *__addr = (signed char *)__ptr + __offset;18029 *(unaligned_vec_uint *)__addr = __vec;18030}18031 18032static __inline__ __ATTRS_o_ai void vec_xst(vector float __vec,18033 ptrdiff_t __offset, float *__ptr) {18034 signed char *__addr = (signed char *)__ptr + __offset;18035 *(unaligned_vec_float *)__addr = __vec;18036}18037 18038#ifdef __VSX__18039static __inline__ __ATTRS_o_ai void vec_xst(vector signed long long __vec,18040 ptrdiff_t __offset,18041 signed long long *__ptr) {18042 signed char *__addr = (signed char *)__ptr + __offset;18043 *(unaligned_vec_sll *)__addr = __vec;18044}18045 18046static __inline__ __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,18047 ptrdiff_t __offset,18048 unsigned long long *__ptr) {18049 signed char *__addr = (signed char *)__ptr + __offset;18050 *(unaligned_vec_ull *)__addr = __vec;18051}18052 18053static __inline__ __ATTRS_o_ai void vec_xst(vector double __vec,18054 ptrdiff_t __offset, double *__ptr) {18055 signed char *__addr = (signed char *)__ptr + __offset;18056 *(unaligned_vec_double *)__addr = __vec;18057}18058#endif18059 18060#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \18061 defined(__SIZEOF_INT128__)18062static __inline__ __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,18063 ptrdiff_t __offset,18064 signed __int128 *__ptr) {18065 signed char *__addr = (signed char *)__ptr + __offset;18066 *(unaligned_vec_si128 *)__addr = __vec;18067}18068 18069static __inline__ __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,18070 ptrdiff_t __offset,18071 unsigned __int128 *__ptr) {18072 signed char *__addr = (signed char *)__ptr + __offset;18073 *(unaligned_vec_ui128 *)__addr = __vec;18074}18075#endif18076 18077/* vec_xst_trunc */18078 18079#if defined(__POWER10_VECTOR__) && defined(__VSX__) && \18080 defined(__SIZEOF_INT128__)18081static __inline__ __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,18082 ptrdiff_t __offset,18083 signed char *__ptr) {18084 *(__ptr + __offset) = (signed char)__vec[0];18085}18086 18087static __inline__ __ATTRS_o_ai void18088vec_xst_trunc(vector unsigned __int128 __vec, ptrdiff_t __offset,18089 unsigned char *__ptr) {18090 *(__ptr + __offset) = (unsigned char)__vec[0];18091}18092 18093static __inline__ __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,18094 ptrdiff_t __offset,18095 signed short *__ptr) {18096 *(__ptr + __offset) = (signed short)__vec[0];18097}18098 18099static __inline__ __ATTRS_o_ai void18100vec_xst_trunc(vector unsigned __int128 __vec, ptrdiff_t __offset,18101 unsigned short *__ptr) {18102 *(__ptr + __offset) = (unsigned short)__vec[0];18103}18104 18105static __inline__ __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,18106 ptrdiff_t __offset,18107 signed int *__ptr) {18108 *(__ptr + __offset) = (signed int)__vec[0];18109}18110 18111static __inline__ __ATTRS_o_ai void18112vec_xst_trunc(vector unsigned __int128 __vec, ptrdiff_t __offset,18113 unsigned int *__ptr) {18114 *(__ptr + __offset) = (unsigned int)__vec[0];18115}18116 18117static __inline__ __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,18118 ptrdiff_t __offset,18119 signed long long *__ptr) {18120 *(__ptr + __offset) = (signed long long)__vec[0];18121}18122 18123static __inline__ __ATTRS_o_ai void18124vec_xst_trunc(vector unsigned __int128 __vec, ptrdiff_t __offset,18125 unsigned long long *__ptr) {18126 *(__ptr + __offset) = (unsigned long long)__vec[0];18127}18128#endif18129 18130/* vec_xst_be */18131 18132#ifdef __LITTLE_ENDIAN__18133static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,18134 signed long long __offset,18135 signed char *__ptr) {18136 vector signed char __tmp =18137 __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,18138 13, 12, 11, 10, 9, 8);18139 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;18140 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);18141}18142 18143static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,18144 signed long long __offset,18145 unsigned char *__ptr) {18146 vector unsigned char __tmp =18147 __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,18148 13, 12, 11, 10, 9, 8);18149 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;18150 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);18151}18152 18153static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,18154 signed long long __offset,18155 signed short *__ptr) {18156 vector signed short __tmp =18157 __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);18158 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;18159 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);18160}18161 18162static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,18163 signed long long __offset,18164 unsigned short *__ptr) {18165 vector unsigned short __tmp =18166 __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);18167 typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;18168 __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);18169}18170 18171static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,18172 signed long long __offset,18173 signed int *__ptr) {18174 __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);18175}18176 18177static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,18178 signed long long __offset,18179 unsigned int *__ptr) {18180 __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);18181}18182 18183static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,18184 signed long long __offset,18185 float *__ptr) {18186 __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);18187}18188 18189#ifdef __VSX__18190static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,18191 signed long long __offset,18192 signed long long *__ptr) {18193 __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);18194}18195 18196static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,18197 signed long long __offset,18198 unsigned long long *__ptr) {18199 __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);18200}18201 18202static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,18203 signed long long __offset,18204 double *__ptr) {18205 __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);18206}18207#endif18208 18209#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \18210 defined(__SIZEOF_INT128__)18211static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,18212 signed long long __offset,18213 signed __int128 *__ptr) {18214 vec_xst(__vec, __offset, __ptr);18215}18216 18217static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,18218 signed long long __offset,18219 unsigned __int128 *__ptr) {18220 vec_xst(__vec, __offset, __ptr);18221}18222#endif18223#else18224 #define vec_xst_be vec_xst18225#endif18226 18227#ifdef __POWER9_VECTOR__18228#define vec_test_data_class(__a, __b) \18229 _Generic( \18230 (__a), vector float \18231 : (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)), \18232 vector double \18233 : (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a), \18234 (__b)))18235 18236#endif /* #ifdef __POWER9_VECTOR__ */18237 18238static vector float __ATTRS_o_ai vec_neg(vector float __a) {18239 return -__a;18240}18241 18242#ifdef __VSX__18243static vector double __ATTRS_o_ai vec_neg(vector double __a) {18244 return -__a;18245}18246 18247#endif18248 18249#ifdef __VSX__18250static vector long long __ATTRS_o_ai vec_neg(vector long long __a) {18251 return -__a;18252}18253#endif18254 18255static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {18256 return -__a;18257}18258 18259static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {18260 return -__a;18261}18262 18263static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {18264 return -__a;18265}18266 18267static vector float __ATTRS_o_ai vec_nabs(vector float __a) {18268 return - vec_abs(__a);18269}18270 18271#ifdef __VSX__18272static vector double __ATTRS_o_ai vec_nabs(vector double __a) {18273 return - vec_abs(__a);18274}18275 18276#endif18277 18278#ifdef __POWER8_VECTOR__18279static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {18280 return __builtin_altivec_vminsd(__a, -__a);18281}18282#endif18283 18284static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {18285 return __builtin_altivec_vminsw(__a, -__a);18286}18287 18288static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {18289 return __builtin_altivec_vminsh(__a, -__a);18290}18291 18292static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {18293 return __builtin_altivec_vminsb(__a, -__a);18294}18295 18296static vector float __ATTRS_o_ai vec_recipdiv(vector float __a,18297 vector float __b) {18298 return __builtin_ppc_recipdivf(__a, __b);18299}18300 18301#ifdef __VSX__18302static vector double __ATTRS_o_ai vec_recipdiv(vector double __a,18303 vector double __b) {18304 return __builtin_ppc_recipdivd(__a, __b);18305}18306#endif18307 18308#ifdef __POWER10_VECTOR__18309 18310/* vec_extractm */18311 18312static __inline__ unsigned int __ATTRS_o_ai18313vec_extractm(vector unsigned char __a) {18314 return __builtin_altivec_vextractbm(__a);18315}18316 18317static __inline__ unsigned int __ATTRS_o_ai18318vec_extractm(vector unsigned short __a) {18319 return __builtin_altivec_vextracthm(__a);18320}18321 18322static __inline__ unsigned int __ATTRS_o_ai18323vec_extractm(vector unsigned int __a) {18324 return __builtin_altivec_vextractwm(__a);18325}18326 18327static __inline__ unsigned int __ATTRS_o_ai18328vec_extractm(vector unsigned long long __a) {18329 return __builtin_altivec_vextractdm(__a);18330}18331 18332#ifdef __SIZEOF_INT128__18333static __inline__ unsigned int __ATTRS_o_ai18334vec_extractm(vector unsigned __int128 __a) {18335 return __builtin_altivec_vextractqm(__a);18336}18337#endif18338 18339/* vec_expandm */18340 18341static __inline__ vector unsigned char __ATTRS_o_ai18342vec_expandm(vector unsigned char __a) {18343 return __builtin_altivec_vexpandbm(__a);18344}18345 18346static __inline__ vector unsigned short __ATTRS_o_ai18347vec_expandm(vector unsigned short __a) {18348 return __builtin_altivec_vexpandhm(__a);18349}18350 18351static __inline__ vector unsigned int __ATTRS_o_ai18352vec_expandm(vector unsigned int __a) {18353 return __builtin_altivec_vexpandwm(__a);18354}18355 18356static __inline__ vector unsigned long long __ATTRS_o_ai18357vec_expandm(vector unsigned long long __a) {18358 return __builtin_altivec_vexpanddm(__a);18359}18360 18361#ifdef __SIZEOF_INT128__18362static __inline__ vector unsigned __int128 __ATTRS_o_ai18363vec_expandm(vector unsigned __int128 __a) {18364 return __builtin_altivec_vexpandqm(__a);18365}18366#endif18367 18368/* vec_cntm */18369 18370#define vec_cntm(__a, __mp) \18371 _Generic((__a), vector unsigned char \18372 : __builtin_altivec_vcntmbb((vector unsigned char)(__a), \18373 (unsigned char)(__mp)), \18374 vector unsigned short \18375 : __builtin_altivec_vcntmbh((vector unsigned short)(__a), \18376 (unsigned char)(__mp)), \18377 vector unsigned int \18378 : __builtin_altivec_vcntmbw((vector unsigned int)(__a), \18379 (unsigned char)(__mp)), \18380 vector unsigned long long \18381 : __builtin_altivec_vcntmbd((vector unsigned long long)(__a), \18382 (unsigned char)(__mp)))18383 18384/* vec_gen[b|h|w|d|q]m */18385 18386static __inline__ vector unsigned char __ATTRS_o_ai18387vec_genbm(unsigned long long __bm) {18388 return __builtin_altivec_mtvsrbm(__bm);18389}18390 18391static __inline__ vector unsigned short __ATTRS_o_ai18392vec_genhm(unsigned long long __bm) {18393 return __builtin_altivec_mtvsrhm(__bm);18394}18395 18396static __inline__ vector unsigned int __ATTRS_o_ai18397vec_genwm(unsigned long long __bm) {18398 return __builtin_altivec_mtvsrwm(__bm);18399}18400 18401static __inline__ vector unsigned long long __ATTRS_o_ai18402vec_gendm(unsigned long long __bm) {18403 return __builtin_altivec_mtvsrdm(__bm);18404}18405 18406#ifdef __SIZEOF_INT128__18407static __inline__ vector unsigned __int128 __ATTRS_o_ai18408vec_genqm(unsigned long long __bm) {18409 return __builtin_altivec_mtvsrqm(__bm);18410}18411#endif18412 18413/* vec_pdep */18414 18415static __inline__ vector unsigned long long __ATTRS_o_ai18416vec_pdep(vector unsigned long long __a, vector unsigned long long __b) {18417 return __builtin_altivec_vpdepd(__a, __b);18418}18419 18420/* vec_pext */18421 18422static __inline__ vector unsigned long long __ATTRS_o_ai18423vec_pext(vector unsigned long long __a, vector unsigned long long __b) {18424 return __builtin_altivec_vpextd(__a, __b);18425}18426 18427/* vec_cfuge */18428 18429static __inline__ vector unsigned long long __ATTRS_o_ai18430vec_cfuge(vector unsigned long long __a, vector unsigned long long __b) {18431 return __builtin_altivec_vcfuged(__a, __b);18432}18433 18434/* vec_gnb */18435 18436#define vec_gnb(__a, __b) __builtin_altivec_vgnb(__a, __b)18437 18438/* vec_ternarylogic */18439#ifdef __VSX__18440#ifdef __SIZEOF_INT128__18441#define vec_ternarylogic(__a, __b, __c, __imm) \18442 _Generic((__a), vector unsigned char \18443 : (vector unsigned char)__builtin_vsx_xxeval( \18444 (vector unsigned long long)(__a), \18445 (vector unsigned long long)(__b), \18446 (vector unsigned long long)(__c), (__imm)), \18447 vector unsigned short \18448 : (vector unsigned short)__builtin_vsx_xxeval( \18449 (vector unsigned long long)(__a), \18450 (vector unsigned long long)(__b), \18451 (vector unsigned long long)(__c), (__imm)), \18452 vector unsigned int \18453 : (vector unsigned int)__builtin_vsx_xxeval( \18454 (vector unsigned long long)(__a), \18455 (vector unsigned long long)(__b), \18456 (vector unsigned long long)(__c), (__imm)), \18457 vector unsigned long long \18458 : (vector unsigned long long)__builtin_vsx_xxeval( \18459 (vector unsigned long long)(__a), \18460 (vector unsigned long long)(__b), \18461 (vector unsigned long long)(__c), (__imm)), \18462 vector unsigned __int128 \18463 : (vector unsigned __int128)__builtin_vsx_xxeval( \18464 (vector unsigned long long)(__a), \18465 (vector unsigned long long)(__b), \18466 (vector unsigned long long)(__c), (__imm)))18467#else18468#define vec_ternarylogic(__a, __b, __c, __imm) \18469 _Generic((__a), vector unsigned char \18470 : (vector unsigned char)__builtin_vsx_xxeval( \18471 (vector unsigned long long)(__a), \18472 (vector unsigned long long)(__b), \18473 (vector unsigned long long)(__c), (__imm)), \18474 vector unsigned short \18475 : (vector unsigned short)__builtin_vsx_xxeval( \18476 (vector unsigned long long)(__a), \18477 (vector unsigned long long)(__b), \18478 (vector unsigned long long)(__c), (__imm)), \18479 vector unsigned int \18480 : (vector unsigned int)__builtin_vsx_xxeval( \18481 (vector unsigned long long)(__a), \18482 (vector unsigned long long)(__b), \18483 (vector unsigned long long)(__c), (__imm)), \18484 vector unsigned long long \18485 : (vector unsigned long long)__builtin_vsx_xxeval( \18486 (vector unsigned long long)(__a), \18487 (vector unsigned long long)(__b), \18488 (vector unsigned long long)(__c), (__imm)))18489#endif /* __SIZEOF_INT128__ */18490#endif /* __VSX__ */18491 18492/* vec_genpcvm */18493 18494#ifdef __VSX__18495#define vec_genpcvm(__a, __imm) \18496 _Generic( \18497 (__a), vector unsigned char \18498 : __builtin_vsx_xxgenpcvbm((vector unsigned char)(__a), (int)(__imm)), \18499 vector unsigned short \18500 : __builtin_vsx_xxgenpcvhm((vector unsigned short)(__a), (int)(__imm)), \18501 vector unsigned int \18502 : __builtin_vsx_xxgenpcvwm((vector unsigned int)(__a), (int)(__imm)), \18503 vector unsigned long long \18504 : __builtin_vsx_xxgenpcvdm((vector unsigned long long)(__a), \18505 (int)(__imm)))18506#endif /* __VSX__ */18507 18508/* vec_clr_first */18509 18510static __inline__ vector signed char __ATTRS_o_ai18511vec_clr_first(vector signed char __a, unsigned int __n) {18512#ifdef __LITTLE_ENDIAN__18513 return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,18514 __n);18515#else18516 return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,18517 __n);18518#endif18519}18520 18521static __inline__ vector unsigned char __ATTRS_o_ai18522vec_clr_first(vector unsigned char __a, unsigned int __n) {18523#ifdef __LITTLE_ENDIAN__18524 return (vector unsigned char)__builtin_altivec_vclrrb(18525 (vector unsigned char)__a, __n);18526#else18527 return (vector unsigned char)__builtin_altivec_vclrlb(18528 (vector unsigned char)__a, __n);18529#endif18530}18531 18532/* vec_clr_last */18533 18534static __inline__ vector signed char __ATTRS_o_ai18535vec_clr_last(vector signed char __a, unsigned int __n) {18536#ifdef __LITTLE_ENDIAN__18537 return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,18538 __n);18539#else18540 return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,18541 __n);18542#endif18543}18544 18545static __inline__ vector unsigned char __ATTRS_o_ai18546vec_clr_last(vector unsigned char __a, unsigned int __n) {18547#ifdef __LITTLE_ENDIAN__18548 return (vector unsigned char)__builtin_altivec_vclrlb(18549 (vector unsigned char)__a, __n);18550#else18551 return (vector unsigned char)__builtin_altivec_vclrrb(18552 (vector unsigned char)__a, __n);18553#endif18554}18555 18556/* vec_cntlzm */18557 18558static __inline__ vector unsigned long long __ATTRS_o_ai18559vec_cntlzm(vector unsigned long long __a, vector unsigned long long __b) {18560 return __builtin_altivec_vclzdm(__a, __b);18561}18562 18563/* vec_cnttzm */18564 18565static __inline__ vector unsigned long long __ATTRS_o_ai18566vec_cnttzm(vector unsigned long long __a, vector unsigned long long __b) {18567 return __builtin_altivec_vctzdm(__a, __b);18568}18569 18570/* vec_mod */18571 18572static __inline__ vector signed int __ATTRS_o_ai18573vec_mod(vector signed int __a, vector signed int __b) {18574 return __a % __b;18575}18576 18577static __inline__ vector unsigned int __ATTRS_o_ai18578vec_mod(vector unsigned int __a, vector unsigned int __b) {18579 return __a % __b;18580}18581 18582static __inline__ vector signed long long __ATTRS_o_ai18583vec_mod(vector signed long long __a, vector signed long long __b) {18584 return __a % __b;18585}18586 18587static __inline__ vector unsigned long long __ATTRS_o_ai18588vec_mod(vector unsigned long long __a, vector unsigned long long __b) {18589 return __a % __b;18590}18591 18592#ifdef __SIZEOF_INT128__18593static __inline__ vector signed __int128 __ATTRS_o_ai18594vec_mod(vector signed __int128 __a, vector signed __int128 __b) {18595 return __a % __b;18596}18597 18598static __inline__ vector unsigned __int128 __ATTRS_o_ai18599vec_mod(vector unsigned __int128 __a, vector unsigned __int128 __b) {18600 return __a % __b;18601}18602#endif18603 18604/* vec_sldb */18605#define vec_sldb(__a, __b, __c) \18606 _Generic( \18607 (__a), vector unsigned char \18608 : (vector unsigned char)__builtin_altivec_vsldbi( \18609 (vector unsigned char)__a, (vector unsigned char)__b, \18610 (__c & 0x7)), \18611 vector signed char \18612 : (vector signed char)__builtin_altivec_vsldbi( \18613 (vector unsigned char)__a, (vector unsigned char)__b, \18614 (__c & 0x7)), \18615 vector unsigned short \18616 : (vector unsigned short)__builtin_altivec_vsldbi( \18617 (vector unsigned char)__a, (vector unsigned char)__b, \18618 (__c & 0x7)), \18619 vector signed short \18620 : (vector signed short)__builtin_altivec_vsldbi( \18621 (vector unsigned char)__a, (vector unsigned char)__b, \18622 (__c & 0x7)), \18623 vector unsigned int \18624 : (vector unsigned int)__builtin_altivec_vsldbi( \18625 (vector unsigned char)__a, (vector unsigned char)__b, \18626 (__c & 0x7)), \18627 vector signed int \18628 : (vector signed int)__builtin_altivec_vsldbi((vector unsigned char)__a, \18629 (vector unsigned char)__b, \18630 (__c & 0x7)), \18631 vector unsigned long long \18632 : (vector unsigned long long)__builtin_altivec_vsldbi( \18633 (vector unsigned char)__a, (vector unsigned char)__b, \18634 (__c & 0x7)), \18635 vector signed long long \18636 : (vector signed long long)__builtin_altivec_vsldbi( \18637 (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))18638 18639/* vec_srdb */18640#define vec_srdb(__a, __b, __c) \18641 _Generic( \18642 (__a), vector unsigned char \18643 : (vector unsigned char)__builtin_altivec_vsrdbi( \18644 (vector unsigned char)__a, (vector unsigned char)__b, \18645 (__c & 0x7)), \18646 vector signed char \18647 : (vector signed char)__builtin_altivec_vsrdbi( \18648 (vector unsigned char)__a, (vector unsigned char)__b, \18649 (__c & 0x7)), \18650 vector unsigned short \18651 : (vector unsigned short)__builtin_altivec_vsrdbi( \18652 (vector unsigned char)__a, (vector unsigned char)__b, \18653 (__c & 0x7)), \18654 vector signed short \18655 : (vector signed short)__builtin_altivec_vsrdbi( \18656 (vector unsigned char)__a, (vector unsigned char)__b, \18657 (__c & 0x7)), \18658 vector unsigned int \18659 : (vector unsigned int)__builtin_altivec_vsrdbi( \18660 (vector unsigned char)__a, (vector unsigned char)__b, \18661 (__c & 0x7)), \18662 vector signed int \18663 : (vector signed int)__builtin_altivec_vsrdbi((vector unsigned char)__a, \18664 (vector unsigned char)__b, \18665 (__c & 0x7)), \18666 vector unsigned long long \18667 : (vector unsigned long long)__builtin_altivec_vsrdbi( \18668 (vector unsigned char)__a, (vector unsigned char)__b, \18669 (__c & 0x7)), \18670 vector signed long long \18671 : (vector signed long long)__builtin_altivec_vsrdbi( \18672 (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))18673 18674/* vec_insertl */18675 18676static __inline__ vector unsigned char __ATTRS_o_ai18677vec_insertl(unsigned char __a, vector unsigned char __b, unsigned int __c) {18678#ifdef __LITTLE_ENDIAN__18679 return __builtin_altivec_vinsbrx(__b, __c, __a);18680#else18681 return __builtin_altivec_vinsblx(__b, __c, __a);18682#endif18683}18684 18685static __inline__ vector unsigned short __ATTRS_o_ai18686vec_insertl(unsigned short __a, vector unsigned short __b, unsigned int __c) {18687#ifdef __LITTLE_ENDIAN__18688 return __builtin_altivec_vinshrx(__b, __c, __a);18689#else18690 return __builtin_altivec_vinshlx(__b, __c, __a);18691#endif18692}18693 18694static __inline__ vector unsigned int __ATTRS_o_ai18695vec_insertl(unsigned int __a, vector unsigned int __b, unsigned int __c) {18696#ifdef __LITTLE_ENDIAN__18697 return __builtin_altivec_vinswrx(__b, __c, __a);18698#else18699 return __builtin_altivec_vinswlx(__b, __c, __a);18700#endif18701}18702 18703static __inline__ vector unsigned long long __ATTRS_o_ai18704vec_insertl(unsigned long long __a, vector unsigned long long __b,18705 unsigned int __c) {18706#ifdef __LITTLE_ENDIAN__18707 return __builtin_altivec_vinsdrx(__b, __c, __a);18708#else18709 return __builtin_altivec_vinsdlx(__b, __c, __a);18710#endif18711}18712 18713static __inline__ vector unsigned char __ATTRS_o_ai18714vec_insertl(vector unsigned char __a, vector unsigned char __b,18715 unsigned int __c) {18716#ifdef __LITTLE_ENDIAN__18717 return __builtin_altivec_vinsbvrx(__b, __c, __a);18718#else18719 return __builtin_altivec_vinsbvlx(__b, __c, __a);18720#endif18721}18722 18723static __inline__ vector unsigned short __ATTRS_o_ai18724vec_insertl(vector unsigned short __a, vector unsigned short __b,18725 unsigned int __c) {18726#ifdef __LITTLE_ENDIAN__18727 return __builtin_altivec_vinshvrx(__b, __c, __a);18728#else18729 return __builtin_altivec_vinshvlx(__b, __c, __a);18730#endif18731}18732 18733static __inline__ vector unsigned int __ATTRS_o_ai18734vec_insertl(vector unsigned int __a, vector unsigned int __b,18735 unsigned int __c) {18736#ifdef __LITTLE_ENDIAN__18737 return __builtin_altivec_vinswvrx(__b, __c, __a);18738#else18739 return __builtin_altivec_vinswvlx(__b, __c, __a);18740#endif18741}18742 18743/* vec_inserth */18744 18745static __inline__ vector unsigned char __ATTRS_o_ai18746vec_inserth(unsigned char __a, vector unsigned char __b, unsigned int __c) {18747#ifdef __LITTLE_ENDIAN__18748 return __builtin_altivec_vinsblx(__b, __c, __a);18749#else18750 return __builtin_altivec_vinsbrx(__b, __c, __a);18751#endif18752}18753 18754static __inline__ vector unsigned short __ATTRS_o_ai18755vec_inserth(unsigned short __a, vector unsigned short __b, unsigned int __c) {18756#ifdef __LITTLE_ENDIAN__18757 return __builtin_altivec_vinshlx(__b, __c, __a);18758#else18759 return __builtin_altivec_vinshrx(__b, __c, __a);18760#endif18761}18762 18763static __inline__ vector unsigned int __ATTRS_o_ai18764vec_inserth(unsigned int __a, vector unsigned int __b, unsigned int __c) {18765#ifdef __LITTLE_ENDIAN__18766 return __builtin_altivec_vinswlx(__b, __c, __a);18767#else18768 return __builtin_altivec_vinswrx(__b, __c, __a);18769#endif18770}18771 18772static __inline__ vector unsigned long long __ATTRS_o_ai18773vec_inserth(unsigned long long __a, vector unsigned long long __b,18774 unsigned int __c) {18775#ifdef __LITTLE_ENDIAN__18776 return __builtin_altivec_vinsdlx(__b, __c, __a);18777#else18778 return __builtin_altivec_vinsdrx(__b, __c, __a);18779#endif18780}18781 18782static __inline__ vector unsigned char __ATTRS_o_ai18783vec_inserth(vector unsigned char __a, vector unsigned char __b,18784 unsigned int __c) {18785#ifdef __LITTLE_ENDIAN__18786 return __builtin_altivec_vinsbvlx(__b, __c, __a);18787#else18788 return __builtin_altivec_vinsbvrx(__b, __c, __a);18789#endif18790}18791 18792static __inline__ vector unsigned short __ATTRS_o_ai18793vec_inserth(vector unsigned short __a, vector unsigned short __b,18794 unsigned int __c) {18795#ifdef __LITTLE_ENDIAN__18796 return __builtin_altivec_vinshvlx(__b, __c, __a);18797#else18798 return __builtin_altivec_vinshvrx(__b, __c, __a);18799#endif18800}18801 18802static __inline__ vector unsigned int __ATTRS_o_ai18803vec_inserth(vector unsigned int __a, vector unsigned int __b,18804 unsigned int __c) {18805#ifdef __LITTLE_ENDIAN__18806 return __builtin_altivec_vinswvlx(__b, __c, __a);18807#else18808 return __builtin_altivec_vinswvrx(__b, __c, __a);18809#endif18810}18811 18812/* vec_extractl */18813 18814static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(18815 vector unsigned char __a, vector unsigned char __b, unsigned int __c) {18816#ifdef __LITTLE_ENDIAN__18817 return __builtin_altivec_vextdubvrx(__a, __b, __c);18818#else18819 vector unsigned long long __ret = __builtin_altivec_vextdubvlx(__a, __b, __c);18820 return vec_sld(__ret, __ret, 8);18821#endif18822}18823 18824static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(18825 vector unsigned short __a, vector unsigned short __b, unsigned int __c) {18826#ifdef __LITTLE_ENDIAN__18827 return __builtin_altivec_vextduhvrx(__a, __b, __c);18828#else18829 vector unsigned long long __ret = __builtin_altivec_vextduhvlx(__a, __b, __c);18830 return vec_sld(__ret, __ret, 8);18831#endif18832}18833 18834static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(18835 vector unsigned int __a, vector unsigned int __b, unsigned int __c) {18836#ifdef __LITTLE_ENDIAN__18837 return __builtin_altivec_vextduwvrx(__a, __b, __c);18838#else18839 vector unsigned long long __ret = __builtin_altivec_vextduwvlx(__a, __b, __c);18840 return vec_sld(__ret, __ret, 8);18841#endif18842}18843 18844static __inline__ vector unsigned long long __ATTRS_o_ai18845vec_extractl(vector unsigned long long __a, vector unsigned long long __b,18846 unsigned int __c) {18847#ifdef __LITTLE_ENDIAN__18848 return __builtin_altivec_vextddvrx(__a, __b, __c);18849#else18850 vector unsigned long long __ret = __builtin_altivec_vextddvlx(__a, __b, __c);18851 return vec_sld(__ret, __ret, 8);18852#endif18853}18854 18855/* vec_extracth */18856 18857static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(18858 vector unsigned char __a, vector unsigned char __b, unsigned int __c) {18859#ifdef __LITTLE_ENDIAN__18860 return __builtin_altivec_vextdubvlx(__a, __b, __c);18861#else18862 vector unsigned long long __ret = __builtin_altivec_vextdubvrx(__a, __b, __c);18863 return vec_sld(__ret, __ret, 8);18864#endif18865}18866 18867static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(18868 vector unsigned short __a, vector unsigned short __b, unsigned int __c) {18869#ifdef __LITTLE_ENDIAN__18870 return __builtin_altivec_vextduhvlx(__a, __b, __c);18871#else18872 vector unsigned long long __ret = __builtin_altivec_vextduhvrx(__a, __b, __c);18873 return vec_sld(__ret, __ret, 8);18874#endif18875}18876 18877static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(18878 vector unsigned int __a, vector unsigned int __b, unsigned int __c) {18879#ifdef __LITTLE_ENDIAN__18880 return __builtin_altivec_vextduwvlx(__a, __b, __c);18881#else18882 vector unsigned long long __ret = __builtin_altivec_vextduwvrx(__a, __b, __c);18883 return vec_sld(__ret, __ret, 8);18884#endif18885}18886 18887static __inline__ vector unsigned long long __ATTRS_o_ai18888vec_extracth(vector unsigned long long __a, vector unsigned long long __b,18889 unsigned int __c) {18890#ifdef __LITTLE_ENDIAN__18891 return __builtin_altivec_vextddvlx(__a, __b, __c);18892#else18893 vector unsigned long long __ret = __builtin_altivec_vextddvrx(__a, __b, __c);18894 return vec_sld(__ret, __ret, 8);18895#endif18896}18897 18898#ifdef __VSX__18899 18900/* vec_permx */18901#define vec_permx(__a, __b, __c, __d) \18902 _Generic( \18903 (__a), vector unsigned char \18904 : (vector unsigned char)__builtin_vsx_xxpermx( \18905 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18906 vector signed char \18907 : (vector signed char)__builtin_vsx_xxpermx( \18908 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18909 vector unsigned short \18910 : (vector unsigned short)__builtin_vsx_xxpermx( \18911 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18912 vector signed short \18913 : (vector signed short)__builtin_vsx_xxpermx( \18914 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18915 vector unsigned int \18916 : (vector unsigned int)__builtin_vsx_xxpermx( \18917 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18918 vector signed int \18919 : (vector signed int)__builtin_vsx_xxpermx( \18920 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18921 vector unsigned long long \18922 : (vector unsigned long long)__builtin_vsx_xxpermx( \18923 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18924 vector signed long long \18925 : (vector signed long long)__builtin_vsx_xxpermx( \18926 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18927 vector float \18928 : (vector float)__builtin_vsx_xxpermx( \18929 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \18930 vector double \18931 : (vector double)__builtin_vsx_xxpermx( \18932 (vector unsigned char)__a, (vector unsigned char)__b, __c, __d))18933 18934/* vec_blendv */18935 18936static __inline__ vector signed char __ATTRS_o_ai18937vec_blendv(vector signed char __a, vector signed char __b,18938 vector unsigned char __c) {18939 return (vector signed char)__builtin_vsx_xxblendvb(18940 (vector unsigned char)__a, (vector unsigned char)__b, __c);18941}18942 18943static __inline__ vector unsigned char __ATTRS_o_ai18944vec_blendv(vector unsigned char __a, vector unsigned char __b,18945 vector unsigned char __c) {18946 return __builtin_vsx_xxblendvb(__a, __b, __c);18947}18948 18949static __inline__ vector signed short __ATTRS_o_ai18950vec_blendv(vector signed short __a, vector signed short __b,18951 vector unsigned short __c) {18952 return (vector signed short)__builtin_vsx_xxblendvh(18953 (vector unsigned short)__a, (vector unsigned short)__b, __c);18954}18955 18956static __inline__ vector unsigned short __ATTRS_o_ai18957vec_blendv(vector unsigned short __a, vector unsigned short __b,18958 vector unsigned short __c) {18959 return __builtin_vsx_xxblendvh(__a, __b, __c);18960}18961 18962static __inline__ vector signed int __ATTRS_o_ai18963vec_blendv(vector signed int __a, vector signed int __b,18964 vector unsigned int __c) {18965 return (vector signed int)__builtin_vsx_xxblendvw(18966 (vector unsigned int)__a, (vector unsigned int)__b, __c);18967}18968 18969static __inline__ vector unsigned int __ATTRS_o_ai18970vec_blendv(vector unsigned int __a, vector unsigned int __b,18971 vector unsigned int __c) {18972 return __builtin_vsx_xxblendvw(__a, __b, __c);18973}18974 18975static __inline__ vector signed long long __ATTRS_o_ai18976vec_blendv(vector signed long long __a, vector signed long long __b,18977 vector unsigned long long __c) {18978 return (vector signed long long)__builtin_vsx_xxblendvd(18979 (vector unsigned long long)__a, (vector unsigned long long)__b, __c);18980}18981 18982static __inline__ vector unsigned long long __ATTRS_o_ai18983vec_blendv(vector unsigned long long __a, vector unsigned long long __b,18984 vector unsigned long long __c) {18985 return (vector unsigned long long)__builtin_vsx_xxblendvd(__a, __b, __c);18986}18987 18988static __inline__ vector float __ATTRS_o_ai18989vec_blendv(vector float __a, vector float __b, vector unsigned int __c) {18990 return (vector float)__builtin_vsx_xxblendvw((vector unsigned int)__a,18991 (vector unsigned int)__b, __c);18992}18993 18994static __inline__ vector double __ATTRS_o_ai18995vec_blendv(vector double __a, vector double __b,18996 vector unsigned long long __c) {18997 return (vector double)__builtin_vsx_xxblendvd(18998 (vector unsigned long long)__a, (vector unsigned long long)__b, __c);18999}19000 19001#define vec_replace_unaligned(__a, __b, __c) \19002 _Generic((__a), vector signed int \19003 : __builtin_altivec_vinsw((vector unsigned char)__a, \19004 (unsigned int)__b, __c), \19005 vector unsigned int \19006 : __builtin_altivec_vinsw((vector unsigned char)__a, \19007 (unsigned int)__b, __c), \19008 vector unsigned long long \19009 : __builtin_altivec_vinsd((vector unsigned char)__a, \19010 (unsigned long long)__b, __c), \19011 vector signed long long \19012 : __builtin_altivec_vinsd((vector unsigned char)__a, \19013 (unsigned long long)__b, __c), \19014 vector float \19015 : __builtin_altivec_vinsw((vector unsigned char)__a, \19016 (unsigned int)__b, __c), \19017 vector double \19018 : __builtin_altivec_vinsd((vector unsigned char)__a, \19019 (unsigned long long)__b, __c))19020 19021#define vec_replace_elt(__a, __b, __c) \19022 _Generic((__a), vector signed int \19023 : (vector signed int)__builtin_altivec_vinsw_elt( \19024 (vector unsigned char)__a, (unsigned int)__b, __c), \19025 vector unsigned int \19026 : (vector unsigned int)__builtin_altivec_vinsw_elt( \19027 (vector unsigned char)__a, (unsigned int)__b, __c), \19028 vector unsigned long long \19029 : (vector unsigned long long)__builtin_altivec_vinsd_elt( \19030 (vector unsigned char)__a, (unsigned long long)__b, __c), \19031 vector signed long long \19032 : (vector signed long long)__builtin_altivec_vinsd_elt( \19033 (vector unsigned char)__a, (unsigned long long)__b, __c), \19034 vector float \19035 : (vector float)__builtin_altivec_vinsw_elt( \19036 (vector unsigned char)__a, (unsigned int)__b, __c), \19037 vector double \19038 : (vector double)__builtin_altivec_vinsd_elt( \19039 (vector unsigned char)__a, (unsigned long long)__b, __c))19040 19041/* vec_splati */19042 19043#define vec_splati(__a) \19044 _Generic((__a), signed int \19045 : ((vector signed int)__a), unsigned int \19046 : ((vector unsigned int)__a), float \19047 : ((vector float)__a))19048 19049/* vec_spatid */19050 19051static __inline__ vector double __ATTRS_o_ai vec_splatid(const float __a) {19052 return ((vector double)((double)__a));19053}19054 19055/* vec_splati_ins */19056 19057static __inline__ vector signed int __ATTRS_o_ai vec_splati_ins(19058 vector signed int __a, const unsigned int __b, const signed int __c) {19059 const unsigned int __d = __b & 0x01;19060#ifdef __LITTLE_ENDIAN__19061 __a[1 - __d] = __c;19062 __a[3 - __d] = __c;19063#else19064 __a[__d] = __c;19065 __a[2 + __d] = __c;19066#endif19067 return __a;19068}19069 19070static __inline__ vector unsigned int __ATTRS_o_ai vec_splati_ins(19071 vector unsigned int __a, const unsigned int __b, const unsigned int __c) {19072 const unsigned int __d = __b & 0x01;19073#ifdef __LITTLE_ENDIAN__19074 __a[1 - __d] = __c;19075 __a[3 - __d] = __c;19076#else19077 __a[__d] = __c;19078 __a[2 + __d] = __c;19079#endif19080 return __a;19081}19082 19083static __inline__ vector float __ATTRS_o_ai19084vec_splati_ins(vector float __a, const unsigned int __b, const float __c) {19085 const unsigned int __d = __b & 0x01;19086#ifdef __LITTLE_ENDIAN__19087 __a[1 - __d] = __c;19088 __a[3 - __d] = __c;19089#else19090 __a[__d] = __c;19091 __a[2 + __d] = __c;19092#endif19093 return __a;19094}19095 19096/* vec_test_lsbb_all_ones */19097 19098static __inline__ int __ATTRS_o_ai19099vec_test_lsbb_all_ones(vector unsigned char __a) {19100 return __builtin_vsx_xvtlsbb(__a, 1);19101}19102 19103/* vec_test_lsbb_all_zeros */19104 19105static __inline__ int __ATTRS_o_ai19106vec_test_lsbb_all_zeros(vector unsigned char __a) {19107 return __builtin_vsx_xvtlsbb(__a, 0);19108}19109#endif /* __VSX__ */19110 19111/* vec_stril */19112 19113static __inline__ vector unsigned char __ATTRS_o_ai19114vec_stril(vector unsigned char __a) {19115#ifdef __LITTLE_ENDIAN__19116 return (vector unsigned char)__builtin_altivec_vstribr(19117 (vector unsigned char)__a);19118#else19119 return (vector unsigned char)__builtin_altivec_vstribl(19120 (vector unsigned char)__a);19121#endif19122}19123 19124static __inline__ vector signed char __ATTRS_o_ai19125vec_stril(vector signed char __a) {19126#ifdef __LITTLE_ENDIAN__19127 return (vector signed char)__builtin_altivec_vstribr(19128 (vector unsigned char)__a);19129#else19130 return (vector signed char)__builtin_altivec_vstribl(19131 (vector unsigned char)__a);19132#endif19133}19134 19135static __inline__ vector unsigned short __ATTRS_o_ai19136vec_stril(vector unsigned short __a) {19137#ifdef __LITTLE_ENDIAN__19138 return (vector unsigned short)__builtin_altivec_vstrihr(19139 (vector signed short)__a);19140#else19141 return (vector unsigned short)__builtin_altivec_vstrihl(19142 (vector signed short)__a);19143#endif19144}19145 19146static __inline__ vector signed short __ATTRS_o_ai19147vec_stril(vector signed short __a) {19148#ifdef __LITTLE_ENDIAN__19149 return __builtin_altivec_vstrihr(__a);19150#else19151 return __builtin_altivec_vstrihl(__a);19152#endif19153}19154 19155/* vec_stril_p */19156 19157static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) {19158#ifdef __LITTLE_ENDIAN__19159 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);19160#else19161 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);19162#endif19163}19164 19165static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) {19166#ifdef __LITTLE_ENDIAN__19167 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);19168#else19169 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);19170#endif19171}19172 19173static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned short __a) {19174#ifdef __LITTLE_ENDIAN__19175 return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);19176#else19177 return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);19178#endif19179}19180 19181static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed short __a) {19182#ifdef __LITTLE_ENDIAN__19183 return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);19184#else19185 return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);19186#endif19187}19188 19189/* vec_strir */19190 19191static __inline__ vector unsigned char __ATTRS_o_ai19192vec_strir(vector unsigned char __a) {19193#ifdef __LITTLE_ENDIAN__19194 return (vector unsigned char)__builtin_altivec_vstribl(19195 (vector unsigned char)__a);19196#else19197 return (vector unsigned char)__builtin_altivec_vstribr(19198 (vector unsigned char)__a);19199#endif19200}19201 19202static __inline__ vector signed char __ATTRS_o_ai19203vec_strir(vector signed char __a) {19204#ifdef __LITTLE_ENDIAN__19205 return (vector signed char)__builtin_altivec_vstribl(19206 (vector unsigned char)__a);19207#else19208 return (vector signed char)__builtin_altivec_vstribr(19209 (vector unsigned char)__a);19210#endif19211}19212 19213static __inline__ vector unsigned short __ATTRS_o_ai19214vec_strir(vector unsigned short __a) {19215#ifdef __LITTLE_ENDIAN__19216 return (vector unsigned short)__builtin_altivec_vstrihl(19217 (vector signed short)__a);19218#else19219 return (vector unsigned short)__builtin_altivec_vstrihr(19220 (vector signed short)__a);19221#endif19222}19223 19224static __inline__ vector signed short __ATTRS_o_ai19225vec_strir(vector signed short __a) {19226#ifdef __LITTLE_ENDIAN__19227 return __builtin_altivec_vstrihl(__a);19228#else19229 return __builtin_altivec_vstrihr(__a);19230#endif19231}19232 19233/* vec_strir_p */19234 19235static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) {19236#ifdef __LITTLE_ENDIAN__19237 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);19238#else19239 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);19240#endif19241}19242 19243static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) {19244#ifdef __LITTLE_ENDIAN__19245 return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);19246#else19247 return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);19248#endif19249}19250 19251static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned short __a) {19252#ifdef __LITTLE_ENDIAN__19253 return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);19254#else19255 return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);19256#endif19257}19258 19259static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed short __a) {19260#ifdef __LITTLE_ENDIAN__19261 return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);19262#else19263 return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);19264#endif19265}19266 19267/* vs[l | r | ra] */19268 19269#ifdef __SIZEOF_INT128__19270static __inline__ vector unsigned __int128 __ATTRS_o_ai19271vec_sl(vector unsigned __int128 __a, vector unsigned __int128 __b) {19272 return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *19273 __CHAR_BIT__));19274}19275 19276static __inline__ vector signed __int128 __ATTRS_o_ai19277vec_sl(vector signed __int128 __a, vector unsigned __int128 __b) {19278 return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *19279 __CHAR_BIT__));19280}19281 19282static __inline__ vector unsigned __int128 __ATTRS_o_ai19283vec_sr(vector unsigned __int128 __a, vector unsigned __int128 __b) {19284 return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *19285 __CHAR_BIT__));19286}19287 19288static __inline__ vector signed __int128 __ATTRS_o_ai19289vec_sr(vector signed __int128 __a, vector unsigned __int128 __b) {19290 return (19291 vector signed __int128)(((vector unsigned __int128)__a) >>19292 (__b %19293 (vector unsigned __int128)(sizeof(19294 unsigned __int128) *19295 __CHAR_BIT__)));19296}19297 19298static __inline__ vector unsigned __int128 __ATTRS_o_ai19299vec_sra(vector unsigned __int128 __a, vector unsigned __int128 __b) {19300 return (19301 vector unsigned __int128)(((vector signed __int128)__a) >>19302 (__b %19303 (vector unsigned __int128)(sizeof(19304 unsigned __int128) *19305 __CHAR_BIT__)));19306}19307 19308static __inline__ vector signed __int128 __ATTRS_o_ai19309vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) {19310 return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *19311 __CHAR_BIT__));19312}19313 19314#endif /* __SIZEOF_INT128__ */19315#endif /* __POWER10_VECTOR__ */19316 19317#ifdef __POWER8_VECTOR__19318#define __bcdadd(__a, __b, __ps) __builtin_ppc_bcdadd((__a), (__b), (__ps))19319#define __bcdsub(__a, __b, __ps) __builtin_ppc_bcdsub((__a), (__b), (__ps))19320 19321static __inline__ long __bcdadd_ofl(vector unsigned char __a,19322 vector unsigned char __b) {19323 return __builtin_ppc_bcdadd_p(__CR6_SO, __a, __b);19324}19325 19326static __inline__ long __bcdsub_ofl(vector unsigned char __a,19327 vector unsigned char __b) {19328 return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __b);19329}19330 19331static __inline__ long __bcd_invalid(vector unsigned char __a) {19332 return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __a);19333}19334 19335static __inline__ long __bcdcmpeq(vector unsigned char __a,19336 vector unsigned char __b) {19337 return __builtin_ppc_bcdsub_p(__CR6_EQ, __a, __b);19338}19339 19340static __inline__ long __bcdcmplt(vector unsigned char __a,19341 vector unsigned char __b) {19342 return __builtin_ppc_bcdsub_p(__CR6_LT, __a, __b);19343}19344 19345static __inline__ long __bcdcmpgt(vector unsigned char __a,19346 vector unsigned char __b) {19347 return __builtin_ppc_bcdsub_p(__CR6_GT, __a, __b);19348}19349 19350static __inline__ long __bcdcmple(vector unsigned char __a,19351 vector unsigned char __b) {19352 return __builtin_ppc_bcdsub_p(__CR6_GT_REV, __a, __b);19353}19354 19355static __inline__ long __bcdcmpge(vector unsigned char __a,19356 vector unsigned char __b) {19357 return __builtin_ppc_bcdsub_p(__CR6_LT_REV, __a, __b);19358}19359 19360#endif // __POWER8_VECTOR__19361 19362#undef __ATTRS_o_ai19363 19364#endif /* __ALTIVEC_H */19365