On Thu, Jan 8, 2009 at 10:17 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Thu, Jan 8, 2009 at 12:40 PM, Ian Lance Taylor <i...@google.com> wrote: >> "H.J. Lu" <hjl.to...@gmail.com> writes: >> >>> We can solve it with >>> >>> 1. A target should define MALLOC_ABI_ALIGNMENT properly. >>> 2. g++ should issue an error when the default new operator >>> is used on a type whose alignment is greater than >>> MALLOC_ABI_ALIGNMENT. >>> 3. It is user's responsibility to provide a new operator to return >>> a properly aligned memory. >>> 4. g++ can assume memory return by the user-provided new >>> operator is properly aligned. >> >> Sounds good as far as it goes. How do we get there from here? What >> should the behaviour of __attribute__ ((aligned)) be? Should we add > > For 4.4, we can apply my patch: > > http://gcc.gnu.org/ml/gcc-patches/2009-01/msg00367.html > > and update document with > > As in the preceding examples, you can explicitly specify the alignment > (in bytes) that you wish the compiler to use for a given variable or > structure field. Alternatively, you can leave out the alignment factor > and just ask the compiler to align a variable or field to the maximum > useful alignment for the target ABI you are compiling for. For > example, you could write: > > @smallexample > short array[3] __attribute__ ((aligned)); > @end smallexample > > Whenever you leave out the alignment factor in an @code{aligned} attribute > specification, the compiler automatically sets the alignment for the declared > variable or field to the largest alignment for the target ABI you are > compiling for. Doing this can often make copy operations more efficient, > because the compiler can use whatever instructions copy the biggest > chunks of memory when performing copies to or from the variables or > fields that you have aligned this way.
I don't think we should encourage more uses of __attribute__((aligned)). Richard.