|
|
<?xml version="1.0" encoding="UTF-8"?> |
|
|
<!-- |
|
|
Copyright (c) 2017 OpenPOWER Foundation |
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
you may not use this file except in compliance with the License. |
|
|
You may obtain a copy of the License at |
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software |
|
|
distributed under the License is distributed on an "AS IS" BASIS, |
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
See the License for the specific language governing permissions and |
|
|
limitations under the License. |
|
|
|
|
|
--> |
|
|
<section xmlns="http://docbook.org/ns/docbook" |
|
|
xmlns:xi="http://www.w3.org/2001/XInclude" |
|
|
xmlns:xlink="http://www.w3.org/1999/xlink" |
|
|
version="5.0" |
|
|
xml:id="sec_review_source"> |
|
|
<title>Look at the source, Luke</title> |
|
|
|
|
|
<para>So if this is a code porting activity, where is the source? All the |
|
|
source code we need to look at is in the GCC source trees. You can either git |
|
|
(<link xlink:href="https://gcc.gnu.org/wiki/GitMirror">https://gcc.gnu.org/wiki/GitMirro</link>) |
|
|
the gcc source or download one of the |
|
|
recent AT source tars (for example: |
|
|
<link xlink:href="ftp://ftp.unicamp.br/pub/linuxpatch/toolchain/at/ubuntu/dists/xenial/at10.0/">ftp://ftp.unicamp.br/pub/linuxpatch/toolchain/at/ubuntu/dists/xenial/at10.0/</link>). |
|
|
You will find the intrinsic headers in the ./gcc/config/i386/ |
|
|
sub-directory.</para> |
|
|
|
|
|
<para>If you have an Intel Linux workstation or laptop with GCC installed, |
|
|
you already have these headers, if you want to take a look: |
|
|
<screen><prompt>$ </prompt><userinput>find /usr/lib -name '*mmintrin.h'</userinput> |
|
|
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/wmmintrin.h |
|
|
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/mmintrin.h |
|
|
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/xmmintrin.h |
|
|
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/emmintrin.h |
|
|
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/tmmintrin.h |
|
|
... |
|
|
<prompt>$ </prompt></screen></para> |
|
|
|
|
|
<para>But depending on the vintage of the distro, these may not be the |
|
|
latest versions of the headers. Looking at the header source will tell you a |
|
|
few things: the include structure (what other headers are implicitly |
|
|
included), the types that are used at the API, and finally, how the API is |
|
|
implemented.</para> |
|
|
|
|
|
<para><literallayout>smmintrin.h (SSE4.1) includes tmmintrin,h |
|
|
tmmintrin.h (SSSE3) includes pmmintrin.h |
|
|
pmmintrin.h (SSE3) includes emmintrin,h |
|
|
emmintrin.h (SSE2) includes xmmintrin.h |
|
|
xmmintrin.h (SSE) includes mmintrin.h and mm_malloc.h |
|
|
mmintrin.h (MMX)</literallayout></para> |
|
|
|
|
|
<xi:include href="sec_intel_intrinsic_includes.xml"/> |
|
|
<xi:include href="sec_intel_intrinsic_types.xml"/> |
|
|
<xi:include href="sec_api_implemented.xml"/> |
|
|
|
|
|
|
|
|
</section> |
|
|
|
|
|
|