Diff for /gforth/engine/threaded.h between versions 1.33 and 1.34

version 1.33, 2005/01/26 21:24:16 version 1.34, 2005/08/16 13:46:49
Line 174  before_goto: goto *real_ca; after_goto: Line 174  before_goto: goto *real_ca; after_goto:
 */  */
 #define KILLS asm("":"=X"(cfa));  #define KILLS asm("":"=X"(cfa));
   
 #ifndef THREADING_SCHEME  
 #define THREADING_SCHEME 7  
 #endif  
   
 #if THREADING_SCHEME==1  
 #warning direct threading scheme 1: autoinc, long latency, cfa live  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip++;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip-1)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip++;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1  
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==2  
 #warning direct threading scheme 2: autoinc, long latency, cfa dead  
 #  define NEXT_P0       (ip++)  
 #  define CFA           cfa  
 #  define IP            (ip-1)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*(ip-1))  
 #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1  
 #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
   
 #if THREADING_SCHEME==3  
 #warning direct threading scheme 3: autoinc, low latency, cfa live  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*ip)  
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1       do {cfa=*ip++;} while(0)  
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==4  
 #warning direct threading scheme 4: autoinc, low latency, cfa dead  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*ip)  
 #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1  
 #  define NEXT_P1_5     do {KILLS GOTO(*(ip++));} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==5  
 #warning direct threading scheme 5: long latency, cfa live  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1       (ip++)  
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==6  
 #warning direct threading scheme 6: long latency, cfa dead  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*ip)  
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1       (ip++)  
 #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
   
 #if THREADING_SCHEME==7  
 #warning direct threading scheme 7: low latency, cfa live  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*ip)  
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1       do {cfa=*ip++;} while(0)  
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==8  
 #warning direct threading scheme 8: cfa dead, i386 hack  #warning direct threading scheme 8: cfa dead, i386 hack
 #  define NEXT_P0  #  define NEXT_P0
 #  define CFA           cfa  #  define CFA           cfa
Line 292  before_goto: goto *real_ca; after_goto: Line 185  before_goto: goto *real_ca; after_goto:
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)  #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  
   
 #if THREADING_SCHEME==9  
 #warning direct threading scheme 9: Power/PPC hack, long latency  
 /* Power uses a prepare-to-branch instruction, and the latency between  
    this inst and the branch is 5 cycles on a PPC604; so we utilize this  
    to do some prefetching in between */  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            ip  
 #  define SET_IP(p)     do {ip=(p); next_cfa=*ip; NEXT_P0;} while(0)  
 #  define NEXT_INST     (next_cfa)  
 #  define INC_IP(const_inc)     do {next_cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA          
 #  define NEXT_P1       do {cfa=next_cfa; ip++; next_cfa=*ip;} while(0)  
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #  define MORE_VARS     Xt next_cfa;  
 #endif  
   
 #if THREADING_SCHEME==10  
 #warning direct threading scheme 10: plain (no attempt at scheduling)  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*ip)  
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1  
 #  define NEXT_P1_5     do {cfa=*ip++; GOTO(cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 /* direct threaded */  /* direct threaded */
 #else  #else
 /* indirect THREADED  */  /* indirect THREADED  */
   
 #ifndef THREADING_SCHEME  
 #define THREADING_SCHEME 6  
 #endif  
   
 #if THREADING_SCHEME==1  
 #warning indirect threading scheme 1: autoinc, long latency, cisc  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip++;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip-1)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip++;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1  
 #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==2  
 #warning indirect threading scheme 2: autoinc, long latency  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip++;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip-1)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip++;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA        Label ca;  
 #  define NEXT_P1       do {ca=*cfa;} while(0)  
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  
 #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})  
 #endif  
   
   
 #if THREADING_SCHEME==3  
 #warning indirect threading scheme 3: autoinc, low latency, cisc  
 #  define NEXT_P0  
 #  define CFA           cfa  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); NEXT_P0;} while(0)  
 #  define NEXT_INST     (*ip)  
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1  
 #  define NEXT_P1_5     do {cfa=*ip++; GOTO(*cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==4  
 #warning indirect threading scheme 4: autoinc, low latency  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip++;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip-1)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip++;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA        Label ca;  
 #  define NEXT_P1       do {ca=*cfa;} while(0)  
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  
 #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})  
 #endif  
   
   
 #if THREADING_SCHEME==5  
 #warning indirect threading scheme 5: long latency, cisc  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA  
 #  define NEXT_P1       (ip++)  
 #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)  
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  
 #endif  
   
 #if THREADING_SCHEME==6  
 #warning indirect threading scheme 6: long latency  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA        Label ca;  
 #  define NEXT_P1       do {ip++; ca=*cfa;} while(0)  
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  
 #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})  
 #endif  
   
 #if THREADING_SCHEME==7  
 #warning indirect threading scheme 7: low latency  
 #  define NEXT_P0       do {cfa1=cfa; cfa=*ip;} while(0)  
 #  define CFA           cfa1  
 #  define MORE_VARS     Xt cfa1;  
 #  define IP            (ip)  
 #  define SET_IP(p)     do {ip=(p); cfa=*ip;} while(0)  
 #  define NEXT_INST     (cfa)  
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  
 #  define DEF_CA        Label ca;  
 #  define NEXT_P1       do {ip++; ca=*cfa;} while(0)  
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  
 #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})  
 #endif  
   
 #if THREADING_SCHEME==8  
 #warning indirect threading scheme 8: low latency,cisc  #warning indirect threading scheme 8: low latency,cisc
 #  define NEXT_P0  #  define NEXT_P0
 #  define CFA           cfa  #  define CFA           cfa
Line 452  before_goto: goto *real_ca; after_goto: Line 201  before_goto: goto *real_ca; after_goto:
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P1_5     do {cfa=*ip++; GOTO(*cfa);} while(0)  #  define NEXT_P1_5     do {cfa=*ip++; GOTO(*cfa);} while(0)
 #  define EXEC1(XT)     ({cfa=(XT); *cfa;})  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  
   
 /* indirect threaded */  /* indirect threaded */
 #endif  #endif

Removed from v.1.33  
changed lines
  Added in v.1.34


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>