diff --git a/clang/include/clang/Basic/BuiltinsPPC.def b/clang/include/clang/Basic/BuiltinsPPC.def --- a/clang/include/clang/Basic/BuiltinsPPC.def +++ b/clang/include/clang/Basic/BuiltinsPPC.def @@ -175,6 +175,9 @@ BUILTIN(__builtin_altivec_vaddcuq, "V1ULLLiV1ULLLiV1ULLLi","") BUILTIN(__builtin_altivec_vaddecuq, "V1ULLLiV1ULLLiV1ULLLiV1ULLLi","") BUILTIN(__builtin_altivec_vadduqm, "V1ULLLiV16UcV16Uc","") +BUILTIN(__builtin_altivec_vaddeuqm_c, "V16UcV16UcV16UcV16Uc","") +BUILTIN(__builtin_altivec_vaddcuq_c, "V16UcV16UcV16Uc","") +BUILTIN(__builtin_altivec_vaddecuq_c, "V16UcV16UcV16UcV16Uc","") BUILTIN(__builtin_altivec_vsubsbs, "V16ScV16ScV16Sc", "") BUILTIN(__builtin_altivec_vsububs, "V16UcV16UcV16Uc", "") @@ -186,6 +189,9 @@ BUILTIN(__builtin_altivec_vsubcuq, "V1ULLLiV1ULLLiV1ULLLi","") BUILTIN(__builtin_altivec_vsubecuq, "V1ULLLiV1ULLLiV1ULLLiV1ULLLi","") BUILTIN(__builtin_altivec_vsubuqm, "V1ULLLiV16UcV16Uc","") +BUILTIN(__builtin_altivec_vsubeuqm_c, "V16UcV16UcV16UcV16Uc","") +BUILTIN(__builtin_altivec_vsubcuq_c, "V16UcV16UcV16Uc","") +BUILTIN(__builtin_altivec_vsubecuq_c, "V16UcV16UcV16UcV16Uc","") BUILTIN(__builtin_altivec_vavgsb, "V16ScV16ScV16Sc", "") BUILTIN(__builtin_altivec_vavgub, "V16UcV16UcV16Uc", "") @@ -521,12 +527,12 @@ BUILTIN(__builtin_altivec_vpextd, "V2ULLiV2ULLiV2ULLi", "") // P10 Vector String Isolate Built-ins. -BUILTIN(__builtin_altivec_vstribr, "V16cV16c", "") -BUILTIN(__builtin_altivec_vstribl, "V16cV16c", "") +BUILTIN(__builtin_altivec_vstribr, "V16UcV16Uc", "") +BUILTIN(__builtin_altivec_vstribl, "V16UcV16Uc", "") BUILTIN(__builtin_altivec_vstrihr, "V8sV8s", "") BUILTIN(__builtin_altivec_vstrihl, "V8sV8s", "") -BUILTIN(__builtin_altivec_vstribr_p, "iiV16c", "") -BUILTIN(__builtin_altivec_vstribl_p, "iiV16c", "") +BUILTIN(__builtin_altivec_vstribr_p, "iiV16Uc", "") +BUILTIN(__builtin_altivec_vstribl_p, "iiV16Uc", "") BUILTIN(__builtin_altivec_vstrihr_p, "iiV8s", "") BUILTIN(__builtin_altivec_vstrihl_p, "iiV8s", "") @@ -537,8 +543,8 @@ BUILTIN(__builtin_altivec_vgnb, "ULLiV1ULLLiIi", "") // P10 Vector Clear Bytes built-ins. -BUILTIN(__builtin_altivec_vclrlb, "V16cV16cUi", "") -BUILTIN(__builtin_altivec_vclrrb, "V16cV16cUi", "") +BUILTIN(__builtin_altivec_vclrlb, "V16UcV16UcUi", "") +BUILTIN(__builtin_altivec_vclrrb, "V16UcV16UcUi", "") // P10 Vector Count Leading / Trailing Zeroes under bit Mask built-ins. BUILTIN(__builtin_altivec_vclzdm, "V2ULLiV2ULLiV2ULLi", "") diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -15706,6 +15706,57 @@ else return Builder.CreateSub(Op0, Op1, "vsubuqm"); } + case PPC::BI__builtin_altivec_vaddcuq_c: + case PPC::BI__builtin_altivec_vsubcuq_c: { + SmallVector Ops; + Value *Op0 = EmitScalarExpr(E->getArg(0)); + Value *Op1 = EmitScalarExpr(E->getArg(1)); + llvm::Type *Int128Ty = llvm::IntegerType::get(getLLVMContext(), 128); + Ops.push_back( + Builder.CreateBitCast(Op0, llvm::FixedVectorType::get(Int128Ty, 1))); + Ops.push_back( + Builder.CreateBitCast(Op1, llvm::FixedVectorType::get(Int128Ty, 1))); + if (BuiltinID == PPC::BI__builtin_altivec_vaddcuq_c) + ID = Intrinsic::ppc_altivec_vaddcuq; + else + ID = Intrinsic::ppc_altivec_vsubcuq; + llvm::Function *F = CGM.getIntrinsic(ID); + return Builder.CreateCall(F, Ops, ""); + } + case PPC::BI__builtin_altivec_vaddeuqm_c: + case PPC::BI__builtin_altivec_vaddecuq_c: + case PPC::BI__builtin_altivec_vsubeuqm_c: + case PPC::BI__builtin_altivec_vsubecuq_c: { + SmallVector Ops; + Value *Op0 = EmitScalarExpr(E->getArg(0)); + Value *Op1 = EmitScalarExpr(E->getArg(1)); + Value *Op2 = EmitScalarExpr(E->getArg(2)); + llvm::Type *Int128Ty = llvm::IntegerType::get(getLLVMContext(), 128); + Ops.push_back( + Builder.CreateBitCast(Op0, llvm::FixedVectorType::get(Int128Ty, 1))); + Ops.push_back( + Builder.CreateBitCast(Op1, llvm::FixedVectorType::get(Int128Ty, 1))); + Ops.push_back( + Builder.CreateBitCast(Op2, llvm::FixedVectorType::get(Int128Ty, 1))); + switch (BuiltinID) { + default: + llvm_unreachable("Unsupported intrinsic!"); + case PPC::BI__builtin_altivec_vaddeuqm_c: + ID = Intrinsic::ppc_altivec_vaddeuqm; + break; + case PPC::BI__builtin_altivec_vaddecuq_c: + ID = Intrinsic::ppc_altivec_vaddecuq; + break; + case PPC::BI__builtin_altivec_vsubeuqm_c: + ID = Intrinsic::ppc_altivec_vsubeuqm; + break; + case PPC::BI__builtin_altivec_vsubecuq_c: + ID = Intrinsic::ppc_altivec_vsubecuq; + break; + } + llvm::Function *F = CGM.getIntrinsic(ID); + return Builder.CreateCall(F, Ops, ""); + } // Rotate and insert under mask operation. // __rldimi(rs, is, shift, mask) // (rotl64(rs, shift) & mask) | (is & ~mask) diff --git a/clang/lib/Headers/altivec.h b/clang/lib/Headers/altivec.h --- a/clang/lib/Headers/altivec.h +++ b/clang/lib/Headers/altivec.h @@ -311,7 +311,7 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_add_u128(vector unsigned char __a, vector unsigned char __b) { - return __builtin_altivec_vadduqm(__a, __b); + return (vector unsigned char)__builtin_altivec_vadduqm(__a, __b); } #elif defined(__VSX__) static __inline__ vector signed long long __ATTRS_o_ai @@ -325,9 +325,9 @@ (vector unsigned int)__a + (vector unsigned int)__b; vector unsigned int __carry = __builtin_altivec_vaddcuw( (vector unsigned int)__a, (vector unsigned int)__b); - __carry = __builtin_shufflevector((vector unsigned char)__carry, - (vector unsigned char)__carry, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0); + __carry = (vector unsigned int)__builtin_shufflevector( + (vector unsigned char)__carry, (vector unsigned char)__carry, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0); return (vector signed long long)(__res + __carry); #endif } @@ -358,7 +358,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_adde(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vaddeuqm(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vaddeuqm( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -371,7 +373,9 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_adde_u128(vector unsigned char __a, vector unsigned char __b, vector unsigned char __c) { - return (vector unsigned char)__builtin_altivec_vaddeuqm(__a, __b, __c); + return (vector unsigned char)__builtin_altivec_vaddeuqm_c( + (vector unsigned char)__a, (vector unsigned char)__b, + (vector unsigned char)__c); } #endif @@ -398,7 +402,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_addec(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vaddecuq(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vaddecuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -411,7 +417,9 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_addec_u128(vector unsigned char __a, vector unsigned char __b, vector unsigned char __c) { - return (vector unsigned char)__builtin_altivec_vaddecuq(__a, __b, __c); + return (vector unsigned char)__builtin_altivec_vaddecuq_c( + (vector unsigned char)__a, (vector unsigned char)__b, + (vector unsigned char)__c); } #ifdef __powerpc64__ @@ -600,7 +608,8 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_addc_u128(vector unsigned char __a, vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vaddcuq(__a, __b); + return (vector unsigned char)__builtin_altivec_vaddcuq_c( + (vector unsigned char)__a, (vector unsigned char)__b); } #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) @@ -824,7 +833,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vaddeuqm(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vaddeuqm( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -837,7 +848,8 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vaddcuq(__a, __b); + return (vector signed __int128)__builtin_altivec_vaddcuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -850,7 +862,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vaddecuq(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vaddecuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -1806,18 +1820,19 @@ static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) { return (vector bool __int128)__builtin_altivec_vcmpequq( - (vector bool __int128)__a, (vector bool __int128)__b); + (vector unsigned __int128)__a, (vector unsigned __int128)__b); } static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) { return (vector bool __int128)__builtin_altivec_vcmpequq( - (vector bool __int128)__a, (vector bool __int128)__b); + (vector unsigned __int128)__a, (vector unsigned __int128)__b); } static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpeq(vector bool __int128 __a, vector bool __int128 __b) { - return (vector bool __int128)__builtin_altivec_vcmpequq(__a, __b); + return (vector bool __int128)__builtin_altivec_vcmpequq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b); } #endif @@ -1887,19 +1902,20 @@ #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return (vector bool __int128) ~(__builtin_altivec_vcmpequq( - (vector bool __int128)__a, (vector bool __int128)__b)); + return (vector bool __int128)~(__builtin_altivec_vcmpequq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b)); } static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) { - return (vector bool __int128) ~(__builtin_altivec_vcmpequq( - (vector bool __int128)__a, (vector bool __int128)__b)); + return (vector bool __int128)~(__builtin_altivec_vcmpequq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b)); } static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpne(vector bool __int128 __a, vector bool __int128 __b) { - return (vector bool __int128) ~(__builtin_altivec_vcmpequq(__a, __b)); + return (vector bool __int128)~(__builtin_altivec_vcmpequq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b)); } #endif @@ -1944,16 +1960,16 @@ static __inline__ signed int __ATTRS_o_ai vec_cntlz_lsbb(vector signed char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vctzlsbb(__a); + return __builtin_altivec_vctzlsbb((vector unsigned char)__a); #else - return __builtin_altivec_vclzlsbb(__a); + return __builtin_altivec_vclzlsbb((vector unsigned char)__a); #endif } static __inline__ signed int __ATTRS_o_ai vec_cntlz_lsbb(vector unsigned char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vctzlsbb(__a); + return __builtin_altivec_vctzlsbb((vector unsigned char)__a); #else return __builtin_altivec_vclzlsbb(__a); #endif @@ -1962,9 +1978,9 @@ static __inline__ signed int __ATTRS_o_ai vec_cnttz_lsbb(vector signed char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vclzlsbb(__a); + return __builtin_altivec_vclzlsbb((vector unsigned char)__a); #else - return __builtin_altivec_vctzlsbb(__a); + return __builtin_altivec_vctzlsbb((vector unsigned char)__a); #endif } @@ -1984,7 +2000,7 @@ static __inline__ vector unsigned int __ATTRS_o_ai vec_parity_lsbb(vector signed int __a) { - return __builtin_altivec_vprtybw(__a); + return __builtin_altivec_vprtybw((vector unsigned int)__a); } #ifdef __SIZEOF_INT128__ @@ -1995,7 +2011,7 @@ static __inline__ vector unsigned __int128 __ATTRS_o_ai vec_parity_lsbb(vector signed __int128 __a) { - return __builtin_altivec_vprtybq(__a); + return __builtin_altivec_vprtybq((vector unsigned __int128)__a); } #endif @@ -2006,7 +2022,7 @@ static __inline__ vector unsigned long long __ATTRS_o_ai vec_parity_lsbb(vector signed long long __a) { - return __builtin_altivec_vprtybd(__a); + return __builtin_altivec_vprtybd((vector unsigned long long)__a); } #else @@ -2212,14 +2228,12 @@ #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) { - return (vector bool __int128)__builtin_altivec_vcmpgtsq( - (vector bool __int128)__a, (vector bool __int128)__b); + return (vector bool __int128)__builtin_altivec_vcmpgtsq(__a, __b); } static __inline__ vector bool __int128 __ATTRS_o_ai vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return (vector bool __int128)__builtin_altivec_vcmpgtuq( - (vector bool __int128)__a, (vector bool __int128)__b); + return (vector bool __int128)__builtin_altivec_vcmpgtuq(__a, __b); } #endif @@ -2488,7 +2502,8 @@ static __inline__ vector unsigned char __ATTRS_o_ai vec_popcnt(vector signed char __a) { - return __builtin_altivec_vpopcntb(__a); + return (vector unsigned char)__builtin_altivec_vpopcntb( + (vector unsigned char)__a); } static __inline__ vector unsigned char __ATTRS_o_ai vec_popcnt(vector unsigned char __a) { @@ -2496,7 +2511,8 @@ } static __inline__ vector unsigned short __ATTRS_o_ai vec_popcnt(vector signed short __a) { - return __builtin_altivec_vpopcnth(__a); + return (vector unsigned short)__builtin_altivec_vpopcnth( + (vector unsigned short)__a); } static __inline__ vector unsigned short __ATTRS_o_ai vec_popcnt(vector unsigned short __a) { @@ -2504,7 +2520,7 @@ } static __inline__ vector unsigned int __ATTRS_o_ai vec_popcnt(vector signed int __a) { - return __builtin_altivec_vpopcntw(__a); + return __builtin_altivec_vpopcntw((vector unsigned int)__a); } static __inline__ vector unsigned int __ATTRS_o_ai vec_popcnt(vector unsigned int __a) { @@ -2512,7 +2528,7 @@ } static __inline__ vector unsigned long long __ATTRS_o_ai vec_popcnt(vector signed long long __a) { - return __builtin_altivec_vpopcntd(__a); + return __builtin_altivec_vpopcntd((vector unsigned long long)__a); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_popcnt(vector unsigned long long __a) { @@ -2524,7 +2540,7 @@ static __inline__ vector signed char __ATTRS_o_ai vec_cntlz(vector signed char __a) { - return __builtin_altivec_vclzb(__a); + return (vector signed char)__builtin_altivec_vclzb((vector unsigned char)__a); } static __inline__ vector unsigned char __ATTRS_o_ai vec_cntlz(vector unsigned char __a) { @@ -2532,7 +2548,8 @@ } static __inline__ vector signed short __ATTRS_o_ai vec_cntlz(vector signed short __a) { - return __builtin_altivec_vclzh(__a); + return (vector signed short)__builtin_altivec_vclzh( + (vector unsigned short)__a); } static __inline__ vector unsigned short __ATTRS_o_ai vec_cntlz(vector unsigned short __a) { @@ -2540,7 +2557,7 @@ } static __inline__ vector signed int __ATTRS_o_ai vec_cntlz(vector signed int __a) { - return __builtin_altivec_vclzw(__a); + return (vector signed int)__builtin_altivec_vclzw((vector unsigned int)__a); } static __inline__ vector unsigned int __ATTRS_o_ai vec_cntlz(vector unsigned int __a) { @@ -2548,7 +2565,8 @@ } static __inline__ vector signed long long __ATTRS_o_ai vec_cntlz(vector signed long long __a) { - return __builtin_altivec_vclzd(__a); + return (vector signed long long)__builtin_altivec_vclzd( + (vector unsigned long long)__a); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_cntlz(vector unsigned long long __a) { @@ -2562,7 +2580,7 @@ static __inline__ vector signed char __ATTRS_o_ai vec_cnttz(vector signed char __a) { - return __builtin_altivec_vctzb(__a); + return (vector signed char)__builtin_altivec_vctzb((vector unsigned char)__a); } static __inline__ vector unsigned char __ATTRS_o_ai vec_cnttz(vector unsigned char __a) { @@ -2570,7 +2588,8 @@ } static __inline__ vector signed short __ATTRS_o_ai vec_cnttz(vector signed short __a) { - return __builtin_altivec_vctzh(__a); + return (vector signed short)__builtin_altivec_vctzh( + (vector unsigned short)__a); } static __inline__ vector unsigned short __ATTRS_o_ai vec_cnttz(vector unsigned short __a) { @@ -2578,7 +2597,7 @@ } static __inline__ vector signed int __ATTRS_o_ai vec_cnttz(vector signed int __a) { - return __builtin_altivec_vctzw(__a); + return (vector signed int)__builtin_altivec_vctzw((vector unsigned int)__a); } static __inline__ vector unsigned int __ATTRS_o_ai vec_cnttz(vector unsigned int __a) { @@ -2586,7 +2605,8 @@ } static __inline__ vector signed long long __ATTRS_o_ai vec_cnttz(vector signed long long __a) { - return __builtin_altivec_vctzd(__a); + return (vector signed long long)__builtin_altivec_vctzd( + (vector unsigned long long)__a); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_cnttz(vector unsigned long long __a) { @@ -3144,7 +3164,8 @@ vector unsigned char __mask = (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL); vector unsigned char __res = - __builtin_altivec_vperm_4si((vector int)__a, (vector int)__a, __mask); + (vector unsigned char)__builtin_altivec_vperm_4si( + (vector int)__a, (vector int)__a, __mask); return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56)); } #endif @@ -6491,12 +6512,12 @@ static __inline__ vector signed char __ATTRS_o_ai vec_nand(vector signed char __a, vector bool char __b) { - return ~(__a & __b); + return ~(__a & (vector signed char)__b); } static __inline__ vector signed char __ATTRS_o_ai vec_nand(vector bool char __a, vector signed char __b) { - return ~(__a & __b); + return (vector signed char)~(__a & (vector bool char)__b); } static __inline__ vector unsigned char __ATTRS_o_ai @@ -6506,12 +6527,12 @@ static __inline__ vector unsigned char __ATTRS_o_ai vec_nand(vector unsigned char __a, vector bool char __b) { - return ~(__a & __b); + return ~(__a & (vector unsigned char)__b); } static __inline__ vector unsigned char __ATTRS_o_ai vec_nand(vector bool char __a, vector unsigned char __b) { - return ~(__a & __b); + return (vector unsigned char)~(__a & (vector bool char)__b); } static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a, @@ -6526,12 +6547,12 @@ static __inline__ vector signed short __ATTRS_o_ai vec_nand(vector signed short __a, vector bool short __b) { - return ~(__a & __b); + return ~(__a & (vector signed short)__b); } static __inline__ vector signed short __ATTRS_o_ai vec_nand(vector bool short __a, vector signed short __b) { - return ~(__a & __b); + return (vector signed short)~(__a & (vector bool short)__b); } static __inline__ vector unsigned short __ATTRS_o_ai @@ -6541,7 +6562,7 @@ static __inline__ vector unsigned short __ATTRS_o_ai vec_nand(vector unsigned short __a, vector bool short __b) { - return ~(__a & __b); + return ~(__a & (vector unsigned short)__b); } static __inline__ vector bool short __ATTRS_o_ai @@ -6556,12 +6577,12 @@ static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a, vector bool int __b) { - return ~(__a & __b); + return ~(__a & (vector signed int)__b); } static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector bool int __a, vector signed int __b) { - return ~(__a & __b); + return (vector signed int)~(__a & (vector bool int)__b); } static __inline__ vector unsigned int __ATTRS_o_ai @@ -6571,12 +6592,12 @@ static __inline__ vector unsigned int __ATTRS_o_ai vec_nand(vector unsigned int __a, vector bool int __b) { - return ~(__a & __b); + return ~(__a & (vector unsigned int)__b); } static __inline__ vector unsigned int __ATTRS_o_ai vec_nand(vector bool int __a, vector unsigned int __b) { - return ~(__a & __b); + return (vector unsigned int)~(__a & (vector bool int)__b); } static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a, @@ -6597,12 +6618,12 @@ static __inline__ vector signed long long __ATTRS_o_ai vec_nand(vector signed long long __a, vector bool long long __b) { - return ~(__a & __b); + return ~(__a & (vector signed long long)__b); } static __inline__ vector signed long long __ATTRS_o_ai vec_nand(vector bool long long __a, vector signed long long __b) { - return ~(__a & __b); + return (vector signed long long)~(__a & (vector bool long long)__b); } static __inline__ vector unsigned long long __ATTRS_o_ai @@ -6612,12 +6633,12 @@ static __inline__ vector unsigned long long __ATTRS_o_ai vec_nand(vector unsigned long long __a, vector bool long long __b) { - return ~(__a & __b); + return ~(__a & (vector unsigned long long)__b); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_nand(vector bool long long __a, vector unsigned long long __b) { - return ~(__a & __b); + return (vector unsigned long long)~(__a & (vector bool long long)__b); } static __inline__ vector bool long long __ATTRS_o_ai @@ -7005,12 +7026,12 @@ static __inline__ vector signed char __ATTRS_o_ai vec_orc(vector signed char __a, vector bool char __b) { - return __a | ~__b; + return __a | (vector signed char)~__b; } static __inline__ vector signed char __ATTRS_o_ai vec_orc(vector bool char __a, vector signed char __b) { - return __a | ~__b; + return (vector signed char)(__a | (vector bool char)~__b); } static __inline__ vector unsigned char __ATTRS_o_ai @@ -7020,12 +7041,12 @@ static __inline__ vector unsigned char __ATTRS_o_ai vec_orc(vector unsigned char __a, vector bool char __b) { - return __a | ~__b; + return __a | (vector unsigned char)~__b; } static __inline__ vector unsigned char __ATTRS_o_ai vec_orc(vector bool char __a, vector unsigned char __b) { - return __a | ~__b; + return (vector unsigned char)(__a | (vector bool char)~__b); } static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a, @@ -7040,12 +7061,12 @@ static __inline__ vector signed short __ATTRS_o_ai vec_orc(vector signed short __a, vector bool short __b) { - return __a | ~__b; + return __a | (vector signed short)~__b; } static __inline__ vector signed short __ATTRS_o_ai vec_orc(vector bool short __a, vector signed short __b) { - return __a | ~__b; + return (vector signed short)(__a | (vector bool short)~__b); } static __inline__ vector unsigned short __ATTRS_o_ai @@ -7055,12 +7076,12 @@ static __inline__ vector unsigned short __ATTRS_o_ai vec_orc(vector unsigned short __a, vector bool short __b) { - return __a | ~__b; + return __a | (vector unsigned short)~__b; } static __inline__ vector unsigned short __ATTRS_o_ai vec_orc(vector bool short __a, vector unsigned short __b) { - return __a | ~__b; + return (vector unsigned short)(__a | (vector bool short)~__b); } static __inline__ vector bool short __ATTRS_o_ai @@ -7075,12 +7096,12 @@ static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a, vector bool int __b) { - return __a | ~__b; + return __a | (vector signed int)~__b; } static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector bool int __a, vector signed int __b) { - return __a | ~__b; + return (vector signed int)(__a | (vector bool int)~__b); } static __inline__ vector unsigned int __ATTRS_o_ai @@ -7090,12 +7111,12 @@ static __inline__ vector unsigned int __ATTRS_o_ai vec_orc(vector unsigned int __a, vector bool int __b) { - return __a | ~__b; + return __a | (vector unsigned int)~__b; } static __inline__ vector unsigned int __ATTRS_o_ai vec_orc(vector bool int __a, vector unsigned int __b) { - return __a | ~__b; + return (vector unsigned int)(__a | (vector bool int)~__b); } static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a, @@ -7105,12 +7126,12 @@ static __inline__ vector float __ATTRS_o_ai vec_orc(vector bool int __a, vector float __b) { - return (vector float)(__a | ~(vector unsigned int)__b); + return (vector float)(__a | ~(vector bool int)__b); } static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a, vector bool int __b) { - return (vector float)((vector unsigned int)__a | ~__b); + return (vector float)((vector bool int)__a | ~__b); } static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a, @@ -7125,12 +7146,12 @@ static __inline__ vector signed long long __ATTRS_o_ai vec_orc(vector signed long long __a, vector bool long long __b) { - return __a | ~__b; + return __a | (vector signed long long)~__b; } static __inline__ vector signed long long __ATTRS_o_ai vec_orc(vector bool long long __a, vector signed long long __b) { - return __a | ~__b; + return (vector signed long long)(__a | (vector bool long long)~__b); } static __inline__ vector unsigned long long __ATTRS_o_ai @@ -7140,12 +7161,12 @@ static __inline__ vector unsigned long long __ATTRS_o_ai vec_orc(vector unsigned long long __a, vector bool long long __b) { - return __a | ~__b; + return __a | (vector unsigned long long)~__b; } static __inline__ vector unsigned long long __ATTRS_o_ai vec_orc(vector bool long long __a, vector unsigned long long __b) { - return __a | ~__b; + return (vector unsigned long long)(__a | (vector bool long long)~__b); } static __inline__ vector bool long long __ATTRS_o_ai @@ -7155,17 +7176,17 @@ static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a, vector bool long long __b) { - return (vector double)((vector unsigned long long)__a | ~__b); + return (vector double)((vector bool long long)__a | ~__b); } static __inline__ vector double __ATTRS_o_ai vec_orc(vector bool long long __a, vector double __b) { - return (vector double)(__a | ~(vector unsigned long long)__b); + return (vector double)(__a | ~(vector bool long long)__b); } static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a, vector double __b) { - return (vector double)((vector bool long long)__a | + return (vector double)((vector unsigned long long)__a | ~(vector unsigned long long)__b); } #endif @@ -8276,14 +8297,20 @@ static __inline__ vector unsigned long long __ATTRS_o_ai vec_rl(vector unsigned long long __a, vector unsigned long long __b) { - return __builtin_altivec_vrld(__a, __b); + return (vector unsigned long long)__builtin_altivec_vrld( + (vector long long)__a, __b); } #endif #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ vector signed __int128 __ATTRS_o_ai vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) { - return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector signed __int128)) - __a)); + return (vector signed __int128)(((vector unsigned __int128)__b + << (vector unsigned __int128)__a) | + ((vector unsigned __int128)__b >> + ((__CHAR_BIT__ * + sizeof(vector unsigned __int128)) - + (vector unsigned __int128)__a))); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -8317,7 +8344,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_rlmi(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vrlqmi(__a, __c, __b); + return (vector signed __int128)__builtin_altivec_vrlqmi( + (vector unsigned __int128)__a, (vector unsigned __int128)__c, + (vector unsigned __int128)__b); } #endif @@ -8370,7 +8399,8 @@ __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1, -1, -1, -1, -1, -1, -1, -1); #endif - return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift); + return (vector signed __int128)__builtin_altivec_vrlqnm( + (vector unsigned __int128)__a, (vector unsigned __int128)MaskAndShift); } #endif @@ -12070,13 +12100,15 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_subc(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vsubcuq(__a, __b); + return (vector signed __int128)__builtin_altivec_vsubcuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b); } #endif static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_subc_u128(vector unsigned char __a, vector unsigned char __b) { - return (vector unsigned char)__builtin_altivec_vsubcuq(__a, __b); + return (vector unsigned char)__builtin_altivec_vsubcuq_c( + (vector unsigned char)__a, (vector unsigned char)__b); } #endif // __POWER8_VECTOR__ @@ -12298,7 +12330,7 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_sub_u128(vector unsigned char __a, vector unsigned char __b) { - return __builtin_altivec_vsubuqm(__a, __b); + return (vector unsigned char)__builtin_altivec_vsubuqm(__a, __b); } /* vec_vsubeuqm */ @@ -12307,7 +12339,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vsubeuqm(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vsubeuqm( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -12319,7 +12353,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_sube(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vsubeuqm(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vsubeuqm( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -12332,7 +12368,9 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_sube_u128(vector unsigned char __a, vector unsigned char __b, vector unsigned char __c) { - return (vector unsigned char)__builtin_altivec_vsubeuqm(__a, __b, __c); + return (vector unsigned char)__builtin_altivec_vsubeuqm_c( + (vector unsigned char)__a, (vector unsigned char)__b, + (vector unsigned char)__c); } /* vec_vsubcuq */ @@ -12340,7 +12378,8 @@ #ifdef __SIZEOF_INT128__ static __inline__ vector signed __int128 __ATTRS_o_ai vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vsubcuq(__a, __b); + return (vector signed __int128)__builtin_altivec_vsubcuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -12353,7 +12392,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vsubecuq(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vsubecuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -12381,7 +12422,9 @@ static __inline__ vector signed __int128 __ATTRS_o_ai vec_subec(vector signed __int128 __a, vector signed __int128 __b, vector signed __int128 __c) { - return __builtin_altivec_vsubecuq(__a, __b, __c); + return (vector signed __int128)__builtin_altivec_vsubecuq( + (vector unsigned __int128)__a, (vector unsigned __int128)__b, + (vector unsigned __int128)__c); } static __inline__ vector unsigned __int128 __ATTRS_o_ai @@ -12394,7 +12437,9 @@ static __inline__ vector unsigned char __attribute__((__always_inline__)) vec_subec_u128(vector unsigned char __a, vector unsigned char __b, vector unsigned char __c) { - return (vector unsigned char)__builtin_altivec_vsubecuq(__a, __b, __c); + return (vector unsigned char)__builtin_altivec_vsubecuq_c( + (vector unsigned char)__a, (vector unsigned char)__b, + (vector unsigned char)__c); } #endif // __POWER8_VECTOR__ @@ -14900,17 +14945,20 @@ #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_LT, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a, + (vector signed __int128)__b); } static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_LT, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_LT, __a, + (vector signed __int128)__b); } static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool __int128 __a, vector bool __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_LT, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a, + (vector signed __int128)__b); } #endif @@ -15850,17 +15898,20 @@ #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a, + __b); } static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a, + (vector signed __int128)__b); } static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool __int128 __a, vector bool __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a, + (vector signed __int128)__b); } #endif @@ -16144,17 +16195,20 @@ #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, + (vector unsigned __int128)__a, __b); } static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a, + (vector signed __int128)__b); } static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool __int128 __a, vector bool __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a, __b); + return __builtin_altivec_vcmpequq_p( + __CR6_EQ_REV, (vector unsigned __int128)__a, (vector signed __int128)__b); } #endif @@ -17124,17 +17178,20 @@ #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__) static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a, vector signed __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, + (vector unsigned __int128)__a, __b); } static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a, vector unsigned __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a, __b); + return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a, + (vector signed __int128)__b); } static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool __int128 __a, vector bool __int128 __b) { - return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a, __b); + return __builtin_altivec_vcmpequq_p( + __CR6_LT_REV, (vector unsigned __int128)__a, (vector signed __int128)__b); } #endif @@ -17297,13 +17354,17 @@ static __inline__ vector bool char __ATTRS_o_ai vec_permxor(vector bool char __a, vector bool char __b, vector bool char __c) { - return __builtin_altivec_crypto_vpermxor(__a, __b, __c); + return (vector bool char)__builtin_altivec_crypto_vpermxor( + (vector unsigned char)__a, (vector unsigned char)__b, + (vector unsigned char)__c); } static __inline__ vector signed char __ATTRS_o_ai vec_permxor(vector signed char __a, vector signed char __b, vector signed char __c) { - return __builtin_altivec_crypto_vpermxor(__a, __b, __c); + return (vector signed char)__builtin_altivec_crypto_vpermxor( + (vector unsigned char)__a, (vector unsigned char)__b, + (vector unsigned char)__c); } static __inline__ vector unsigned char __ATTRS_o_ai @@ -17365,7 +17426,7 @@ static __inline__ vector signed char __ATTRS_o_ai vec_vgbbd(vector signed char __a) { - return __builtin_altivec_vgbbd((vector unsigned char)__a); + return (vector signed char)__builtin_altivec_vgbbd((vector unsigned char)__a); } #define vec_pmsum_be __builtin_crypto_vpmsumb @@ -17378,23 +17439,25 @@ static __inline__ vector signed long long __ATTRS_o_ai vec_gbb(vector signed long long __a) { - return __builtin_altivec_vgbbd((vector unsigned char)__a); + return (vector signed long long)__builtin_altivec_vgbbd( + (vector unsigned char)__a); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_gbb(vector unsigned long long __a) { - return __builtin_altivec_vgbbd((vector unsigned char)__a); + return (vector unsigned long long)__builtin_altivec_vgbbd( + (vector unsigned char)__a); } static __inline__ vector long long __ATTRS_o_ai vec_vbpermq(vector signed char __a, vector signed char __b) { - return __builtin_altivec_vbpermq((vector unsigned char)__a, - (vector unsigned char)__b); + return (vector long long)__builtin_altivec_vbpermq((vector unsigned char)__a, + (vector unsigned char)__b); } static __inline__ vector long long __ATTRS_o_ai vec_vbpermq(vector unsigned char __a, vector unsigned char __b) { - return __builtin_altivec_vbpermq(__a, __b); + return (vector long long)__builtin_altivec_vbpermq(__a, __b); } #if defined(__powerpc64__) && defined(__SIZEOF_INT128__) @@ -17406,7 +17469,7 @@ #endif static __inline__ vector unsigned char __ATTRS_o_ai vec_bperm(vector unsigned char __a, vector unsigned char __b) { - return __builtin_altivec_vbpermq(__a, __b); + return (vector unsigned char)__builtin_altivec_vbpermq(__a, __b); } #endif // __POWER8_VECTOR__ #ifdef __POWER9_VECTOR__ @@ -18386,18 +18449,22 @@ static __inline__ vector signed char __ATTRS_o_ai vec_clr_first(vector signed char __a, unsigned int __n) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vclrrb(__a, __n); + return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a, + __n); #else - return __builtin_altivec_vclrlb( __a, __n); + return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a, + __n); #endif } static __inline__ vector unsigned char __ATTRS_o_ai vec_clr_first(vector unsigned char __a, unsigned int __n) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vclrrb((vector signed char)__a, __n); + return (vector unsigned char)__builtin_altivec_vclrrb( + (vector unsigned char)__a, __n); #else - return __builtin_altivec_vclrlb((vector signed char)__a, __n); + return (vector unsigned char)__builtin_altivec_vclrlb( + (vector unsigned char)__a, __n); #endif } @@ -18406,18 +18473,22 @@ static __inline__ vector signed char __ATTRS_o_ai vec_clr_last(vector signed char __a, unsigned int __n) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vclrlb(__a, __n); + return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a, + __n); #else - return __builtin_altivec_vclrrb( __a, __n); + return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a, + __n); #endif } static __inline__ vector unsigned char __ATTRS_o_ai vec_clr_last(vector unsigned char __a, unsigned int __n) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vclrlb((vector signed char)__a, __n); + return (vector unsigned char)__builtin_altivec_vclrlb( + (vector unsigned char)__a, __n); #else - return __builtin_altivec_vclrrb((vector signed char)__a, __n); + return (vector unsigned char)__builtin_altivec_vclrrb( + (vector unsigned char)__a, __n); #endif } @@ -18713,7 +18784,8 @@ static __inline__ vector signed char __ATTRS_o_ai vec_blendv(vector signed char __a, vector signed char __b, vector unsigned char __c) { - return __builtin_vsx_xxblendvb(__a, __b, __c); + return (vector signed char)__builtin_vsx_xxblendvb( + (vector unsigned char)__a, (vector unsigned char)__b, __c); } static __inline__ vector unsigned char __ATTRS_o_ai @@ -18725,7 +18797,8 @@ static __inline__ vector signed short __ATTRS_o_ai vec_blendv(vector signed short __a, vector signed short __b, vector unsigned short __c) { - return __builtin_vsx_xxblendvh(__a, __b, __c); + return (vector signed short)__builtin_vsx_xxblendvh( + (vector unsigned short)__a, (vector unsigned short)__b, __c); } static __inline__ vector unsigned short __ATTRS_o_ai @@ -18737,7 +18810,8 @@ static __inline__ vector signed int __ATTRS_o_ai vec_blendv(vector signed int __a, vector signed int __b, vector unsigned int __c) { - return __builtin_vsx_xxblendvw(__a, __b, __c); + return (vector signed int)__builtin_vsx_xxblendvw( + (vector unsigned int)__a, (vector unsigned int)__b, __c); } static __inline__ vector unsigned int __ATTRS_o_ai @@ -18749,24 +18823,27 @@ static __inline__ vector signed long long __ATTRS_o_ai vec_blendv(vector signed long long __a, vector signed long long __b, vector unsigned long long __c) { - return __builtin_vsx_xxblendvd(__a, __b, __c); + return (vector signed long long)__builtin_vsx_xxblendvd( + (vector unsigned long long)__a, (vector unsigned long long)__b, __c); } static __inline__ vector unsigned long long __ATTRS_o_ai vec_blendv(vector unsigned long long __a, vector unsigned long long __b, vector unsigned long long __c) { - return __builtin_vsx_xxblendvd(__a, __b, __c); + return (vector unsigned long long)__builtin_vsx_xxblendvd(__a, __b, __c); } static __inline__ vector float __ATTRS_o_ai vec_blendv(vector float __a, vector float __b, vector unsigned int __c) { - return __builtin_vsx_xxblendvw(__a, __b, __c); + return (vector float)__builtin_vsx_xxblendvw((vector unsigned int)__a, + (vector unsigned int)__b, __c); } static __inline__ vector double __ATTRS_o_ai vec_blendv(vector double __a, vector double __b, vector unsigned long long __c) { - return __builtin_vsx_xxblendvd(__a, __b, __c); + return (vector double)__builtin_vsx_xxblendvd( + (vector unsigned long long)__a, (vector unsigned long long)__b, __c); } /* vec_replace_elt */ @@ -18852,27 +18929,33 @@ static __inline__ vector unsigned char __ATTRS_o_ai vec_stril(vector unsigned char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribr((vector signed char)__a); + return (vector unsigned char)__builtin_altivec_vstribr( + (vector unsigned char)__a); #else - return __builtin_altivec_vstribl((vector signed char)__a); + return (vector unsigned char)__builtin_altivec_vstribl( + (vector unsigned char)__a); #endif } static __inline__ vector signed char __ATTRS_o_ai vec_stril(vector signed char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribr(__a); + return (vector signed char)__builtin_altivec_vstribr( + (vector unsigned char)__a); #else - return __builtin_altivec_vstribl(__a); + return (vector signed char)__builtin_altivec_vstribl( + (vector unsigned char)__a); #endif } static __inline__ vector unsigned short __ATTRS_o_ai vec_stril(vector unsigned short __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstrihr((vector signed short)__a); + return (vector unsigned short)__builtin_altivec_vstrihr( + (vector signed short)__a); #else - return __builtin_altivec_vstrihl((vector signed short)__a); + return (vector unsigned short)__builtin_altivec_vstrihl( + (vector signed short)__a); #endif } @@ -18889,17 +18972,17 @@ static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribr_p(__CR6_EQ, (vector signed char)__a); + return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a); #else - return __builtin_altivec_vstribl_p(__CR6_EQ, (vector signed char)__a); + return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a); #endif } static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribr_p(__CR6_EQ, __a); + return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a); #else - return __builtin_altivec_vstribl_p(__CR6_EQ, __a); + return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a); #endif } @@ -18924,27 +19007,33 @@ static __inline__ vector unsigned char __ATTRS_o_ai vec_strir(vector unsigned char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribl((vector signed char)__a); + return (vector unsigned char)__builtin_altivec_vstribl( + (vector unsigned char)__a); #else - return __builtin_altivec_vstribr((vector signed char)__a); + return (vector unsigned char)__builtin_altivec_vstribr( + (vector unsigned char)__a); #endif } static __inline__ vector signed char __ATTRS_o_ai vec_strir(vector signed char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribl(__a); + return (vector signed char)__builtin_altivec_vstribl( + (vector unsigned char)__a); #else - return __builtin_altivec_vstribr(__a); + return (vector signed char)__builtin_altivec_vstribr( + (vector unsigned char)__a); #endif } static __inline__ vector unsigned short __ATTRS_o_ai vec_strir(vector unsigned short __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstrihl((vector signed short)__a); + return (vector unsigned short)__builtin_altivec_vstrihl( + (vector signed short)__a); #else - return __builtin_altivec_vstrihr((vector signed short)__a); + return (vector unsigned short)__builtin_altivec_vstrihr( + (vector signed short)__a); #endif } @@ -18961,17 +19050,17 @@ static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribl_p(__CR6_EQ, (vector signed char)__a); + return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a); #else - return __builtin_altivec_vstribr_p(__CR6_EQ, (vector signed char)__a); + return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a); #endif } static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) { #ifdef __LITTLE_ENDIAN__ - return __builtin_altivec_vstribl_p(__CR6_EQ, __a); + return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a); #else - return __builtin_altivec_vstribr_p(__CR6_EQ, __a); + return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a); #endif }