summaryrefslogtreecommitdiff
path: root/includes/Rts.h
Commit message (Collapse)AuthorAgeFilesLines
...
* Expose the prototype for getMonotonicNSecIan Lynagh2013-01-171-0/+1
| | | | Fixes T3807 on OS X 32.
* Don't clearNurseries() in parallel with -debugSimon Marlow2012-11-011-0/+6
| | | | It makes sanity-checking fail.
* Produce new-style Cmm from the Cmm parserSimon Marlow2012-10-081-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The main change here is that the Cmm parser now allows high-level cmm code with argument-passing and function calls. For example: foo ( gcptr a, bits32 b ) { if (b > 0) { // we can make tail calls passing arguments: jump stg_ap_0_fast(a); } return (x,y); } More details on the new cmm syntax are in Note [Syntax of .cmm files] in CmmParse.y. The old syntax is still more-or-less supported for those occasional code fragments that really need to explicitly manipulate the stack. However there are a couple of differences: it is now obligatory to give a list of live GlobalRegs on every jump, e.g. jump %ENTRY_CODE(Sp(0)) [R1]; Again, more details in Note [Syntax of .cmm files]. I have rewritten most of the .cmm files in the RTS into the new syntax, except for AutoApply.cmm which is generated by the genapply program: this file could be generated in the new syntax instead and would probably be better off for it, but I ran out of enthusiasm. Some other changes in this batch: - The PrimOp calling convention is gone, primops now use the ordinary NativeNodeCall convention. This means that primops and "foreign import prim" code must be written in high-level cmm, but they can now take more than 10 arguments. - CmmSink now does constant-folding (should fix #7219) - .cmm files now go through the cmmPipeline, and as a result we generate better code in many cases. All the object files generated for the RTS .cmm files are now smaller. Performance should be better too, but I haven't measured it yet. - RET_DYN frames are removed from the RTS, lots of code goes away - we now have some more canned GC points to cover unboxed-tuples with 2-4 pointers, which will reduce code size a little.
* Fix #7087 (integer overflow in getDelayTarget())Simon Marlow2012-07-311-0/+2
|
* Fix build on Win32, and handle the FMT_* #defines in a slightly nicer wayIan Lynagh2012-04-271-13/+0
|
* Simplify format specifiersIan Lynagh2012-04-271-27/+4
| | | | | It turns out that we can use %zu and %llu on Win32, provided we include PosixSource everywhere we want to use them.
* Fix build on OSX: Use the 'z' format specifier modifier when possibleIan Lynagh2012-04-261-15/+9
| | | | | On Win32 it's not recognised, so we unfortunately can't use it unconditionally.
* Fix warnings on Win64Ian Lynagh2012-04-261-3/+12
| | | | | | Mostly this meant getting pointer<->int conversions to use the right sizes. lnat is now size_t, rather than unsigned long, as that seems a better match for how it's used.
* A couple of build fixes for Win64Ian Lynagh2012-04-241-1/+1
|
* Fix mkDerivedConstants on Win64Ian Lynagh2012-03-191-0/+18
| | | | | It was assuming that long's are word-sized, which is not the case on Win64.
* Fixes for the threaded RTS on Win64Ian Lynagh2012-03-181-0/+7
|
* Fix a #defineIan Lynagh2012-01-151-1/+1
| | | | | | | I don't think it was causing any problems, but TimeToUS(x+y) would have evaluated to x + (y / 1000)
* Time handling overhaulSimon Marlow2011-11-251-0/+30
| | | | | | | | | | | | | | | | | | | | | Terminology cleanup: the type "Ticks" has been renamed "Time", which is an StgWord64 in units of TIME_RESOLUTION (currently nanoseconds). The terminology "tick" is now used consistently to mean the interval between timer signals. The ticker now always ticks in realtime (actually CLOCK_MONOTONIC if we have it). Before it used CPU time in the non-threaded RTS and realtime in the threaded RTS, but I've discovered that the CPU timer has terrible resolution (at least on Linux) and isn't much use for profiling. So now we always use realtime. This should also fix The default tick interval is now 10ms, except when profiling where we drop it to 1ms. This gives more accurate profiles without affecting runtime too much (<1%). Lots of cleanups - the resolution of Time is now in one place only (Rts.h) rather than having calculations that depend on the resolution scattered all over the RTS. I hope I found them all.
* Generate the C main() function when linking a binary (fixes #5373)Simon Marlow2011-11-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than have main() be statically compiled as part of the RTS, we now generate it into the tiny C file that we compile when linking a binary. The main motivation is that we want to pass the settings for the -rtsotps and -with-rtsopts flags into the RTS, rather than relying on fragile linking semantics to override the defaults, which don't work with DLLs on Windows (#5373). In order to do this, we need to extend the API for initialising the RTS, so now we have: void hs_init_ghc (int *argc, char **argv[], // program arguments RtsConfig rts_config); // RTS configuration hs_init_ghc() can optionally be used instead of hs_init(), and allows passing in configuration options for the RTS. RtsConfig is a struct, which currently has two fields: typedef struct { RtsOptsEnabledEnum rts_opts_enabled; const char *rts_opts; } RtsConfig; but might have more in the future. There is a default value for the struct, defaultRtsConfig, the idea being that you start with this and override individual fields as necessary. In fact, main() was in a separate static library, libHSrtsmain.a. That's now gone.
* prog_argv and rts_argv now contain *copies* of the args passed toSimon Marlow2011-05-251-3/+0
| | | | | | setupRtsFlags(), rather than sharing the memory. Previously if the caller of hs_init() passed in dynamically-allocated memory and then freed it, random crashes could happen later (#5177).
* Unicode fixes, taking into account PEP383 supportMax Bolingbroke2011-05-141-0/+6
|
* Add a configure test for the visibility hidden attributeIan Lynagh2010-11-231-1/+1
|
* Fix the symbol visibility pragmasSimon Marlow2010-06-171-9/+1
|
* New implementation of BLACKHOLEsSimon Marlow2010-03-291-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This replaces the global blackhole_queue with a clever scheme that enables us to queue up blocked threads on the closure that they are blocked on, while still avoiding atomic instructions in the common case. Advantages: - gets rid of a locked global data structure and some tricky GC code (replacing it with some per-thread data structures and different tricky GC code :) - wakeups are more prompt: parallel/concurrent performance should benefit. I haven't seen anything dramatic in the parallel benchmarks so far, but a couple of threading benchmarks do improve a bit. - waking up a thread blocked on a blackhole is now O(1) (e.g. if it is the target of throwTo). - less sharing and better separation of Capabilities: communication is done with messages, the data structures are strictly owned by a Capability and cannot be modified except by sending messages. - this change will utlimately enable us to do more intelligent scheduling when threads block on each other. This is what started off the whole thing, but it isn't done yet (#3838). I'll be documenting all this on the wiki in due course.
* Fix the format specifier for Int64/Word64 on WindowsIan Lynagh2010-03-271-0/+7
| | | | | mingw doesn't understand %llu/%lld - it treats them as 32-bit rather than 64-bit. We use %I64u/%I64d instead.
* Optimise the code generated at trace pointsSimon Marlow2009-09-121-0/+6
|
* Omit visibility pragmas on Windows (fixes warnings/validate failures)Simon Marlow2009-09-091-0/+12
|
* add RTS_PRIVATE attributeSimon Marlow2009-08-291-0/+5
|
* Fix incorrectly hidden RTS symbolsSimon Marlow2009-08-291-0/+3
|
* Tidy up file headers and copyrights; point to the wiki for docsSimon Marlow2009-08-251-0/+3
| | | | | | | I've updated the wiki page about the RTS headers http://hackage.haskell.org/trac/ghc/wiki/Commentary/SourceTree/Includes to reflect the new layout and explain some of the rationale. All the header files now point to this page.
* move termios prototypes into a public headerSimon Marlow2009-08-031-0/+1
|
* move StgEntCounter type into its own headerSimon Marlow2009-08-031-25/+1
|
* RTS tidyup sweep, first phaseSimon Marlow2009-08-021-81/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The first phase of this tidyup is focussed on the header files, and in particular making sure we are exposinng publicly exactly what we need to, and no more. - Rts.h now includes everything that the RTS exposes publicly, rather than a random subset of it. - Most of the public header files have moved into subdirectories, and many of them have been renamed. But clients should not need to include any of the other headers directly, just #include the main public headers: Rts.h, HsFFI.h, RtsAPI.h. - All the headers needed for via-C compilation have moved into the stg subdirectory, which is self-contained. Most of the headers for the rest of the RTS APIs have moved into the rts subdirectory. - I left MachDeps.h where it is, because it is so widely used in Haskell code. - I left a deprecated stub for RtsFlags.h in place. The flag structures are now exposed by Rts.h. - Various internal APIs are no longer exposed by public header files. - Various bits of dead code and declarations have been removed - More gcc warnings are turned on, and the RTS code is more warning-clean. - More source files #include "PosixSource.h", and hence only use standard POSIX (1003.1c-1995) interfaces. There is a lot more tidying up still to do, this is just the first pass. I also intend to standardise the names for external RTS APIs (e.g use the rts_ prefix consistently), and declare the internal APIs as hidden for shared libraries.
* remove old incarnation of .NET supportSimon Marlow2009-06-281-4/+0
|
* Add CHECK(p), like ASSERT(p) but works even when !defined(DEBUG)Simon Marlow2009-07-291-5/+9
| | | | For inexpensive assertions
* NetBSD defines _REENTRANT in its header files, so compiling ghc givesSimon Marlow2009-07-231-0/+2
| | | | | | redefinition warnings for all files that are including includes/Rts.h. Contributed by: Krister Walfridsson <krister.walfridsson@gmail.com>
* Stop building the rts against gmpDuncan Coutts2009-06-131-7/+0
| | | | Nothing from gmp is used in the rts anymore.
* Remove the implementation of gmp primops from the rtsDuncan Coutts2009-06-131-1/+0
|
* Remove the unused remains of __decodeFloatIan Lynagh2009-06-021-1/+0
|
* Remove old GUM/GranSim codeSimon Marlow2009-06-021-19/+0
|
* pad step_workspace to 64 bytes, to speed up access to gct->steps[]Simon Marlow2008-04-161-0/+6
|
* add ROUNDUP_BYTES_TO_WDSsimonmar@microsoft.com2008-02-151-1/+3
|
* Fix conversions between Double/Float and simple-integerIan Lynagh2008-06-141-1/+1
|
* Add some more generic (en|de)code(Double|Float) codeIan Lynagh2008-04-171-0/+2
|
* Do not #include external header files when compiling via CSimon Marlow2008-04-021-1/+5
| | | | | | | | | | | | | | | | | | | | | | | This has several advantages: - -fvia-C is consistent with -fasm with respect to FFI declarations: both bind to the ABI, not the API. - foreign calls can now be inlined freely across module boundaries, since a header file is not required when compiling the call. - bootstrapping via C will be more reliable, because this difference in behavour between the two backends has been removed. There is one disadvantage: - we get no checking by the C compiler that the FFI declaration is correct. So now, the c-includes field in a .cabal file is always ignored by GHC, as are header files specified in an FFI declaration. This was previously the case only for -fasm compilations, now it is also the case for -fvia-C too.
* Fix the IF_DEBUG(interpreter in StgCRun.cIan Lynagh2007-08-251-0/+4
|
* Pointer TaggingSimon Marlow2007-07-271-0/+40
| | | | | | | | | | | | | | | | | | | | | | This patch implements pointer tagging as per our ICFP'07 paper "Faster laziness using dynamic pointer tagging". It improves performance by 10-15% for most workloads, including GHC itself. The original patches were by Alexey Rodriguez Yakushev <mrchebas@gmail.com>, with additions and improvements by me. I've re-recorded the development as a single patch. The basic idea is this: we use the low 2 bits of a pointer to a heap object (3 bits on a 64-bit architecture) to encode some information about the object pointed to. For a constructor, we encode the "tag" of the constructor (e.g. True vs. False), for a function closure its arity. This enables some decisions to be made without dereferencing the pointer, which speeds up some common operations. In particular it enables us to avoid costly indirect jumps in many cases. More information in the commentary: http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/HaskellExecution/PointerTagging
* FIX BUILD (OS X): Include correct gmp.h if using GMP.frameworkRoman Leshchinskiy2007-07-061-0/+4
| | | | | | On OS X, we have to #include <GMP/gmp.h> if we are using GMP.framework. Before the recent GMP changes, gcc (incorrectly) used the gmp.h supplied by ghc but that is gone now.
* Make ticky work, at least partly, on 64-bit machinessimonpj@microsoft.com2007-04-241-5/+5
| | | | | | | | | | | | | | The ticky StgEntCounter structure was trying to be clever by using a fixed-width 32-bit field for the registeredp value. But the code generators are not up to handling structures packed tightly like this (on a 64-bit architecture); result seg-fault on 64-bit. Really there should be some complaint from the code generators, not simply a seg fault. Anyway I switched to using native words for StgEntCounter fields, and now at least it works.
* Lightweight ticky-ticky profilingKirsten Chevalier2007-02-071-1/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The following changes restore ticky-ticky profiling to functionality from its formerly bit-rotted state. Sort of. (It got bit-rotted as part of the switch to the C-- back-end.) The way that ticky-ticky is supposed to work is documented in Section 5.7 of the GHC manual (though the manual doesn't mention that it hasn't worked since sometime around 6.0, alas). Changes from this are as follows (which I'll document on the wiki): * In the past, you had to build all of the libraries with way=t in order to use ticky-ticky, because it entailed a different closure layout. No longer. You still need to do make way=t in rts/ in order to build the ticky RTS, but you should now be able to mix ticky and non-ticky modules. * Some of the counters that worked in the past aren't implemented yet. I was originally just trying to get entry counts to work, so those should be correct. The list of counters was never documented in the first place, so I hope it's not too much of a disaster that some don't appear anymore. Someday, someone (perhaps me) should document all the counters and what they do. For now, all of the counters are either accurate (or at least as accurate as they always were), zero, or missing from the ticky profiling report altogether. This hasn't been particularly well-tested, but these changes shouldn't affect anything except when compiling with -fticky-ticky (famous last words...) Implementation details: I got rid of StgTicky.h, which in the past had the macros and declarations for all of the ticky counters. Now, those macros are defined in Cmm.h. StgTicky.h was still there for inclusion in C code. Now, any remaining C code simply cannot call the ticky macros -- or rather, they do call those macros, but from the perspective of C code, they're defined as no-ops. (This shouldn't be too big a problem.) I added a new file TickyCounter.h that has all the declarations for ticky counters, as well as dummy macros for use in C code. Someday, these declarations should really be automatically generated, since they need to be kept consistent with the macros defined in Cmm.h. Other changes include getting rid of the header that was getting added to closures before, and getting rid of various code having to do with eager blackholing and permanent indirections (the changes under compiler/ and rts/Updates.*).
* Make StablePtr and friends visible, this seems to be necessary for 64bit ↵sven.panne@aedion.de2006-11-101-0/+4
| | | | architectures
* Split GC.c, and move storage manager into sm/ directorySimon Marlow2006-10-241-4/+7
| | | | | | | | | | | | | | | | | In preparation for parallel GC, split up the monolithic GC.c file into smaller parts. Also in this patch (and difficult to separate, unfortunatley): - Don't include Stable.h in Rts.h, instead just include it where necessary. - consistently use STATIC_INLINE in source files, and INLINE_HEADER in header files. STATIC_INLINE is now turned off when DEBUG is on, to make debugging easier. - The GC no longer takes the get_roots function as an argument. We weren't making use of this generalisation.
* fix warningsSimon Marlow2006-06-081-0/+11
|
* add 'const' modifiers to types where appropriateSimon Marlow2006-06-071-1/+1
|
* #define _REENTRANT 1 (needed to get the right errno on some OSs)Simon Marlow2006-05-181-0/+4
| | | | | Partial fix for hanging problems on Solaris and possibly *BSD. A similar fix is also required to libraries/base/includes/HsBase.h.