version 1.30, 2005/01/23 13:56:13
|
version 1.33, 2005/01/26 21:24:16
|
Line 102
|
Line 102
|
|
|
#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);} 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; \ |
#define FIRST_NEXT_P2 NEXT_P1_5; GOTO_ALIGN; \ |
before_goto: goto *real_ca; after_goto: |
before_goto: goto *real_ca; after_goto: |
#define FIRST_NEXT DEF_CA NEXT_P1; FIRST_NEXT_P2; |
#define FIRST_NEXT do {DEF_CA NEXT_P1; FIRST_NEXT_P2;} while(0) |
#define IPTOS NEXT_INST |
#define IPTOS NEXT_INST |
|
|
|
|
Line 128 before_goto: goto *real_ca; after_goto:
|
Line 129 before_goto: goto *real_ca; after_goto:
|
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 143 before_goto: goto *real_ca; after_goto:
|
Line 144 before_goto: goto *real_ca; after_goto:
|
#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 186 before_goto: goto *real_ca; after_goto:
|
Line 190 before_goto: goto *real_ca; after_goto:
|
# 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 200 before_goto: goto *real_ca; after_goto:
|
Line 204 before_goto: goto *real_ca; after_goto:
|
# 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 215 before_goto: goto *real_ca; after_goto:
|
Line 219 before_goto: goto *real_ca; after_goto:
|
# 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 229 before_goto: goto *real_ca; after_goto:
|
Line 233 before_goto: goto *real_ca; after_goto:
|
# 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 244 before_goto: goto *real_ca; after_goto:
|
Line 248 before_goto: goto *real_ca; after_goto:
|
# 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 258 before_goto: goto *real_ca; after_goto:
|
Line 262 before_goto: goto *real_ca; after_goto:
|
# 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 273 before_goto: goto *real_ca; after_goto:
|
Line 277 before_goto: goto *real_ca; after_goto:
|
# 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 287 before_goto: goto *real_ca; after_goto:
|
Line 291 before_goto: goto *real_ca; after_goto:
|
# 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 304 before_goto: goto *real_ca; after_goto:
|
Line 308 before_goto: goto *real_ca; after_goto:
|
# 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 319 before_goto: goto *real_ca; after_goto:
|
Line 323 before_goto: goto *real_ca; after_goto:
|
# 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 342 before_goto: goto *real_ca; after_goto:
|
Line 346 before_goto: goto *real_ca; after_goto:
|
# 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 357 before_goto: goto *real_ca; after_goto:
|
Line 361 before_goto: goto *real_ca; after_goto:
|
# 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 372 before_goto: goto *real_ca; after_goto:
|
Line 376 before_goto: goto *real_ca; after_goto:
|
# 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 387 before_goto: goto *real_ca; after_goto:
|
Line 391 before_goto: goto *real_ca; after_goto:
|
# 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 403 before_goto: goto *real_ca; after_goto:
|
Line 407 before_goto: goto *real_ca; after_goto:
|
# 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 418 before_goto: goto *real_ca; after_goto:
|
Line 422 before_goto: goto *real_ca; after_goto:
|
# 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 433 before_goto: goto *real_ca; after_goto:
|
Line 437 before_goto: goto *real_ca; after_goto:
|
# 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 447 before_goto: goto *real_ca; after_goto:
|
Line 451 before_goto: goto *real_ca; after_goto:
|
# 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 */ |