version 1.13, 1994/08/31 19:42:44
|
version 1.14, 1994/09/08 17:20:05
|
Line 41 typedef struct F83Name {
|
Line 41 typedef struct F83Name {
|
#define F83NAME_SMUDGE(np) (((np)->countetc & 0x40) != 0) |
#define F83NAME_SMUDGE(np) (((np)->countetc & 0x40) != 0) |
#define F83NAME_IMMEDIATE(np) (((np)->countetc & 0x20) != 0) |
#define F83NAME_IMMEDIATE(np) (((np)->countetc & 0x20) != 0) |
|
|
/* NEXT and NEXT1 are split into several parts to help scheduling */ |
/* NEXT and NEXT1 are split into several parts to help scheduling, |
|
unless CISC_NEXT is defined */ |
|
#ifdef CISC_NEXT |
|
#define NEXT1_P1 |
|
#define NEXT_P1 |
|
#define DEF_CA |
#ifdef DIRECT_THREADED |
#ifdef DIRECT_THREADED |
# define NEXT1_P1 |
#define NEXT1_P2 ({goto *cfa;}) |
# ifdef i386 |
|
# define NEXT1_P2 ({cfa=*ip++; goto *cfa;}) |
|
# else |
|
# define NEXT1_P2 ({goto *cfa;}) |
|
# endif |
|
# define DEF_CA |
|
#else |
#else |
# define NEXT1_P1 ({ca = *cfa;}) |
#define NEXT1_P2 ({goto **cfa;}) |
# define NEXT1_P2 ({goto *ca;}) |
#endif /* DIRECT_THREADED */ |
# define DEF_CA Label ca; |
#define NEXT_P2 ({cfa = *ip++; NEXT1_P2;}) |
#endif |
#else /* CISC_NEXT */ |
#if defined(i386) && defined(DIRECT_THREADED) |
#ifdef DIRECT_THREADED |
# define NEXT_P1 |
#define NEXT1_P1 |
# define NEXT1 ({goto *cfa;}) |
#define NEXT1_P2 ({goto *cfa;}) |
#else |
#define DEF_CA |
# define NEXT_P1 ({cfa = *ip++; NEXT1_P1;}) |
#else /* DIRECT_THREADED */ |
# define NEXT1 ({DEF_CA NEXT1_P1; NEXT1_P2;}) |
#define NEXT1_P1 ({ca = *cfa;}) |
#endif |
#define NEXT1_P2 ({goto *ca;}) |
|
#define DEF_CA Label ca; |
|
#endif /* DIRECT_THREADED */ |
|
#define NEXT_P1 ({cfa=*ip++; NEXT1_P1;}) |
|
#define NEXT_P2 NEXT1_P2 |
|
#endif /* CISC_NEXT */ |
|
|
#define NEXT ({DEF_CA NEXT_P1; NEXT1_P2;}) |
#define NEXT1 ({DEF_CA NEXT1_P1; NEXT1_P2;}) |
|
#define NEXT ({DEF_CA NEXT_P1; NEXT_P2;}) |
|
|
#ifdef USE_TOS |
#ifdef USE_TOS |
#define IF_TOS(x) x |
#define IF_TOS(x) x |
Line 82 typedef struct F83Name {
|
Line 87 typedef struct F83Name {
|
int emitcounter; |
int emitcounter; |
#define NULLC '\0' |
#define NULLC '\0' |
|
|
#ifdef copycstr |
char *cstr(Char *from, UCell size, int clear) |
# define cstr(to,from,size)\ |
/* if clear is true, scratch can be reused, otherwise we want more of |
{ memcpy(to,from,size);\ |
the same */ |
to[size]=NULLC;} |
{ |
#else |
static char *scratch=NULL; |
char scratch[1024]; |
static unsigned scratchsize=0; |
int soffset; |
static char *nextscratch; |
# define cstr(from,size) \ |
char *oldnextscratch; |
({ char * to = scratch; \ |
|
memcpy(to,from,size); \ |
if (clear) |
to[size] = NULLC; \ |
nextscratch=scratch; |
soffset = size+1; \ |
if (scratch==NULL) { |
to; \ |
scratch=malloc(size+1); |
}) |
nextscratch=scratch; |
# define cstr1(from,size) \ |
scratchsize=size; |
({ char * to = scratch+soffset; \ |
} |
memcpy(to,from,size); \ |
else if (nextscratch+size>scratch+scratchsize) { |
to[size] = NULLC; \ |
char *oldscratch=scratch; |
soffset += size+1; \ |
scratch = realloc(scratch, (nextscratch-scratch)+size+1); |
to; \ |
nextscratch=scratch+(nextscratch-oldscratch); |
}) |
scratchsize=size; |
#endif |
} |
|
memcpy(nextscratch,from,size); |
|
nextscratch[size]='\0'; |
|
oldnextscratch = nextscratch; |
|
nextscratch += size+1; |
|
return oldnextscratch; |
|
} |
|
|
#define NEWLINE '\n' |
#define NEWLINE '\n' |
|
|