Diff for /gforth/engine/threaded.h between versions 1.29 and 1.32

version 1.29, 2005/01/23 09:55:13 version 1.32, 2005/01/24 22:18:34
Line 96 Line 96
 #else  #else
 #define DO_GOTO goto *real_ca  #define DO_GOTO goto *real_ca
 #endif  #endif
   #ifndef GOTO_ALIGN
   #define GOTO_ALIGN
   #endif
   
 #define GOTO(target) do {(real_ca=(target));} while(0)  #define GOTO(target) do {(real_ca=(target));} while(0)
 #define NEXT_P2 do {NEXT_P1_5; DO_GOTO;} while(0)  #define NEXT_P2 do {NEXT_P1_5; DO_GOTO;} while(0)
 #define EXEC(XT) do { EXEC1(XT); DO_GOTO;} while (0)  #define EXEC(XT) do { real_ca=EXEC1(XT); DO_GOTO;} while (0)
   #define VM_JUMP(target) do {GOTO(target); DO_GOTO;} while (0)
 #define NEXT do {DEF_CA NEXT_P1; NEXT_P2;} while(0)  #define NEXT do {DEF_CA NEXT_P1; NEXT_P2;} while(0)
   #define FIRST_NEXT_P2 NEXT_P1_5; GOTO_ALIGN; \
   before_goto: goto *real_ca; after_goto:
   #define FIRST_NEXT do {DEF_CA NEXT_P1; FIRST_NEXT_P2;} while(0)
 #define IPTOS NEXT_INST  #define IPTOS NEXT_INST
   
   
Line 122 Line 129
     fprintf(stderr,"NEXT encountered prim %p at ip=%p\n", cfa, ip); \      fprintf(stderr,"NEXT encountered prim %p at ip=%p\n", cfa, ip); \
   ip++;} while(0)    ip++;} while(0)
 #  define NEXT_P1_5     do {ca=**cfa; GOTO(ca);} while(0)  #  define NEXT_P1_5     do {ca=**cfa; GOTO(ca);} while(0)
 #  define EXEC1(XT)     do {DEF_CA cfa=(XT);\  #  define EXEC1(XT)     ({DEF_CA cfa=(XT);\
   if (DEBUG_DITC && (cfa>vm_prims+DOESJUMP && cfa<vm_prims+npriminfos)) \    if (DEBUG_DITC && (cfa>vm_prims+DOESJUMP && cfa<vm_prims+npriminfos)) \
     fprintf(stderr,"EXEC encountered xt %p at ip=%p, vm_prims=%p, xts=%p\n", cfa, ip, vm_prims, xts); \      fprintf(stderr,"EXEC encountered xt %p at ip=%p, vm_prims=%p, xts=%p\n", cfa, ip, vm_prims, xts); \
  ca=**cfa; GOTO(ca);} while(0)   ca=**cfa; ca;})
   
 #elif defined(NO_IP)  #elif defined(NO_IP)
   
Line 137 Line 144
 #define NEXT_P1  #define NEXT_P1
 #define NEXT_P1_5               do {goto *next_code;} while(0)  #define NEXT_P1_5               do {goto *next_code;} while(0)
 /* set next_code to the return address before performing EXEC */  /* set next_code to the return address before performing EXEC */
 #define EXEC1(XT)       do {cfa=(XT); goto **cfa;} while(0)  /* original: */
   /* #define EXEC1(XT)    do {cfa=(XT); goto **cfa;} while(0) */
   /* fake, to make syntax check work */
   #define EXEC1(XT)       ({cfa=(XT); *cfa;})
   
 #else  /* !defined(DOUBLY_INDIRECT) && !defined(NO_IP) */  #else  /* !defined(DOUBLY_INDIRECT) && !defined(NO_IP) */
   
Line 180 Line 190
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==2  #if THREADING_SCHEME==2
Line 194 Line 204
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  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)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
   
Line 209 Line 219
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       do {cfa=*ip++;} while(0)  #  define NEXT_P1       do {cfa=*ip++;} while(0)
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==4  #if THREADING_SCHEME==4
Line 223 Line 233
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P1_5     do {KILLS GOTO(*(ip++));} while(0)  #  define NEXT_P1_5     do {KILLS GOTO(*(ip++));} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==5  #if THREADING_SCHEME==5
Line 238 Line 248
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==6  #if THREADING_SCHEME==6
Line 252 Line 262
 #  define DEF_CA  #  define DEF_CA
 #  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)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
   
Line 267 Line 277
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       do {cfa=*ip++;} while(0)  #  define NEXT_P1       do {cfa=*ip++;} while(0)
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==8  #if THREADING_SCHEME==8
Line 281 Line 291
 #  define DEF_CA  #  define DEF_CA
 #  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)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==9  #if THREADING_SCHEME==9
Line 298 Line 308
 #  define DEF_CA          #  define DEF_CA        
 #  define NEXT_P1       do {cfa=next_cfa; ip++; next_cfa=*ip;} while(0)  #  define NEXT_P1       do {cfa=next_cfa; ip++; next_cfa=*ip;} while(0)
 #  define NEXT_P1_5     do {GOTO(cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #  define MORE_VARS     Xt next_cfa;  #  define MORE_VARS     Xt next_cfa;
 #endif  #endif
   
Line 313 Line 323
 #  define DEF_CA  #  define DEF_CA
 #  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)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 /* direct threaded */  /* direct threaded */
Line 336 Line 346
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==2  #if THREADING_SCHEME==2
Line 351 Line 361
 #  define DEF_CA        Label ca;  #  define DEF_CA        Label ca;
 #  define NEXT_P1       do {ca=*cfa;} while(0)  #  define NEXT_P1       do {ca=*cfa;} while(0)
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)  #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})
 #endif  #endif
   
   
Line 366 Line 376
 #  define DEF_CA  #  define DEF_CA
 #  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)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==4  #if THREADING_SCHEME==4
Line 381 Line 391
 #  define DEF_CA        Label ca;  #  define DEF_CA        Label ca;
 #  define NEXT_P1       do {ca=*cfa;} while(0)  #  define NEXT_P1       do {ca=*cfa;} while(0)
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)  #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})
 #endif  #endif
   
   
Line 397 Line 407
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)  #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)
 #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 #if THREADING_SCHEME==6  #if THREADING_SCHEME==6
Line 412 Line 422
 #  define DEF_CA        Label ca;  #  define DEF_CA        Label ca;
 #  define NEXT_P1       do {ip++; ca=*cfa;} while(0)  #  define NEXT_P1       do {ip++; ca=*cfa;} while(0)
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)  #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})
 #endif  #endif
   
 #if THREADING_SCHEME==7  #if THREADING_SCHEME==7
Line 427 Line 437
 #  define DEF_CA        Label ca;  #  define DEF_CA        Label ca;
 #  define NEXT_P1       do {ip++; ca=*cfa;} while(0)  #  define NEXT_P1       do {ip++; ca=*cfa;} while(0)
 #  define NEXT_P1_5     do {GOTO(ca);} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)  #  define EXEC1(XT)     ({DEF_CA cfa=(XT); ca=*cfa; ca;})
 #endif  #endif
   
 #if THREADING_SCHEME==8  #if THREADING_SCHEME==8
Line 441 Line 451
 #  define DEF_CA  #  define DEF_CA
 #  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)     do {cfa=(XT); GOTO(*cfa);} while(0)  #  define EXEC1(XT)     ({cfa=(XT); *cfa;})
 #endif  #endif
   
 /* indirect threaded */  /* indirect threaded */

Removed from v.1.29  
changed lines
  Added in v.1.32


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