The ARM ABI states that vectors larger than 64 bits in size still have 64-bit alignment; never-the-less, the HW supports alignment hints of up to 128-bits in some cases and will trap in a vector has an alignment that less than the hint. GCC currently hard-codes larger vectors to be aligned by the size of the vector, which means that 128-bit vectors are marked as being 128-bit aligned. The ARM ABI unfortunately does not support generating such alignment for parameters passed by value and this can lead to traps at run time. It seems that the best way to solve this problem is to allow the back-end to set an upper limit on the alignment permitted for a vector. I've implemented this as a separate hook, rather than using the existing hooks because there's a strong likelihood of breaking some existing ABIs if I did it another way. There are a couple of tests that will need some re-working before this can be committed to deal with the fall-out of making this change; I'll prepare those changes if this patch is deemed generally acceptable. R. * target.def (TARGET_VECTOR_ALIGNMENT): New hook. * doc/tm.texi.in (TARGET_VECTOR_ALIGNMENT): Likewise. * doc/tm.texi: Regenerate. * targhooks.c (default_vector_alignment): New function. * arm.c (arm_vector_alignment): New function. (TARGET_VECTOR_ALIGNMENT): Define.