Diff for /gforth/engine/engine.c between versions 1.23 and 1.27

version 1.23, 2000/09/23 15:47:07 version 1.27, 2001/02/24 13:44:39
Line 72  struct F83Name { Line 72  struct F83Name {
   char          name[0];    char          name[0];
 };  };
   
 /* are macros for setting necessary? */  
 #define F83NAME_COUNT(np)       ((np)->countetc & 0x1f)  #define F83NAME_COUNT(np)       ((np)->countetc & 0x1f)
 #define F83NAME_SMUDGE(np)      (((np)->countetc & 0x40) != 0)  
 #define F83NAME_IMMEDIATE(np)   (((np)->countetc & 0x20) != 0)  struct Longname {
     struct Longname *next;  /* the link field for old hands */
     Cell          countetc;
     char          name[0];
   };
   
   #define LONGNAME_COUNT(np)      ((np)->countetc & (((~((UCell)0))<<3)>>3))
   
 Cell *SP;  Cell *SP;
 Float *FP;  Float *FP;
Line 205  static int ufileattr[6]= { Line 210  static int ufileattr[6]= {
   O_WRONLY|O_BINARY, O_WRONLY|O_BINARY };    O_WRONLY|O_BINARY, O_WRONLY|O_BINARY };
 #endif  #endif
   
   /* conversion on fetch */
   
   #define vm_Cell2f(x)            ((Bool)(x))
   #define vm_Cell2c(x)            ((Char)(x))
   #define vm_Cell2n(x)            ((Cell)x)
   #define vm_Cell2w(x)            ((Cell)x)
   #define vm_Cell2u(x)            ((UCell)(x))
   #define vm_Cell2a_(x)           ((Cell *)(x))
   #define vm_Cell2c_(x)           ((Char *)(x))
   #define vm_Cell2f_(x)           ((Float *)(x))
   #define vm_Cell2df_(x)          ((DFloat *)(x))
   #define vm_Cell2sf_(x)          ((SFloat *)(x))
   #define vm_Cell2xt(x)           ((Xt)(x))
   #define vm_Cell2f83name(x)      ((struct F83Name *)(x))
   #define vm_Cell2longname(x)     ((struct Longname *)(x))
   #define vm_Float2r(x)   (x)
   
   /* conversion on store */
   
   #define vm_f2Cell(x)            ((Cell)(x))
   #define vm_c2Cell(x)            ((Cell)(x))
   #define vm_n2Cell(x)            ((Cell)(x))
   #define vm_w2Cell(x)            ((Cell)(x))
   #define vm_u2Cell(x)            ((Cell)(x))
   #define vm_a_2Cell(x)           ((Cell)(x))
   #define vm_c_2Cell(x)           ((Cell)(x))
   #define vm_f_2Cell(x)           ((Cell)(x))
   #define vm_df_2Cell(x)          ((Cell)(x))
   #define vm_sf_2Cell(x)          ((Cell)(x))
   #define vm_xt2Cell(x)           ((Cell)(x))
   #define vm_f83name2Cell(x)      ((Cell)(x))
   #define vm_longname2Cell(x)     ((Cell)(x))
   #define vm_r2Float(x)   (x)
   
 /* if machine.h has not defined explicit registers, define them as implicit */  /* if machine.h has not defined explicit registers, define them as implicit */
 #ifndef IPREG  #ifndef IPREG
 #define IPREG  #define IPREG
