From bc6f43fbe1b22b1c2c63a32372126e0eaaaa08b0 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Sat, 15 Mar 2003 04:35:48 +0000 Subject: "" svn path=/trunk/; revision=475 --- externals/grill/vasp/source/oploop.h | 94 ++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 16 deletions(-) (limited to 'externals/grill/vasp/source/oploop.h') 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 -- cgit v1.2.1