Diff for /gforth/engine/threaded.h between versions 1.27 and 1.31

version 1.27, 2004/12/31 13:24:03 version 1.31, 2005/01/23 21:54:09
Line 91 Line 91
   
 */  */
   
   #ifdef GCC_PR15242_WORKAROUND
   #define DO_GOTO goto before_goto
   #else
   #define DO_GOTO goto *real_ca
   #endif
   #ifndef GOTO_ALIGN
   #define GOTO_ALIGN
   #endif
   
   #define GOTO(target) do {(real_ca=(target));} while(0)
   #define NEXT_P2 do {NEXT_P1_5; DO_GOTO;} while(0)
   #define EXEC(XT) do { EXEC1(XT); DO_GOTO;} 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
   
   
 #ifdef DOUBLY_INDIRECT  #ifdef DOUBLY_INDIRECT
 # ifndef DEBUG_DITC  # ifndef DEBUG_DITC
 #  define DEBUG_DITC 0  #  define DEBUG_DITC 0
Line 108 Line 127
   if (DEBUG_DITC && (cfa<=vm_prims+DOESJUMP || cfa>=vm_prims+npriminfos)) \    if (DEBUG_DITC && (cfa<=vm_prims+DOESJUMP || cfa>=vm_prims+npriminfos)) \
     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_P2       do {ca=**cfa; goto *ca;} while(0)  #  define NEXT_P1_5     do {ca=**cfa; GOTO(ca);} while(0)
 #  define EXEC(XT)      do {DEF_CA cfa=(XT);\  #  define EXEC1(XT)     do {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; GOTO(ca);} while(0)
   
 #elif defined(NO_IP)  #elif defined(NO_IP)
   
Line 122 Line 141
 #define INC_IP(n)       ((void)0)  #define INC_IP(n)       ((void)0)
 #define DEF_CA  #define DEF_CA
 #define NEXT_P1  #define NEXT_P1
 #define NEXT_P2         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 EXEC(XT)        do {cfa=(XT); goto **cfa;} while(0)  #define EXEC1(XT)       do {cfa=(XT); goto **cfa;} while(0)
   
 #else  /* !defined(DOUBLY_INDIRECT) && !defined(NO_IP) */  #else  /* !defined(DOUBLY_INDIRECT) && !defined(NO_IP) */
   
Line 166 Line 185
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {goto *cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==2  #if THREADING_SCHEME==2
Line 180 Line 199
 #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {KILLS goto **(ip-1);} while(0)  #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
   
Line 195 Line 214
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       do {cfa=*ip++;} while(0)  #  define NEXT_P1       do {cfa=*ip++;} while(0)
 #  define NEXT_P2       do {goto *cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==4  #if THREADING_SCHEME==4
Line 209 Line 228
 #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {KILLS goto **(ip++);} while(0)  #  define NEXT_P1_5     do {KILLS GOTO(*(ip++));} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==5  #if THREADING_SCHEME==5
Line 224 Line 243
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P2       do {goto *cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==6  #if THREADING_SCHEME==6
Line 238 Line 257
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P2       do {KILLS goto **(ip-1);} while(0)  #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
   
Line 253 Line 272
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       do {cfa=*ip++;} while(0)  #  define NEXT_P1       do {cfa=*ip++;} while(0)
 #  define NEXT_P2       do {goto *cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==8  #if THREADING_SCHEME==8
Line 267 Line 286
 #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do { ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P2       do {KILLS goto **(ip-1);} while(0)  #  define NEXT_P1_5     do {KILLS GOTO(*(ip-1));} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==9  #if THREADING_SCHEME==9
Line 284 Line 303
 #  define INC_IP(const_inc)     do {next_cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {next_cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  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_P2       do {goto *cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #  define MORE_VARS     Xt next_cfa;  #  define MORE_VARS     Xt next_cfa;
 #endif  #endif
   
Line 299 Line 318
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {cfa=*ip++; goto *cfa;} while(0)  #  define NEXT_P1_5     do {cfa=*ip++; GOTO(cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 /* direct threaded */  /* direct threaded */
Line 322 Line 341
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {goto **cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==2  #if THREADING_SCHEME==2
Line 337 Line 356
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  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_P2       do {goto *ca;} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC(XT)      do {DEF_CA cfa=(XT); ca=*cfa; goto *ca;} while(0)  #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)
 #endif  #endif
   
   
Line 352 Line 371
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {cfa=*ip++; goto **cfa;} while(0)  #  define NEXT_P1_5     do {cfa=*ip++; GOTO(*cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==4  #if THREADING_SCHEME==4
Line 367 Line 386
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  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_P2       do {goto *ca;} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC(XT)      do {DEF_CA cfa=(XT); ca=*cfa; goto *ca;} while(0)  #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)
 #endif  #endif
   
   
Line 383 Line 402
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1       (ip++)  #  define NEXT_P1       (ip++)
 #  define NEXT_P2       do {goto **cfa;} while(0)  #  define NEXT_P1_5     do {GOTO(*cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==6  #if THREADING_SCHEME==6
Line 398 Line 417
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  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_P2       do {goto *ca;} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC(XT)      do {DEF_CA cfa=(XT); ca=*cfa; goto *ca;} while(0)  #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==7  #if THREADING_SCHEME==7
Line 413 Line 432
 #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {cfa=IP[const_inc]; ip+=(const_inc);} while(0)
 #  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_P2       do {goto *ca;} while(0)  #  define NEXT_P1_5     do {GOTO(ca);} while(0)
 #  define EXEC(XT)      do {DEF_CA cfa=(XT); ca=*cfa; goto *ca;} while(0)  #  define EXEC1(XT)     do {DEF_CA cfa=(XT); ca=*cfa; GOTO(ca);} while(0)
 #endif  #endif
   
 #if THREADING_SCHEME==8  #if THREADING_SCHEME==8
Line 427 Line 446
 #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)  #  define INC_IP(const_inc)     do {ip+=(const_inc);} while(0)
 #  define DEF_CA  #  define DEF_CA
 #  define NEXT_P1  #  define NEXT_P1
 #  define NEXT_P2       do {cfa=*ip++; goto **cfa;} while(0)  #  define NEXT_P1_5     do {cfa=*ip++; GOTO(*cfa);} while(0)
 #  define EXEC(XT)      do {cfa=(XT); goto **cfa;} while(0)  #  define EXEC1(XT)     do {cfa=(XT); GOTO(*cfa);} while(0)
 #endif  #endif
   
 /* indirect threaded */  /* indirect threaded */
Line 436 Line 455
   
 #endif /* !defined(DOUBLY_INDIRECT) && !defined(NO_IP) */  #endif /* !defined(DOUBLY_INDIRECT) && !defined(NO_IP) */
   
 #define NEXT do {DEF_CA NEXT_P1; NEXT_P2;} while(0)  
 #define IPTOS NEXT_INST  

Removed from v.1.27  
changed lines
  Added in v.1.31


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