aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a>2011-12-02 21:12:04 +0000
committereschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a>2011-12-02 21:12:04 +0000
commit1d1684b6537454f25703f295be2220add0c348a5 (patch)
treec198bd3594e582f758aad83c83e08f19dc37cab2
parent114cb1091e30a0a609a6c73c82fc9f0dee5bebd5 (diff)
LSUThorns/Vectors: Remove pos, add sin/cos/tan functions
Remove kpos, because it is not used (it is a no-op, i.e. the arithmetic + operator). Add sin, cos, and tan. Begin to implement (still commented out) integer vector operations. git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/Vectors/trunk@38 105869f7-3296-0410-a4ea-f4349344b45a
-rw-r--r--src/test.cc4
-rw-r--r--src/vectors-4-default.h3
-rw-r--r--src/vectors-8-AVX.h1
-rw-r--r--src/vectors-8-DoubleHummer.h1
-rw-r--r--src/vectors-8-SSE2.h27
-rw-r--r--src/vectors-8-VSX.h1
-rw-r--r--src/vectors-8-default.h4
-rw-r--r--src/vectors.h12
8 files changed, 42 insertions, 11 deletions
diff --git a/src/test.cc b/src/test.cc
index 1ef7f18..e5ae613 100644
--- a/src/test.cc
+++ b/src/test.cc
@@ -147,7 +147,6 @@ void Vectors_Test(CCTK_ARGUMENTS)
}
}
- VECTEST("kpos", kpos(av), +a[i] );
VECTEST("kneg", kneg(av), -a[i] );
VECTEST("kadd", kadd(av, bv), a[i] + b[i] );
@@ -160,6 +159,7 @@ void Vectors_Test(CCTK_ARGUMENTS)
VECTEST("knmadd", knmadd(av, bv, cv), -a[i] * b[i] - c[i] );
VECTEST("knmsub", knmsub(av, bv, cv), -a[i] * b[i] + c[i] );
+ VECTEST("kcos", kcos(av), cos(a[i]) );
VECTEST("kexp", kexp(av), exp(a[i]) );
VECTEST("kfabs", kfabs(av), fabs(a[i]) );
VECTEST("kfmax", kfmax(av, bv), fmax(a[i], b[i]) );
@@ -167,7 +167,9 @@ void Vectors_Test(CCTK_ARGUMENTS)
VECTEST("kfnabs", kfnabs(av), -fabs(a[i]) );
VECTEST("klog", klog(av), log(a[i]) );
VECTEST("kpow", kpow(av, 3.14159), pow(a[i], 3.14159) );
+ VECTEST("ksin", ksin(av), sin(a[i]) );
VECTEST("ksqrt", ksqrt(av), sqrt(a[i]) );
+ VECTEST("ktan", ktan(av), tan(a[i]) );
VECTEST("kifpos positive",
kifpos(av, bv, cv), my_signbit(a[i]) ? c[i] : b[i]);
diff --git a/src/vectors-4-default.h b/src/vectors-4-default.h
index 3e5cd70..a672b89 100644
--- a/src/vectors-4-default.h
+++ b/src/vectors-4-default.h
@@ -75,6 +75,7 @@
#define k4nmsub(x,y,z) (-(x)*(y)+(z))
// Functions
+#define k4cos(x) (cosf(x))
#define k4exp(x) (expf(x))
#define k4fabs(x) (fabsf(x))
#define k4fmax(x,y) (fmaxf(x,y))
@@ -82,7 +83,9 @@
#define k4fnabs(x) (-fabsf(x))
#define k4log(x) (logf(x))
#define k4pow(x,a) (powf(x,a))
+#define k4sin(x) (sinf(x))
#define k4sqrt(x) (sqrtf(x))
+#define k4tan(x) (tanf(x))
#ifdef __cplusplus
# define k4sgn(x) ({ using namespace std; signbit(x); })
diff --git a/src/vectors-8-AVX.h b/src/vectors-8-AVX.h
index 0408c82..f7d00d9 100644
--- a/src/vectors-8-AVX.h
+++ b/src/vectors-8-AVX.h
@@ -154,7 +154,6 @@ static const k8const_t k8abs_mask_union =
{{ K8_IMAX, K8_IMAX, K8_IMAX, K8_IMAX, }};
// Operators
-#define k8pos(x) (x)
#define k8neg(x) (_mm256_xor_pd(x,k8sign_mask_union.vd))
#define k8add(x,y) (_mm256_add_pd(x,y))
diff --git a/src/vectors-8-DoubleHummer.h b/src/vectors-8-DoubleHummer.h
index a880bd3..d40d47e 100644
--- a/src/vectors-8-DoubleHummer.h
+++ b/src/vectors-8-DoubleHummer.h
@@ -132,7 +132,6 @@
// Functions and operators
// Operators
-#define k8pos(x) (x)
#define k8neg(x) (__fpneg(x))
#define k8add(x,y) (__fpadd(x,y))
diff --git a/src/vectors-8-SSE2.h b/src/vectors-8-SSE2.h
index 2da4b11..fbdcd4b 100644
--- a/src/vectors-8-SSE2.h
+++ b/src/vectors-8-SSE2.h
@@ -166,6 +166,11 @@
// Functions and operators
+// static const union {
+// unsigned long long i[2];
+// __m128d v;
+// } k8all_mask_union = {{ 0xfffffffffffffffULL, 0xfffffffffffffffULL }};
+// #define k8all_mask (k8all_mask_union.v)
static const union {
unsigned long long i[2];
__m128d v;
@@ -173,7 +178,24 @@ static const union {
#define k8sign_mask (k8sign_mask_union.v)
// Operators
-#define k8pos(x) (x)
+
+// #define k8inot(x) (_mm_xor_si128(k8all_mask,x))
+//
+// #define k8iand(x,y) (_mm_and_si128(x,y))
+// #define k8ior(x,y) (_mm_or_si128(x,y))
+// #define k8ixor(x,y) (_mm_xor_si128(x,y))
+//
+// #define k8ineg(x) (_mm_xor_pd(k8sign_mask,x))
+//
+// #define k8iadd(x,y) (_mm_add_epi64(x,y))
+// #define k8isub(x,y) (_mm_sub_epi64(x,y))
+//
+// #define k8not(x) (_mm_xor_pd(k8all_mask,x))
+//
+// #define k8and(x,y) (_mm_and_pd(x,y))
+// #define k8or(x,y) (_mm_or_pd(x,y))
+// #define k8xor(x,y) (_mm_xor_pd(x,y))
+
#define k8neg(x) (_mm_xor_pd(k8sign_mask,x))
#define k8add(x,y) (_mm_add_pd(x,y))
@@ -212,9 +234,12 @@ static const union {
f(vec8_elt1(x),a)); \
})
+#define k8cos(x) K8REPL(cos,x)
#define k8exp(x) K8REPL(exp,x)
#define k8log(x) K8REPL(log,x)
#define k8pow(x,a) K8REPL2(pow,x,a)
+#define k8sin(x) K8REPL(sin,x)
+#define k8tan(x) K8REPL(tan,x)
// Choice [sign(x)>0 ? y : z]
#ifdef __SSE4_1__
diff --git a/src/vectors-8-VSX.h b/src/vectors-8-VSX.h
index b079a2f..7785759 100644
--- a/src/vectors-8-VSX.h
+++ b/src/vectors-8-VSX.h
@@ -66,7 +66,6 @@
// Functions and operators
// Operators
-#define k8pos(x) (+(x))
#define k8neg(x) (-(x))
#define k8add(x,y) ((x)+(y))
diff --git a/src/vectors-8-default.h b/src/vectors-8-default.h
index d95ca91..f980e74 100644
--- a/src/vectors-8-default.h
+++ b/src/vectors-8-default.h
@@ -60,7 +60,6 @@
// Operators
-#define k8pos(x) (+(x))
#define k8neg(x) (-(x))
#define k8add(x,y) ((x)+(y))
@@ -75,6 +74,7 @@
#define k8nmsub(x,y,z) (-(x)*(y)+(z))
// Functions
+#define k8cos(x) (cos(x))
#define k8exp(x) (exp(x))
#define k8fabs(x) (fabs(x))
#define k8fmax(x,y) (fmax(x,y))
@@ -82,7 +82,9 @@
#define k8fnabs(x) (-fabs(x))
#define k8log(x) (log(x))
#define k8pow(x,a) (pow(x,a))
+#define k8sin(x) (sin(x))
#define k8sqrt(x) (sqrt(x))
+#define k8tan(x) (tan(x))
#ifdef __cplusplus
# define k8sgn(x) ({ using namespace std; signbit(x); })
diff --git a/src/vectors.h b/src/vectors.h
index 6514c93..cc33ee5 100644
--- a/src/vectors.h
+++ b/src/vectors.h
@@ -78,6 +78,7 @@
# define knmadd k4nmadd
# define knmsub k4nmsub
+# define kcos k4cos
# define kexp k4exp
# define kfabs k4fabs
# define kfmax k4fmax
@@ -85,9 +86,12 @@
# define kfnabs k4fnabs
# define klog k4log
# define kpow k4pow
+# define ksin k4sin
# define ksqrt k4sqrt
+# define ktan k4tan
# define kifpos k4ifpos
+# define kifneg k4ifneg
#elif defined(CCTK_REAL_PRECISION_8)
@@ -112,7 +116,6 @@
# define vec_store_nta_partial_hi vec8_store_nta_partial_hi
# define vec_store_nta_partial_mid vec8_store_nta_partial_mid
-# define kpos k8pos
# define kneg k8neg
# define kadd k8add
@@ -125,6 +128,7 @@
# define knmadd k8nmadd
# define knmsub k8nmsub
+# define kcos k8cos
# define kexp k8exp
# define kfabs k8fabs
# define kfmax k8fmax
@@ -132,7 +136,9 @@
# define kfnabs k8fnabs
# define klog k8log
# define kpow k8pow
+# define ksin k8sin
# define ksqrt k8sqrt
+# define ktan k8tan
# define kifpos k8ifpos
@@ -276,10 +282,6 @@ struct vecprops<CCTK_REAL8> {
{
return vec8_elt(x,d);
}
- static inline vector_t pos (vector_t const& x)
- {
- return k8pos(x);
- }
static inline vector_t neg (vector_t const& x)
{
return k8neg(x);