All Manuals > Foreign Language Interface User Guide and Reference Manual > 7 Function, Macro and Variable Reference

*use-sse2-for-ext-vector-type* Variable


32-bit x86 specific: control whether to pass/receive vector type arguments/results using SSE2.



Initial Value

t on macOS, nil on other platforms.


On 32-bit x86 platforms, the variable *use-sse2-for-ext-vector-type* controls whether the code that is generated by foreign interface definitions that pass or receive vector type arguments or results (see 2.2.4 Vector types) uses SSE2 to pass or receive these arguments or results.

SSE2 is a feature of the x86 CPU, which was introduced by Intel in 2001, and is supported by all new x86 CPUs. However, the C compiler can still pass arguments without using SSE2 for backwards compatibility. The Lisp definitions must pass/receive arguments in the same way that as the C compiler that compiled the foreign code they call/are called from.

On macOS, code always uses SSE2, so *use-sse2-for-ext-vector-type* is set to t initially and you should not change it. On other platforms (Linux, FreeBSD, Solaris) the situation is less clear.

*use-sse2-for-ext-vector-type* affects the code at macro expansion time, so if you use compile-file and later load the compiled file, the value of *use-sse2-for-ext-vector-type* at the time of compile-file determine what the code does. When evaluating the definition, the value at the time of evaluating the definition determines what the code does.


On FreeBSD, the default C compiler is Clang, which currently (Dec 2016 in FreeBSD 10.3) does not use SSE2 by default, and therefore matches what LispWorks does by default.

On other platforms, or using other compilers or newer versions of Clang, if you use vector types then you will need to check what the C compiler does. If you have any doubt, contact LispWorks support.

See also

2.2.4 Vector types

Foreign Language Interface User Guide and Reference Manual - 01 Dec 2021 19:34:58