Diff for /gforth/engine/engine.c between versions 1.80 and 1.86

version 1.80, 2005/07/31 20:27:41 version 1.86, 2005/12/27 09:35:45
Line 71 Line 71
 #include <callback.h>  #include <callback.h>
 #endif  #endif
   
   #ifdef HAS_LIBFFI
   #include <ffi.h>
   #endif
   
 #ifndef SEEK_SET  #ifndef SEEK_SET
 /* should be defined in stdio.h, but some systems don't have it */  /* should be defined in stdio.h, but some systems don't have it */
 #define SEEK_SET 0  #define SEEK_SET 0
Line 175  extern int gforth_memcmp(const char * s1 Line 179  extern int gforth_memcmp(const char * s1
 #ifndef speREG  #ifndef speREG
 #define speREG  #define speREG
 #endif  #endif
   #ifndef spfREG
   #define spfREG
   #endif
   #ifndef spgREG
   #define spgREG
   #endif
   #ifndef sphREG
   #define sphREG
   #endif
 #ifndef FTOSREG  #ifndef FTOSREG
 #define FTOSREG  #define FTOSREG
 #endif  #endif
Line 228  extern int gforth_memcmp(const char * s1 Line 241  extern int gforth_memcmp(const char * s1
       }        }
 #endif  #endif
   
 #ifdef HAS_FFCALL  #if defined(HAS_FFCALL) || defined(HAS_LIBFFI)
 #define SAVE_REGS IF_fpTOS(fp[0]=fpTOS); SP=sp; FP=fp; RP=rp; LP=lp;  #define SAVE_REGS IF_fpTOS(fp[0]=fpTOS); SP=sp; FP=fp; RP=rp; LP=lp;
 #define REST_REGS sp=SP; fp=FP; rp=RP; lp=LP; IF_fpTOS(fpTOS=fp[0]);  #define REST_REGS sp=SP; fp=FP; rp=RP; lp=LP; IF_fpTOS(fpTOS=fp[0]);
 #endif  #endif
Line 237  extern int gforth_memcmp(const char * s1 Line 250  extern int gforth_memcmp(const char * s1
 /* normal engine */  /* normal engine */
 #define VARIANT(v)      (v)  #define VARIANT(v)      (v)
 #define JUMP(target)    goto I_noop  #define JUMP(target)    goto I_noop
 #define LABEL(name) H_##name: I_##name:  #define LABEL(name) H_##name: asm(""); I_##name:
   
 #elif ENGINE==2  #elif ENGINE==2
 /* variant with padding between VM instructions for finding out  /* variant with padding between VM instructions for finding out
Line 246  extern int gforth_memcmp(const char * s1 Line 259  extern int gforth_memcmp(const char * s1
 #define VARIANT(v)      (v)  #define VARIANT(v)      (v)
 #define JUMP(target)    goto I_noop  #define JUMP(target)    goto I_noop
 #define LABEL(name) H_##name: SKIP16; I_##name:  #define LABEL(name) H_##name: SKIP16; I_##name:
 #define IN_ENGINE2  
   
 #elif ENGINE==3  #elif ENGINE==3
 /* variant with different immediate arguments for finding out  /* variant with different immediate arguments for finding out
Line 254  extern int gforth_memcmp(const char * s1 Line 266  extern int gforth_memcmp(const char * s1
 #define engine engine3  #define engine engine3
 #define VARIANT(v)      ((v)^0xffffffff)  #define VARIANT(v)      ((v)^0xffffffff)
 #define JUMP(target)    goto K_lit  #define JUMP(target)    goto K_lit
 #define LABEL(name) H_##name: I_##name:  #define LABEL(name) H_##name: asm(""); I_##name:
 #else  #else
 #error illegal ENGINE value  #error illegal ENGINE value
 #endif /* ENGINE */  #endif /* ENGINE */
Line 291  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 303  Label *engine(Xt *ip0, Cell *sp0, Cell *
   long long llrv;    long long llrv;
   void * prv;    void * prv;
 #endif  #endif
   #ifdef HAS_LIBFFI
     extern void * ritem;
     extern void ** clist;
     extern void ffi_callback(ffi_cif * cif, void * resp, void ** args, Xt * ip);
   #endif
   register Address up UPREG = UP;    register Address up UPREG = UP;
   register Cell MAYBE_UNUSED spTOS TOSREG;    register Cell MAYBE_UNUSED spTOS TOSREG;
   register Cell MAYBE_UNUSED spb spbREG;    register Cell MAYBE_UNUSED spb spbREG;
   register Cell MAYBE_UNUSED spc spcREG;    register Cell MAYBE_UNUSED spc spcREG;
   register Cell MAYBE_UNUSED spd spdREG;    register Cell MAYBE_UNUSED spd spdREG;
   register Cell MAYBE_UNUSED spe speREG;    register Cell MAYBE_UNUSED spe speREG;
     register Cell MAYBE_UNUSED spf speREG;
     register Cell MAYBE_UNUSED spg speREG;
     register Cell MAYBE_UNUSED sph speREG;
   IF_fpTOS(register Float fpTOS FTOSREG;)    IF_fpTOS(register Float fpTOS FTOSREG;)
 #if defined(DOUBLY_INDIRECT)  #if defined(DOUBLY_INDIRECT)
   static Label *symbols;    static Label *symbols;
Line 358  Label *engine(Xt *ip0, Cell *sp0, Cell * Line 378  Label *engine(Xt *ip0, Cell *sp0, Cell *
     return symbols;      return symbols;
   }    }
   
 #if STACK_CACHE_DEFAULT>0  #if !(defined(GFORTH_DEBUGGING) || defined(INDIRECT_THREADED) || defined(DOUBLY_INDIRECT) || defined(VM_PROFILING))
   sp += STACK_CACHE_DEFAULT-1;    sp += STACK_CACHE_DEFAULT-1;
 #endif    /* some of those registers are dead, but its simpler to initialize them all */  spTOS = sp[0];
   
 #if STACK_CACHE_DEFAULT>0  
   spTOS = sp[0];  
 #endif  
 #if STACK_CACHE_DEFAULT>1  
   spb = sp[-1];    spb = sp[-1];
 #endif  
 #if STACK_CACHE_DEFAULT>2  
   spc = sp[-2];    spc = sp[-2];
 #endif  
 #if STACK_CACHE_DEFAULT>3  
   spd = sp[-3];    spd = sp[-3];
 #endif  
 #if STACK_CACHE_DEFAULT>4  
   spe = sp[-4];    spe = sp[-4];
     spf = sp[-5];
     spg = sp[-6];
     sph = sp[-7];
 #endif  #endif
   
   IF_fpTOS(fpTOS = fp[0]);    IF_fpTOS(fpTOS = fp[0]);

Removed from v.1.80  
changed lines
  Added in v.1.86


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