summaryrefslogtreecommitdiff
path: root/ghc/docs/comm/rts-libs/stgc.html
blob: 196ec9150db9668b53bb9a9ebb013783eb1df60c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
  <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    <title>The GHC Commentary - Spineless Tagless C</title>
  </head>

  <body BGCOLOR="FFFFFF">
    <h1>The GHC Commentary - Spineless Tagless C</h1>
    <p>
      The C code generated by GHC doesn't use higher-level features of C to be
      able to control as precisely as possible what code is generated.
      Moreover, it uses special features of gcc (such as, first class labels)
      to produce more efficient code.
    <p>
      STG C makes ample use of C's macro language to define idioms, which also
      reduces the size of the generated C code (thus, reducing I/O times).
      These macros are defined in the C headers located in GHC's <a
	href="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/ghc/includes/"><code>includes</code></a>
      directory.

    <h4><code>TailCalls.h</code></h4>
    <p>
      <a
	href="http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/ghc/includes/TailCalls.h"><code>TailCalls.h</code></a>
      defines how tail calls are implemented - and in particular - optimised
      in GHC generated code.  The default case, for an architecture for which
      GHC is not optimised, is to use the mini interpreter described in the <a
	href="http://research.microsoft.com/copyright/accept.asp?path=/users/simonpj/papers/spineless-tagless-gmachine.ps.gz&pub=34">STG paper.</a>
    <p>
      For supported architectures, various tricks are used to generate
      assembler implementing proper tail calls.  On i386, gcc's first class
      labels are used to directly jump to a function pointer.  Furthermore,
      markers of the form <code>--- BEGIN ---</code> and <code>--- END
      ---</code> are added to the assembly right after the function prologue
      and before the epilogue.  These markers are used by <a
	href="../the-beast/mangler.html">the Evil Mangler.</a>

    <p><small>
<!-- hhmts start -->
Last modified: Wed Aug  8 19:28:29 EST 2001
<!-- hhmts end -->
    </small>
  </body>
</html>