[Ffmpeg-devel] Need -maltivec in addition to -faltivec for OSX

Derk-Jan Hartman d.hartman
Sat Aug 13 01:38:44 CEST 2005


On 12 aug 2005, at 21:51, Michael Niedermayer wrote:
>> I suspect that this patch may be incorrect, or at least might have
>> some unwanted side-effects. From reading the documentation, using
>> -maltivec will allow GCC to generate AltiVec instructions from
>> ordinary, non-vectorised C-code. Currently, an AltiVec-enabled build
>> of FFmpeg should work on a G3, and using -maltivec might break this.
>> Have you verified that this still works on a G3s? If not, I may be
>> able to check it later.
>>
>
> i think you are right, the change is problematic, the reason why i
> still applied it is that -maltivec was altready used for some gcc
> versions ...
> i think some --enable-runtime-cpudetect (or --disable) could be added
> to make it clear if the binary should be optimized for cpu X but  
> run on
> any cpu of the same architecture or if its ok if it runs just on X
> alternatively the --tune option might be usefull for the distinction


http://www.hydrogenaudio.org/forums/lofiversion/index.php/t33771.html

It seems Apple is starting to move to the common -maltivec flag (as a  
-machine option instead of a -language option) and apparently a bunch  
of flags have significantly changed. So we shouldn't even need - 
maltivec since -mcpu=7450 (G4) implies that now. Here's some  
interesting stuff from Apple's gcc3.3 and gcc4.0 documentation. About  
your question on the difference, the last paragraph should have some  
info:

gcc3.3
"-faltivec
Enable the AltiVec language extensions, as defined in Motorola's  
AltiVec PIM. This includes the recognition of vector and pixel as  
(context-dependent) keywords, the definition of built-in functions  
such as vec_add, and other extensions. Note that unlike the option - 
maltivec, the extensions do not require the inclusion of any special  
header files. (APPLE ONLY) "

"-maltivec, -mno-altivec. These switches enable or disable the use of  
built-in functions that allow access to the AltiVec instruction set.  
You may also need to set -mabi=altivec to adjust the current ABI with  
AltiVec ABI enhancements.This option is not supported on Mac OS X;  
use -faltivec instead."

gcc4.0
"-faltivec
This flag is provided for compatibility with Metrowerks CodeWarrior  
and MrC compilers as well as previous Apple versions of GCC. It  
causes the -mpim-altivec option to be turned on. "

"-maltivec
-mno-altivec
Generate code that uses (does not use) AltiVec instructions, and also  
enable the use of built-in functions that allow more direct access to  
the AltiVec instruction set. You may also need to set -mabi=altivec  
to adjust the current ABI with AltiVec ABI enhancements. "

"The -mcpu options automatically enable or disable the following  
options: -maltivec, -mhard-float, -mmfcrf, -mmultiple, -mnew- 
mnemonics, -mpower, -mpower2, -mpowerpc64, -mpowerpc-gpopt, -mpowerpc- 
gfxopt, -mstring. The particular options set for any particular CPU  
will vary between compiler versions, depending on what setting seems  
to produce optimal code for that CPU; it doesn't necessarily reflect  
the actual hardware's capabilities."

"-mpim-altivec
-mno-pim-altivec
Enable (or disable) built-in compiler support for the syntactic  
extensions as well as operations and predicates defined in the  
Motorola AltiVec Technology Programming Interface Manual (PIM). This  
includes the recognition of vector and pixel as (context-dependent)  
keywords, the definition of built-in functions such as vec_add, and  
the use of parenthesized comma expression as AltiVec literals. Note  
that unlike the option -maltivec, the extension does not require the  
inclusion of any special header files; if <altivec.h> is included, a  
warning will be issued and the contents of the header will be  
ignored. The preprocessor shall provide an __APPLE_ALTIVEC__ manifest  
constant when -mpim-altivec is specified. (APPLE ONLY)

In addition, the -mpim-altivec option disables the inlining of  
functions containing AltiVec instructions into functions that do not  
make use of the vector unit. Certain other optimizations, such as  
inline vectorization of memset and memcpy calls, are also disabled.  
These adjustments make it possible to compile programs whose use of  
AltiVec instructions is preceded by a run-time check for the presence  
of AltiVec functionality, and that can therefore be made to run on G3  
processors. Note that all of these optimizations may be re-enabled by  
supplying the -maltivec option, or an -mcpu option specifying a  
processor that supports AltiVec instructions."





More information about the ffmpeg-devel mailing list