version 1.2, 1994/11/29 16:22:49
|
version 1.3, 1994/12/12 17:10:51
|
Line 2
|
Line 2
|
$Id$ |
$Id$ |
Copyright 1992 by the ANSI figForth Development Group |
Copyright 1992 by the ANSI figForth Development Group |
|
|
This is the machine-specific part for a SPARC running SunOS |
This is the machine-specific part for a SPARC |
*/ |
*/ |
|
|
|
/* direct threading is probably faster on the SPARC, but has it been |
/* Cell and UCell must be the same size as a pointer */ |
tested? Therefore, DIRECT_THREADED is not defined */ |
typedef long Cell; |
|
typedef unsigned long UCell; |
|
|
|
/* DCell and UDCell must be twice as large as Cell */ |
|
typedef long long DCell; |
|
typedef unsigned long long UDCell; |
|
|
|
/* define this if IEEE singles and doubles are available as C data types */ |
|
#define IEEE_FP |
|
|
|
/* the IEEE types are used only for loading and storing */ |
|
/* the IEEE double precision type */ |
|
typedef double DFloat; |
|
/* the IEEE single precision type */ |
|
typedef float SFloat; |
|
|
|
/* define this if the least-significant byte is at the largets address */ |
|
#define BIG_ENDIAN |
|
|
|
#ifdef DIRECT_THREADED |
#ifdef DIRECT_THREADED |
/* PFA gives the parameter field address corresponding to a cfa */ |
/* PFA gives the parameter field address corresponding to a cfa */ |
Line 42 typedef float SFloat;
|
Line 24 typedef float SFloat;
|
unsigned _ca = (unsigned)(ca); \ |
unsigned _ca = (unsigned)(ca); \ |
_cfa[0] = 0x8000000|((_ca+4-(unsigned)_cfa)>>2) /* CALL ca */ \ |
_cfa[0] = 0x8000000|((_ca+4-(unsigned)_cfa)>>2) /* CALL ca */ \ |
_cfa[1] = *(long *)_ca; /* delay slot */}) |
_cfa[1] = *(long *)_ca; /* delay slot */}) |
#endif |
|
|
|
/* this is the point where the does code starts if label points to the |
/* this is the point where the does code starts if label points to the |
* jump dodoes */ |
* jump dodoes */ |
Line 56 typedef float SFloat;
|
Line 37 typedef float SFloat;
|
#define MAKE_DOESJUMP(addr) ({long *_addr = (long *)(addr); \ |
#define MAKE_DOESJUMP(addr) ({long *_addr = (long *)(addr); \ |
_addr[0] = 0x8000000|((((unsigned)&&dodoes)+4-((unsigned)_addr))>>2) /* CALL dodoes */ \ |
_addr[0] = 0x8000000|((((unsigned)&&dodoes)+4-((unsigned)_addr))>>2) /* CALL dodoes */ \ |
_addr[1] = *(long *)&&dodoes; /* delay slot */}) |
_addr[1] = *(long *)&&dodoes; /* delay slot */}) |
|
#endif |
/* OS dependences */ |
|
|
|
#define SEEK_SET 0 |
|
|
|
#define memmove(a,b,c) ({ if((long)(a)<(long)(b)) memcpy(a,b,c); \ |
|
else \ |
|
{ int i; \ |
|
for(i=(c)-1; i>=0; i--) \ |
|
(char*)a[i]=(char*)b[i]; \ |
|
} \ |
|
}) |
|
#define strtoul(a,b,c) strtol(a,b,c) |
|
|
|