From b539c9a8c5f6a4fb0ac3f0ddfabaec8e3470f5be Mon Sep 17 00:00:00 2001 From: eschnett Date: Thu, 8 Aug 2013 19:59:05 +0000 Subject: Correct errors in VSX vectors git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/Vectors/trunk@88 105869f7-3296-0410-a4ea-f4349344b45a --- src/vectors-8-VSX.h | 54 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/src/vectors-8-VSX.h b/src/vectors-8-VSX.h index 4b0e18f..2279a2f 100644 --- a/src/vectors-8-VSX.h +++ b/src/vectors-8-VSX.h @@ -15,22 +15,26 @@ #define vec8_architecture "VSX" // Vector type corresponding to CCTK_REAL -#define CCTK_REAL8_VEC vector double +typedef vector double CCTK_REAL8_VEC; +typedef vector signed long long CCTK_INTEGER8_VEC; +typedef vector bool long long CCTK_BOOLEAN8_VEC; // Number of vector elements in a CCTK_REAL_VEC #define CCTK_REAL8_VEC_SIZE 2 +vec_static_assert(sizeof(CCTK_REAL8_VEC) == + sizeof(CCTK_REAL8) * CCTK_REAL8_VEC_SIZE); + // Integer and boolean types corresponding to this real type -//#define CCTK_INTEGER8 long long -#define CCTK_BOOLEAN8 long long -//#define CCTK_INTEGER8_VEC vector long long -#define CCTK_BOOLEAN8_VEC vector bool long long +typedef long long CCTK_INTEGER8; +typedef unsigned long long CCTK_BOOLEAN8; // Create vectors, extract vector elements #define vec8_set1(a) (vec_splats(a)) +#define vec8_set1i(a) (vec_splats(a)) #define vec8_set(a,b) \ ({ \ CCTK_REAL8_VEC x; \ @@ -39,9 +43,14 @@ x; \ }) -#define vec8_elt0(x) ((x)[0]) -#define vec8_elt1(x) ((x)[1]) -#define vec8_elt(x,d) ((x)[d]) +#define vec8_elt0(x) ((x)[0]) +#define vec8_elt1(x) ((x)[1]) +// #define vec8_elt(x,d) ((x)[d]) +// #define vec8_elti(x,d) ((x)[d]) +// #define vec8_eltb(x,d) ((x)[d]) +static inline CCTK_REAL8 vec8_elt(CCTK_REAL8_VEC x, int d) { return x[d]; } +static inline CCTK_INTEGER8 vec8_elti(CCTK_INTEGER8_VEC x, int d) { return x[d]; } +static inline CCTK_BOOLEAN8 vec8_eltb(CCTK_BOOLEAN8_VEC x,int d) { return x[d]; } @@ -169,14 +178,27 @@ // canonical true is -1LL, canonical false is 0LL // truth values are interpreted bit-wise -#define k8lfalse ({ CCTK_BOOLEAN8_VEC dummy; vec_xor(dummy,dummy); }) -#define k8ltrue (k8lnot(k8lfalse)) -#define k8lnot(x_) \ - ({ \ - CCTK_BOOLEAN8_VEC x__=(x_); \ - CCTK_BOOLEAN8_VEC x=x__; \ - vec_nor(x,x); \ - }) +// #define k8lfalse ({ CCTK_BOOLEAN8_VEC dummy; vec_xor(dummy,dummy); }) +// #define k8ltrue (k8lnot(k8lfalse)) +static inline CCTK_BOOLEAN8_VEC k8lfalse1() +{ + CCTK_BOOLEAN8_VEC dummy; + return vec_xor(dummy,dummy); +} +#define k8lfalse (k8lfalse1()) +#define k8ltrue (k8lnot(k8lfalse)) + +// #define k8lnot(x_) \ +// ({ \ +// CCTK_BOOLEAN8_VEC x__=(x_); \ +// CCTK_BOOLEAN8_VEC x=x__; \ +// vec_nor(x,x); \ +// }) +static inline CCTK_BOOLEAN8_VEC k8lnot(CCTK_BOOLEAN8_VEC x) +{ + return vec_nor(x,x); +} + #define k8land(x,y) (vec_and(x,y)) #define k8lor(x,y) (vec_or(x,y)) #define k8lxor(x,y) (vec_xor(x,y)) -- cgit v1.2.3