Mercurial > projects > ldc
view ldc-posix-tango @ 1047:6bb04dbee21f
Some calling convention work for x86-64:
- Implement x86-64 extern(C), hopefully correctly.
- Tried to be a bit smarter about extern(D) while I was there.
Interestingly, this code seems to be generating more efficient code than
gcc and llvm-gcc in some edge cases, like returning a `{ [7 x i8] }` loaded from
a stack slot from an extern(C) function. (gcc generates 7 1-byte loads, while
this code generates a 4-byte, a 2-byte and a 1-byte load)
I also added some changes to make sure structs being returned from functions or
passed in as parameters are stored in memory where the rest of the backend seems
to expect them to be. These should be removed when support for first-class
aggregates improves.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Fri, 06 Mar 2009 16:00:47 +0100 |
parents | cc6489f32519 |
children | 8403fec8c34c |
line wrap: on
line source
ignore=object compiler=ldc inifile=ldc.conf exeext= objext=o version=LLVM version=LDC noversion=DigitalMars noversion=GNU testversion=linux testversion=darwin testversion=freebsd testversion=Unix testversion=Posix testversion=Windows testversion=Win32 testversion=Win64 testversion=mingw32 testversion=X86 testversion=PPC testversion=X86_64 testversion=PPC64 testversion=D_InlineAsm testversion=D_InlineAsm_X86 testversion=D_InlineAsm_PPC testversion=D_InlineAsm_X86_64 testversion=D_InlineAsm_PPC64 testversion=LLVM_InlineAsm_X86 testversion=LittleEndian testversion=BigEndian testversion=LLVM64 testversion=PIC testversion=Tango [compile] oneatatime=yes cmd=ldmd -c $i flag=$i incdir=-I$i libdir=-L-L$i optimize=-O3 version=-version=$i [link] oneatatime=yes cmd=ldc $i -of$o libdir=-L-L$i lib=-L-l$i flag=-L$i [liblink] safe=yes oneatatime=yes cmd=ar rc $o $i libdir= lib= flag= [postliblink] cmd=ranlib $i [shliblink] shlibs=no [dyliblink] dylibs=no