On Fri, Jan 3, 2014 at 3:13 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Fri, Jan 03, 2014 at 03:02:51PM +0100, Uros Bizjak wrote: >> Please note that previous value was based on earlier (pre P4) >> recommendation and it was appropriate for older chips with 32byte >> cache line. The value should be updated long ago, when 64bit cache >> lines were introduced, but was probably missed due to usage of magic >> value without comment. >> >> Ah, I see. My patch deals only with structures, larger than cache >> line. As recommended in "As long as 16-byte boundaries (and cache >> lines) are never crossed, natural alignment is not strictly necessary >> (though it is an easy way to enforce this)." part of the manual, we >> should align smaller structures to 16 or 32 bytes. >> >> Yes, I agree. Can you please merge your patch together with the proposed >> patch? > > How do we want to treat the 33-63 resp. 17-31 bytes long aggregates though? > 32 byte long and 16 byte long aggregates can surely be aligned just to 32 > resp. 16 bytes and never crosses 64 byte boundary then and doesn't waste > space in paddings unnecessarily (still opt thing, ABI can override), > but do we want to waste some extra bytes to ensure that 17-31 resp. 33-63 > bytes long objects don't cross 64 byte boundaries by aligning those to 32 > resp. 64 bytes, or do align them to 16 resp. 32 bytes instead?
Looking at "significant performance penalties" part of the above recommendation, I'd say to align it to 32/64 byte boundaries. Hopefully, the linker is able to put other data in the hole? Uros.