version 1.4, 1996/02/19 18:57:27
|
version 1.5, 1997/03/04 17:49:56
|
Line 95
|
Line 95
|
# define CFA_NEXT |
# define CFA_NEXT |
#endif |
#endif |
|
|
|
#ifdef DOUBLY_INDIRECT |
|
# define NEXT_P0 ({cfa=*ip;}) |
|
# define IP (ip) |
|
# define NEXT_INST (cfa) |
|
# define INC_IP(const_inc) ({cfa=IP[const_inc]; ip+=(const_inc);}) |
|
# define DEF_CA Label ca; |
|
# define NEXT_P1 ({ip++; ca=**cfa;}) |
|
# define NEXT_P2 ({goto *ca;}) |
|
# define EXEC(XT) ({DEF_CA cfa=(XT); ca=**cfa; goto *ca;}) |
|
# define NEXT1_P1 ({ca = **cfa;}) |
|
# define NEXT1_P2 ({goto *ca;}) |
|
|
|
#else /* !defined(DOUBLY_INDIRECT) */ |
|
|
#if defined(DIRECT_THREADED) && defined(AUTO_INCREMENT)\ |
#if defined(DIRECT_THREADED) && defined(AUTO_INCREMENT)\ |
&& defined(LONG_LATENCY) && defined(CFA_NEXT) |
&& defined(LONG_LATENCY) && defined(CFA_NEXT) |
#warning scheme 1 |
#warning scheme 1 |
Line 309
|
Line 323
|
# define EXEC(XT) ({DEF_CA cfa=(XT); ca=*cfa; goto *ca;}) |
# define EXEC(XT) ({DEF_CA cfa=(XT); ca=*cfa; goto *ca;}) |
#endif |
#endif |
|
|
#define NEXT ({DEF_CA NEXT_P1; NEXT_P2;}) |
|
|
|
#if defined(CISC_NEXT) && !defined(LONG_LATENCY) |
#if defined(CISC_NEXT) && !defined(LONG_LATENCY) |
# define NEXT1_P1 |
# define NEXT1_P1 |
# ifdef DIRECT_THREADED |
# ifdef DIRECT_THREADED |
Line 318
|
Line 330
|
# else |
# else |
# define NEXT1_P2 ({goto **cfa;}) |
# define NEXT1_P2 ({goto **cfa;}) |
# endif /* DIRECT_THREADED */ |
# endif /* DIRECT_THREADED */ |
#else /* defined(CISC_NEXT) && !defined(LONG_LATENCY) */ |
#else /* !defined(CISC_NEXT) || defined(LONG_LATENCY) */ |
# ifdef DIRECT_THREADED |
# ifdef DIRECT_THREADED |
# define NEXT1_P1 |
# define NEXT1_P1 |
# define NEXT1_P2 ({goto *cfa;}) |
# define NEXT1_P2 ({goto *cfa;}) |
# else /* DIRECT_THREADED */ |
# else /* !DIRECT_THREADED */ |
# define NEXT1_P1 ({ca = *cfa;}) |
# define NEXT1_P1 ({ca = *cfa;}) |
# define NEXT1_P2 ({goto *ca;}) |
# define NEXT1_P2 ({goto *ca;}) |
# endif /* DIRECT_THREADED */ |
# endif /* !DIRECT_THREADED */ |
#endif |
#endif /* !defined(CISC_NEXT) || defined(LONG_LATENCY) */ |
|
|
|
#endif /* !defined(DOUBLY_INDIRECT) */ |
|
|
|
#define NEXT ({DEF_CA NEXT_P1; NEXT_P2;}) |
|
|