X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FStgTypes.h;h=ba2adb4ceab68b4223cc5212f158509413f214c8;hb=3595da95b2ca0d60c9100f77541b6ce36e49363c;hp=c0675215573e9bc43be67da87aefa42fd566f732;hpb=ed4cd6d403d932026f38608f81c3a8872e38b2ce;p=ghc-hetmet.git diff --git a/ghc/includes/StgTypes.h b/ghc/includes/StgTypes.h index c067521..ba2adb4 100644 --- a/ghc/includes/StgTypes.h +++ b/ghc/includes/StgTypes.h @@ -1,21 +1,34 @@ /* ----------------------------------------------------------------------------- - * $Id: StgTypes.h,v 1.3 1999/01/26 11:12:58 simonm Exp $ * - * Various C datatypes used in the run-time system. - + * (c) The GHC Team, 1998-2004 + * + * Various C datatypes used in the run-time system. This is the + * lowest-level include file, after ghcconfig.h and RtsConfig.h. + * + * This module should define types *only*, all beginning with "Stg". + * * Specifically: - StgInt8, 16, 32, 64 - StgNat8, 16, 32, 64 + StgInt8, 16, 32, 64 + StgWord8, 16, 32, 64 StgChar, StgFloat, StgDouble - ***** All the same size: ***** + ***** All the same size (i.e. sizeof(void *)): ***** StgPtr Basic pointer type StgWord Unit of heap allocation StgInt Signed version of StgWord StgAddr Generic address type + StgBool, StgVoid, StgClosurePtr, StgPtr, StgOffset, + StgTSOPtr, StgForeignPtr, StgStackOffset, StgStackPtr, + StgCode, StgArray, StgByteArray, StgStablePtr, StgFunPtr, + StgUnion. + * WARNING: Keep this file, MachDeps.h, and HsFFI.h in synch! + * + * NOTE: assumes #include "ghcconfig.h" + * + * Works with or without _POSIX_SOURCE. * * ---------------------------------------------------------------------------*/ @@ -25,44 +38,42 @@ /* * First, platform-dependent definitions of size-specific integers. * Assume for now that the int type is 32 bits. + * NOTE: Synch the following definitions with MachDeps.h! * ToDo: move these into a platform-dependent file. */ typedef signed char StgInt8; -typedef unsigned char StgNat8; +typedef unsigned char StgWord8; typedef signed short StgInt16; -typedef unsigned short StgNat16; - +typedef unsigned short StgWord16; #if SIZEOF_UNSIGNED_INT == 4 typedef signed int StgInt32; -typedef unsigned int StgNat32; +typedef unsigned int StgWord32; #else -#error GHC untested on this architecture: sizeof(unisgned int) != 4 -#endif - -/* This #define controls whether we need to support long longs on a particular - * platform. - * - * ToDo: find a proper home for (derived) configuration information like this. - */ -#if HAVE_LONG_LONG && SIZEOF_VOID_P < 8 -#define SUPPORT_LONG_LONGS +#error GHC untested on this architecture: sizeof(unsigned int) != 4 #endif #ifdef SUPPORT_LONG_LONGS /* assume long long is 64 bits */ -typedef unsigned long long int StgNat64; +# ifndef _MSC_VER typedef signed long long int StgInt64; +typedef unsigned long long int StgWord64; +# else +typedef __int64 StgInt64; +typedef unsigned __int64 StgWord64; +# endif #elif SIZEOF_LONG == 8 typedef signed long StgInt64; -typedef unsigned long StgNat64; +typedef unsigned long StgWord64; +#elif defined(__MSVC__) +typedef __int64 StgInt64; +typedef unsigned __int64 StgWord64; #else #error GHC untested on this architecture: sizeof(void *) < 8 and no long longs. #endif - /* * Define the standard word size we'll use on this machine: make it * big enough to hold a pointer. @@ -70,68 +81,55 @@ typedef unsigned long StgNat64; #if SIZEOF_VOID_P == 8 typedef StgInt64 StgInt; -typedef StgNat64 StgWord; +typedef StgWord64 StgWord; +typedef StgInt32 StgHalfInt; +typedef StgWord32 StgHalfWord; #else #if SIZEOF_VOID_P == 4 typedef StgInt32 StgInt; -typedef StgNat32 StgWord; +typedef StgWord32 StgWord; +typedef StgInt16 StgHalfInt; +typedef StgWord16 StgHalfWord; #else #error GHC untested on this architecture: sizeof(void *) != 4 or 8 #endif #endif +#define W_MASK (sizeof(W_)-1) + typedef void* StgAddr; /* * Other commonly-used STG datatypes. */ -typedef StgNat8 StgChar; - -/* - * If a double fits in an StgWord, don't bother using floats. - */ +typedef StgWord32 StgChar; +typedef int StgBool; -#if SIZEOF_DOUBLE == SIZEOF_VOID_P -typedef double StgFloat; -typedef double StgDouble; -#define FLOATS_AS_DOUBLES 1 -#else typedef float StgFloat; typedef double StgDouble; -#endif typedef void StgVoid; -typedef struct StgClosure_* StgClosurePtr; +typedef struct StgClosure_ StgClosure; +typedef StgClosure* StgClosurePtr; typedef StgWord* StgPtr; /* pointer into closure */ typedef StgWord StgOffset; /* byte offset within closure */ typedef struct StgTSO_* StgTSOPtr; -typedef void * StgForeignPtr; +typedef void* StgForeignPtr; typedef StgInt StgStackOffset; /* offset in words! */ typedef StgWord* StgStackPtr; -typedef StgNat8 StgCode; /* close enough */ -typedef StgCode* StgCodePtr; +typedef StgWord8 StgCode; /* close enough */ typedef StgPtr* StgArray; /* the goods of an Array# */ typedef char* StgByteArray; /* the goods of a ByteArray# */ -typedef StgInt64 LI_; -typedef StgNat64 LW_; - -/* Stable Pointers: A stable pointer is represented as an index into - * the stable pointer table in the low 24 bits with a weight in the - * upper 8 bits. - */ -typedef StgWord StgStablePtr; - -#define STABLEPTR_WEIGHT_MASK (0xff << ((sizeof(StgWord)-1) * BITS_PER_BYTE)) -#define STABLEPTR_WEIGHT_SHIFT (BITS_IN(StgWord) - 8) +typedef void* StgStablePtr; /* Types for the generated C functions @@ -150,46 +148,4 @@ typedef StgWord StgStablePtr; typedef void *(*(*StgFunPtr)(void))(void); typedef StgFunPtr StgFun(void); -typedef union { - StgWord w; - StgAddr a; - StgChar c; - StgFloat f; - StgInt i; - StgPtr p; - StgClosurePtr cl; - StgStackOffset offset; /* unused? */ - StgByteArray b; - StgTSOPtr t; -} StgUnion; - -/* - * Shorthand forms - */ - -typedef StgChar C_; -typedef StgWord W_; -typedef StgWord* P_; -typedef P_* PP_; -typedef StgInt I_; -typedef StgAddr A_; -typedef const StgWord* D_; -typedef StgFunPtr F_; -typedef StgByteArray B_; -typedef StgClosurePtr L_; - -/* - * We often want to know the size of something in units of an - * StgWord... (rounded up, of course!) - */ - -#define sizeofW(t) ((sizeof(t)+sizeof(W_)-1)/sizeof(W_)) - -/* - * It's nice to be able to grep for casts - */ - -#define stgCast(ty,e) ((ty)(e)) - -#endif STGTYPES_H - +#endif /* STGTYPES_H */