Diff for /gforth/Attic/engine.c between versions 1.4 and 1.6

version 1.4, 1994/05/05 15:46:42 version 1.6, 1994/05/18 17:29:52
Line 13 Line 13
 #include <assert.h>  #include <assert.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <time.h>  #include <time.h>
   #include <sys/time.h>
 #include "forth.h"  #include "forth.h"
 #include "io.h"  #include "io.h"
 extern unlink(char *);  #ifndef unlink
 extern ftruncate(int, int);          extern unlink(char *);
   #ifndef ftruncate
           extern ftruncate(int, int);
 typedef union {  typedef union {
   struct {    struct {
Line 72  typedef struct F83Name { Line 77  typedef struct F83Name {
 #define FTOS (fp[0])  #define FTOS (fp[0])
 #endif  #endif
 #define CA_DODOES       (symbols[DODOES])  
 int emitcounter;  int emitcounter;
 #define NULLC '\0'  #define NULLC '\0'
Line 86  int emitcounter; Line 87  int emitcounter;
 static char* fileattr[6]={"r","rb","r+","r+b","w+","w+b"};  static char* fileattr[6]={"r","rb","r+","r+b","w+","w+b"};
 Label *engine(Xt *ip, Cell *sp, Cell *rp, Float *fp)  #if ~defined(select) && defined(DOS)
   /* select replacement for DOS computers for ms only */
   void select(int n, int a, int b, int c, struct timeval * timeout)
      struct timeval time1;
      struct timeval time2;
      struct timezone zone1;
      time1.tv_sec += timeout->tv_sec;
      time1.tv_usec += timeout->tv_usec;
      while(time1.tv_usec >= 1000000)
           time1.tv_usec -= 1000000;
      while(time2.tv_usec < time1.tv_usec || time2.tv_sec < time1.tv_sec);
   Label *engine(Xt *ip, Cell *sp, Cell *rp, Float *fp, Address lp)
 /* executes code at ip, if ip!=NULL  /* executes code at ip, if ip!=NULL
    returns array of machine code labels (for use in a loader), if ip==NULL     returns array of machine code labels (for use in a loader), if ip==NULL
    This is very preliminary, as the bootstrap architecture is not yet decided  
 */  */
 {  {
   Xt cfa;    Xt cfa;
   Address lp=NULL;  
   Address up=NULL;    Address up=NULL;
   static Label symbols[]= {    static Label symbols[]= {
     &&docol,      &&docol,
Line 101  Label *engine(Xt *ip, Cell *sp, Cell *rp Line 124  Label *engine(Xt *ip, Cell *sp, Cell *rp
     &&dovar,      &&dovar,
     &&douser,      &&douser,
     &&dodoes,      &&dodoes,
     &&docol,  /* dummy for does handler address */      &&dodoes,  /* dummy for does handler address */
 #include "prim_labels.i"  #include "prim_labels.i"
   };    };
   IF_TOS(register Cell TOS;)    IF_TOS(register Cell TOS;)
Line 120  Label *engine(Xt *ip, Cell *sp, Cell *rp Line 143  Label *engine(Xt *ip, Cell *sp, Cell *rp
  docol:   docol:
 #ifdef DEBUG  #ifdef DEBUG
   printf("col: %x\n",(Cell)PFA1(cfa));    printf("%08x: col: %08x\n",(Cell)ip,(Cell)PFA1(cfa));
 #endif  #endif
 #ifdef undefined  #ifdef undefined
   /* this is the simple version */    /* this is the simple version */
Line 144  Label *engine(Xt *ip, Cell *sp, Cell *rp Line 167  Label *engine(Xt *ip, Cell *sp, Cell *rp
  docon:   docon:
 #ifdef DEBUG  #ifdef DEBUG
   printf("con: %x\n",*(Cell*)PFA1(cfa));    printf("%08x: con: %08x\n",(Cell)ip,*(Cell*)PFA1(cfa));
 #endif  #endif
 #ifdef USE_TOS  #ifdef USE_TOS
   *sp-- = TOS;    *sp-- = TOS;
Line 156  Label *engine(Xt *ip, Cell *sp, Cell *rp Line 179  Label *engine(Xt *ip, Cell *sp, Cell *rp
  dovar:   dovar:
 #ifdef DEBUG  #ifdef DEBUG
   printf("var: %x\n",(Cell)PFA1(cfa));    printf("%08x: var: %08x\n",(Cell)ip,(Cell)PFA1(cfa));
 #endif  #endif
 #ifdef USE_TOS  #ifdef USE_TOS
   *sp-- = TOS;    *sp-- = TOS;
Line 170  Label *engine(Xt *ip, Cell *sp, Cell *rp Line 193  Label *engine(Xt *ip, Cell *sp, Cell *rp
  douser:   douser:
 #ifdef DEBUG  #ifdef DEBUG
   printf("user: %x\n",(Cell)PFA1(cfa));    printf("%08x: user: %08x\n",(Cell)ip,(Cell)PFA1(cfa));
 #endif  #endif
 #ifdef USE_TOS  #ifdef USE_TOS
   *sp-- = TOS;    *sp-- = TOS;
   TOS = up+*(Cell*)PFA1(cfa);    TOS = (Cell)(up+*(Cell*)PFA1(cfa));
 #else  #else
   *--sp = up+*(Cell*)PFA1(cfa);    *--sp = (Cell)(up+*(Cell*)PFA1(cfa));
 #endif  #endif
   NEXT;    NEXT;
Line 199  Label *engine(Xt *ip, Cell *sp, Cell *rp Line 222  Label *engine(Xt *ip, Cell *sp, Cell *rp
      */       */
 #ifdef DEBUG  #ifdef DEBUG
   printf("does: %x\n",(Cell)PFA(cfa)); fflush(stdout);    printf("%08x/%08x: does: %08x\n",(Cell)ip,(Cell)cfa,*(Cell)PFA(cfa));
 #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 */

Removed from v.1.4  
changed lines
  Added in v.1.6

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