96c92d258328a51c96338dd560ba9620941db2de
[ghc-hetmet.git] / ghc / includes / RtsExternal.h
1 /* -----------------------------------------------------------------------------
2  * $Id: RtsExternal.h,v 1.5 2004/10/04 05:54:04 dons Exp $
3  *
4  * (c) The GHC Team, 1998-2004
5  *
6  * Things visible externally to the RTS
7  *
8  * -------------------------------------------------------------------------- */
9
10 #ifndef RTSEXTERNAL_H
11 #define RTSEXTERNAL_H
12
13 /* The RTS public interface. */
14 #include "RtsAPI.h"
15
16 /* The standard FFI interface */
17 #include "HsFFI.h"
18
19 /* -----------------------------------------------------------------------------
20    Functions exported by the RTS for use in Stg code
21    -------------------------------------------------------------------------- */
22
23 #if IN_STG_CODE
24 extern void newCAF(void*);
25 #else
26 extern void newCAF(StgClosure*);
27 #endif
28
29 /* ToDo: remove? */
30 extern I_ genSymZh(void);
31 extern I_ resetGenSymZh(void);
32
33 /* Alternate to raise(3) for threaded rts, for OpenBSD */
34 extern int genericRaise(int sig);
35
36 /* Concurrency/Exception PrimOps. */
37 extern int cmp_thread(StgPtr tso1, StgPtr tso2);
38 extern int rts_getThreadId(StgPtr tso);
39 extern int forkOS_createThread ( HsStablePtr entry );
40 extern StgInt forkProcess(HsStablePtr *entry);
41
42 /* grimy low-level support functions defined in StgPrimFloat.c */
43 extern StgDouble __encodeDouble (I_ size, StgByteArray arr, I_ e);
44 extern StgDouble __int_encodeDouble (I_ j, I_ e);
45 extern StgFloat  __encodeFloat (I_ size, StgByteArray arr, I_ e);
46 extern StgFloat  __int_encodeFloat (I_ j, I_ e);
47 extern StgInt    isDoubleNaN(StgDouble d);
48 extern StgInt    isDoubleInfinite(StgDouble d);
49 extern StgInt    isDoubleDenormalized(StgDouble d);
50 extern StgInt    isDoubleNegativeZero(StgDouble d);
51 extern StgInt    isFloatNaN(StgFloat f);
52 extern StgInt    isFloatInfinite(StgFloat f);
53 extern StgInt    isFloatDenormalized(StgFloat f);
54 extern StgInt    isFloatNegativeZero(StgFloat f);
55
56 /* Suspending/resuming threads around foreign calls */
57 extern StgInt        suspendThread ( StgRegTable * );
58 extern StgRegTable * resumeThread  ( StgInt );
59
60 /* Creating and destroying an adjustor thunk */
61 extern void*  createAdjustor(int cconv, StgStablePtr hptr, StgFunPtr wptr);
62 extern void   freeHaskellFunctionPtr(void* ptr);
63
64 /* -----------------------------------------------------------------------------
65    Storage manager stuff exported
66    -------------------------------------------------------------------------- */
67
68 /* Prototype for an evacuate-like function */
69 typedef void (*evac_fn)(StgClosure **);
70
71 extern void performGC(void);
72 extern void performMajorGC(void);
73 extern void performGCWithRoots(void (*get_roots)(evac_fn));
74
75 #endif /*  RTSEXTERNAL_H */