On Tue, 2014-01-14 at 15:10 +0000, Nick Gasson wrote:
> On 14/01/14 13:44, Brian Drummond wrote:
> >
> > There was partial support for nested functions (and taking their
> > addresses via trampolines) in LLVM 2.2 and 2.4, for x86 and x86_64
> > targets, according to
> > http://llvm.org/releases/2.4/docs/ReleaseNotes.html
> > but I can't find more recent info atm...

> Hi Brian,
> 
> I'd avoid the use of the LLVM trampoline intrinsics if possible: when I 
> last looked at them they were a poorly supported hack to make GCC's 
> nested function extension work with the dragonegg plugin. They're not 
> particularly portable either: IIRC they require you to allocate an 
> undocumented and platform-specific sized array on the stack to construct 
> the trampoline in.
> 
> A common way to implement closures, nested functions, etc. in LLVM IR is 
> to pass an extra argument which is a structure containing pointers to or 
> copies of the parent's lexical environment. You can then use a chain of 
> structures for arbitrary levels of function nesting.

Ah, a display. I've also seen some comments elsewhere suggesting it's a
better approach.

Thanks for the feedback.
(in any case I expect Tristan's way ahead of my understanding of
LLVM :-)

- Brian


_______________________________________________
Ghdl-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/ghdl-discuss

Reply via email to