>>>>> Mark Mitchell writes: Mark> However, if I understand correct, some users have probably been Mark> implicitly using those options because they were using "-mcpu=970", or Mark> otherwise specifying an AltiVec CPU. It seems desirable in the abstract Mark> that this code still be binary-compatible with new -mcpu=970 code, if it Mark> was "plain C" code not using AltiVec vectors explicitly. But, I don't Mark> know if that's technically feasible or not.
The problem is that "plain C" code can generate Altivec instructions in multiple ways. Altivec is used for large, aligned block moves. Altivec is used for auto-vectorization, which now is enabled by default at -O3. GCC currently can generate incorrect code whether or not the user explicitly enabled Altivec and whether or not the user explicitly used Altivec instrinsics. The Altivec ABI does change the stack alignment. This should not create an incompatibility for old code, but new code may not receive the stack properly aligned without additional dynamic alignment. The other issue is argument passing for GCC generic vectors, mentioned by Janis, but that feature is documented to have "unexpected behavior" and few people use it. Thanks, David