blob: a186b74bfd665a046b8ea9d13d6d9a26c1e1e356 [file] [log] [blame]
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>3.9. Using VFP Floating Point</title><link rel="stylesheet" href="cs.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.74.0"><link rel="home" href="index.html" title="Sourcery G++ Lite"><link rel="up" href="chap-target.html" title="Chapter 3. Sourcery G++ Lite for ARM GNU/Linux"><link rel="prev" href="sec-backtrace.html" title="3.8. GLIBC Backtrace Support"><link rel="next" href="sec-arm-fixed-point.html" title="3.10. Fixed-Point Arithmetic"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.9. Using VFP Floating Point</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="sec-backtrace.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Sourcery G++ Lite for ARM GNU/Linux</th><td width="20%" align="right"> <a accesskey="n" href="sec-arm-fixed-point.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sec-armfloat"></a>3.9. Using VFP Floating Point</h2></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sec-armfloat-abi"></a>3.9.1. Enabling Hardware Floating Point</h3></div></div></div><p>
GCC provides three basic options for compiling floating-point code:
</p><div class="itemizedlist"><ul type="disc"><li>
Software floating point emulation, which is the default.
In this case, the compiler implements floating-point arithmetic
by means of library calls.
</li><li>
VFP hardware floating-point support using the soft-float ABI.
This is selected by the <code class="option">-mfloat-abi=softfp</code> option.
When you select this variant,
the compiler generates VFP floating-point instructions, but the
resulting code uses the same call and return conventions as
code compiled with software floating point.
</li><li>
VFP hardware floating-point support using the VFP ABI, which
is the VFP variant of the Procedure Call Standard for
the <span class="trademark">ARM</span>®
Architecture (AAPCS). This ABI uses VFP registers to
pass function arguments and return values, resulting in
faster floating-point code. To use this variant, compile
with <code class="option">-mfloat-abi=hard</code>.
</li></ul></div><p>
</p><p>
You can freely mix code compiled with either of the first two variants
in the same program, as they both use the same soft-float ABI.
However, code compiled with the VFP ABI is not link-compatible with
either of the other two options.
If you use the VFP ABI, you must use this option to compile your
entire program, and link with libraries that have also been compiled
with the VFP ABI.
For example, you may need to use the VFP ABI in order to link your
program with other code compiled by the ARM
<span class="trademark">RealView</span>® compiler,
which uses this ABI.
</p><p>
Sourcery G++ Lite for ARM GNU/Linux includes libraries built with
software floating point,
which are compatible with VFP code compiled using the soft-float ABI.
<span>
While the compiler is capable of generating code using the VFP ABI,
no compatible runtime libraries are provided in Sourcery G++ Lite.
However, VFP hard-float libraries built with both ABIs are available
to Sourcery G++ Standard and Professional Edition subscribers.
</span>
</p><p>
Note that, in addition to selecting hard/soft float and the ABI
via the <code class="option">-mfloat-abi</code> option,
you can also compile for a particular FPU using
the <code class="option">-mfpu</code> option.
For example, <code class="option">-mfpu=neon</code> selects VFPv3 with NEON
coprocessor extensions.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id278736"></a>3.9.2. NEON SIMD Code</h3></div></div></div><p>
Sourcery G++ includes support for automatic generation of NEON
SIMD vector code. Autovectorization is a compiler optimization
in which loops involving normal integer or floating-point code are
transformed to use NEON SIMD instructions to process several data
elements at once.
</p><p>
To enable generation of NEON vector code, use the command-line options
<code class="option">-ftree-vectorize -mfpu=neon -mfloat-abi=softfp</code>.
The <code class="option">-mfpu=neon</code> option
also enables generation of VFPv3 scalar floating-point code.
</p><p>
Sourcery G++ also includes support for manual generation
of NEON SIMD code using C intrinsic functions. These intrinsics,
the same as those supported by the ARM
<span class="trademark">RealView</span>® compiler, are defined
in the <code class="filename">arm_neon.h</code> header
and are documented in the 'ARM NEON Intrinsics' section of the GCC
manual. The command-line options <code class="option">-mfpu=neon
-mfloat-abi=softfp</code> must be specified to use these
intrinsics; <code class="option">-ftree-vectorize</code> is not required.
</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sec-arm-fp16"></a>3.9.3. Half-Precision Floating Point</h3></div></div></div><p>
Sourcery G++ for ARM GNU/Linux includes support for half-precision
(16-bit) floating point, including the new <code class="type">__fp16</code> data
type in C and C++, support for generating conversion instructions when
compiling for processors that support them, and library functions for
use in other cases.
</p><p>
To use half-precision floating point, you must explicitly enable it
via the <code class="option">-mfp16-format</code> command-line option to the
compiler. For more information about <code class="type">__fp16</code> representations
and usage from C and C++, refer to the GCC manual.
</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sec-backtrace.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="chap-target.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sec-arm-fixed-point.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3.8. GLIBC Backtrace Support </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 3.10. Fixed-Point Arithmetic</td></tr></table></div></body></html>