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:
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);