
The \eslmod{sse} module provides a few vectorized functions that use
the Intel/AMD SSE (Streaming SIMD Extensions) Intrinsics: most
importantly, vectorized \ccode{logf()} and \ccode{expf()} routines.

The \eslmod{sse} module is only available on platforms that support
SSE, SSE2, and SSE4.1 instructions. This includes all modern Intel and
AMD processors (since Intel Penryn in 2007, and AMD Bulldozer, Jaguar,
and Piledriver processors since 2011), but not PowerPC processors. By
default, the Easel configure script enables SSE if it is available on
the compilation machine.


\begin{table}[hbp]
\begin{center}
{\small
\begin{tabular}{|ll|}\hline
\hyperlink{func:esl_sse_logf()}{\ccode{esl\_sse\_logf()}} & \ccode{r[z] = log x[z]}\\
\hyperlink{func:esl_sse_expf()}{\ccode{esl\_sse\_expf()}} & \ccode{r[z] = exp x[z]}\\
%\hyperlink{func:esl_sse_select_ps()}{\ccode{esl\_sse\_select\_ps()}} & SSE equivalent of \ccode{vec\_sel()}\\
\hline
\end{tabular}
}
\end{center}
\caption{The \eslmod{sse} API.}
\label{tbl:sse_api}
\end{table}

\subsection{An example of using the sse API}

Figure~\ref{fig:sse_example} shows an example of calculating
\ccode{logf()} and \ccode{expf()} on an SSE \ccode{\_\_m128} vector
containing four floats. It also shows a useful \ccode{union} idiom for
accessing four floats either as an SSE vector or as individual floats.

\begin{figure}[ht]
\input{cexcerpts/sse_example}
\caption{An example of using the \eslmod{sse} module.}
\label{fig:sse_example}
\end{figure}

