# vecabi, Qvecabi

Determines which vector function application binary interface (ABI) the compiler uses to create or call vector functions. This feature is only available for ifort.

## Syntax

Linux: | -vecabi=keyword

macOS: | -vecabi=keyword

Windows: | /Qvecabi:keyword

## Arguments

keyword | Specifies which vector function ABI to use. Possible values are:
compat | Tells the compiler to use the compatibility vector function ABI. This ABI includes Intel®-specific features.
cmdtarget | Tells the compiler to generate an extended set of vector functions. The option is very similar to setting compat. However, for compat, only one vector function is created, while for cmdtarget, several vector functions are created for each vector specification. Vector variants are created for targets specified by compiler options [Q]x and/or [Q]ax. No change is made to the source code.
gcc | Tells the compiler to use the gcc vector function ABI. Use this setting only in cases when you want to link with modules compiled by gcc. This setting is not available on Windows* systems.
legacy | Tells the compiler to use the legacy vector function ABI. Use this setting if you need to keep the generated vector function binary backward compatible with the vectorized binary generated by older versions of the Intel® compilers (V13.1 or older).

## Default

compat | The compiler uses the compatibility vector function ABI.

## Description

This option determines which vector function application binary interface (ABI) the compiler uses to create or call vector functions.

### Note

To avoid possible link-time and runtime errors, use identical [Q]vecabi settings when compiling all files in an application that define or use vector functions, including libraries. If setting cmdtarget is specified, options [Q]x and/or [Q]ax must have identical values.

Be careful using setting cmdtarget with libraries or program modules/routines with vector function definitions that cannot be recompiled. In such cases, setting cmdtarget may cause link errors.

On Linux* systems, since the default is compat, you must specify legacy if you need to keep the generated vector function binary backward compatible with the vectorized binary generated by the previous version of Intel® compilers.

When cmdtarget is specified, the additional vector function versions are created by copying each vector specification and changing target processor in the copy. The number of vector functions is determined by the settings specified in options [Q]x and/or [Q]ax.

For example, suppose we have the following function declaration:

    interface
    integer function foo(a)
    !dir$ attributes vector:(processor(core_2_duo_sse4_1)) :: foo
        integer a
    end function
    end interface

and the following options are specified: -axAVX,CORE-AVX2

The following table shows the different results for the above declaration and option specifications when setting compat or setting cmdtarget is used:

compat | cmdtarget
--- | ---
One vector version is created for Intel® SSE4.1 (by vector function specification). | Four vector versions are created for the following targets: Intel® SSE2 (default because no -x option is used) Intel® SSE4.1 (by vector function specification) Intel® AVX (by the first -ax option value) Intel® AVX2 (by the second -ax option value)

For more information about the Intel®-compatible vector functions ABI, see the downloadable PDF titled Vector Function Application Binary Interface.

For more information about the GCC vector functions ABI, see the item Libmvec - vector math library document in the GLIBC wiki at sourceware.org.

Product and Performance Information
Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex. Notice revision #20201201

## IDE Equivalent

None

## Alternate Options

None

Parent topic: Advanced Optimization Options