commit 9c2c56ddb927b4abbc9ed2f8da0b903aa0eff5f2
parent 6bae6e6f731b286e23125001a398af196ce30418
Author: vaplv <vaplv@free.fr>
Date: Mon, 27 Oct 2014 18:10:31 +0100
Add and test the soa4f<2|3|4>_selv functions
Diffstat:
4 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/src/soa4fX.h b/src/soa4fX.h
@@ -325,6 +325,18 @@ SOA4FX_FUNC__(sel)
return SOA4FX_FUNC__(set__)(dst, tmp);
}
+static FINLINE v4f_T*
+SOA4FX_FUNC__(selv)
+ (v4f_T* dst, const v4f_T* vfalse, const v4f_T* vtrue, const v4f_T* vcond)
+{
+ v4f_T tmp[SOA4FX_DIMENSION__];
+ int i;
+ ASSERT(dst && vfalse && vtrue);
+ FOR_EACH(i, 0, SOA4FX_DIMENSION__)
+ tmp[i] = v4f_sel(vfalse[i], vtrue[i], vcond[i]);
+ return SOA4FX_FUNC__(set__)(dst, tmp);
+}
+
#undef SIZEOF_SOA4FX__
#undef SOA4FX_DIMENSION__
#undef SOA4FX_FUNC__
diff --git a/src/test_soa4f2.c b/src/test_soa4f2.c
@@ -106,9 +106,13 @@ main(int argc, char** argv)
CHECK(soa4f2_max(dst, a, b), dst);
CHECK_F2(dst, 3.f, 2.f, 3.f, -1.f, 1.f, 0.f, 0.5f, 2.f);
- soa4f2_sel(dst, b, a, v4f_mask(~0, ~0, 1, ~0));
+ soa4f2_sel(dst, b, a, v4f_mask(~0, ~0, 0, ~0));
CHECK_F2(dst, 1.f, 2.f, 1.f, -1.f, -2.f, 0.f, 0.5f, 0.f);
+ soa4f2(c, v4f_mask(~0, ~0, 1, ~0), v4f_mask(~0, 0, 0, 0));
+ soa4f2_selv(dst, b, a, c);
+ CHECK_F2(dst, 1.f, 2.f, 1.f, -1.f, -2.f, -6.f, 0.5f, 2.f);
+
return 0;
}
diff --git a/src/test_soa4f3.c b/src/test_soa4f3.c
@@ -139,6 +139,10 @@ main(int argc, char** argv)
soa4f3_sel(dst, b, a, v4f_mask(~0, ~0, 1, ~0));
CHECK_F3(dst, 1.f, 2.f, 1.f, -1.f, -2.f, 0.f, 0.5f, 0.f, -1.f, 4.f, 0.f, 2.f);
+ soa4f3(c, v4f_mask(~0,~0, 0,~0), v4f_mask(~0, 0, 0, 0), v4f_mask(0,~0,~0, 0));
+ soa4f3_selv(dst, b, a, c);
+ CHECK_F3(dst, 1.f, 2.f, 1.f,-1.f,-2.f,-6.f, 0.5f, 2.f, 0.f, 4.f, 3.f, 3.f);
+
return 0;
}
diff --git a/src/test_soa4f4.c b/src/test_soa4f4.c
@@ -202,5 +202,17 @@ main(int argc, char** argv)
-1.f, 4.f, 0.f, 2.f,
-5.f, 7.f, 0.f, -1.f);
+ soa4f4(c,
+ v4f_mask(~0,~0, 0,~0),
+ v4f_mask(~0, 0, 0, 0),
+ v4f_mask( 0,~0,~0, 0),
+ v4f_mask(~0,~0, 0, 0));
+ soa4f4_selv(dst, b, a, c);
+ CHECK_F4(dst,
+ 1.f, 2.f, 1.f, -1.f,
+ -2.f, -6.f, 0.5f, 2.f,
+ 0.f, 4.f, 3.f, 3.f,
+ -5.f, 7.f, 0.f, 0.f);
+
return 0;
}