[LLVMdev] Problem with callstack/frame-index
Per Fagrell
per.fagrell at coresonic.com
Thu Dec 23 07:12:33 PST 2010
Hello!
I'm trying to get stack-passed arguments working on my back-end, and I've
run into an issue I can't resolve.
I got the code working to the point that function F1 can call F2 with 5+
arguments fine (we pass 4 in registers). The problem is if F2 then calls
another function F3 with 5+ args, then all reading of the stack/call frame
is off, the address doesn't get compensated for the difference in
stack-depth. When I compile the same code with the MSP430 back end I get
something like this (pseudo-code):
f1: sub #4, sp
move arg1, 0(sp)
move arg2, 2(sp)
...fix registerargs...
call f2
....
f2:
sub #4, sp
move 6(sp), arg1
move 8(sp), arg2
....fix args call f3....
The important bit in that code is the 6/8 in F2. When I compile the same
code with our back-end, the offsets are 0/2, which is off by 4. Structurally
our solution mimics MSP430, and I thought I was sure we'd gotten all the
relevant parts copied and adjusted, but I can't seem to find a cure for this
offset issue! Any help greatly appreciated!
//Per
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101223/f8e8a800/attachment.html>
More information about the llvm-dev
mailing list