Artur Pietrek
2010-Apr-15 08:28 UTC
[LLVMdev] Few questions about stack frame and calling conventions implementation in a backend
Hi all, I've been working for some time now on a backend for our CPU. However I couldn't figure out how to implement some stuff. I'd appreciate your help with these. First thing is return address -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100415/989f532c/attachment.html>
Artur Pietrek
2010-Apr-15 08:40 UTC
[LLVMdev] Few questions about stack frame and calling conventions implementation in a backend
Hi all Ups, I'm really sorry for that previous message, I've sent it by mistake. So let me write it once more. I've been working for some time now on a backend for our CPU. However I couldn't figure out how to implement some stuff. I'd appreciate your help with these. First thing is return address saving. To do that, first I have to copy it to a general purpose register. I have no idea how to find an unused gpr register in emitPrologue/emitEpilogue. I've noticed that in other backends RegScavenger is used for that purpose, but not from inside of those methods. So my question is how could I get an unused register from inside of these methods? And my second problem is with returning structures by value. ABI says that aggregates up to 32bytes should be returned directly in register. Any advice how this could be done? Thanks Artur -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100415/0b1f7a58/attachment.html>
Andrew Lenharth
2010-Apr-15 13:35 UTC
[LLVMdev] Few questions about stack frame and calling conventions implementation in a backend
On Thu, Apr 15, 2010 at 3:40 AM, Artur Pietrek <pietreka at gmail.com> wrote:> Hi all > Ups, I'm really sorry for that previous message, I've sent it by mistake. > > So let me write it once more. > > I've been working for some time now on a backend for our CPU. However I > couldn't figure out how to implement some stuff. > I'd appreciate your help with these. > > First thing is return address saving. To do that, first I have to copy it to > a general purpose register. I have no idea how to find an unused gpr > register in emitPrologue/emitEpilogue. I've noticed that in other backends > RegScavenger is used for that purpose, but not from inside of those methods. > So my question is how could I get an unused register from inside of these > methods?Do you have an API specified register where the variable is passed? If so, it is a matter of copying it to a virtual register in the prologue which is then a live in to the first basic block. If you must have it in a specific register, you can make your ret inst take it as a use and copy the virtual register back to the physical one for the ret.> And my second problem is with returning structures by value. ABI says that > aggregates up to 32bytes should be returned directly in register. Any advice > how this could be done?This has to be done in the front end, I think. Andrew> > Thanks > Artur > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >
Apparently Analagous Threads
- [LLVMdev] Few questions about stack frame and calling conventions implementation in a backend
- [LLVMdev] Few questions about stack frame and calling conventions implementation in a backend
- [LLVMdev] Few questions about stack frame and calling conventions implementation in a backend
- [LLVMdev] [patch] DwarfDebug problem with line section
- [LLVMdev] GEP instruction change