version 1.88, 2006/01/05 01:37:32
|
version 1.94, 2006/10/27 21:47:02
|
Line 46
|
Line 46
|
#include <unistd.h> |
#include <unistd.h> |
#include <pwd.h> |
#include <pwd.h> |
#include <dirent.h> |
#include <dirent.h> |
|
#include <wchar.h> |
#include <sys/resource.h> |
#include <sys/resource.h> |
#ifdef HAVE_FNMATCH_H |
#ifdef HAVE_FNMATCH_H |
#include <fnmatch.h> |
#include <fnmatch.h> |
Line 97 extern int gforth_memcmp(const char * s1
|
Line 98 extern int gforth_memcmp(const char * s1
|
|
|
#define NEWLINE '\n' |
#define NEWLINE '\n' |
|
|
|
/* These two flags control whether divisions are checked by software. |
|
The CHECK_DIVISION_SW is for those cases where the event is a |
|
division by zero or overflow on the C level, and might be reported |
|
by hardware; we might check forr that in autoconf and set the |
|
switch appropriately, but currently don't. The CHECK_DIVISION flag |
|
is for the other cases. */ |
|
#ifdef GFORTH_DEBUGGING |
|
#define CHECK_DIVISION_SW 1 |
|
#define CHECK_DIVISION 1 |
|
#else |
|
#define CHECK_DIVISION_SW 0 |
|
#define CHECK_DIVISION 0 |
|
#endif |
|
|
/* conversion on fetch */ |
/* conversion on fetch */ |
|
|
#define vm_Cell2f(_cell,_x) ((_x)=(Bool)(_cell)) |
#define vm_Cell2f(_cell,_x) ((_x)=(Bool)(_cell)) |
Line 255 extern int gforth_memcmp(const char * s1
|
Line 270 extern int gforth_memcmp(const char * s1
|
#elif ENGINE==2 |
#elif ENGINE==2 |
/* variant with padding between VM instructions for finding out |
/* variant with padding between VM instructions for finding out |
cross-inst jumps (for dynamic code) */ |
cross-inst jumps (for dynamic code) */ |
#define engine engine2 |
#define gforth_engine gforth_engine2 |
#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: |
Line 263 extern int gforth_memcmp(const char * s1
|
Line 278 extern int gforth_memcmp(const char * s1
|
#elif ENGINE==3 |
#elif ENGINE==3 |
/* variant with different immediate arguments for finding out |
/* variant with different immediate arguments for finding out |
immediate arguments (for native code) */ |
immediate arguments (for native code) */ |
#define engine engine3 |
#define gforth_engine gforth_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: asm(""); I_##name: |
#define LABEL(name) H_##name: asm(""); I_##name: |
Line 275 extern int gforth_memcmp(const char * s1
|
Line 290 extern int gforth_memcmp(const char * s1
|
#define LABEL2(name) K_##name: asm(""); |
#define LABEL2(name) K_##name: asm(""); |
#define LABEL3(name) J_##name: asm(""); |
#define LABEL3(name) J_##name: asm(""); |
|
|
Label *engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0) |
Label *gforth_engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0) |
/* 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 |
*/ |
*/ |
Line 296 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 311 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
#endif |
#endif |
#ifdef HAS_FFCALL |
#ifdef HAS_FFCALL |
av_alist alist; |
av_alist alist; |
extern va_alist clist; |
extern va_alist gforth_clist; |
float frv; |
float frv; |
int irv; |
int irv; |
double drv; |
double drv; |
Line 304 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 319 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
void * prv; |
void * prv; |
#endif |
#endif |
#ifdef HAS_LIBFFI |
#ifdef HAS_LIBFFI |
extern void * ritem; |
extern void * gforth_ritem; |
extern void ** clist; |
extern void ** gforth_clist; |
extern void ffi_callback(ffi_cif * cif, void * resp, void ** args, Xt * ip); |
extern void ffi_callback(ffi_cif * cif, void * resp, void ** args, Xt * ip); |
#endif |
#endif |
register Address up UPREG = gforth_UP; |
register Address up UPREG = gforth_UP; |