• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Half-Precision - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="C-Extensions.html#C-Extensions" title="C Extensions">
9<link rel="prev" href="Floating-Types.html#Floating-Types" title="Floating Types">
10<link rel="next" href="Decimal-Float.html#Decimal-Float" title="Decimal Float">
11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12<!--
13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
152010 Free Software Foundation, Inc.
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with the
20Invariant Sections being ``Funding Free Software'', the Front-Cover
21Texts being (a) (see below), and with the Back-Cover Texts being (b)
22(see below).  A copy of the license is included in the section entitled
23``GNU Free Documentation License''.
24
25(a) The FSF's Front-Cover Text is:
26
27     A GNU Manual
28
29(b) The FSF's Back-Cover Text is:
30
31     You have freedom to copy and modify this GNU Manual, like GNU
32     software.  Copies published by the Free Software Foundation raise
33     funds for GNU development.-->
34<meta http-equiv="Content-Style-Type" content="text/css">
35<style type="text/css"><!--
36  pre.display { font-family:inherit }
37  pre.format  { font-family:inherit }
38  pre.smalldisplay { font-family:inherit; font-size:smaller }
39  pre.smallformat  { font-family:inherit; font-size:smaller }
40  pre.smallexample { font-size:smaller }
41  pre.smalllisp    { font-size:smaller }
42  span.sc    { font-variant:small-caps }
43  span.roman { font-family:serif; font-weight:normal; } 
44  span.sansserif { font-family:sans-serif; font-weight:normal; } 
45--></style>
46<link rel="stylesheet" type="text/css" href="../cs.css">
47</head>
48<body>
49<div class="node">
50<a name="Half-Precision"></a>
51<a name="Half_002dPrecision"></a>
52<p>
53Next:&nbsp;<a rel="next" accesskey="n" href="Decimal-Float.html#Decimal-Float">Decimal Float</a>,
54Previous:&nbsp;<a rel="previous" accesskey="p" href="Floating-Types.html#Floating-Types">Floating Types</a>,
55Up:&nbsp;<a rel="up" accesskey="u" href="C-Extensions.html#C-Extensions">C Extensions</a>
56<hr>
57</div>
58
59<h3 class="section">6.12 Half-Precision Floating Point</h3>
60
61<p><a name="index-half_002dprecision-floating-point-2294"></a><a name="index-g_t_0040code_007b_005f_005ffp16_007d-data-type-2295"></a>
62On ARM targets, GCC supports half-precision (16-bit) floating point via
63the <code>__fp16</code> type.  You must enable this type explicitly
64with the <samp><span class="option">-mfp16-format</span></samp> command-line option in order to use it.
65
66 <p>ARM supports two incompatible representations for half-precision
67floating-point values.  You must choose one of the representations and
68use it consistently in your program.
69
70 <p>Specifying <samp><span class="option">-mfp16-format=ieee</span></samp> selects the IEEE 754-2008 format. 
71This format can represent normalized values in the range of 2^-14 to 65504. 
72There are 11 bits of significand precision, approximately 3
73decimal digits.
74
75 <p>Specifying <samp><span class="option">-mfp16-format=alternative</span></samp> selects the ARM
76alternative format.  This representation is similar to the IEEE
77format, but does not support infinities or NaNs.  Instead, the range
78of exponents is extended, so that this format can represent normalized
79values in the range of 2^-14 to 131008.
80
81 <p>The <code>__fp16</code> type is a storage format only.  For purposes
82of arithmetic and other operations, <code>__fp16</code> values in C or C++
83expressions are automatically promoted to <code>float</code>.  In addition,
84you cannot declare a function with a return value or parameters
85of type <code>__fp16</code>.
86
87 <p>Note that conversions from <code>double</code> to <code>__fp16</code>
88involve an intermediate conversion to <code>float</code>.  Because
89of rounding, this can sometimes produce a different result than a
90direct conversion.
91
92 <p>ARM provides hardware support for conversions between
93<code>__fp16</code> and <code>float</code> values
94as an extension to VFP and NEON (Advanced SIMD).  GCC generates
95code using these hardware instructions if you compile with
96options to select an FPU that provides them;
97for example, <samp><span class="option">-mfpu=neon-fp16 -mfloat-abi=softfp</span></samp>,
98in addition to the <samp><span class="option">-mfp16-format</span></samp> option to select
99a half-precision format.
100
101 <p>Language-level support for the <code>__fp16</code> data type is
102independent of whether GCC generates code using hardware floating-point
103instructions.  In cases where hardware support is not specified, GCC
104implements conversions between <code>__fp16</code> and <code>float</code> values
105as library calls.
106
107 </body></html>
108
109