POWER Vector Library Manual
1.0.4
|
Go to the documentation of this file.
23 #ifndef VEC_INT32_PPC_H_
24 #define VEC_INT32_PPC_H_
411 #define __pvec_vsld vec_vsld
413 #define __pvec_vsld vec_sl
424 #define vec_popcntw __builtin_vec_vpopcntw
428 vec_vlxsiwzx (
const signed long long ra,
const unsigned int *rb);
430 vec_vlxsiwax (
const signed long long ra,
const signed int *rb);
435 const long long offset0,
const long long offset1);
461 result = vec_absdw (vra, vrb);
466 :
"v" (vra),
"v" (vrb)
472 vmin = vec_min (vra, vrb);
473 vmax = vec_max (vra, vrb);
474 result = vec_sub (vmax, vmin);
507 #if defined (vec_vclzw)
509 #elif defined (__clang__)
525 s = vec_splat_u32(8);
535 x = vec_sel (x, y, m);
536 n = vec_sel (n, nt, m);
543 x = vec_sel (x, y, m);
544 n = vec_sel (n, nt, m);
551 x = vec_sel (x, y, m);
552 n = vec_sel (n, nt, m);
559 x = vec_sel (x, y, m);
560 n = vec_sel (n, nt, m);
567 n = vec_sel (n, nt, m);
571 n = vec_sel (nt, n, m);
605 #if defined (vec_cnttz) || defined (__clang__)
619 const vui32_t ones = { 1, 1, 1, 1 };
622 tzmask = vec_andc (vec_sub (vra, ones), vra);
658 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
708 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
758 res = vec_vmrgew (vra, vrb);
761 #
if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
808 res = vec_vmrgow (vra, vrb);
811 #
if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
859 #if defined __GNUC__ && (__GNUC__ > 7)
860 res = vec_mule (a, b);
863 #
if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
864 "vmulosw %0,%1,%2;\n"
866 "vmulesw %0,%1,%2;\n"
876 vui32_t amask, bmask, t1, t2, r;
878 const vui32_t zero= { 0,0,0,0};
894 t1 = vec_and (amask, uib);
895 t2 = vec_and (bmask, uia);
897 r = vec_sub ((
vui32_t) ui_prod, t1);
898 res = (
vi64_t) vec_sub (r, t2);
933 #if defined __GNUC__ && (__GNUC__ > 7) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
934 res = vec_mulo (a, b);
937 #
if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
938 "vmulesw %0,%1,%2;\n"
940 "vmulosw %0,%1,%2;\n"
950 vui32_t amask, bmask, t1, t2, r;
952 const vui32_t zero= { 0,0,0,0};
971 t1 = vec_and (amask, uib);
972 t2 = vec_and (bmask, uia);
974 r = vec_sub ((
vui32_t) ui_prod, t1);
975 res = (
vi64_t) vec_sub (r, t2);
1009 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1045 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1071 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1105 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1134 #if defined __GNUC__ && (__GNUC__ > 7)
1135 return vec_mul (a, b);
1140 "vmuluwm %0,%1,%2;\n"
1152 t1 = (
vui16_t)vec_vrlw (b, s16);
1154 t3 = vec_vmsumuhm ((
vui16_t)a, t1, z);
1155 t4 = vec_vslw (t3, s16);
1156 r = (
vui32_t)vec_vadduwm (t4, t2);
1188 #if defined (vec_vpopcntw)
1189 r = vec_vpopcntw (vra);
1190 #elif defined (__clang__)
1191 r = vec_popcnt (vra);
1204 r = vec_vsum4ubs (x, z);
1211 #define vec_popcntw __builtin_vec_vpopcntw
1234 #if defined (vec_revb) || defined (__clang__)
1235 result = vec_revb (vra);
1245 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
1277 #if defined (_ARCH_PWR10) && (__GNUC__ >= 10)
1285 const vi32_t zero = {0, 0, 0, 0};
1286 result = vec_cmplt (vra, zero);
1320 if (__builtin_constant_p (shb) && (shb < 16))
1321 lshift = (
vui32_t) vec_splat_s32(shb);
1323 lshift = vec_splats ((
unsigned int) shb);
1327 result = vec_vslw (vra, lshift);
1367 if (__builtin_constant_p (shb) && (shb < 16))
1368 lshift = (
vui32_t) vec_splat_s32(shb);
1370 lshift = vec_splats ((
unsigned int) shb);
1374 result = vec_vsraw (vra, lshift);
1380 lshift = (
vui32_t) vec_splats(31);
1381 result = vec_vsraw (vra, lshift);
1416 if (__builtin_constant_p (shb) && (shb < 16))
1417 lshift = (
vui32_t) vec_splat_s32(shb);
1419 lshift = vec_splats ((
unsigned int) shb);
1423 result = vec_vsrw (vra, lshift);
1454 const long long offset1,
const long long offset2,
1455 const long long offset3)
1467 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
1470 re0 = vec_xxpermdi (re0, re2, 3);
1471 re1 = vec_xxpermdi (re1, re3, 3);
1474 re0 = vec_xxpermdi (re0, re2, 0);
1475 re1 = vec_xxpermdi (re1, re3, 0);
1479 vui32_t xte0, xte1, xte2, xte3;
1480 vui8_t perm0, perm1, perm2, perm3;
1482 perm0 = vec_lvsl (offset0, array);
1483 xte0 = vec_lde (offset0, array);
1484 xte0 = vec_perm (xte0, xte0, perm0);
1486 perm1 = vec_lvsl (offset1, array);
1487 xte1 = vec_lde (offset1, array);
1488 xte1 = vec_perm (xte1, xte1, perm1);
1490 perm2 = vec_lvsl (offset2, array);
1491 xte2 = vec_lde (offset2, array);
1492 xte2 = vec_perm (xte2, xte2, perm2);
1494 perm3 = vec_lvsl (offset3, array);
1495 xte3 = vec_lde (offset3, array);
1496 xte3 = vec_perm (xte3, xte3, perm3);
1498 xte0 = vec_mergeh (xte0, xte2);
1499 xte1 = vec_mergeh (xte1, xte3);
1500 result = vec_mergeh (xte0, xte1);
1534 r =
vec_vgl4wso (array, off01[0], off01[1], off23[0], off23[1]);
1536 r =
vec_vgl4wso (array, vra[0], vra[1], vra[2], vra[3]);
1541 signed int off0, off1, off2, off3;
1578 const unsigned char scale)
1584 vi64_t lshift = vec_splats ((
long long) (2+ scale));
1592 r =
vec_vgl4wso (array, off01[0], off01[1], off23[0], off23[1]);
1596 signed long long off0, off1, off2, off3;
1636 vi64_t lshift = vec_splats ((
long long) (2));
1644 r =
vec_vgl4wso (array, off01[0], off01[1], off23[0], off23[1]);
1648 signed long long off0, off1, off2, off3;
1680 const long long offset1)
1688 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
1691 result = vec_xxpermdi (re0, re1, 3);
1694 result = vec_xxpermdi (re0, re1, 0);
1696 re0 = (
vi64_t) vec_sld (re0, re0, 8);
1697 result = (
vi64_t) vec_sld (re0, re1, 8);
1758 const unsigned char scale)
1763 vi64_t lshift = vec_splats ((
long long) (2 + scale));
1769 long long offset0, offset1;
1806 vi64_t lshift = vec_splats ((
long long) 2);
1812 long long offset0, offset1;
1843 const long long offset1)
1851 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
1854 result = vec_xxpermdi (re0, re1, 3);
1857 result = vec_xxpermdi (re0, re1, 0);
1859 re0 = (
vui64_t) vec_sld (re0, re0, 8);
1860 result = (
vui64_t) vec_sld (re0, re1, 8);
1921 const unsigned char scale)
1926 vui64_t lshift = vec_splats ((
unsigned long long) (2 + scale));
1932 long long offset0, offset1;
1966 vui64_t lshift = vec_splats ((
unsigned long long) 2);
1972 long long offset0, offset1;
2022 #if (defined(__clang__) && __clang_major__ < 8)
2025 signed int *p = (
signed int *)((
char *)rb + ra);
2029 if (__builtin_constant_p (ra) && (ra <= 32760) && (ra >= -32768))
2039 unsigned long long rt;
2048 :
"Z" (*(
signed int *)((
char *)rb+rt))
2055 :
"Z" (*(
signed int *)((
char *)rb+ra))
2059 vui32_t const shb = { 31, 0, 0 ,0 };
2063 perm = vec_lvsl (ra, rb);
2064 xte = vec_lde (ra, rb);
2066 xte = vec_perm (xte, xte, perm);
2067 xt = (
vi64_t) vec_sra (xte, shb);
2113 #if (defined(__clang__) && __clang_major__ < 8)
2116 unsigned int *p = (
unsigned int *)((
char *)rb + ra);
2120 if (__builtin_constant_p (ra) && (ra <= 32760) && (ra >= -32768))
2130 unsigned long long rt;
2139 :
"Z" (*(
signed int *)((
char *)rb+rt))
2146 :
"Z" (*(
signed int *)((
char *)rb+ra))
2150 const vui32_t zero = {0,0,0,0};
2154 perm = vec_lvsl (ra, rb);
2155 xte = vec_lde (ra, rb);
2156 xte = vec_perm (xte, xte, perm);
2157 xt = (
vui64_t) vec_sld (zero, xte, 12);
2241 #if defined __GNUC__ && (__GNUC__ > 7)
2242 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
2243 res = vec_mulo (vra, vrb);
2245 res = vec_mule (vra, vrb);
2249 "vmuleuw %0,%1,%2;\n"
2256 const vui32_t zero = {0,0,0,0};
2257 const vui32_t ones = {-1,-1,-1,-1};
2259 vui32_t p0, p1, pp10, pp01, resw;
2263 wmask01 = vec_vmrghw (zero, ones);
2266 mtl = vec_mergeh (mt, mt);
2267 mth = vec_mergel (mt, mt);
2279 resw = vec_sld (vra, vra, 12);
2280 resw = vec_sel (vra, resw, wmask01);
2283 p0 = vec_vmuleuh (m1, m0);
2284 p1 = vec_vmulouh (m1, m0);
2285 resw = vec_sel (p0, p1, wmask01);
2288 pp10 = vec_sld (p1, p1, 12);
2294 xmask = vec_sld (wmask01, wmask01, 2);
2295 c = vec_vaddcuw (pp01, pp10);
2296 pp01 = vec_vadduwm (pp01, pp10);
2297 c = vec_sld (c, c, 6);
2298 pp01 = vec_sld (pp01, pp01, 2);
2299 pp01 = vec_sel (c, pp01, xmask);
2304 c = vec_vaddcuw (pp01, (
vui32_t)res);
2305 r = vec_vadduwm (pp01, (
vui32_t)res);
2306 c = vec_sld (c, zero, 4);
2307 res = (
vui64_t)vec_vadduwm (r, c);
2344 #if defined __GNUC__ && (__GNUC__ > 7)
2346 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
2347 res = vec_mule (vra, vrb);
2349 res = vec_mulo (vra, vrb);
2353 "vmulouw %0,%1,%2;\n"
2360 const vui32_t zero = {0,0,0,0};
2361 const vui32_t ones = {-1,-1,-1,-1};
2363 vui32_t p0, p1, pp10, pp01, resw;
2366 wmask01 = vec_vmrghw (zero, ones);
2369 mtl = vec_mergel (mt, mt);
2370 mth = vec_mergeh (mt, mt);
2381 resw = vec_sld (vra, vra, 4);
2382 m1 = (
vui16_t)vec_sel (resw, vra, wmask01);
2384 p0 = vec_vmuleuh (m1, m0);
2385 p1 = vec_vmulouh (m1, m0);
2387 resw = vec_sel (p0, p1, wmask01);
2390 pp10 = vec_sld (p1, p1, 12);
2396 xmask = vec_sld (wmask01, wmask01, 2);
2397 c = vec_vaddcuw (pp01, pp10);
2398 pp01 = vec_vadduwm (pp01, pp10);
2399 c = vec_sld (c, c, 6);
2400 pp01 = vec_sld (pp01, pp01, 2);
2401 pp01 = vec_sel (c, pp01, xmask);
2406 c = vec_vaddcuw (pp01, (
vui32_t)res);
2407 r = vec_vadduwm (pp01, (
vui32_t)res);
2408 c = vec_sld (c, zero, 4);
2409 res = (
vui64_t)vec_vadduwm (r, c);
2434 const long long offset0,
const long long offset1,
2435 const long long offset2,
const long long offset3)
2439 xs0 = vec_splat (xs, 0);
2440 xs1 = vec_splat (xs, 1);
2441 xs2 = vec_splat (xs, 2);
2442 xs3 = vec_splat (xs, 3);
2443 vec_ste (xs0, offset0, array);
2444 vec_ste (xs1, offset1, array);
2445 vec_ste (xs2, offset2, array);
2446 vec_ste (xs3, offset3, array);
2476 vec_vsst4wso (xs, array, off01[0], off01[1], off23[0], off23[1]);
2480 signed int off0, off1, off2, off3;
2514 vi32_t vra,
const unsigned char scale)
2518 vui64_t lshift = vec_splats ((
unsigned long long) (2 + scale));
2526 vec_vsst4wso (xs, array, off01[0], off01[1], off23[0], off23[1]);
2530 signed int off0, off1, off2, off3;
2565 vui64_t lshift = vec_splats ((
unsigned long long) 2);
2573 vec_vsst4wso (xs, array, off01[0], off01[1], off23[0], off23[1]);
2577 signed int off0, off1, off2, off3;
2637 const unsigned char scale)
2640 vui64_t lshift = vec_splats ((
unsigned long long) (2 + scale));
2646 long long offset0, offset1;
2675 vui64_t lshift = vec_splats ((
unsigned long long) 2);
2681 long long offset0, offset1;
2709 const long long offset0,
const long long offset1)
2716 xs1 = (
vui32_t) vec_xxpermdi (xs, xs, 2);
2718 xs1 = vec_sld (xs0, xs0, 8);
2723 #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
2762 #if (defined(__clang__) && __clang_major__ < 8)
2764 unsigned int *p = (
unsigned int *)((
char *)rb + ra);
2768 if (__builtin_constant_p (ra) && (ra <= 32760) && (ra >= -32768))
2778 unsigned long long rt;
2786 :
"=Z" (*(
unsigned int *)((
char *)rb+rt))
2793 :
"=Z" (*(
unsigned int *)((
char *)rb+ra))
2799 vui32_t xss = vec_splat (xs, 1);
2801 vec_ste (xss, ra, rb);
2851 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
2852 res = vec_sum2s (vra, vrb);
2855 "vsum2sws %0,%1,%2;\n"
2910 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
2911 res = vec_sums (vra, vrb);
2914 "vsumsws %0,%1,%2;\n"
2948 #if !defined(__clang__) || !defined(_ARCH_PWR8)
2955 #
if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
2964 vui32_t const shb = { 31, 0, 31 ,0 };
2967 xra = vec_mergeh (vra, vra);
2968 r = (
vi64_t) vec_sra (xra, shb);
2997 vui32_t const zero = { 0, 0, 0 ,0 };
2998 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
2999 return (
vui64_t) vec_mergeh (vra, zero);
3001 return (
vui64_t) vec_mergeh (zero, vra);
3026 #if !defined(__clang__) || !defined(_ARCH_PWR8)
3033 #
if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
3042 vui32_t const shb = { 31, 0, 31 ,0 };
3045 xra = vec_mergel (vra, vra);
3046 r = (
vi64_t) vec_sra (xra, shb);
3075 vui32_t const zero = { 0, 0, 0 ,0 };
3076 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
3077 return (
vui64_t) vec_mergel (vra, zero);
3079 return (
vui64_t) vec_mergel (zero, vra);
static vui32_t vec_vgl4wwo(unsigned int *array, vi32_t vra)
Vector Gather-Load 4 Words from Vector Word Offsets.
Definition: vec_int32_ppc.h:1523
static vui32_t vec_mrgahw(vui64_t vra, vui64_t vrb)
Vector Merge Algebraic High Words.
Definition: vec_int32_ppc.h:653
static vi64_t vec_vlxsiwax(const signed long long ra, const signed int *rb)
Vector Load Scalar Integer Word Algebraic Indexed.
Definition: vec_int32_ppc.h:2018
static vui64_t vec_vmadd2ouw(vui32_t a, vui32_t b, vui32_t c, vui32_t d)
Vector Multiply-Add2 Odd Unsigned Words.
static unsigned long long scalar_extract_uint64_from_high_uint128(unsigned __int128 gprp)
Extract the high doubleword from a __int128 scalar.
Definition: vec_common_ppc.h:503
static vui64_t vec_muleuw(vui32_t a, vui32_t b)
Vector multiply even unsigned words.
Definition: vec_int32_ppc.h:1007
static vui32_t vec_vgl4wso(unsigned int *array, const long long offset0, const long long offset1, const long long offset2, const long long offset3)
Vector Gather-Load 4 Words from scalar Offsets.
Definition: vec_int32_ppc.h:1453
static vui64_t vec_vupkluw(vui32_t vra)
Vector Unpack Low Unsigned Word.
Definition: vec_int32_ppc.h:3073
__vector __bool int vb32_t
vector of 32-bit bool int elements.
Definition: vec_common_ppc.h:228
static vb32_t vec_setb_sw(vi32_t vra)
Vector Set Bool from Signed Word.
Definition: vec_int32_ppc.h:1273
static vi64_t vec_vglswdo(signed int *array, vi64_t vra)
Vector Gather-Load Signed Words from Vector Doubleword Offsets.
Definition: vec_int32_ppc.h:1721
static vui64_t vec_vgluwdx(unsigned int *array, vi64_t vra)
Vector Gather-Load Unsigned Words from Vector Doubleword Indexes.
Definition: vec_int32_ppc.h:1961
static void vec_vsstwdsx(vui64_t xs, unsigned int *array, vi64_t vra, const unsigned char scale)
Vector Scatter-Store Words to Vector Doubleword Scaled Indexes.
Definition: vec_int32_ppc.h:2636
static vi64_t vec_vglswso(signed int *array, const long long offset0, const long long offset1)
Vector Gather-Load Signed Word from Scalar Offsets.
Definition: vec_int32_ppc.h:1679
static vui32_t vec_revbw(vui32_t vra)
byte reverse each word of a vector unsigned int.
Definition: vec_int32_ppc.h:1229
static vui32_t vec_mrgow(vui32_t vra, vui32_t vrb)
Vector Merge Odd Words.
Definition: vec_int32_ppc.h:803
#define CONST_VINT32_W(__w0, __w1, __w2, __w3)
Arrange elements of word initializer in high->low order.
Definition: vec_common_ppc.h:306
static vui64_t vec_vupkhuw(vui32_t vra)
Vector Unpack High Unsigned Word.
Definition: vec_int32_ppc.h:2995
static vi32_t vec_vsumsw(vi32_t vra, vi32_t vrb)
Vector Sum-across Signed Word Saturate.
Definition: vec_int32_ppc.h:2907
static void vec_vsstwso(vui64_t xs, unsigned int *array, const long long offset0, const long long offset1)
Vector Scatter-Store Words to Scalar Offsets.
Definition: vec_int32_ppc.h:2708
static vui32_t vec_mulhuw(vui32_t vra, vui32_t vrb)
Vector Multiply High Unsigned Word.
Definition: vec_int32_ppc.h:1103
#define CONST_VINT64_DW(__dw0, __dw1)
Arrange elements of dword initializer in high->low order.
Definition: vec_common_ppc.h:295
static vui64_t vec_vmsumuwm(vui32_t a, vui32_t b, vui64_t c)
Vector Multiply-Sum Unsigned Word Modulo.
static unsigned __int128 vec_transfer_vui128t_to_uint128(vui128_t vra)
Transfer a vector unsigned __int128 to __int128 scalar.
Definition: vec_common_ppc.h:420
__vector unsigned short vui16_t
vector of 16-bit unsigned short elements.
Definition: vec_common_ppc.h:204
static vi64_t vec_mulesw(vi32_t a, vi32_t b)
Vector multiply even signed words.
Definition: vec_int32_ppc.h:854
static vui64_t vec_vgluwdsx(unsigned int *array, vi64_t vra, const unsigned char scale)
Vector Gather-Load Unsigned Words from Vector Doubleword Scaled Indexes.
Definition: vec_int32_ppc.h:1920
static vui64_t vec_vmadd2euw(vui32_t a, vui32_t b, vui32_t c, vui32_t d)
Vector Multiply-Add2 Even Unsigned Words.
static vui32_t vec_popcntw(vui32_t vra)
Vector Population Count word.
Definition: vec_int32_ppc.h:1184
__vector unsigned long long vui64_t
vector of 64-bit unsigned long long elements.
Definition: vec_common_ppc.h:208
static vui64_t vec_vmuleuw(vui32_t vra, vui32_t vrb)
Vector Multiply Even Unsigned words.
Definition: vec_int32_ppc.h:2237
__vector unsigned char vui8_t
vector of 8-bit unsigned char elements.
Definition: vec_common_ppc.h:202
__vector int vi32_t
vector of 32-bit signed int elements.
Definition: vec_common_ppc.h:215
static vui64_t vec_vmulouw(vui32_t vra, vui32_t vrb)
Vector Multiply Odd Unsigned Words.
Definition: vec_int32_ppc.h:2340
static void vec_vsst4wso(vui32_t xs, unsigned int *array, const long long offset0, const long long offset1, const long long offset2, const long long offset3)
Vector Scatter-Store 4 words to Scalar Offsets.
Definition: vec_int32_ppc.h:2433
struct __VEC_U_128::@0 ulong
Struct of two unsigned long int (64-bit GPR) fields.
static vi64_t vec_mulosw(vi32_t a, vi32_t b)
Vector multiply odd signed words.
Definition: vec_int32_ppc.h:928
static vi32_t vec_srawi(vi32_t vra, const unsigned int shb)
Vector Shift Right Algebraic Word Immediate.
Definition: vec_int32_ppc.h:1356
static vui32_t vec_mrgalw(vui64_t vra, vui64_t vrb)
Vector merge Algebraic low words.
Definition: vec_int32_ppc.h:703
static vui32_t vec_srwi(vui32_t vra, const unsigned int shb)
Vector Shift Right Word Immediate.
Definition: vec_int32_ppc.h:1405
static vui32_t vec_ctzw(vui32_t vra)
Vector Count Trailing Zeros word.
Definition: vec_int32_ppc.h:601
static vi32_t vec_vsum2sw(vi32_t vra, vi32_t vrb)
Vector Sum-across Half Signed Word Saturate.
Definition: vec_int32_ppc.h:2848
__vector unsigned __int128 vui128_t
vector of one 128-bit unsigned __int128 element.
Definition: vec_common_ppc.h:237
static vi64_t vec_vupklsw(vi32_t vra)
Vector Unpack Low Signed Word.
Definition: vec_int32_ppc.h:3028
Union used to transfer 128-bit data between vector and non-vector types.
Definition: vec_common_ppc.h:256
static vui32_t vec_muluwm(vui32_t a, vui32_t b)
Vector Multiply Unsigned Word Modulo.
Definition: vec_int32_ppc.h:1132
static vui8_t vec_popcntb(vui8_t vra)
Vector Population Count byte.
Definition: vec_char_ppc.h:703
static vui64_t vec_vgluwso(unsigned int *array, const long long offset0, const long long offset1)
Vector Gather-Load Unsigned Word from Scalar Offsets.
Definition: vec_int32_ppc.h:1842
__vector long long vi64_t
vector of 64-bit signed long long elements.
Definition: vec_common_ppc.h:217
static vui64_t vec_mulouw(vui32_t a, vui32_t b)
Vector multiply odd unsigned words.
Definition: vec_int32_ppc.h:1043
static vui32_t vec_absduw(vui32_t vra, vui32_t vrb)
Vector Absolute Difference Unsigned Word.
Definition: vec_int32_ppc.h:456
static vi32_t vec_mulhsw(vi32_t vra, vi32_t vrb)
Vector Multiply High Signed Word.
Definition: vec_int32_ppc.h:1069
static vui32_t vec_mrgew(vui32_t vra, vui32_t vrb)
Vector Merge Even Words.
Definition: vec_int32_ppc.h:753
static void vec_vsstwdx(vui64_t xs, unsigned int *array, vi64_t vra)
Vector Scatter-Store Words to Vector Doubleword Indexes.
Definition: vec_int32_ppc.h:2672
static void vec_vsst4wwsx(vui32_t xs, unsigned int *array, vi32_t vra, const unsigned char scale)
Vector Scatter-Store 4 words to Vector Word Indexes.
Definition: vec_int32_ppc.h:2513
static vi64_t vec_vupkhsw(vi32_t vra)
Vector Unpack High Signed Word.
Definition: vec_int32_ppc.h:2950
static void vec_vstxsiwx(vui32_t xs, const signed long long ra, unsigned int *rb)
Vector Store Scalar Integer Word Indexed.
Definition: vec_int32_ppc.h:2760
static vi64_t vec_vglswdsx(signed int *array, vi64_t vra, const unsigned char scale)
Vector Gather-Load Signed Words from Vector Doubleword Scaled Indexes.
Definition: vec_int32_ppc.h:1757
__vector unsigned int vui32_t
vector of 32-bit unsigned int elements.
Definition: vec_common_ppc.h:206
static unsigned long long scalar_extract_uint64_from_low_uint128(unsigned __int128 gprp)
Extract the low doubleword from a __int128 scalar.
Definition: vec_common_ppc.h:490
vui64_t vx2
128 bit Vector of 2 unsigned long int (64-bit) elements.
Definition: vec_common_ppc.h:275
static void vec_vsst4wwx(vui32_t xs, unsigned int *array, vi32_t vra)
Vector Scatter-Store 4 words to Vector Word Indexes.
Definition: vec_int32_ppc.h:2560
static vui64_t vec_vlxsiwzx(const signed long long ra, const unsigned int *rb)
Vector Load Scalar Integer Word and Zero Indexed.
Definition: vec_int32_ppc.h:2109
static vui64_t vec_vgluwdo(unsigned int *array, vi64_t vra)
Vector Gather-Load Unsigned Words from Vector Doubleword Offsets.
Definition: vec_int32_ppc.h:1884
Header package containing a collection of 128-bit SIMD operations over 16-bit integer elements.
static vui32_t vec_vgl4wwsx(unsigned int *array, vi32_t vra, const unsigned char scale)
Vector Gather-Load 4 Words from Vector Word Scaled Indexes.
Definition: vec_int32_ppc.h:1577
vui32_t vx4
128 bit Vector of 4 unsigned int elements.
Definition: vec_common_ppc.h:273
static vui32_t vec_slwi(vui32_t vra, const unsigned int shb)
Vector Shift left Word Immediate.
Definition: vec_int32_ppc.h:1309
static void vec_vsstwdo(vui64_t xs, unsigned int *array, vi64_t vra)
Vector Scatter-Store Words to Vector Doubleword Offsets.
Definition: vec_int32_ppc.h:2604
static void vec_vsst4wwo(vui32_t xs, unsigned int *array, vi32_t vra)
Vector Scatter-Store 4 words to Vector Word Offsets.
Definition: vec_int32_ppc.h:2467
static vui64_t vec_vmaddouw(vui32_t a, vui32_t b, vui32_t c)
Vector Multiply-Add Odd Unsigned Words.
static vi64_t vec_vglswdx(signed int *array, vi64_t vra)
Vector Gather-Load Signed Words from Vector Doubleword Indexes.
Definition: vec_int32_ppc.h:1801
static vui32_t vec_vgl4wwx(unsigned int *array, vi32_t vra)
Vector Gather-Load 4 Words from Vector Word Indexes.
Definition: vec_int32_ppc.h:1630
static vui32_t vec_clzw(vui32_t vra)
Vector Count Leading Zeros word.
Definition: vec_int32_ppc.h:503
static vui64_t vec_vmaddeuw(vui32_t a, vui32_t b, vui32_t c)
Vector Multiply-Add Even Unsigned Words.