[gforth] / gforth / engine / forth.h  

gforth: gforth/engine/forth.h

Diff for /gforth/engine/forth.h between version 1.103 and 1.123

version 1.103, Wed Oct 15 15:27:33 2008 UTC version 1.123, Sat May 26 10:20:01 2012 UTC
Line 1 
Line 1 
 /* common header file  /* common header file
   
   Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.    Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc.
   
   This file is part of Gforth.    This file is part of Gforth.
   
Line 100 
Line 100 
 #define DOFIELD 5  #define DOFIELD 5
 #define DOVAL   6  #define DOVAL   6
 #define DODOES  7  #define DODOES  7
 #define DOESJUMP        8  #define DOABICODE       8
   #define DOSEMIABICODE   9
 /* the size of the DOESJUMP, which resides between DOES> and the does-code */  #define DOER_MAX        9
 #define DOES_HANDLER_SIZE       (2*sizeof(Cell))  
   
 #include "machine.h"  #include "machine.h"
   
Line 111 
Line 110 
   
 typedef WYDE_TYPE Wyde;  typedef WYDE_TYPE Wyde;
 typedef TETRABYTE_TYPE Tetrabyte;  typedef TETRABYTE_TYPE Tetrabyte;
   typedef OCTABYTE_TYPE Octabyte;
 typedef unsigned WYDE_TYPE UWyde;  typedef unsigned WYDE_TYPE UWyde;
 typedef unsigned TETRABYTE_TYPE UTetrabyte;  typedef unsigned TETRABYTE_TYPE UTetrabyte;
   typedef unsigned OCTABYTE_TYPE UOctabyte;
   
 /* Forth data types */  /* Forth data types */
 /* Cell and UCell must be the same size as a pointer */  /* Cell and UCell must be the same size as a pointer */
Line 171 
Line 172 
   
 /* shifts by less than CELL_BITS */  /* shifts by less than CELL_BITS */
 #define DLSHIFT(d,u)  ({DCell _d=(d); UCell _u=(u); \  #define DLSHIFT(d,u)  ({DCell _d=(d); UCell _u=(u); \
                        (DCell){(_d.hi<<_u)|(_d.lo>>(CELL_BITS-_u)),_d.lo<<_u};})                         ((_u==0) ? \
                           _d : \
                           (DCell){(_d.hi<<_u)|(_d.lo>>(CELL_BITS-_u)), \
                                    _d.lo<<_u});})
   
 #define UDLSHIFT(ud,u) D2UD(DLSHIFT(UD2D(ud),u))  #define UDLSHIFT(ud,u) D2UD(DLSHIFT(UD2D(ud),u))
   
 #if SMALL_OFF_T  #if SMALL_OFF_T
Line 264 
Line 269 
    ca is the code address */     ca is the code address */
 #define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca))  #define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca))
 /* make a code field for a defining-word-defined word */  /* make a code field for a defining-word-defined word */
 #define MAKE_DOES_CF(cfa,does_code)  ({MAKE_CF(cfa,DOES_CA);    \  
                                        ((Cell *)cfa)[1] = (Cell)(does_code);})  
   
 #define CF(const)       (-const-2)  #define CF(const)       (-const-2)
   
Line 279 
Line 282 
 #define NO_DYNAMIC_DEFAULT 1  #define NO_DYNAMIC_DEFAULT 1
 #endif  #endif
   
   #ifndef CHECK_PRIM
   #define CHECK_PRIM(start,len) 0
   #endif
   
 #if defined(GFORTH_DEBUGGING) || defined(INDIRECT_THREADED) || defined(DOUBLY_INDIRECT) || defined(VM_PROFILING)  #if defined(GFORTH_DEBUGGING) || defined(INDIRECT_THREADED) || defined(DOUBLY_INDIRECT) || defined(VM_PROFILING)
 #define STACK_CACHE_DEFAULT 0  #define STACK_CACHE_DEFAULT 0
 #else  #else
