version 1.10, 1999/01/08 16:58:31
|
version 1.11, 1999/02/06 22:28:24
|
Line 242 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 242 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
#ifdef CFA_NEXT |
#ifdef CFA_NEXT |
register Xt cfa CFAREG; |
register Xt cfa CFAREG; |
#endif |
#endif |
|
#ifdef MORE_VARS |
|
MORE_VARS |
|
#endif |
register Address up UPREG = UP; |
register Address up UPREG = UP; |
IF_TOS(register Cell TOS TOSREG;) |
IF_TOS(register Cell TOS TOSREG;) |
IF_FTOS(register Float FTOS FTOSREG;) |
IF_FTOS(register Float FTOS FTOSREG;) |
Line 300 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 303 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
IF_TOS(TOS = sp[0]); |
IF_TOS(TOS = sp[0]); |
IF_FTOS(FTOS = fp[0]); |
IF_FTOS(FTOS = fp[0]); |
/* prep_terminal(); */ |
/* prep_terminal(); */ |
NEXT_P0; |
SET_IP(ip); |
NEXT; |
NEXT; |
|
|
|
|
#ifdef CPU_DEP3 |
#ifdef CPU_DEP3 |
CPU_DEP3 |
CPU_DEP3 |
#endif |
#endif |
Line 316 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 320 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
#ifdef CISC_NEXT |
#ifdef CISC_NEXT |
/* this is the simple version */ |
/* this is the simple version */ |
*--rp = (Cell)ip; |
*--rp = (Cell)ip; |
ip = (Xt *)PFA1(cfa); |
SET_IP((Xt *)PFA1(cfa)); |
NEXT_P0; |
|
NEXT; |
NEXT; |
#else |
#else |
/* this one is important, so we help the compiler optimizing |
/* this one is important, so we help the compiler optimizing */ |
The following version may be better (for scheduling), but probably has |
|
problems with code fields employing calls and delay slots |
|
*/ |
|
{ |
{ |
DEF_CA |
DEF_CA |
Xt *current_ip = (Xt *)PFA1(cfa); |
rp[-1] = (Cell)ip; |
cfa = *current_ip; |
SET_IP((Xt *)PFA1(cfa)); |
NEXT1_P1; |
NEXT_P1; |
*--rp = (Cell)ip; |
rp--; |
ip = current_ip+1; |
NEXT_P2; |
NEXT1_P2; |
|
} |
} |
#endif |
#endif |
} |
} |
Line 399 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 398 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
#ifdef DEBUG |
#ifdef DEBUG |
fprintf(stderr,"%08lx: field: %08lx\n",(Cell)ip,(Cell)PFA1(cfa)); |
fprintf(stderr,"%08lx: field: %08lx\n",(Cell)ip,(Cell)PFA1(cfa)); |
#endif |
#endif |
TOS += *(Cell*)PFA1(cfa); |
TOS += *(Cell*)PFA1(cfa); |
} |
} |
NEXT_P0; |
NEXT_P0; |
NEXT; |
NEXT; |
Line 432 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 431 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
#endif |
#endif |
*--rp = (Cell)ip; |
*--rp = (Cell)ip; |
/* PFA1 might collide with DOES_CODE1 here, so we use PFA */ |
/* PFA1 might collide with DOES_CODE1 here, so we use PFA */ |
ip = DOES_CODE1(cfa); |
|
#ifdef USE_TOS |
#ifdef USE_TOS |
*sp-- = TOS; |
*sp-- = TOS; |
TOS = (Cell)PFA(cfa); |
TOS = (Cell)PFA(cfa); |
#else |
#else |
*--sp = (Cell)PFA(cfa); |
*--sp = (Cell)PFA(cfa); |
#endif |
#endif |
|
SET_IP(DOES_CODE1(cfa)); |
/* fprintf(stderr,"TOS = %08lx, IP=%08lx\n", TOS, IP);*/ |
/* fprintf(stderr,"TOS = %08lx, IP=%08lx\n", TOS, IP);*/ |
} |
} |
NEXT_P0; |
|
NEXT; |
NEXT; |
|
|
#include "prim.i" |
#include "prim.i" |