mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
add support, testcases, and dox for the new GHC calling
convention. Patch by David Terei! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98212 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1679,7 +1679,8 @@ $ llc -regalloc=linearscan file.bc -o ln.s;
|
||||
supported on x86/x86-64 and PowerPC. It is performed if:</p>
|
||||
|
||||
<ul>
|
||||
<li>Caller and callee have the calling convention <tt>fastcc</tt>.</li>
|
||||
<li>Caller and callee have the calling convention <tt>fastcc</tt> or
|
||||
<tt>cc 10</tt> (GHC call convention).</li>
|
||||
|
||||
<li>The call is a tail call - in tail position (ret immediately follows call
|
||||
and ret uses value of call or is void).</li>
|
||||
|
@@ -691,9 +691,9 @@ define i32 @main() { <i>; i32()* </i>
|
||||
target, without having to conform to an externally specified ABI
|
||||
(Application Binary Interface).
|
||||
<a href="CodeGenerator.html#tailcallopt">Tail calls can only be optimized
|
||||
when this convention is used.</a> This calling convention does not
|
||||
support varargs and requires the prototype of all callees to exactly match
|
||||
the prototype of the function definition.</dd>
|
||||
when this or the GHC convention is used.</a> This calling convention
|
||||
does not support varargs and requires the prototype of all callees to
|
||||
exactly match the prototype of the function definition.</dd>
|
||||
|
||||
<dt><b>"<tt>coldcc</tt>" - The cold calling convention</b>:</dt>
|
||||
<dd>This calling convention attempts to make code in the caller as efficient
|
||||
@@ -703,6 +703,26 @@ define i32 @main() { <i>; i32()* </i>
|
||||
does not support varargs and requires the prototype of all callees to
|
||||
exactly match the prototype of the function definition.</dd>
|
||||
|
||||
<dt><b>"<tt>cc <em>10</em></tt>" - GHC convention</b>:</dt>
|
||||
<dd>This calling convention has been implemented specifically for use by the
|
||||
<a href="http://www.haskell.org/ghc">Glasgow Haskell Compiler (GHC)</a>.
|
||||
It passes everything in registers, going to extremes to achieve this by
|
||||
disabling callee save registers. This calling convention should not be
|
||||
used lightly but only for specific situations such as an alternative to
|
||||
the <em>register pinning</em> performance technique often used when
|
||||
implementing functional programming languages.At the moment only X86
|
||||
supports this convention and it has the following limitations:
|
||||
<ul>
|
||||
<li>On <em>X86-32</em> only supports up to 4 bit type parameters. No
|
||||
floating point types are supported.</li>
|
||||
<li>On <em>X86-64</em> only supports up to 10 bit type parameters and
|
||||
6 floating point parameters.</li>
|
||||
</ul>
|
||||
This calling convention supports
|
||||
<a href="CodeGenerator.html#tailcallopt">tail call optimization</a> but
|
||||
requires both the caller and callee are using it.
|
||||
</dd>
|
||||
|
||||
<dt><b>"<tt>cc <<em>n</em>></tt>" - Numbered convention</b>:</dt>
|
||||
<dd>Any calling convention may be specified by number, allowing
|
||||
target-specific calling conventions to be used. Target specific calling
|
||||
|
Reference in New Issue
Block a user