Line 332 
Line 339 
   char          name[0];    char          name[0];
 };  };
   
 #define LONGNAME_COUNT(np)      ((np)->countetc & (((~((UCell)0))<<3)>>3))  #define LONGNAME_COUNT(np)      ((np)->countetc & (((~((UCell)0))<<4)>>4))
   
 struct Cellpair {  struct Cellpair {
   Cell n1;    Cell n1;
Line 356 
Line 363 
   Xt *sr_saved_ip;    Xt *sr_saved_ip;
   Cell *sr_rp;    Cell *sr_rp;
 } saved_regs;  } saved_regs;
 extern saved_regs saved_regs_v, *saved_regs_p;  extern saved_regs saved_regs_v;
   extern PER_THREAD saved_regs *saved_regs_p;
 #define saved_ip (saved_regs_p->sr_saved_ip)  #define saved_ip (saved_regs_p->sr_saved_ip)
 #define rp       (saved_regs_p->sr_rp)  #define rp       (saved_regs_p->sr_rp)
 /* for use in gforth_engine header */  /* for use in gforth_engine header */
Line 364 
Line 372 
 #define sr_proto , struct saved_regs *saved_regs_p0  #define sr_proto , struct saved_regs *saved_regs_p0
 #define sr_call  , saved_regs_p  #define sr_call  , saved_regs_p
 #else /* !defined(GLOBALS_NONRELOC) */  #else /* !defined(GLOBALS_NONRELOC) */
 extern Xt *saved_ip;  extern PER_THREAD Xt *saved_ip;
 extern Cell *rp;  extern PER_THREAD Cell *rp;
 #define sr_proto  #define sr_proto
 #define sr_call  #define sr_call
 #endif /* !defined(GLOBALS_NONRELOC) */  #endif /* !defined(GLOBALS_NONRELOC) */
Line 378 
Line 386 
 Label *gforth_engine2(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);  Label *gforth_engine2(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);
 Label *gforth_engine3(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);  Label *gforth_engine3(Xt *ip, Cell *sp, Cell *rp0, Float *fp, Address lp sr_proto);
   
   /* for ABI-CODE and ;ABI-CODE */
   typedef Cell *abifunc(Cell *sp, Float **fpp);
   typedef Cell *semiabifunc(Cell *sp, Float **fpp, Address body);
   
 /* engine/prim support routines */  /* engine/prim support routines */
 Address gforth_alloc(Cell size);  Address gforth_alloc(Cell size);
 char *cstr(Char *from, UCell size, int clear);  char *cstr(Char *from, UCell size);
 char *tilde_cstr(Char *from, UCell size, int clear);  char *tilde_cstr(Char *from, UCell size);
 Cell opencreate_file(char *s, Cell wfam, int flags, Cell *wiorp);  Cell opencreate_file(char *s, Cell wfam, int flags, Cell *wiorp);
 DCell timeval2us(struct timeval *tvp);  DCell timeval2us(struct timeval *tvp);
   DCell timespec2ns(struct timespec *tvp);
 void cmove(Char *c_from, Char *c_to, UCell u);  void cmove(Char *c_from, Char *c_to, UCell u);
 void cmove_up(Char *c_from, Char *c_to, UCell u);  void cmove_up(Char *c_from, Char *c_to, UCell u);
 Cell compare(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);  Cell compare(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);
Line 393 
Line 406 
 UCell hashkey1(Char *c_addr, UCell u, UCell ubits);  UCell hashkey1(Char *c_addr, UCell u, UCell ubits);
 struct Cellpair parse_white(Char *c_addr1, UCell u1);  struct Cellpair parse_white(Char *c_addr1, UCell u1);
 Cell rename_file(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);  Cell rename_file(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);
 struct Cellquad read_line(Char *c_addr, UCell u1, Cell wfileid);  struct Cellquad read_line(Char *c_addr, UCell u1, FILE *wfileid);
 struct Cellpair file_status(Char *c_addr, UCell u);  struct Cellpair file_status(Char *c_addr, UCell u);
 Cell to_float(Char *c_addr, UCell u, Float *r_p);  Cell to_float(Char *c_addr, UCell u, Float *r_p, Char dot);
 Float v_star(Float *f_addr1, Cell nstride1, Float *f_addr2, Cell nstride2, UCell ucount);  Float v_star(Float *f_addr1, Cell nstride1, Float *f_addr2, Cell nstride2, UCell ucount);
 void faxpy(Float ra, Float *f_x, Cell nstridex, Float *f_y, Cell nstridey, UCell ucount);  void faxpy(Float ra, Float *f_x, Cell nstridex, Float *f_y, Cell nstridey, UCell ucount);
 UCell lshift(UCell u1, UCell n);  UCell lshift(UCell u1, UCell n);
