view runtime/README @ 1410:cc2d8a7388c7

Count the sret register as well when keeping track of how many integer registers are available for extern(C) functions on x86-64. Interestingly, llvm-g++ seems to have a very similar bug: http://llvm.org/pr4242 (So this breaks ABI-compatibility with llvm-gcc for this corner case, but gains it with gcc...) To clarify, this is about code like this: {{{ struct S { void*[3] data; } struct T { void*[2] data; } // The T should be passed in memory, and p in the last int register. extern(C) S fail(int, int, int, int, T t, void* p) { S s; s.data[0] = t.data[0]; s.data[1] = t.data[1]; s.data[2] = p; return s; } }}} which should generate code functionally equivalent to this: {{{ extern(C) S* succeed(S* s, int, int, int, int, T t, void* p) { s.data[0] = t.data[0]; s.data[1] = t.data[1]; s.data[2] = p; return s; } }}} (with the same definitions for S and T)
author Frits van Bommel <fvbommel wxs.nl>
date Fri, 22 May 2009 13:17:06 +0200
parents 2ddee23bd70e
children
line wrap: on
line source

This should help get the runtime built.
FOR D1:
=======
1) Do a checkout of tango trunk into the ldc root dir (along dmd, gen, runtime etc).

    *   $ ls
    *   dmd dmd2 gen ir ...
    *   $ svn co http://svn.dsource.org/projects/tango/trunk tango

2) Compile the runtime

    *   sh build.sh

FOR D2:
=======
Highly experimental!!!

1) Do a checkout of druntime trunk into the ldc root dir (along dmd, gen, runtime etc).

    *   $ ls
    *   dmd dmd2 gen ir ...
    *   $ svn co http://svn.dsource.org/projects/druntime/trunk druntime

2) Patch druntime

    *   cd runtime
    *   sh patch-druntime.sh

3) Compile druntime

    *   cd ../druntime/src
    *   sh build-ldc.sh

=======
Enjoy!