[gforth] / gforth / Attic / engine.c  

gforth: gforth/Attic/engine.c

Diff for /gforth/Attic/engine.c between version 1.3 and 1.4

version 1.3, Tue May 3 19:10:34 1994 UTC version 1.4, Thu May 5 15:46:42 1994 UTC
Line 47 
Line 47 
 #ifdef DIRECT_THREADED  #ifdef DIRECT_THREADED
 #define NEXT1_P1  #define NEXT1_P1
 #define NEXT1_P2 ({goto *cfa;})  #define NEXT1_P2 ({goto *cfa;})
   #       define DEF_CA
 #else  #else
 #define NEXT1_P1 ({ca = *cfa;})  #define NEXT1_P1 ({ca = *cfa;})
 #define NEXT1_P2 ({goto *ca;})  #define NEXT1_P2 ({goto *ca;})
   #       define DEF_CA   Label ca;
 #endif  #endif
 #define NEXT_P1 ({cfa = *ip++; NEXT1_P1;})  #define NEXT_P1 ({cfa = *ip++; NEXT1_P1;})
   
 #define NEXT1 ({Label ca; NEXT1_P1; NEXT1_P2;})  #define NEXT1 ({DEF_CA NEXT1_P1; NEXT1_P2;})
 #define NEXT ({Label ca; NEXT_P1; NEXT1_P2;})  #define NEXT ({DEF_CA NEXT_P1; NEXT1_P2;})
   
 #ifdef USE_TOS  #ifdef USE_TOS
 #define IF_TOS(x) x  #define IF_TOS(x) x
Line 70 
Line 72 
 #define FTOS (fp[0])  #define FTOS (fp[0])
 #endif  #endif
   
 #define DODOES  (symbols[3])  /*
   #define CA_DODOES       (symbols[DODOES])
   */
   
 int emitcounter;  int emitcounter;
 #define NULLC '\0'  #define NULLC '\0'
Line 90 
Line 94 
 {  {
   Xt cfa;    Xt cfa;
   Address lp=NULL;    Address lp=NULL;
     Address up=NULL;
   static Label symbols[]= {    static Label symbols[]= {
     &&docol,      &&docol,
     &&docon,      &&docon,
     &&dovar,      &&dovar,
       &&douser,
     &&dodoes,      &&dodoes,
       &&docol,  /* dummy for does handler address */
 #include "prim_labels.i"  #include "prim_labels.i"
   };    };
 #ifndef DIRECT_THREADED  
 /*  Label ca; */  
 #endif  
   IF_TOS(register Cell TOS;)    IF_TOS(register Cell TOS;)
   IF_FTOS(Float FTOS;)    IF_FTOS(Float FTOS;)
 #ifdef CPU_DEP  #ifdef CPU_DEP
Line 129 
Line 133 
      problems with code fields employing calls and delay slots       problems with code fields employing calls and delay slots
   */    */
   {    {
     Label ca;      DEF_CA
     Xt *current_ip = (Xt *)PFA1(cfa);      Xt *current_ip = (Xt *)PFA1(cfa);
     cfa = *current_ip;      cfa = *current_ip;
     NEXT1_P1;      NEXT1_P1;
Line 164 
Line 168 
   
   /* !! user? */    /* !! user? */
   
    douser:
   #ifdef DEBUG
     printf("user: %x\n",(Cell)PFA1(cfa));
   #endif
   #ifdef USE_TOS
     *sp-- = TOS;
     TOS = up+*(Cell*)PFA1(cfa);
   #else
     *--sp = up+*(Cell*)PFA1(cfa);
   #endif
     NEXT;
   
  dodoes:   dodoes:
   /* this assumes the following structure:    /* this assumes the following structure:
      defining-word:       defining-word:
Line 183 
Line 199 
   
      */       */
 #ifdef DEBUG  #ifdef DEBUG
   printf("does: %x\n",(Cell)PFA(cfa));    printf("does: %x\n",(Cell)PFA(cfa)); fflush(stdout);
 #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 */


Generate output suitable for use with a patch program
Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help