X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FRts.h;h=1d455f0d6d222179ecfa7385afca22b601fb71be;hb=3710a4ef1ca665fe4ed705a6b0f4400d680c7b54;hp=7a30d9ee5284e18d6c075611da255e9a3da8cb0f;hpb=3f10646cfe2c3409056a49d1ef1c4507af522573;p=ghc-hetmet.git diff --git a/includes/Rts.h b/includes/Rts.h index 7a30d9e..1d455f0 100644 --- a/includes/Rts.h +++ b/includes/Rts.h @@ -18,6 +18,15 @@ extern "C" { #endif #include "Stg.h" +// ToDo: move RtsExternal stuff elsewhere +#include "RtsExternal.h" + +// Turn off inlining when debugging - it obfuscates things +#ifdef DEBUG +# undef STATIC_INLINE +# define STATIC_INLINE static +#endif + #include "RtsTypes.h" #if __GNUC__ >= 3 @@ -29,6 +38,12 @@ extern "C" { #define FLEXIBLE_ARRAY 0 #endif +#if __GNUC__ >= 3 +#define ATTRIBUTE_ALIGNED(n) __attribute__((aligned(n))) +#else +#define ATTRIBUTE_ALIGNED(n) /*nothing*/ +#endif + /* Fix for mingw stat problem (done here so it's early enough) */ #ifdef mingw32_HOST_OS #define __MSVCRT__ 1 @@ -42,7 +57,9 @@ extern "C" { * 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_)) +#define ROUNDUP_BYTES_TO_WDS(n) (((n) + sizeof(W_) - 1) / sizeof(W_)) + +#define sizeofW(t) ROUNDUP_BYTES_TO_WDS(sizeof(t)) /* * It's nice to be able to grep for casts @@ -101,6 +118,29 @@ extern void _assertFail (const char *, unsigned int); #define FMT_Int64 "lld" #endif +/* + * Macros for untagging and retagging closure pointers + * For more information look at the comments in Cmm.h + */ + +static inline StgWord +GET_CLOSURE_TAG(StgClosure * p) +{ + return (StgWord)p & TAG_MASK; +} + +static inline StgClosure * +UNTAG_CLOSURE(StgClosure * p) +{ + return (StgClosure*)((StgWord)p & ~TAG_MASK); +} + +static inline StgClosure * +TAG_CLOSURE(StgWord tag,StgClosure * p) +{ + return (StgClosure*)((StgWord)p | tag); +} + /* ----------------------------------------------------------------------------- Include everything STG-ish -------------------------------------------------------------------------- */ @@ -136,23 +176,31 @@ extern void _assertFail (const char *, unsigned int); /* Parallel information */ #include "Parallel.h" #include "OSThreads.h" -#include "SMP.h" - -/* STG/Optimised-C related stuff */ -#include "Block.h" +#include "SMPClosureOps.h" +#include "SpinLock.h" /* GNU mp library */ +#if defined(HAVE_FRAMEWORK_GMP) +#include +#else #include "gmp.h" +#endif /* Macros for STG/C code */ +#include "Block.h" #include "ClosureMacros.h" -#include "StgTicky.h" -#include "Stable.h" + + /* Ticky-ticky counters */ +#include "TickyCounters.h" /* Runtime-system hooks */ #include "Hooks.h" #include "RtsMessages.h" +/* for StablePtr/getStablePtr/deRefStablePtr */ +#include "Storage.h" +#include "Stable.h" + #include "ieee-flpt.h" #include "Signals.h" @@ -166,6 +214,8 @@ extern void stackOverflow(void); extern void __decodeDouble (MP_INT *man, I_ *_exp, StgDouble dbl); extern void __decodeFloat (MP_INT *man, I_ *_exp, StgFloat flt); +extern void __decodeDouble_2Int (I_ *man_sign, W_ *man_high, W_ *man_low, I_ *exp, StgDouble dbl); +extern void __decodeFloat_Int (I_ *man, I_ *exp, StgFloat flt); #if defined(WANT_DOTNET_SUPPORT) #include "DNInvoke.h" @@ -194,6 +244,23 @@ extern void stg_exit(int n) GNU_ATTRIBUTE(__noreturn__); /* declarations for runtime flags/values */ #define MAX_RTS_ARGS 32 +#ifdef DEBUG +#define TICK_VAR(arity) \ + extern StgInt SLOW_CALLS_##arity; \ + extern StgInt RIGHT_ARITY_##arity; \ + extern StgInt TAGGED_PTR_##arity; + +#define TICK_VAR_INI(arity) \ + StgInt SLOW_CALLS_##arity = 1; \ + StgInt RIGHT_ARITY_##arity = 1; \ + StgInt TAGGED_PTR_##arity = 0; + +extern StgInt TOTAL_CALLS; + +TICK_VAR(1) +TICK_VAR(2) +#endif + /* ----------------------------------------------------------------------------- Assertions and Debuggery -------------------------------------------------------------------------- */ @@ -205,7 +272,11 @@ extern void stg_exit(int n) GNU_ATTRIBUTE(__noreturn__); -------------------------------------------------------------------------- */ #ifdef DEBUG +#if IN_STG_CODE +#define IF_DEBUG(c,s) if (RtsFlags[0].DebugFlags.c) { s; } +#else #define IF_DEBUG(c,s) if (RtsFlags.DebugFlags.c) { s; } +#endif #else #define IF_DEBUG(c,s) doNothing() #endif @@ -250,4 +321,29 @@ extern void stg_exit(int n) GNU_ATTRIBUTE(__noreturn__); } #endif + +/* krc: I put this here because I don't think + it needs to be visible externally. + It used to be in StgTicky.h, but I got rid + of that. */ + +/* ----------------------------------------------------------------------------- + The StgEntCounter type - needed regardless of TICKY_TICKY + -------------------------------------------------------------------------- */ + +typedef struct _StgEntCounter { + /* Using StgWord for everything, becuase both the C and asm code + generators make trouble if you try to pack things tighter */ + StgWord registeredp; /* 0 == no, 1 == yes */ + StgInt arity; /* arity (static info) */ + StgInt stk_args; /* # of args off stack */ + /* (rest of args are in registers) */ + char *str; /* name of the thing */ + char *arg_kinds; /* info about the args types */ + StgInt entry_count; /* Trips to fast entry code */ + StgInt allocs; /* number of allocations by this fun */ + struct _StgEntCounter *link;/* link to chain them all together */ +} StgEntCounter; + + #endif /* RTS_H */