diff options
author | eschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a> | 2013-07-19 17:48:51 +0000 |
---|---|---|
committer | eschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a> | 2013-07-19 17:48:51 +0000 |
commit | dc69911dd15fa1fa24c51ca222fc7883d3fc5cff (patch) | |
tree | 0ee4c550f788de3787c2e922f1268189334b6983 /src/vectors-4-default.h | |
parent | 825b89e0e6bf3e4e248188b36f5b29029737d44a (diff) |
Do not use type punning any more
Do not cast between different pointer types. This is illegal in C/C++,
and modern compilers (such as gcc 4.8) then generate wrong code.
Instead, use memcpy to re-interpret the bit patterns of values with a
different type.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/Vectors/trunk@85 105869f7-3296-0410-a4ea-f4349344b45a
Diffstat (limited to 'src/vectors-4-default.h')
-rw-r--r-- | src/vectors-4-default.h | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/src/vectors-4-default.h b/src/vectors-4-default.h index 28fae04..ec98ebf 100644 --- a/src/vectors-4-default.h +++ b/src/vectors-4-default.h @@ -1,3 +1,4 @@ +// -*-C++-*- // Fallback vectorisation implementation: Do not vectorise // We use macros here, so that we are not surprised by compilers which @@ -23,10 +24,10 @@ vec_static_assert(sizeof(CCTK_REAL4_VEC) == sizeof(CCTK_REAL4) * CCTK_REAL4_VEC_SIZE); // Integer and boolean types corresponding to this real type -#define CCTK_INTEGER4 CCTK_REAL4 -#define CCTK_BOOLEAN4 CCTK_REAL4 -#define CCTK_INTEGER4_VEC CCTK_REAL4_VEC -#define CCTK_BOOLEAN4_VEC CCTK_REAL4_VEC +#define CCTK_INTEGER4 CCTK_INT4 +#define CCTK_BOOLEAN4 CCTK_INT4 +#define CCTK_INTEGER4_VEC CCTK_INT4 +#define CCTK_BOOLEAN4_VEC CCTK_INT4 @@ -38,6 +39,8 @@ vec_static_assert(sizeof(CCTK_REAL4_VEC) == // Access vectors elements #define vec4_elt0(x) (x) #define vec4_elt(x,d) (x) +#define vec4_elti(x,d) (x) +#define vec4_eltb(x,d) (x) @@ -118,20 +121,18 @@ vec_static_assert(sizeof(CCTK_REAL4_VEC) == }) #define k4signbit(x) (std::signbit(x)) -#define k4l2r(x_) ({ CCTK_INT4 x__=(x_); CCTK_INT4 x=x__; *(CCTK_REAL4*)&x; }) -#define k4r2l(x_) ({ CCTK_REAL4 x__=(x_); CCTK_REAL4 x=x__; *(CCTK_INT4*)&x; }) -#define k4lfalse k4l2r(0) -#define k4ltrue k4l2r(1) -#define k4lnot(x) k4l2r(!k4r2l(x)) -#define k4land(x,y) k4l2r(k4r2l(x) && k4r2l(y)) -#define k4lor(x,y) k4l2r(k4r2l(x) || k4r2l(y)) -#define k4lxor(x,y) k4l2r(!k4r2l(x) != !k4r2l(y)) - -#define k4ifthen(x,y,z) (k4r2l(x)?(y):(z)) - -#define k4cmpeq(x,y) k4l2r((x)==(y)) -#define k4cmpne(x,y) k4l2r((x)!=(y)) -#define k4cmpgt(x,y) k4l2r((x)>(y)) -#define k4cmpge(x,y) k4l2r((x)>=(y)) -#define k4cmplt(x,y) k4l2r((x)<(y)) -#define k4cmple(x,y) k4l2r((x)<=(y)) +#define k4lfalse 0 +#define k4ltrue 1 +#define k4lnot(x) (!(x)) +#define k4land(x,y) ((x) && (y)) +#define k4lor(x,y) ((x) || (y)) +#define k4lxor(x,y) (!(x) != !(y)) + +#define k4ifthen(x,y,z) ((x)?(y):(z)) + +#define k4cmpeq(x,y) ((x)==(y)) +#define k4cmpne(x,y) ((x)!=(y)) +#define k4cmpgt(x,y) ((x)>(y)) +#define k4cmpge(x,y) ((x)>=(y)) +#define k4cmplt(x,y) ((x)<(y)) +#define k4cmple(x,y) ((x)<=(y)) |