diff options
author | eschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a> | 2012-09-14 18:48:46 +0000 |
---|---|---|
committer | eschnett <eschnett@105869f7-3296-0410-a4ea-f4349344b45a> | 2012-09-14 18:48:46 +0000 |
commit | 6005a49ff06f8368b516c168e5a396530c1193d4 (patch) | |
tree | 83ee6b75212e9f106c9854b3cca7060a63504a03 /src/vectors-8-default.h | |
parent | ff90dc4b8644b18cb8c01bdba1df2488518652ba (diff) |
Add support for (dynamic) if-then expressions
Add types for holding integers and booleans, and vectors thereof.
Add if-then expressions.
Add floating point comparisons.
Update tests.
git-svn-id: https://svn.cct.lsu.edu/repos/numrel/LSUThorns/Vectors/trunk@66 105869f7-3296-0410-a4ea-f4349344b45a
Diffstat (limited to 'src/vectors-8-default.h')
-rw-r--r-- | src/vectors-8-default.h | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/vectors-8-default.h b/src/vectors-8-default.h index e9e2734..d55e29e 100644 --- a/src/vectors-8-default.h +++ b/src/vectors-8-default.h @@ -19,6 +19,12 @@ // Number of vector elements in a vector #define CCTK_REAL8_VEC_SIZE 1 +// Integer and boolean types corresponding to this real type +#define CCTK_INTEGER8 CCTK_REAL8 +#define CCTK_BOOLEAN8 CCTK_REAL8 +#define CCTK_INTEGER8_VEC CCTK_REAL8_VEC +#define CCTK_BOOLEAN8_VEC CCTK_REAL8_VEC + // Create a vector replicating a scalar @@ -112,4 +118,20 @@ # define k8signbit(x) (signbit(x)) #endif -#define k8ifthen(x,y,z) (k8signbit(x)?(y):(z)) +#define k8l2r(x_) ({ CCTK_INT8 x__=(x_); CCTK_INT8 x=x__; *(CCTK_REAL8*)&x; }) +#define k8r2l(x_) ({ CCTK_REAL8 x__=(x_); CCTK_REAL8 x=x__; *(CCTK_INT8*)&x; }) +#define k8lfalse k8l2r(0) +#define k8ltrue k8l2r(1) +#define k8lnot(x) k8l2r(!k8r2l(x)) +#define k8land(x,y) k8l2r(k8r2l(x) && k8r2l(y)) +#define k8lor(x,y) k8l2r(k8r2l(x) || k8r2l(y)) +#define k8lxor(x,y) k8l2r(!k8r2l(x) != !k8r2l(y)) + +#define k8ifthen(x,y,z) ((x)?(y):(z)) + +#define k8cmpeq(x,y) k8l2r((x)==(y)) +#define k8cmpne(x,y) k8l2r((x)!=(y)) +#define k8cmpgt(x,y) k8l2r((x)>(y)) +#define k8cmpge(x,y) k8l2r((x)>=(y)) +#define k8cmplt(x,y) k8l2r((x)<(y)) +#define k8cmple(x,y) k8l2r((x)<=(y)) |