Mercurial > projects > ldc
diff gen/functions.cpp @ 526:642f6fa854e5
First step towards D abi compliance.
Framepointer elimination is now disabled for functions using inline asm (with a hack from aKor).
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 19 Aug 2008 20:18:01 +0200 |
parents | c9a606d6e641 |
children | cecfee2d01a8 |
line wrap: on
line diff
--- a/gen/functions.cpp Sun Aug 17 13:16:35 2008 +0200 +++ b/gen/functions.cpp Tue Aug 19 20:18:01 2008 +0200 @@ -592,6 +592,16 @@ fd->vresult->ir.irLocal = new IrLocal(fd->vresult); fd->vresult->ir.irLocal->value = DtoAlloca(DtoType(fd->vresult->type), "function_vresult"); } + + // this hack makes sure the frame pointer elimination optimization is disabled. + // this this eliminates a bunch of inline asm related issues. + // naked must always eliminate the framepointer however... + if (fd->inlineAsm && !fd->naked) + { + // emit a call to llvm_eh_unwind_init + LLFunction* hack = GET_INTRINSIC_DECL(eh_unwind_init); + gIR->ir->CreateCall(hack, ""); + } // give the 'this' argument storage and debug info if (f->usesThis)