blob: f7061e88949fb2387cca2fe5482b899e8cc599f1 [file] [log] [blame]
/*===---- vecintrin.h - Vector intrinsics ----------------------------------===
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*===-----------------------------------------------------------------------===
*/
#if defined(__s390x__) && defined(__VEC__)
#define __ATTRS_ai __attribute__((__always_inline__))
#define __ATTRS_o __attribute__((__overloadable__))
#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
#define __constant(PARM) \
__attribute__((__enable_if__ ((PARM) == (PARM), \
"argument must be a constant integer")))
#define __constant_range(PARM, LOW, HIGH) \
__attribute__((__enable_if__ ((PARM) >= (LOW) && (PARM) <= (HIGH), \
"argument must be a constant integer from " #LOW " to " #HIGH)))
#define __constant_pow2_range(PARM, LOW, HIGH) \
__attribute__((__enable_if__ ((PARM) >= (LOW) && (PARM) <= (HIGH) && \
((PARM) & ((PARM) - 1)) == 0, \
"argument must be a constant power of 2 from " #LOW " to " #HIGH)))
/*-- __lcbb -----------------------------------------------------------------*/
extern __ATTRS_o unsigned int
__lcbb(const void *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
#define __lcbb(X, Y) ((__typeof__((__lcbb)((X), (Y)))) \
__builtin_s390_lcbb((X), __builtin_constant_p((Y))? \
((Y) == 64 ? 0 : \
(Y) == 128 ? 1 : \
(Y) == 256 ? 2 : \
(Y) == 512 ? 3 : \
(Y) == 1024 ? 4 : \
(Y) == 2048 ? 5 : \
(Y) == 4096 ? 6 : 0) : 0))
/*-- vec_extract ------------------------------------------------------------*/
static inline __ATTRS_o_ai signed char
vec_extract(vector signed char __vec, int __index) {
return __vec[__index & 15];
}
static inline __ATTRS_o_ai unsigned char
vec_extract(vector bool char __vec, int __index) {
return __vec[__index & 15];
}
static inline __ATTRS_o_ai unsigned char
vec_extract(vector unsigned char __vec, int __index) {
return __vec[__index & 15];
}
static inline __ATTRS_o_ai signed short
vec_extract(vector signed short __vec, int __index) {
return __vec[__index & 7];
}
static inline __ATTRS_o_ai unsigned short
vec_extract(vector bool short __vec, int __index) {
return __vec[__index & 7];
}
static inline __ATTRS_o_ai unsigned short
vec_extract(vector unsigned short __vec, int __index) {
return __vec[__index & 7];
}
static inline __ATTRS_o_ai signed int
vec_extract(vector signed int __vec, int __index) {
return __vec[__index & 3];
}
static inline __ATTRS_o_ai unsigned int
vec_extract(vector bool int __vec, int __index) {
return __vec[__index & 3];
}
static inline __ATTRS_o_ai unsigned int
vec_extract(vector unsigned int __vec, int __index) {
return __vec[__index & 3];
}
static inline __ATTRS_o_ai signed long long
vec_extract(vector signed long long __vec, int __index) {
return __vec[__index & 1];
}
static inline __ATTRS_o_ai unsigned long long
vec_extract(vector bool long long __vec, int __index) {
return __vec[__index & 1];
}
static inline __ATTRS_o_ai unsigned long long
vec_extract(vector unsigned long long __vec, int __index) {
return __vec[__index & 1];
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai float
vec_extract(vector float __vec, int __index) {
return __vec[__index & 3];
}
#endif
static inline __ATTRS_o_ai double
vec_extract(vector double __vec, int __index) {
return __vec[__index & 1];
}
/*-- vec_insert -------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_insert(signed char __scalar, vector signed char __vec, int __index) {
__vec[__index & 15] = __scalar;
return __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned char
vec_insert(unsigned char __scalar, vector bool char __vec, int __index) {
vector unsigned char __newvec = (vector unsigned char)__vec;
__newvec[__index & 15] = (unsigned char)__scalar;
return __newvec;
}
static inline __ATTRS_o_ai vector unsigned char
vec_insert(unsigned char __scalar, vector unsigned char __vec, int __index) {
__vec[__index & 15] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector signed short
vec_insert(signed short __scalar, vector signed short __vec, int __index) {
__vec[__index & 7] = __scalar;
return __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned short
vec_insert(unsigned short __scalar, vector bool short __vec, int __index) {
vector unsigned short __newvec = (vector unsigned short)__vec;
__newvec[__index & 7] = (unsigned short)__scalar;
return __newvec;
}
static inline __ATTRS_o_ai vector unsigned short
vec_insert(unsigned short __scalar, vector unsigned short __vec, int __index) {
__vec[__index & 7] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector signed int
vec_insert(signed int __scalar, vector signed int __vec, int __index) {
__vec[__index & 3] = __scalar;
return __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned int
vec_insert(unsigned int __scalar, vector bool int __vec, int __index) {
vector unsigned int __newvec = (vector unsigned int)__vec;
__newvec[__index & 3] = __scalar;
return __newvec;
}
static inline __ATTRS_o_ai vector unsigned int
vec_insert(unsigned int __scalar, vector unsigned int __vec, int __index) {
__vec[__index & 3] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector signed long long
vec_insert(signed long long __scalar, vector signed long long __vec,
int __index) {
__vec[__index & 1] = __scalar;
return __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned long long
vec_insert(unsigned long long __scalar, vector bool long long __vec,
int __index) {
vector unsigned long long __newvec = (vector unsigned long long)__vec;
__newvec[__index & 1] = __scalar;
return __newvec;
}
static inline __ATTRS_o_ai vector unsigned long long
vec_insert(unsigned long long __scalar, vector unsigned long long __vec,
int __index) {
__vec[__index & 1] = __scalar;
return __vec;
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_insert(float __scalar, vector float __vec, int __index) {
__vec[__index & 1] = __scalar;
return __vec;
}
#endif
static inline __ATTRS_o_ai vector double
vec_insert(double __scalar, vector double __vec, int __index) {
__vec[__index & 1] = __scalar;
return __vec;
}
/*-- vec_promote ------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_promote(signed char __scalar, int __index) {
const vector signed char __zero = (vector signed char)0;
vector signed char __vec = __builtin_shufflevector(__zero, __zero,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
__vec[__index & 15] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned char
vec_promote(unsigned char __scalar, int __index) {
const vector unsigned char __zero = (vector unsigned char)0;
vector unsigned char __vec = __builtin_shufflevector(__zero, __zero,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
__vec[__index & 15] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector signed short
vec_promote(signed short __scalar, int __index) {
const vector signed short __zero = (vector signed short)0;
vector signed short __vec = __builtin_shufflevector(__zero, __zero,
-1, -1, -1, -1, -1, -1, -1, -1);
__vec[__index & 7] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned short
vec_promote(unsigned short __scalar, int __index) {
const vector unsigned short __zero = (vector unsigned short)0;
vector unsigned short __vec = __builtin_shufflevector(__zero, __zero,
-1, -1, -1, -1, -1, -1, -1, -1);
__vec[__index & 7] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector signed int
vec_promote(signed int __scalar, int __index) {
const vector signed int __zero = (vector signed int)0;
vector signed int __vec = __builtin_shufflevector(__zero, __zero,
-1, -1, -1, -1);
__vec[__index & 3] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned int
vec_promote(unsigned int __scalar, int __index) {
const vector unsigned int __zero = (vector unsigned int)0;
vector unsigned int __vec = __builtin_shufflevector(__zero, __zero,
-1, -1, -1, -1);
__vec[__index & 3] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector signed long long
vec_promote(signed long long __scalar, int __index) {
const vector signed long long __zero = (vector signed long long)0;
vector signed long long __vec = __builtin_shufflevector(__zero, __zero,
-1, -1);
__vec[__index & 1] = __scalar;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned long long
vec_promote(unsigned long long __scalar, int __index) {
const vector unsigned long long __zero = (vector unsigned long long)0;
vector unsigned long long __vec = __builtin_shufflevector(__zero, __zero,
-1, -1);
__vec[__index & 1] = __scalar;
return __vec;
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_promote(float __scalar, int __index) {
const vector float __zero = (vector float)0;
vector float __vec = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
__vec[__index & 3] = __scalar;
return __vec;
}
#endif
static inline __ATTRS_o_ai vector double
vec_promote(double __scalar, int __index) {
const vector double __zero = (vector double)0;
vector double __vec = __builtin_shufflevector(__zero, __zero, -1, -1);
__vec[__index & 1] = __scalar;
return __vec;
}
/*-- vec_insert_and_zero ----------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_insert_and_zero(const signed char *__ptr) {
vector signed char __vec = (vector signed char)0;
__vec[7] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned char
vec_insert_and_zero(const unsigned char *__ptr) {
vector unsigned char __vec = (vector unsigned char)0;
__vec[7] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector signed short
vec_insert_and_zero(const signed short *__ptr) {
vector signed short __vec = (vector signed short)0;
__vec[3] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned short
vec_insert_and_zero(const unsigned short *__ptr) {
vector unsigned short __vec = (vector unsigned short)0;
__vec[3] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector signed int
vec_insert_and_zero(const signed int *__ptr) {
vector signed int __vec = (vector signed int)0;
__vec[1] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned int
vec_insert_and_zero(const unsigned int *__ptr) {
vector unsigned int __vec = (vector unsigned int)0;
__vec[1] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector signed long long
vec_insert_and_zero(const signed long long *__ptr) {
vector signed long long __vec = (vector signed long long)0;
__vec[0] = *__ptr;
return __vec;
}
static inline __ATTRS_o_ai vector unsigned long long
vec_insert_and_zero(const unsigned long long *__ptr) {
vector unsigned long long __vec = (vector unsigned long long)0;
__vec[0] = *__ptr;
return __vec;
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_insert_and_zero(const float *__ptr) {
vector float __vec = (vector float)0;
__vec[0] = *__ptr;
return __vec;
}
#endif
static inline __ATTRS_o_ai vector double
vec_insert_and_zero(const double *__ptr) {
vector double __vec = (vector double)0;
__vec[0] = *__ptr;
return __vec;
}
/*-- vec_perm ---------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_perm(vector signed char __a, vector signed char __b,
vector unsigned char __c) {
return (vector signed char)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector unsigned char
vec_perm(vector unsigned char __a, vector unsigned char __b,
vector unsigned char __c) {
return (vector unsigned char)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector bool char
vec_perm(vector bool char __a, vector bool char __b,
vector unsigned char __c) {
return (vector bool char)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector signed short
vec_perm(vector signed short __a, vector signed short __b,
vector unsigned char __c) {
return (vector signed short)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector unsigned short
vec_perm(vector unsigned short __a, vector unsigned short __b,
vector unsigned char __c) {
return (vector unsigned short)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector bool short
vec_perm(vector bool short __a, vector bool short __b,
vector unsigned char __c) {
return (vector bool short)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector signed int
vec_perm(vector signed int __a, vector signed int __b,
vector unsigned char __c) {
return (vector signed int)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector unsigned int
vec_perm(vector unsigned int __a, vector unsigned int __b,
vector unsigned char __c) {
return (vector unsigned int)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector bool int
vec_perm(vector bool int __a, vector bool int __b,
vector unsigned char __c) {
return (vector bool int)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector signed long long
vec_perm(vector signed long long __a, vector signed long long __b,
vector unsigned char __c) {
return (vector signed long long)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_perm(vector unsigned long long __a, vector unsigned long long __b,
vector unsigned char __c) {
return (vector unsigned long long)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
static inline __ATTRS_o_ai vector bool long long
vec_perm(vector bool long long __a, vector bool long long __b,
vector unsigned char __c) {
return (vector bool long long)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_perm(vector float __a, vector float __b,
vector unsigned char __c) {
return (vector float)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
#endif
static inline __ATTRS_o_ai vector double
vec_perm(vector double __a, vector double __b,
vector unsigned char __c) {
return (vector double)__builtin_s390_vperm(
(vector unsigned char)__a, (vector unsigned char)__b, __c);
}
/*-- vec_permi --------------------------------------------------------------*/
// This prototype is deprecated.
extern __ATTRS_o vector signed long long
vec_permi(vector signed long long __a, vector signed long long __b, int __c)
__constant_range(__c, 0, 3);
// This prototype is deprecated.
extern __ATTRS_o vector unsigned long long
vec_permi(vector unsigned long long __a, vector unsigned long long __b, int __c)
__constant_range(__c, 0, 3);
// This prototype is deprecated.
extern __ATTRS_o vector bool long long
vec_permi(vector bool long long __a, vector bool long long __b, int __c)
__constant_range(__c, 0, 3);
// This prototype is deprecated.
extern __ATTRS_o vector double
vec_permi(vector double __a, vector double __b, int __c)
__constant_range(__c, 0, 3);
#define vec_permi(X, Y, Z) ((__typeof__((vec_permi)((X), (Y), (Z)))) \
__builtin_s390_vpdi((vector unsigned long long)(X), \
(vector unsigned long long)(Y), \
(((Z) & 2) << 1) | ((Z) & 1)))
/*-- vec_bperm_u128 ---------------------------------------------------------*/
#if __ARCH__ >= 12
static inline __ATTRS_ai vector unsigned long long
vec_bperm_u128(vector unsigned char __a, vector unsigned char __b) {
return __builtin_s390_vbperm(__a, __b);
}
#endif
/*-- vec_sel ----------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_sel(vector signed char __a, vector signed char __b,
vector unsigned char __c) {
return ((vector signed char)__c & __b) | (~(vector signed char)__c & __a);
}
static inline __ATTRS_o_ai vector signed char
vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
return ((vector signed char)__c & __b) | (~(vector signed char)__c & __a);
}
static inline __ATTRS_o_ai vector bool char
vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
return ((vector bool char)__c & __b) | (~(vector bool char)__c & __a);
}
static inline __ATTRS_o_ai vector bool char
vec_sel(vector bool char __a, vector bool char __b, vector bool char __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned char
vec_sel(vector unsigned char __a, vector unsigned char __b,
vector unsigned char __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned char
vec_sel(vector unsigned char __a, vector unsigned char __b,
vector bool char __c) {
return ((vector unsigned char)__c & __b) | (~(vector unsigned char)__c & __a);
}
static inline __ATTRS_o_ai vector signed short
vec_sel(vector signed short __a, vector signed short __b,
vector unsigned short __c) {
return ((vector signed short)__c & __b) | (~(vector signed short)__c & __a);
}
static inline __ATTRS_o_ai vector signed short
vec_sel(vector signed short __a, vector signed short __b,
vector bool short __c) {
return ((vector signed short)__c & __b) | (~(vector signed short)__c & __a);
}
static inline __ATTRS_o_ai vector bool short
vec_sel(vector bool short __a, vector bool short __b,
vector unsigned short __c) {
return ((vector bool short)__c & __b) | (~(vector bool short)__c & __a);
}
static inline __ATTRS_o_ai vector bool short
vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned short
vec_sel(vector unsigned short __a, vector unsigned short __b,
vector unsigned short __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned short
vec_sel(vector unsigned short __a, vector unsigned short __b,
vector bool short __c) {
return (((vector unsigned short)__c & __b) |
(~(vector unsigned short)__c & __a));
}
static inline __ATTRS_o_ai vector signed int
vec_sel(vector signed int __a, vector signed int __b,
vector unsigned int __c) {
return ((vector signed int)__c & __b) | (~(vector signed int)__c & __a);
}
static inline __ATTRS_o_ai vector signed int
vec_sel(vector signed int __a, vector signed int __b, vector bool int __c) {
return ((vector signed int)__c & __b) | (~(vector signed int)__c & __a);
}
static inline __ATTRS_o_ai vector bool int
vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
return ((vector bool int)__c & __b) | (~(vector bool int)__c & __a);
}
static inline __ATTRS_o_ai vector bool int
vec_sel(vector bool int __a, vector bool int __b, vector bool int __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned int
vec_sel(vector unsigned int __a, vector unsigned int __b,
vector unsigned int __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned int
vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
return ((vector unsigned int)__c & __b) | (~(vector unsigned int)__c & __a);
}
static inline __ATTRS_o_ai vector signed long long
vec_sel(vector signed long long __a, vector signed long long __b,
vector unsigned long long __c) {
return (((vector signed long long)__c & __b) |
(~(vector signed long long)__c & __a));
}
static inline __ATTRS_o_ai vector signed long long
vec_sel(vector signed long long __a, vector signed long long __b,
vector bool long long __c) {
return (((vector signed long long)__c & __b) |
(~(vector signed long long)__c & __a));
}
static inline __ATTRS_o_ai vector bool long long
vec_sel(vector bool long long __a, vector bool long long __b,
vector unsigned long long __c) {
return (((vector bool long long)__c & __b) |
(~(vector bool long long)__c & __a));
}
static inline __ATTRS_o_ai vector bool long long
vec_sel(vector bool long long __a, vector bool long long __b,
vector bool long long __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_sel(vector unsigned long long __a, vector unsigned long long __b,
vector unsigned long long __c) {
return (__c & __b) | (~__c & __a);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_sel(vector unsigned long long __a, vector unsigned long long __b,
vector bool long long __c) {
return (((vector unsigned long long)__c & __b) |
(~(vector unsigned long long)__c & __a));
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_sel(vector float __a, vector float __b, vector unsigned int __c) {
return (vector float)((__c & (vector unsigned int)__b) |
(~__c & (vector unsigned int)__a));
}
static inline __ATTRS_o_ai vector float
vec_sel(vector float __a, vector float __b, vector bool int __c) {
vector unsigned int __ac = (vector unsigned int)__a;
vector unsigned int __bc = (vector unsigned int)__b;
vector unsigned int __cc = (vector unsigned int)__c;
return (vector float)((__cc & __bc) | (~__cc & __ac));
}
#endif
static inline __ATTRS_o_ai vector double
vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
return (vector double)((__c & (vector unsigned long long)__b) |
(~__c & (vector unsigned long long)__a));
}
static inline __ATTRS_o_ai vector double
vec_sel(vector double __a, vector double __b, vector bool long long __c) {
vector unsigned long long __ac = (vector unsigned long long)__a;
vector unsigned long long __bc = (vector unsigned long long)__b;
vector unsigned long long __cc = (vector unsigned long long)__c;
return (vector double)((__cc & __bc) | (~__cc & __ac));
}
/*-- vec_gather_element -----------------------------------------------------*/
static inline __ATTRS_o_ai vector signed int
vec_gather_element(vector signed int __vec, vector unsigned int __offset,
const signed int *__ptr, int __index)
__constant_range(__index, 0, 3) {
__vec[__index] = *(const signed int *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
static inline __ATTRS_o_ai vector bool int
vec_gather_element(vector bool int __vec, vector unsigned int __offset,
const unsigned int *__ptr, int __index)
__constant_range(__index, 0, 3) {
__vec[__index] = *(const unsigned int *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
static inline __ATTRS_o_ai vector unsigned int
vec_gather_element(vector unsigned int __vec, vector unsigned int __offset,
const unsigned int *__ptr, int __index)
__constant_range(__index, 0, 3) {
__vec[__index] = *(const unsigned int *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
static inline __ATTRS_o_ai vector signed long long
vec_gather_element(vector signed long long __vec,
vector unsigned long long __offset,
const signed long long *__ptr, int __index)
__constant_range(__index, 0, 1) {
__vec[__index] = *(const signed long long *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
static inline __ATTRS_o_ai vector bool long long
vec_gather_element(vector bool long long __vec,
vector unsigned long long __offset,
const unsigned long long *__ptr, int __index)
__constant_range(__index, 0, 1) {
__vec[__index] = *(const unsigned long long *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
static inline __ATTRS_o_ai vector unsigned long long
vec_gather_element(vector unsigned long long __vec,
vector unsigned long long __offset,
const unsigned long long *__ptr, int __index)
__constant_range(__index, 0, 1) {
__vec[__index] = *(const unsigned long long *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_gather_element(vector float __vec, vector unsigned int __offset,
const float *__ptr, int __index)
__constant_range(__index, 0, 3) {
__vec[__index] = *(const float *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
#endif
static inline __ATTRS_o_ai vector double
vec_gather_element(vector double __vec, vector unsigned long long __offset,
const double *__ptr, int __index)
__constant_range(__index, 0, 1) {
__vec[__index] = *(const double *)(
(__INTPTR_TYPE__)__ptr + (__INTPTR_TYPE__)__offset[__index]);
return __vec;
}
/*-- vec_scatter_element ----------------------------------------------------*/
static inline __ATTRS_o_ai void
vec_scatter_element(vector signed int __vec, vector unsigned int __offset,
signed int *__ptr, int __index)
__constant_range(__index, 0, 3) {
*(signed int *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
static inline __ATTRS_o_ai void
vec_scatter_element(vector bool int __vec, vector unsigned int __offset,
unsigned int *__ptr, int __index)
__constant_range(__index, 0, 3) {
*(unsigned int *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
static inline __ATTRS_o_ai void
vec_scatter_element(vector unsigned int __vec, vector unsigned int __offset,
unsigned int *__ptr, int __index)
__constant_range(__index, 0, 3) {
*(unsigned int *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
static inline __ATTRS_o_ai void
vec_scatter_element(vector signed long long __vec,
vector unsigned long long __offset,
signed long long *__ptr, int __index)
__constant_range(__index, 0, 1) {
*(signed long long *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
static inline __ATTRS_o_ai void
vec_scatter_element(vector bool long long __vec,
vector unsigned long long __offset,
unsigned long long *__ptr, int __index)
__constant_range(__index, 0, 1) {
*(unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
static inline __ATTRS_o_ai void
vec_scatter_element(vector unsigned long long __vec,
vector unsigned long long __offset,
unsigned long long *__ptr, int __index)
__constant_range(__index, 0, 1) {
*(unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai void
vec_scatter_element(vector float __vec, vector unsigned int __offset,
float *__ptr, int __index)
__constant_range(__index, 0, 3) {
*(float *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
#endif
static inline __ATTRS_o_ai void
vec_scatter_element(vector double __vec, vector unsigned long long __offset,
double *__ptr, int __index)
__constant_range(__index, 0, 1) {
*(double *)((__INTPTR_TYPE__)__ptr + __offset[__index]) =
__vec[__index];
}
/*-- vec_xl -----------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_xl(long __offset, const signed char *__ptr) {
return *(const vector signed char *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector unsigned char
vec_xl(long __offset, const unsigned char *__ptr) {
return *(const vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector signed short
vec_xl(long __offset, const signed short *__ptr) {
return *(const vector signed short *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector unsigned short
vec_xl(long __offset, const unsigned short *__ptr) {
return *(const vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector signed int
vec_xl(long __offset, const signed int *__ptr) {
return *(const vector signed int *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector unsigned int
vec_xl(long __offset, const unsigned int *__ptr) {
return *(const vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector signed long long
vec_xl(long __offset, const signed long long *__ptr) {
return *(const vector signed long long *)((__INTPTR_TYPE__)__ptr + __offset);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_xl(long __offset, const unsigned long long *__ptr) {
return *(const vector unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_xl(long __offset, const float *__ptr) {
return *(const vector float *)((__INTPTR_TYPE__)__ptr + __offset);
}
#endif
static inline __ATTRS_o_ai vector double
vec_xl(long __offset, const double *__ptr) {
return *(const vector double *)((__INTPTR_TYPE__)__ptr + __offset);
}
/*-- vec_xld2 ---------------------------------------------------------------*/
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed char
vec_xld2(long __offset, const signed char *__ptr) {
return *(const vector signed char *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned char
vec_xld2(long __offset, const unsigned char *__ptr) {
return *(const vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed short
vec_xld2(long __offset, const signed short *__ptr) {
return *(const vector signed short *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned short
vec_xld2(long __offset, const unsigned short *__ptr) {
return *(const vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed int
vec_xld2(long __offset, const signed int *__ptr) {
return *(const vector signed int *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned int
vec_xld2(long __offset, const unsigned int *__ptr) {
return *(const vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed long long
vec_xld2(long __offset, const signed long long *__ptr) {
return *(const vector signed long long *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned long long
vec_xld2(long __offset, const unsigned long long *__ptr) {
return *(const vector unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector double
vec_xld2(long __offset, const double *__ptr) {
return *(const vector double *)((__INTPTR_TYPE__)__ptr + __offset);
}
/*-- vec_xlw4 ---------------------------------------------------------------*/
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed char
vec_xlw4(long __offset, const signed char *__ptr) {
return *(const vector signed char *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned char
vec_xlw4(long __offset, const unsigned char *__ptr) {
return *(const vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed short
vec_xlw4(long __offset, const signed short *__ptr) {
return *(const vector signed short *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned short
vec_xlw4(long __offset, const unsigned short *__ptr) {
return *(const vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector signed int
vec_xlw4(long __offset, const signed int *__ptr) {
return *(const vector signed int *)((__INTPTR_TYPE__)__ptr + __offset);
}
// This prototype is deprecated.
static inline __ATTRS_o_ai vector unsigned int
vec_xlw4(long __offset, const unsigned int *__ptr) {
return *(const vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset);
}
/*-- vec_xst ----------------------------------------------------------------*/
static inline __ATTRS_o_ai void
vec_xst(vector signed char __vec, long __offset, signed char *__ptr) {
*(vector signed char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector unsigned char __vec, long __offset, unsigned char *__ptr) {
*(vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector signed short __vec, long __offset, signed short *__ptr) {
*(vector signed short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector unsigned short __vec, long __offset, unsigned short *__ptr) {
*(vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector signed int __vec, long __offset, signed int *__ptr) {
*(vector signed int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector unsigned int __vec, long __offset, unsigned int *__ptr) {
*(vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector signed long long __vec, long __offset,
signed long long *__ptr) {
*(vector signed long long *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
static inline __ATTRS_o_ai void
vec_xst(vector unsigned long long __vec, long __offset,
unsigned long long *__ptr) {
*(vector unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset) =
__vec;
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai void
vec_xst(vector float __vec, long __offset, float *__ptr) {
*(vector float *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
#endif
static inline __ATTRS_o_ai void
vec_xst(vector double __vec, long __offset, double *__ptr) {
*(vector double *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
/*-- vec_xstd2 --------------------------------------------------------------*/
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector signed char __vec, long __offset, signed char *__ptr) {
*(vector signed char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector unsigned char __vec, long __offset, unsigned char *__ptr) {
*(vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector signed short __vec, long __offset, signed short *__ptr) {
*(vector signed short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector unsigned short __vec, long __offset, unsigned short *__ptr) {
*(vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector signed int __vec, long __offset, signed int *__ptr) {
*(vector signed int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector unsigned int __vec, long __offset, unsigned int *__ptr) {
*(vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector signed long long __vec, long __offset,
signed long long *__ptr) {
*(vector signed long long *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector unsigned long long __vec, long __offset,
unsigned long long *__ptr) {
*(vector unsigned long long *)((__INTPTR_TYPE__)__ptr + __offset) =
__vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstd2(vector double __vec, long __offset, double *__ptr) {
*(vector double *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
/*-- vec_xstw4 --------------------------------------------------------------*/
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstw4(vector signed char __vec, long __offset, signed char *__ptr) {
*(vector signed char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstw4(vector unsigned char __vec, long __offset, unsigned char *__ptr) {
*(vector unsigned char *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstw4(vector signed short __vec, long __offset, signed short *__ptr) {
*(vector signed short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstw4(vector unsigned short __vec, long __offset, unsigned short *__ptr) {
*(vector unsigned short *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstw4(vector signed int __vec, long __offset, signed int *__ptr) {
*(vector signed int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai void
vec_xstw4(vector unsigned int __vec, long __offset, unsigned int *__ptr) {
*(vector unsigned int *)((__INTPTR_TYPE__)__ptr + __offset) = __vec;
}
/*-- vec_load_bndry ---------------------------------------------------------*/
extern __ATTRS_o vector signed char
vec_load_bndry(const signed char *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector unsigned char
vec_load_bndry(const unsigned char *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector signed short
vec_load_bndry(const signed short *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector unsigned short
vec_load_bndry(const unsigned short *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector signed int
vec_load_bndry(const signed int *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector unsigned int
vec_load_bndry(const unsigned int *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector signed long long
vec_load_bndry(const signed long long *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
extern __ATTRS_o vector unsigned long long
vec_load_bndry(const unsigned long long *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
#if __ARCH__ >= 12
extern __ATTRS_o vector float
vec_load_bndry(const float *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
#endif
extern __ATTRS_o vector double
vec_load_bndry(const double *__ptr, unsigned short __len)
__constant_pow2_range(__len, 64, 4096);
#define vec_load_bndry(X, Y) ((__typeof__((vec_load_bndry)((X), (Y)))) \
__builtin_s390_vlbb((X), ((Y) == 64 ? 0 : \
(Y) == 128 ? 1 : \
(Y) == 256 ? 2 : \
(Y) == 512 ? 3 : \
(Y) == 1024 ? 4 : \
(Y) == 2048 ? 5 : \
(Y) == 4096 ? 6 : -1)))
/*-- vec_load_len -----------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_load_len(const signed char *__ptr, unsigned int __len) {
return (vector signed char)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector unsigned char
vec_load_len(const unsigned char *__ptr, unsigned int __len) {
return (vector unsigned char)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector signed short
vec_load_len(const signed short *__ptr, unsigned int __len) {
return (vector signed short)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector unsigned short
vec_load_len(const unsigned short *__ptr, unsigned int __len) {
return (vector unsigned short)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector signed int
vec_load_len(const signed int *__ptr, unsigned int __len) {
return (vector signed int)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector unsigned int
vec_load_len(const unsigned int *__ptr, unsigned int __len) {
return (vector unsigned int)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector signed long long
vec_load_len(const signed long long *__ptr, unsigned int __len) {
return (vector signed long long)__builtin_s390_vll(__len, __ptr);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_load_len(const unsigned long long *__ptr, unsigned int __len) {
return (vector unsigned long long)__builtin_s390_vll(__len, __ptr);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_load_len(const float *__ptr, unsigned int __len) {
return (vector float)__builtin_s390_vll(__len, __ptr);
}
#endif
static inline __ATTRS_o_ai vector double
vec_load_len(const double *__ptr, unsigned int __len) {
return (vector double)__builtin_s390_vll(__len, __ptr);
}
/*-- vec_load_len_r ---------------------------------------------------------*/
#if __ARCH__ >= 12
static inline __ATTRS_ai vector unsigned char
vec_load_len_r(const unsigned char *__ptr, unsigned int __len) {
return (vector unsigned char)__builtin_s390_vlrl(__len, __ptr);
}
#endif
/*-- vec_store_len ----------------------------------------------------------*/
static inline __ATTRS_o_ai void
vec_store_len(vector signed char __vec, signed char *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector unsigned char __vec, unsigned char *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector signed short __vec, signed short *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector unsigned short __vec, unsigned short *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector signed int __vec, signed int *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector unsigned int __vec, unsigned int *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector signed long long __vec, signed long long *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
static inline __ATTRS_o_ai void
vec_store_len(vector unsigned long long __vec, unsigned long long *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai void
vec_store_len(vector float __vec, float *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
#endif
static inline __ATTRS_o_ai void
vec_store_len(vector double __vec, double *__ptr,
unsigned int __len) {
__builtin_s390_vstl((vector signed char)__vec, __len, __ptr);
}
/*-- vec_store_len_r --------------------------------------------------------*/
#if __ARCH__ >= 12
static inline __ATTRS_ai void
vec_store_len_r(vector unsigned char __vec, unsigned char *__ptr,
unsigned int __len) {
__builtin_s390_vstrl((vector signed char)__vec, __len, __ptr);
}
#endif
/*-- vec_load_pair ----------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed long long
vec_load_pair(signed long long __a, signed long long __b) {
return (vector signed long long)(__a, __b);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_load_pair(unsigned long long __a, unsigned long long __b) {
return (vector unsigned long long)(__a, __b);
}
/*-- vec_genmask ------------------------------------------------------------*/
static inline __ATTRS_o_ai vector unsigned char
vec_genmask(unsigned short __mask)
__constant(__mask) {
return (vector unsigned char)(
__mask & 0x8000 ? 0xff : 0,
__mask & 0x4000 ? 0xff : 0,
__mask & 0x2000 ? 0xff : 0,
__mask & 0x1000 ? 0xff : 0,
__mask & 0x0800 ? 0xff : 0,
__mask & 0x0400 ? 0xff : 0,
__mask & 0x0200 ? 0xff : 0,
__mask & 0x0100 ? 0xff : 0,
__mask & 0x0080 ? 0xff : 0,
__mask & 0x0040 ? 0xff : 0,
__mask & 0x0020 ? 0xff : 0,
__mask & 0x0010 ? 0xff : 0,
__mask & 0x0008 ? 0xff : 0,
__mask & 0x0004 ? 0xff : 0,
__mask & 0x0002 ? 0xff : 0,
__mask & 0x0001 ? 0xff : 0);
}
/*-- vec_genmasks_* ---------------------------------------------------------*/
static inline __ATTRS_o_ai vector unsigned char
vec_genmasks_8(unsigned char __first, unsigned char __last)
__constant(__first) __constant(__last) {
unsigned char __bit1 = __first & 7;
unsigned char __bit2 = __last & 7;
unsigned char __mask1 = (unsigned char)(1U << (7 - __bit1) << 1) - 1;
unsigned char __mask2 = (unsigned char)(1U << (7 - __bit2)) - 1;
unsigned char __value = (__bit1 <= __bit2 ?
__mask1 & ~__mask2 :
__mask1 | ~__mask2);
return (vector unsigned char)__value;
}
static inline __ATTRS_o_ai vector unsigned short
vec_genmasks_16(unsigned char __first, unsigned char __last)
__constant(__first) __constant(__last) {
unsigned char __bit1 = __first & 15;
unsigned char __bit2 = __last & 15;
unsigned short __mask1 = (unsigned short)(1U << (15 - __bit1) << 1) - 1;
unsigned short __mask2 = (unsigned short)(1U << (15 - __bit2)) - 1;
unsigned short __value = (__bit1 <= __bit2 ?
__mask1 & ~__mask2 :
__mask1 | ~__mask2);
return (vector unsigned short)__value;
}
static inline __ATTRS_o_ai vector unsigned int
vec_genmasks_32(unsigned char __first, unsigned char __last)
__constant(__first) __constant(__last) {
unsigned char __bit1 = __first & 31;
unsigned char __bit2 = __last & 31;
unsigned int __mask1 = (1U << (31 - __bit1) << 1) - 1;
unsigned int __mask2 = (1U << (31 - __bit2)) - 1;
unsigned int __value = (__bit1 <= __bit2 ?
__mask1 & ~__mask2 :
__mask1 | ~__mask2);
return (vector unsigned int)__value;
}
static inline __ATTRS_o_ai vector unsigned long long
vec_genmasks_64(unsigned char __first, unsigned char __last)
__constant(__first) __constant(__last) {
unsigned char __bit1 = __first & 63;
unsigned char __bit2 = __last & 63;
unsigned long long __mask1 = (1ULL << (63 - __bit1) << 1) - 1;
unsigned long long __mask2 = (1ULL << (63 - __bit2)) - 1;
unsigned long long __value = (__bit1 <= __bit2 ?
__mask1 & ~__mask2 :
__mask1 | ~__mask2);
return (vector unsigned long long)__value;
}
/*-- vec_splat --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_splat(vector signed char __vec, int __index)
__constant_range(__index, 0, 15) {
return (vector signed char)__vec[__index];
}
static inline __ATTRS_o_ai vector bool char
vec_splat(vector bool char __vec, int __index)
__constant_range(__index, 0, 15) {
return (vector bool char)(vector unsigned char)__vec[__index];
}
static inline __ATTRS_o_ai vector unsigned char
vec_splat(vector unsigned char __vec, int __index)
__constant_range(__index, 0, 15) {
return (vector unsigned char)__vec[__index];
}
static inline __ATTRS_o_ai vector signed short
vec_splat(vector signed short __vec, int __index)
__constant_range(__index, 0, 7) {
return (vector signed short)__vec[__index];
}
static inline __ATTRS_o_ai vector bool short
vec_splat(vector bool short __vec, int __index)
__constant_range(__index, 0, 7) {
return (vector bool short)(vector unsigned short)__vec[__index];
}
static inline __ATTRS_o_ai vector unsigned short
vec_splat(vector unsigned short __vec, int __index)
__constant_range(__index, 0, 7) {
return (vector unsigned short)__vec[__index];
}
static inline __ATTRS_o_ai vector signed int
vec_splat(vector signed int __vec, int __index)
__constant_range(__index, 0, 3) {
return (vector signed int)__vec[__index];
}
static inline __ATTRS_o_ai vector bool int
vec_splat(vector bool int __vec, int __index)
__constant_range(__index, 0, 3) {
return (vector bool int)(vector unsigned int)__vec[__index];
}
static inline __ATTRS_o_ai vector unsigned int
vec_splat(vector unsigned int __vec, int __index)
__constant_range(__index, 0, 3) {
return (vector unsigned int)__vec[__index];
}
static inline __ATTRS_o_ai vector signed long long
vec_splat(vector signed long long __vec, int __index)
__constant_range(__index, 0, 1) {
return (vector signed long long)__vec[__index];
}
static inline __ATTRS_o_ai vector bool long long
vec_splat(vector bool long long __vec, int __index)
__constant_range(__index, 0, 1) {
return (vector bool long long)(vector unsigned long long)__vec[__index];
}
static inline __ATTRS_o_ai vector unsigned long long
vec_splat(vector unsigned long long __vec, int __index)
__constant_range(__index, 0, 1) {
return (vector unsigned long long)__vec[__index];
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_splat(vector float __vec, int __index)
__constant_range(__index, 0, 3) {
return (vector float)__vec[__index];
}
#endif
static inline __ATTRS_o_ai vector double
vec_splat(vector double __vec, int __index)
__constant_range(__index, 0, 1) {
return (vector double)__vec[__index];
}
/*-- vec_splat_s* -----------------------------------------------------------*/
static inline __ATTRS_ai vector signed char
vec_splat_s8(signed char __scalar)
__constant(__scalar) {
return (vector signed char)__scalar;
}
static inline __ATTRS_ai vector signed short
vec_splat_s16(signed short __scalar)
__constant(__scalar) {
return (vector signed short)__scalar;
}
static inline __ATTRS_ai vector signed int
vec_splat_s32(signed short __scalar)
__constant(__scalar) {
return (vector signed int)(signed int)__scalar;
}
static inline __ATTRS_ai vector signed long long
vec_splat_s64(signed short __scalar)
__constant(__scalar) {
return (vector signed long long)(signed long)__scalar;
}
/*-- vec_splat_u* -----------------------------------------------------------*/
static inline __ATTRS_ai vector unsigned char
vec_splat_u8(unsigned char __scalar)
__constant(__scalar) {
return (vector unsigned char)__scalar;
}
static inline __ATTRS_ai vector unsigned short
vec_splat_u16(unsigned short __scalar)
__constant(__scalar) {
return (vector unsigned short)__scalar;
}
static inline __ATTRS_ai vector unsigned int
vec_splat_u32(signed short __scalar)
__constant(__scalar) {
return (vector unsigned int)(signed int)__scalar;
}
static inline __ATTRS_ai vector unsigned long long
vec_splat_u64(signed short __scalar)
__constant(__scalar) {
return (vector unsigned long long)(signed long long)__scalar;
}
/*-- vec_splats -------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_splats(signed char __scalar) {
return (vector signed char)__scalar;
}
static inline __ATTRS_o_ai vector unsigned char
vec_splats(unsigned char __scalar) {
return (vector unsigned char)__scalar;
}
static inline __ATTRS_o_ai vector signed short
vec_splats(signed short __scalar) {
return (vector signed short)__scalar;
}
static inline __ATTRS_o_ai vector unsigned short
vec_splats(unsigned short __scalar) {
return (vector unsigned short)__scalar;
}
static inline __ATTRS_o_ai vector signed int
vec_splats(signed int __scalar) {
return (vector signed int)__scalar;
}
static inline __ATTRS_o_ai vector unsigned int
vec_splats(unsigned int __scalar) {
return (vector unsigned int)__scalar;
}
static inline __ATTRS_o_ai vector signed long long
vec_splats(signed long long __scalar) {
return (vector signed long long)__scalar;
}
static inline __ATTRS_o_ai vector unsigned long long
vec_splats(unsigned long long __scalar) {
return (vector unsigned long long)__scalar;
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_splats(float __scalar) {
return (vector float)__scalar;
}
#endif
static inline __ATTRS_o_ai vector double
vec_splats(double __scalar) {
return (vector double)__scalar;
}
/*-- vec_extend_s64 ---------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed long long
vec_extend_s64(vector signed char __a) {
return (vector signed long long)(__a[7], __a[15]);
}
static inline __ATTRS_o_ai vector signed long long
vec_extend_s64(vector signed short __a) {
return (vector signed long long)(__a[3], __a[7]);
}
static inline __ATTRS_o_ai vector signed long long
vec_extend_s64(vector signed int __a) {
return (vector signed long long)(__a[1], __a[3]);
}
/*-- vec_mergeh -------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_mergeh(vector signed char __a, vector signed char __b) {
return (vector signed char)(
__a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3],
__a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]);
}
static inline __ATTRS_o_ai vector bool char
vec_mergeh(vector bool char __a, vector bool char __b) {
return (vector bool char)(
__a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3],
__a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]);
}
static inline __ATTRS_o_ai vector unsigned char
vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
return (vector unsigned char)(
__a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3],
__a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]);
}
static inline __ATTRS_o_ai vector signed short
vec_mergeh(vector signed short __a, vector signed short __b) {
return (vector signed short)(
__a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3]);
}
static inline __ATTRS_o_ai vector bool short
vec_mergeh(vector bool short __a, vector bool short __b) {
return (vector bool short)(
__a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3]);
}
static inline __ATTRS_o_ai vector unsigned short
vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
return (vector unsigned short)(
__a[0], __b[0], __a[1], __b[1], __a[2], __b[2], __a[3], __b[3]);
}
static inline __ATTRS_o_ai vector signed int
vec_mergeh(vector signed int __a, vector signed int __b) {
return (vector signed int)(__a[0], __b[0], __a[1], __b[1]);
}
static inline __ATTRS_o_ai vector bool int
vec_mergeh(vector bool int __a, vector bool int __b) {
return (vector bool int)(__a[0], __b[0], __a[1], __b[1]);
}
static inline __ATTRS_o_ai vector unsigned int
vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
return (vector unsigned int)(__a[0], __b[0], __a[1], __b[1]);
}
static inline __ATTRS_o_ai vector signed long long
vec_mergeh(vector signed long long __a, vector signed long long __b) {
return (vector signed long long)(__a[0], __b[0]);
}
static inline __ATTRS_o_ai vector bool long long
vec_mergeh(vector bool long long __a, vector bool long long __b) {
return (vector bool long long)(__a[0], __b[0]);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
return (vector unsigned long long)(__a[0], __b[0]);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_mergeh(vector float __a, vector float __b) {
return (vector float)(__a[0], __b[0], __a[1], __b[1]);
}
#endif
static inline __ATTRS_o_ai vector double
vec_mergeh(vector double __a, vector double __b) {
return (vector double)(__a[0], __b[0]);
}
/*-- vec_mergel -------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_mergel(vector signed char __a, vector signed char __b) {
return (vector signed char)(
__a[8], __b[8], __a[9], __b[9], __a[10], __b[10], __a[11], __b[11],
__a[12], __b[12], __a[13], __b[13], __a[14], __b[14], __a[15], __b[15]);
}
static inline __ATTRS_o_ai vector bool char
vec_mergel(vector bool char __a, vector bool char __b) {
return (vector bool char)(
__a[8], __b[8], __a[9], __b[9], __a[10], __b[10], __a[11], __b[11],
__a[12], __b[12], __a[13], __b[13], __a[14], __b[14], __a[15], __b[15]);
}
static inline __ATTRS_o_ai vector unsigned char
vec_mergel(vector unsigned char __a, vector unsigned char __b) {
return (vector unsigned char)(
__a[8], __b[8], __a[9], __b[9], __a[10], __b[10], __a[11], __b[11],
__a[12], __b[12], __a[13], __b[13], __a[14], __b[14], __a[15], __b[15]);
}
static inline __ATTRS_o_ai vector signed short
vec_mergel(vector signed short __a, vector signed short __b) {
return (vector signed short)(
__a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]);
}
static inline __ATTRS_o_ai vector bool short
vec_mergel(vector bool short __a, vector bool short __b) {
return (vector bool short)(
__a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]);
}
static inline __ATTRS_o_ai vector unsigned short
vec_mergel(vector unsigned short __a, vector unsigned short __b) {
return (vector unsigned short)(
__a[4], __b[4], __a[5], __b[5], __a[6], __b[6], __a[7], __b[7]);
}
static inline __ATTRS_o_ai vector signed int
vec_mergel(vector signed int __a, vector signed int __b) {
return (vector signed int)(__a[2], __b[2], __a[3], __b[3]);
}
static inline __ATTRS_o_ai vector bool int
vec_mergel(vector bool int __a, vector bool int __b) {
return (vector bool int)(__a[2], __b[2], __a[3], __b[3]);
}
static inline __ATTRS_o_ai vector unsigned int
vec_mergel(vector unsigned int __a, vector unsigned int __b) {
return (vector unsigned int)(__a[2], __b[2], __a[3], __b[3]);
}
static inline __ATTRS_o_ai vector signed long long
vec_mergel(vector signed long long __a, vector signed long long __b) {
return (vector signed long long)(__a[1], __b[1]);
}
static inline __ATTRS_o_ai vector bool long long
vec_mergel(vector bool long long __a, vector bool long long __b) {
return (vector bool long long)(__a[1], __b[1]);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
return (vector unsigned long long)(__a[1], __b[1]);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector float
vec_mergel(vector float __a, vector float __b) {
return (vector float)(__a[2], __b[2], __a[3], __b[3]);
}
#endif
static inline __ATTRS_o_ai vector double
vec_mergel(vector double __a, vector double __b) {
return (vector double)(__a[1], __b[1]);
}
/*-- vec_pack ---------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_pack(vector signed short __a, vector signed short __b) {
vector signed char __ac = (vector signed char)__a;
vector signed char __bc = (vector signed char)__b;
return (vector signed char)(
__ac[1], __ac[3], __ac[5], __ac[7], __ac[9], __ac[11], __ac[13], __ac[15],
__bc[1], __bc[3], __bc[5], __bc[7], __bc[9], __bc[11], __bc[13], __bc[15]);
}
static inline __ATTRS_o_ai vector bool char
vec_pack(vector bool short __a, vector bool short __b) {
vector bool char __ac = (vector bool char)__a;
vector bool char __bc = (vector bool char)__b;
return (vector bool char)(
__ac[1], __ac[3], __ac[5], __ac[7], __ac[9], __ac[11], __ac[13], __ac[15],
__bc[1], __bc[3], __bc[5], __bc[7], __bc[9], __bc[11], __bc[13], __bc[15]);
}
static inline __ATTRS_o_ai vector unsigned char
vec_pack(vector unsigned short __a, vector unsigned short __b) {
vector unsigned char __ac = (vector unsigned char)__a;
vector unsigned char __bc = (vector unsigned char)__b;
return (vector unsigned char)(
__ac[1], __ac[3], __ac[5], __ac[7], __ac[9], __ac[11], __ac[13], __ac[15],
__bc[1], __bc[3], __bc[5], __bc[7], __bc[9], __bc[11], __bc[13], __bc[15]);
}
static inline __ATTRS_o_ai vector signed short
vec_pack(vector signed int __a, vector signed int __b) {
vector signed short __ac = (vector signed short)__a;
vector signed short __bc = (vector signed short)__b;
return (vector signed short)(
__ac[1], __ac[3], __ac[5], __ac[7],
__bc[1], __bc[3], __bc[5], __bc[7]);
}
static inline __ATTRS_o_ai vector bool short
vec_pack(vector bool int __a, vector bool int __b) {
vector bool short __ac = (vector bool short)__a;
vector bool short __bc = (vector bool short)__b;
return (vector bool short)(
__ac[1], __ac[3], __ac[5], __ac[7],
__bc[1], __bc[3], __bc[5], __bc[7]);
}
static inline __ATTRS_o_ai vector unsigned short
vec_pack(vector unsigned int __a, vector unsigned int __b) {
vector unsigned short __ac = (vector unsigned short)__a;
vector unsigned short __bc = (vector unsigned short)__b;
return (vector unsigned short)(
__ac[1], __ac[3], __ac[5], __ac[7],
__bc[1], __bc[3], __bc[5], __bc[7]);
}
static inline __ATTRS_o_ai vector signed int
vec_pack(vector signed long long __a, vector signed long long __b) {
vector signed int __ac = (vector signed int)__a;
vector signed int __bc = (vector signed int)__b;
return (vector signed int)(__ac[1], __ac[3], __bc[1], __bc[3]);
}
static inline __ATTRS_o_ai vector bool int
vec_pack(vector bool long long __a, vector bool long long __b) {
vector bool int __ac = (vector bool int)__a;
vector bool int __bc = (vector bool int)__b;
return (vector bool int)(__ac[1], __ac[3], __bc[1], __bc[3]);
}
static inline __ATTRS_o_ai vector unsigned int
vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
vector unsigned int __ac = (vector unsigned int)__a;
vector unsigned int __bc = (vector unsigned int)__b;
return (vector unsigned int)(__ac[1], __ac[3], __bc[1], __bc[3]);
}
/*-- vec_packs --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_packs(vector signed short __a, vector signed short __b) {
return __builtin_s390_vpksh(__a, __b);
}
static inline __ATTRS_o_ai vector unsigned char
vec_packs(vector unsigned short __a, vector unsigned short __b) {
return __builtin_s390_vpklsh(__a, __b);
}
static inline __ATTRS_o_ai vector signed short
vec_packs(vector signed int __a, vector signed int __b) {
return __builtin_s390_vpksf(__a, __b);
}
static inline __ATTRS_o_ai vector unsigned short
vec_packs(vector unsigned int __a, vector unsigned int __b) {
return __builtin_s390_vpklsf(__a, __b);
}
static inline __ATTRS_o_ai vector signed int
vec_packs(vector signed long long __a, vector signed long long __b) {
return __builtin_s390_vpksg(__a, __b);
}
static inline __ATTRS_o_ai vector unsigned int
vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
return __builtin_s390_vpklsg(__a, __b);
}
/*-- vec_packs_cc -----------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed char
vec_packs_cc(vector signed short __a, vector signed short __b, int *__cc) {
return __builtin_s390_vpkshs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector unsigned char
vec_packs_cc(vector unsigned short __a, vector unsigned short __b, int *__cc) {
return __builtin_s390_vpklshs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector signed short
vec_packs_cc(vector signed int __a, vector signed int __b, int *__cc) {
return __builtin_s390_vpksfs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector unsigned short
vec_packs_cc(vector unsigned int __a, vector unsigned int __b, int *__cc) {
return __builtin_s390_vpklsfs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector signed int
vec_packs_cc(vector signed long long __a, vector signed long long __b,
int *__cc) {
return __builtin_s390_vpksgs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector unsigned int
vec_packs_cc(vector unsigned long long __a, vector unsigned long long __b,
int *__cc) {
return __builtin_s390_vpklsgs(__a, __b, __cc);
}
/*-- vec_packsu -------------------------------------------------------------*/
static inline __ATTRS_o_ai vector unsigned char
vec_packsu(vector signed short __a, vector signed short __b) {
const vector signed short __zero = (vector signed short)0;
return __builtin_s390_vpklsh(
(vector unsigned short)(__a >= __zero) & (vector unsigned short)__a,
(vector unsigned short)(__b >= __zero) & (vector unsigned short)__b);
}
static inline __ATTRS_o_ai vector unsigned char
vec_packsu(vector unsigned short __a, vector unsigned short __b) {
return __builtin_s390_vpklsh(__a, __b);
}
static inline __ATTRS_o_ai vector unsigned short
vec_packsu(vector signed int __a, vector signed int __b) {
const vector signed int __zero = (vector signed int)0;
return __builtin_s390_vpklsf(
(vector unsigned int)(__a >= __zero) & (vector unsigned int)__a,
(vector unsigned int)(__b >= __zero) & (vector unsigned int)__b);
}
static inline __ATTRS_o_ai vector unsigned short
vec_packsu(vector unsigned int __a, vector unsigned int __b) {
return __builtin_s390_vpklsf(__a, __b);
}
static inline __ATTRS_o_ai vector unsigned int
vec_packsu(vector signed long long __a, vector signed long long __b) {
const vector signed long long __zero = (vector signed long long)0;
return __builtin_s390_vpklsg(
(vector unsigned long long)(__a >= __zero) &
(vector unsigned long long)__a,
(vector unsigned long long)(__b >= __zero) &
(vector unsigned long long)__b);
}
static inline __ATTRS_o_ai vector unsigned int
vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
return __builtin_s390_vpklsg(__a, __b);
}
/*-- vec_packsu_cc ----------------------------------------------------------*/
static inline __ATTRS_o_ai vector unsigned char
vec_packsu_cc(vector unsigned short __a, vector unsigned short __b, int *__cc) {
return __builtin_s390_vpklshs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector unsigned short
vec_packsu_cc(vector unsigned int __a, vector unsigned int __b, int *__cc) {
return __builtin_s390_vpklsfs(__a, __b, __cc);
}
static inline __ATTRS_o_ai vector unsigned int
vec_packsu_cc(vector unsigned long long __a, vector unsigned long long __b,
int *__cc) {
return __builtin_s390_vpklsgs(__a, __b, __cc);
}
/*-- vec_unpackh ------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed short
vec_unpackh(vector signed char __a) {
return __builtin_s390_vuphb(__a);
}
static inline __ATTRS_o_ai vector bool short
vec_unpackh(vector bool char __a) {
return (vector bool short)__builtin_s390_vuphb((vector signed char)__a);
}
static inline __ATTRS_o_ai vector unsigned short
vec_unpackh(vector unsigned char __a) {
return __builtin_s390_vuplhb(__a);
}
static inline __ATTRS_o_ai vector signed int
vec_unpackh(vector signed short __a) {
return __builtin_s390_vuphh(__a);
}
static inline __ATTRS_o_ai vector bool int
vec_unpackh(vector bool short __a) {
return (vector bool int)__builtin_s390_vuphh((vector signed short)__a);
}
static inline __ATTRS_o_ai vector unsigned int
vec_unpackh(vector unsigned short __a) {
return __builtin_s390_vuplhh(__a);
}
static inline __ATTRS_o_ai vector signed long long
vec_unpackh(vector signed int __a) {
return __builtin_s390_vuphf(__a);
}
static inline __ATTRS_o_ai vector bool long long
vec_unpackh(vector bool int __a) {
return (vector bool long long)__builtin_s390_vuphf((vector signed int)__a);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_unpackh(vector unsigned int __a) {
return __builtin_s390_vuplhf(__a);
}
/*-- vec_unpackl ------------------------------------------------------------*/
static inline __ATTRS_o_ai vector signed short
vec_unpackl(vector signed char __a) {
return __builtin_s390_vuplb(__a);
}
static inline __ATTRS_o_ai vector bool short
vec_unpackl(vector bool char __a) {
return (vector bool short)__builtin_s390_vuplb((vector signed char)__a);
}
static inline __ATTRS_o_ai vector unsigned short
vec_unpackl(vector unsigned char __a) {
return __builtin_s390_vupllb(__a);
}
static inline __ATTRS_o_ai vector signed int
vec_unpackl(vector signed short __a) {
return __builtin_s390_vuplhw(__a);
}
static inline __ATTRS_o_ai vector bool int
vec_unpackl(vector bool short __a) {
return (vector bool int)__builtin_s390_vuplhw((vector signed short)__a);
}
static inline __ATTRS_o_ai vector unsigned int
vec_unpackl(vector unsigned short __a) {
return __builtin_s390_vupllh(__a);
}
static inline __ATTRS_o_ai vector signed long long
vec_unpackl(vector signed int __a) {
return __builtin_s390_vuplf(__a);
}
static inline __ATTRS_o_ai vector bool long long
vec_unpackl(vector bool int __a) {
return (vector bool long long)__builtin_s390_vuplf((vector signed int)__a);
}
static inline __ATTRS_o_ai vector unsigned long long
vec_unpackl(vector unsigned int __a) {
return __builtin_s390_vupllf(__a);
}
/*-- vec_cmpeq --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector bool char
vec_cmpeq(vector bool char __a, vector bool char __b) {
return (vector bool char)(__a == __b);
}
static inline __ATTRS_o_ai vector bool char
vec_cmpeq(vector signed char __a, vector signed char __b) {
return (vector bool char)(__a == __b);
}
static inline __ATTRS_o_ai vector bool char
vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
return (vector bool char)(__a == __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpeq(vector bool short __a, vector bool short __b) {
return (vector bool short)(__a == __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpeq(vector signed short __a, vector signed short __b) {
return (vector bool short)(__a == __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
return (vector bool short)(__a == __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpeq(vector bool int __a, vector bool int __b) {
return (vector bool int)(__a == __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpeq(vector signed int __a, vector signed int __b) {
return (vector bool int)(__a == __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
return (vector bool int)(__a == __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpeq(vector bool long long __a, vector bool long long __b) {
return (vector bool long long)(__a == __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpeq(vector signed long long __a, vector signed long long __b) {
return (vector bool long long)(__a == __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
return (vector bool long long)(__a == __b);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector bool int
vec_cmpeq(vector float __a, vector float __b) {
return (vector bool int)(__a == __b);
}
#endif
static inline __ATTRS_o_ai vector bool long long
vec_cmpeq(vector double __a, vector double __b) {
return (vector bool long long)(__a == __b);
}
/*-- vec_cmpge --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector bool char
vec_cmpge(vector signed char __a, vector signed char __b) {
return (vector bool char)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool char
vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
return (vector bool char)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpge(vector signed short __a, vector signed short __b) {
return (vector bool short)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
return (vector bool short)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpge(vector signed int __a, vector signed int __b) {
return (vector bool int)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
return (vector bool int)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpge(vector signed long long __a, vector signed long long __b) {
return (vector bool long long)(__a >= __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
return (vector bool long long)(__a >= __b);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector bool int
vec_cmpge(vector float __a, vector float __b) {
return (vector bool int)(__a >= __b);
}
#endif
static inline __ATTRS_o_ai vector bool long long
vec_cmpge(vector double __a, vector double __b) {
return (vector bool long long)(__a >= __b);
}
/*-- vec_cmpgt --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector bool char
vec_cmpgt(vector signed char __a, vector signed char __b) {
return (vector bool char)(__a > __b);
}
static inline __ATTRS_o_ai vector bool char
vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
return (vector bool char)(__a > __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpgt(vector signed short __a, vector signed short __b) {
return (vector bool short)(__a > __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
return (vector bool short)(__a > __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpgt(vector signed int __a, vector signed int __b) {
return (vector bool int)(__a > __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
return (vector bool int)(__a > __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpgt(vector signed long long __a, vector signed long long __b) {
return (vector bool long long)(__a > __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
return (vector bool long long)(__a > __b);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector bool int
vec_cmpgt(vector float __a, vector float __b) {
return (vector bool int)(__a > __b);
}
#endif
static inline __ATTRS_o_ai vector bool long long
vec_cmpgt(vector double __a, vector double __b) {
return (vector bool long long)(__a > __b);
}
/*-- vec_cmple --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector bool char
vec_cmple(vector signed char __a, vector signed char __b) {
return (vector bool char)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool char
vec_cmple(vector unsigned char __a, vector unsigned char __b) {
return (vector bool char)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmple(vector signed short __a, vector signed short __b) {
return (vector bool short)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmple(vector unsigned short __a, vector unsigned short __b) {
return (vector bool short)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmple(vector signed int __a, vector signed int __b) {
return (vector bool int)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmple(vector unsigned int __a, vector unsigned int __b) {
return (vector bool int)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmple(vector signed long long __a, vector signed long long __b) {
return (vector bool long long)(__a <= __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
return (vector bool long long)(__a <= __b);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector bool int
vec_cmple(vector float __a, vector float __b) {
return (vector bool int)(__a <= __b);
}
#endif
static inline __ATTRS_o_ai vector bool long long
vec_cmple(vector double __a, vector double __b) {
return (vector bool long long)(__a <= __b);
}
/*-- vec_cmplt --------------------------------------------------------------*/
static inline __ATTRS_o_ai vector bool char
vec_cmplt(vector signed char __a, vector signed char __b) {
return (vector bool char)(__a < __b);
}
static inline __ATTRS_o_ai vector bool char
vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
return (vector bool char)(__a < __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmplt(vector signed short __a, vector signed short __b) {
return (vector bool short)(__a < __b);
}
static inline __ATTRS_o_ai vector bool short
vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
return (vector bool short)(__a < __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmplt(vector signed int __a, vector signed int __b) {
return (vector bool int)(__a < __b);
}
static inline __ATTRS_o_ai vector bool int
vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
return (vector bool int)(__a < __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmplt(vector signed long long __a, vector signed long long __b) {
return (vector bool long long)(__a < __b);
}
static inline __ATTRS_o_ai vector bool long long
vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
return (vector bool long long)(__a < __b);
}
#if __ARCH__ >= 12
static inline __ATTRS_o_ai vector bool int
vec_cmplt(vector float __a, vector float __b) {
return (vector bool int)(__a < __b);
}
#endif
static inline __ATTRS_o_ai vector bool long long
vec_cmplt(vector double __a, vector double __b) {
return (vector bool long long)(__a < __b);
}
/*-- vec_all_eq -------------------------------------------------------------*/
static inline __ATTRS_o_ai int
vec_all_eq(vector signed char __a, vector signed char __b) {
int __cc;
__builtin_s390_vceqbs(__a, __b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector signed char __a, vector bool char __b) {
int __cc;
__builtin_s390_vceqbs(__a, (vector signed char)__b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector bool char __a, vector signed char __b) {
int __cc;
__builtin_s390_vceqbs((vector signed char)__a, __b, &__cc);
return __cc == 0;
}
static inline __ATTRS_o_ai int
vec_all_eq(vector unsigned char __a, vector unsigned char __b) {
int __cc;
__builtin_s390_vceqbs((vector signed char)__a,
(vector signed char)__b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector unsigned char __a, vector bool char __b) {
int __cc;
__builtin_s390_vceqbs((vector signed char)__a,
(vector signed char)__b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector bool char __a, vector unsigned char __b) {
int __cc;
__builtin_s390_vceqbs((vector signed char)__a,
(vector signed char)__b, &__cc);
return __cc == 0;
}
static inline __ATTRS_o_ai int
vec_all_eq(vector bool char __a, vector bool char __b) {
int __cc;
__builtin_s390_vceqbs((vector signed char)__a,
(vector signed char)__b, &__cc);
return __cc == 0;
}
static inline __ATTRS_o_ai int
vec_all_eq(vector signed short __a, vector signed short __b) {
int __cc;
__builtin_s390_vceqhs(__a, __b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector signed short __a, vector bool short __b) {
int __cc;
__builtin_s390_vceqhs(__a, (vector signed short)__b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector bool short __a, vector signed short __b) {
int __cc;
__builtin_s390_vceqhs((vector signed short)__a, __b, &__cc);
return __cc == 0;
}
static inline __ATTRS_o_ai int
vec_all_eq(vector unsigned short __a, vector unsigned short __b) {
int __cc;
__builtin_s390_vceqhs((vector signed short)__a,
(vector signed short)__b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector unsigned short __a, vector bool short __b) {
int __cc;
__builtin_s390_vceqhs((vector signed short)__a,
(vector signed short)__b, &__cc);
return __cc == 0;
}
// This prototype is deprecated.
static inline __ATTRS_o_ai int
vec_all_eq(vector bool short __a, vector unsigned short __b) {
int __cc;
__builtin_s390_vceqhs((vector signed short)__a,
(vector signed short)__b, &__cc);
return __cc == 0;
}
static inline __ATTRS_o_ai int
vec_all_eq(vector bool short __a,