rsimd

Make SIMD instruction sets easier to use
git clone git://git.meso-star.fr/rsimd.git
Log | Files | Refs | README | LICENSE

commit 562be0bf35d3f00b723c91997a229969c35c6c28
parent f88d39d26edfd5a059e09984241ceb0fc9d4613f
Author: vaplv <vaplv@free.fr>
Date:   Thu,  6 Nov 2014 21:57:35 +0100

Add and test the v4i_xayb and v4i_zcwd functions

Diffstat:
Msrc/sse/ssei.h | 15+++++++++++++++
Msrc/test_v4i.c | 14++++++++++++++
2 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/sse/ssei.h b/src/sse/ssei.h @@ -82,6 +82,21 @@ static FINLINE int32_t v4i_z(const v4i_T v) { return V4I_AT__(v, 2); } static FINLINE int32_t v4i_w(const v4i_T v) { return V4I_AT__(v, 3); } /******************************************************************************* + * Merge operations + ******************************************************************************/ +static FINLINE v4i_T +v4i_xayb(const v4i_T xyzw, const v4i_T abcd) +{ + return _mm_unpacklo_epi32(xyzw, abcd); +} + +static FINLINE v4i_T +v4i_zcwd(const v4i_T xyzw, const v4i_T abcd) +{ + return _mm_unpackhi_epi32(xyzw, abcd); +} + +/******************************************************************************* * Bitwise operators ******************************************************************************/ static FINLINE v4i_T diff --git a/src/test_v4i.c b/src/test_v4i.c @@ -53,6 +53,20 @@ main(int argc, char** argv) CHECK(v4i_z(i), 0); CHECK(v4i_w(i), 0); + i = v4i_set(1, 2, 3, 4); + j = v4i_set(5, 6, 7, 8); + k = v4i_xayb(i, j); + CHECK(v4i_x(k), 1); + CHECK(v4i_y(k), 5); + CHECK(v4i_z(k), 2); + CHECK(v4i_w(k), 6); + + k = v4i_zcwd(i, j); + CHECK(v4i_x(k), 3); + CHECK(v4i_y(k), 7); + CHECK(v4i_z(k), 4); + CHECK(v4i_w(k), 8); + i = v4i_set(0x00010203, 0x04050607, 0x08090A0B, 0x0C0D0E0F); j = v4i_set(0x01020401, 0x70605040, 0x0F1F2F3F, 0x00000000); k = v4i_or(i, j);