remove old incarnation of .NET support
[ghc-hetmet.git] / includes / Rts.h
index c2b25a8..a32bf34 100644 (file)
@@ -18,6 +18,9 @@ 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
@@ -35,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,13 +51,17 @@ extern "C" {
 
 /* Needed to get the macro version of errno on some OSs, and also to
    get prototypes for the _r versions of C library functions. */
+#ifndef _REENTRANT
 #define _REENTRANT 1
+#endif
 
 /*
  * 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
@@ -57,19 +70,23 @@ extern "C" {
 
 /* -----------------------------------------------------------------------------
    Assertions and Debuggery
-   -------------------------------------------------------------------------- */
 
-#ifndef DEBUG
-#define ASSERT(predicate) /* nothing */
-#else
+   CHECK(p)   evaluates p and terminates with an error if p is false
+   ASSERT(p)  like CHECK(p) if DEBUG is on, otherwise a no-op
+   -------------------------------------------------------------------------- */
 
 extern void _assertFail (const char *, unsigned int);
 
-#define ASSERT(predicate)                      \
+#define CHECK(predicate)                       \
        if (predicate)                          \
            /*null*/;                           \
        else                                    \
            _assertFail(__FILE__, __LINE__)
+
+#ifndef DEBUG
+#define ASSERT(predicate) /* nothing */
+#else
+#define ASSERT(predicate) CHECK(predicate)
 #endif /* DEBUG */
 
 /* 
@@ -107,6 +124,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,21 +176,14 @@ extern void _assertFail (const char *, unsigned int);
 /* Info tables, closures & code fragments defined in the RTS */
 #include "StgMiscClosures.h"
 
-/* Simulated-parallel information */
-#include "GranSim.h"
-
 /* Parallel information */
-#include "Parallel.h"
 #include "OSThreads.h"
-#include "SMP.h"
-
-/* GNU mp library */
-#include "gmp.h"
+#include "SMPClosureOps.h"
+#include "SpinLock.h"
 
 /* Macros for STG/C code */
 #include "Block.h"
 #include "ClosureMacros.h"
-#include "StgTicky.h"
 
 /* Runtime-system hooks */
 #include "Hooks.h"
@@ -171,12 +204,8 @@ DLL_IMPORT_RTS extern char  *prog_name;
 
 extern void stackOverflow(void);
 
-extern void      __decodeDouble (MP_INT *man, I_ *_exp, StgDouble dbl);
-extern void      __decodeFloat  (MP_INT *man, I_ *_exp, StgFloat flt);
-
-#if defined(WANT_DOTNET_SUPPORT)
-#include "DNInvoke.h"
-#endif
+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);
 
 /* Initialising the whole adjustor thunk machinery. */
 extern void initAdjustor(void);
@@ -201,6 +230,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
    -------------------------------------------------------------------------- */
@@ -212,7 +258,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
@@ -223,18 +273,6 @@ extern void stg_exit(int n) GNU_ATTRIBUTE(__noreturn__);
 #define DEBUG_ONLY(s) doNothing()
 #endif
 
-#if defined(GRAN) && defined(DEBUG)
-#define IF_GRAN_DEBUG(c,s)  if (RtsFlags.GranFlags.Debug.c) { s; }
-#else
-#define IF_GRAN_DEBUG(c,s)  doNothing()
-#endif
-
-#if defined(PAR) && defined(DEBUG)
-#define IF_PAR_DEBUG(c,s)  if (RtsFlags.ParFlags.Debug.c) { s; }
-#else
-#define IF_PAR_DEBUG(c,s)  doNothing()
-#endif
-
 /* -----------------------------------------------------------------------------
    Useful macros and inline functions
    -------------------------------------------------------------------------- */
@@ -257,4 +295,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 */