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)