Mac OS X i486 ABI -- 16-byte stack alignment

Landon Fuller landonf at threerings.net
Wed Nov 7 14:46:09 PST 2007


On Nov 7, 2007, at 14:16, Paul Hohensee wrote:

> Take a look at the x64 code.  The x64 ABI requires 16-byte  
> alignment at
> call sites.  Compiler-generated code maintains 16-byte alignment at  
> all
> times, but the template interpreter doesn't, so calling out from it  
> means
> aligning the stack.
>
> See, e.g., call_VM_base in assembler_x86_64.cpp.

x64's call_VM_base() can assume 8 bytes in either direction will  
align the stack, as it uses 8-byte word size. It also looks like all  
call_VM_base() arguments must be register-passed. x64's 16-byte  
alignment looks like:
     testl(rsp, 15);
     jcc(Assembler::zero, L);

     subq(rsp, 8);
     call(entry_point, relocInfo::runtime_call_type);
     addq(rsp, 8);

Am I mistaken? -- On x86-32, the stack can be 4, 8, or 12 bytes  
offset from 16 byte alignment, and the stack has to be padded to  
ensure that it's still aligned once all the arguments have been  
pushed on the stack -- I'm not sure how to make the Darwin x86-32  
alignment simplier.

Thank you,
-landonf
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
Url : http://mail.openjdk.java.net/pipermail/hotspot-dev/attachments/20071107/1e057955/attachment.bin 


More information about the hotspot-dev mailing list