Line 404 
Line 417 
 void gforth_ms(UCell u);  void gforth_ms(UCell u);
 UCell gforth_dlopen(Char *c_addr, UCell u);  UCell gforth_dlopen(Char *c_addr, UCell u);
 Cell capscompare(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);  Cell capscompare(Char *c_addr1, UCell u1, Char *c_addr2, UCell u2);
   int gf_ungetc(int c, FILE *stream);
   void gf_regetc(FILE *stream);
   int gf_ungottenc(FILE *stream);
   
 /* signal handler stuff */  /* signal handler stuff */
 void install_signal_handlers(void);  void install_signal_handlers(void);
Line 449 
Line 465 
 # define debug 0  # define debug 0
 #endif  #endif
   
 extern Cell *gforth_SP;  extern PER_THREAD Cell *gforth_SP;
 extern Cell *gforth_RP;  extern PER_THREAD Cell *gforth_RP;
 extern Address gforth_LP;  extern PER_THREAD Address gforth_LP;
 extern Float *gforth_FP;  extern PER_THREAD Float *gforth_FP;
 extern Address gforth_UP;  extern PER_THREAD Address gforth_UP;
 #ifndef HAS_LINKBACK  
 extern void * gforth_pointers[];  extern void * gforth_pointers(Cell n);
 #endif  
   
 #ifdef HAS_FFCALL  #ifdef HAS_FFCALL
 extern Cell *gforth_RP;  
 extern Address gforth_LP;  
 extern void gforth_callback(Xt* fcall, void * alist);  extern void gforth_callback(Xt* fcall, void * alist);
 #endif  #endif
   
Line 506 
Line 519 
   
 #define GROUP(x, n)  #define GROUP(x, n)
 #define GROUPADD(n)  #define GROUPADD(n)
   
   #ifdef HAVE_ENDIAN_H
   #include <endian.h>
   #else
   #define BSWAP16(x) ((((x) >> 8) & 0xff | (((x) & 0xff) << 8)))
   #define BSWAP32(x) ((BSWAP16((x) >> 16) | (BSWAP16(x) << 16)))
   #define BSWAP64(x) ((BSWAP32((x) >> 32) | (BSWAP32(x) << 32)))
   #ifdef WORDS_BIGENDIAN
   #define htobe16(x) (x)
   #define htobe32(x) (x)
   #define htobe64(x) (x)
   #define be16toh(x) (x)
   #define be32toh(x) (x)
   #define be64toh(x) (x)
   #define htole16(x) BSWAP16(x)
   #define htole32(x) BSWAP32(x)
   #define htole64(x) BSWAP64(x)
   #define le16toh(x) BSWAP16(x)
   #define le32toh(x) BSWAP32(x)
   #define le64toh(x) BSWAP64(x)
   #else
   #define htobe16(x) BSWAP16(x)
   #define htobe32(x) BSWAP32(x)
   #define htobe64(x) BSWAP64(x)
   #define be16toh(x) BSWAP16(x)
   #define be32toh(x) BSWAP32(x)
   #define be64toh(x) BSWAP64(x)
   #define htole16(x) (x)
   #define htole32(x) (x)
   #define htole64(x) (x)
   #define le16toh(x) (x)
   #define le32toh(x) (x)
   #define le64toh(x) (x)
   #endif
   #endif


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

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help