Line 273  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 312  Label *engine(Xt *ip0, Cell *sp0, Cell *
   MORE_VARS    MORE_VARS
 #endif  #endif
   register Address up UPREG = UP;    register Address up UPREG = UP;
   IF_TOS(register Cell TOS TOSREG;)    IF_spTOS(register Cell spTOS TOSREG;)
   IF_FTOS(register Float FTOS FTOSREG;)    IF_fpTOS(register Float fpTOS FTOSREG;)
 #if defined(DOUBLY_INDIRECT)  #if defined(DOUBLY_INDIRECT)
   static Label *symbols;    static Label *symbols;
   static void *routines[]= {    static void *routines[]= {
   #define MAX_SYMBOLS (sizeof(routines)/sizeof(routines[0]))
 #else /* !defined(DOUBLY_INDIRECT) */  #else /* !defined(DOUBLY_INDIRECT) */
   static Label symbols[]= {    static Label symbols[]= {
   #define MAX_SYMBOLS (sizeof(symbols)/sizeof(symbols[0]))
 #endif /* !defined(DOUBLY_INDIRECT) */  #endif /* !defined(DOUBLY_INDIRECT) */
     (Label)&&docol,      (Label)&&docol,
     (Label)&&docon,      (Label)&&docon,
Line 308  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 349  Label *engine(Xt *ip0, Cell *sp0, Cell *
   
   if (ip == NULL) {    if (ip == NULL) {
 #if defined(DOUBLY_INDIRECT)  #if defined(DOUBLY_INDIRECT)
 #define MAX_SYMBOLS (sizeof(routines)/sizeof(routines[0]))  
 #define CODE_OFFSET (22*sizeof(Cell))  #define CODE_OFFSET (22*sizeof(Cell))
     int i;      int i;
     Cell code_offset = offset_image? CODE_OFFSET : 0;      Cell code_offset = offset_image? CODE_OFFSET : 0;
Line 327  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 367  Label *engine(Xt *ip0, Cell *sp0, Cell *
     return symbols;      return symbols;
   }    }
   
   IF_TOS(TOS = sp[0]);    IF_spTOS(spTOS = sp[0]);
   IF_FTOS(FTOS = fp[0]);    IF_fpTOS(fpTOS = fp[0]);
 /*  prep_terminal(); */  /*  prep_terminal(); */
   SET_IP(ip);    SET_IP(ip);
   NEXT;    NEXT;
Line 369  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 409  Label *engine(Xt *ip0, Cell *sp0, Cell *
     fprintf(stderr,"%08lx: con: %08lx\n",(Cell)ip,*(Cell*)PFA1(cfa));      fprintf(stderr,"%08lx: con: %08lx\n",(Cell)ip,*(Cell*)PFA1(cfa));
 #endif  #endif
 #ifdef USE_TOS  #ifdef USE_TOS
     *sp-- = TOS;      *sp-- = spTOS;
     TOS = *(Cell *)PFA1(cfa);      spTOS = *(Cell *)PFA1(cfa);
 #else  #else
     *--sp = *(Cell *)PFA1(cfa);      *--sp = *(Cell *)PFA1(cfa);
 #endif  #endif
Line 385  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 425  Label *engine(Xt *ip0, Cell *sp0, Cell *
     fprintf(stderr,"%08lx: var: %08lx\n",(Cell)ip,(Cell)PFA1(cfa));      fprintf(stderr,"%08lx: var: %08lx\n",(Cell)ip,(Cell)PFA1(cfa));
 #endif  #endif
 #ifdef USE_TOS  #ifdef USE_TOS
     *sp-- = TOS;      *sp-- = spTOS;
     TOS = (Cell)PFA1(cfa);      spTOS = (Cell)PFA1(cfa);
 #else  #else
     *--sp = (Cell)PFA1(cfa);      *--sp = (Cell)PFA1(cfa);
 #endif  #endif
Line 401  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 441  Label *engine(Xt *ip0, Cell *sp0, Cell *
     fprintf(stderr,"%08lx: user: %08lx\n",(Cell)ip,(Cell)PFA1(cfa));      fprintf(stderr,"%08lx: user: %08lx\n",(Cell)ip,(Cell)PFA1(cfa));
 #endif  #endif
 #ifdef USE_TOS  #ifdef USE_TOS
     *sp-- = TOS;      *sp-- = spTOS;
     TOS = (Cell)(up+*(Cell*)PFA1(cfa));      spTOS = (Cell)(up+*(Cell*)PFA1(cfa));
 #else  #else
     *--sp = (Cell)(up+*(Cell*)PFA1(cfa));      *--sp = (Cell)(up+*(Cell*)PFA1(cfa));
 #endif  #endif
Line 425  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 465  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);      spTOS += *(Cell*)PFA1(cfa);
   }    }
   NEXT_P0;    NEXT_P0;
   NEXT;    NEXT;
Line 459  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 499  Label *engine(Xt *ip0, Cell *sp0, Cell *
     *--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 */
 #ifdef USE_TOS  #ifdef USE_TOS
     *sp-- = TOS;      *sp-- = spTOS;
     TOS = (Cell)PFA(cfa);      spTOS = (Cell)PFA(cfa);
 #else  #else
     *--sp = (Cell)PFA(cfa);      *--sp = (Cell)PFA(cfa);
 #endif  #endif
     SET_IP(DOES_CODE1(cfa));      SET_IP(DOES_CODE1(cfa));
     /*    fprintf(stderr,"TOS = %08lx, IP=%08lx\n", TOS, IP);*/      /*    fprintf(stderr,"TOS = %08lx, IP=%08lx\n", spTOS, IP);*/
   }    }
   NEXT;    NEXT;
   

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


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