|
|
<?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_performance_mmx"> |
|
|
<title>Using MMX intrinsics</title> |
|
|
|
|
|
<para>MMX was the first and oldest SIMD extension and initially filled a |
|
|
need for wider (64-bit) integer and additional registers. This is back when |
|
|
processors were 32-bit and 8 x 32-bit registers was starting to cramp our |
|
|
programming style. Now 64-bit processors, larger register sets, and 128-bit (or |
|
|
larger) vector SIMD extensions are common. There is simply no good reason to |
|
|
write new code using the (now) very limited MMX capabilities. </para> |
|
|
|
|
|
<para>We recommend that existing MMX codes be rewritten to use the newer |
|
|
SSE and VMX/VSX intrinsics or using the more portable GCC builtin vector |
|
|
support or in the case of si64 operations use C scalar code. The MMX si64 |
|
|
scalars are just (64-bit) operations on long long int types and any |
|
|
modern C compiler can handle this type. The char / short in SIMD operations |
|
|
should all be promoted to 128-bit SIMD operations on GCC builtin vectors. Both |
|
|
will improve cross platform portability and performance.</para> |
|
|
|
|
|
</section> |
|
|
|
|
|
|