aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/vasp/source/oploop.h
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2003-03-15 04:35:48 +0000
committerThomas Grill <xovo@users.sourceforge.net>2003-03-15 04:35:48 +0000
commitbc6f43fbe1b22b1c2c63a32372126e0eaaaa08b0 (patch)
tree030f3fe84055ef64ac92aeebf10d3414e6eff14b /externals/grill/vasp/source/oploop.h
parent8ff848cb30edff3c477beb375a23e5c400d47d91 (diff)
""
svn path=/trunk/; revision=475
Diffstat (limited to 'externals/grill/vasp/source/oploop.h')
-rwxr-xr-xexternals/grill/vasp/source/oploop.h94
1 files changed, 78 insertions, 16 deletions
diff --git a/externals/grill/vasp/source/oploop.h b/externals/grill/vasp/source/oploop.h
index 6b268022..888a3f84 100755
--- a/externals/grill/vasp/source/oploop.h
+++ b/externals/grill/vasp/source/oploop.h
@@ -16,23 +16,85 @@ WARRANTIES, see the file, "license.txt," in this distribution.
#define _D_MIN(a,b) ((a) < (b)?(a):(b))
#ifdef FLEXT_THREADS
-#define _D_LOOP(VAR,LEN) { \
- register I __i__; \
- for(__i__ = 0; __i__ < LEN; flext_base::ThrYield()) { \
- I __m__ = _D_MIN(LEN,__i__+_D_BLOCK); for(; (VAR = __i__) < __m__; ++__i__) {
-#define _E_LOOP } if(__i__ < __m__) break; }}
-#define _D_WHILE(COND) { \
- for(; (COND) ; flext_base::ThrYield()) { \
- register I __i__ = 0; \
- for(; __i__ < _D_BLOCK && (COND); ++__i__) {
-#define _E_WHILE } if(__i__ < _D_BLOCK) break; }}
+/*
+ #define _D_LOOP(VAR,LEN) { \
+ register I __i__; \
+ for(__i__ = 0; __i__ < LEN; flext_base::ThrYield()) { \
+ I __m__ = _D_MIN(LEN,__i__+_D_BLOCK); for(; (VAR = __i__) < __m__; ++__i__) {
+
+ #define _E_LOOP } if(__i__ < __m__) break; }}
+*/
+ #define _D_LOOP(VAR,LEN) { \
+ for(VAR = 0; VAR < LEN; flext_base::ThrYield()) { \
+ register const I __m__ = _D_MIN(LEN,VAR+_D_BLOCK); \
+ for(; VAR < __m__; ++VAR) {
+
+ #define _E_LOOP }}}
+
+ #define _D_WHILE(COND) { \
+ for(; (COND) ; flext_base::ThrYield()) { \
+ register I __i__ = 0; \
+ for(; __i__ < _D_BLOCK && (COND); ++__i__) {
+
+ #define _E_WHILE } if(__i__ < _D_BLOCK) break; }}
+
+#else
+
+ #define _D_LOOP(VAR,LEN) { \
+ for(VAR = 0; VAR < LEN; ++VAR) {
+
+ #define _E_LOOP }}
+
+ #define _D_WHILE(COND) { \
+ while(COND) {
+
+ #define _E_WHILE }}
+
+#endif
+
+
+#define _DE_WHILE(COND,BODY) { _D_WHILE(COND) BODY; _E_WHILE }
+#define _DF_LOOP(VAR,LEN,BODY) { _D_LOOP(VAR,LEN) BODY; _E_LOOP }
+
+#ifdef VASP_COMPACT
+
+ #define _DE_LOOP(VAR,LEN,BODY) _DF_LOOP(VAR,LEN,BODY)
+
#else
-#define _D_LOOP(VAR,LEN) { \
- for(VAR = 0; VAR < LEN; ++VAR) {
-#define _E_LOOP }}
-#define _D_WHILE(COND) { \
- while(COND) {
-#define _E_WHILE }}
+
+ #ifdef FLEXT_THREADS
+
+ #define _DE_LOOP(VAR,LEN,BODY) { \
+ for(VAR = 0; VAR < LEN; flext_base::ThrYield()) { \
+ register const I __m__ = _D_MIN(LEN,VAR+_D_BLOCK); \
+ for(; VAR <= __m__-4; VAR += 4) { \
+ BODY; \
+ BODY; \
+ BODY; \
+ BODY; \
+ } \
+ for(; VAR < __m__; ++VAR) { \
+ BODY; \
+ } \
+ } \
+ }
+
+ #else
+
+ #define _DE_LOOP(VAR,LEN,BODY) { \
+ for(VAR = 0; VAR <= LEN-4; VAR += 4) { \
+ BODY; \
+ BODY; \
+ BODY; \
+ BODY; \
+ } \
+ for(; VAR < LEN; ++VAR) { \
+ BODY; \
+ } \
+ }
+
+ #endif
+
#endif
#endif