VirtualBox

source: vbox/trunk/src/libs/softfloat-3e/source/include/softfloat.h@ 98470

Last change on this file since 98470 was 98470, checked in by vboxsync, 2 years ago

VMM/IEM: Implementation of f32_rsqrt (inverse square root) in Softfloat library, bugref:9898

  • Property svn:eol-style set to native
File size: 24.7 KB
Line 
1
2/*============================================================================
3
4This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic
5Package, Release 3e, by John R. Hauser.
6
7Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the
8University of California. All rights reserved.
9
10Redistribution and use in source and binary forms, with or without
11modification, are permitted provided that the following conditions are met:
12
13 1. Redistributions of source code must retain the above copyright notice,
14 this list of conditions, and the following disclaimer.
15
16 2. Redistributions in binary form must reproduce the above copyright notice,
17 this list of conditions, and the following disclaimer in the documentation
18 and/or other materials provided with the distribution.
19
20 3. Neither the name of the University nor the names of its contributors may
21 be used to endorse or promote products derived from this software without
22 specific prior written permission.
23
24THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
25EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
27DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
28DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
35=============================================================================*/
36
37
38/*============================================================================
39| Note: If SoftFloat is made available as a general library for programs to
40| use, it is strongly recommended that a platform-specific version of this
41| header, "softfloat.h", be created that folds in "softfloat_types.h" and that
42| eliminates all dependencies on compile-time macros.
43*============================================================================*/
44
45
46#ifndef softfloat_h
47#define softfloat_h 1
48
49#include <iprt/cdefs.h>
50#ifndef __cplusplus
51#include <stdbool.h>
52#endif
53#include <stdint.h>
54#include "softfloat_types.h"
55
56#ifndef THREAD_LOCAL
57#define THREAD_LOCAL
58#endif
59
60RT_C_DECLS_BEGIN
61
62/*----------------------------------------------------------------------------
63| Software floating-point underflow tininess-detection mode.
64*----------------------------------------------------------------------------*/
65#ifndef VBOX_WITHOUT_SOFTFLOAT_GLOBALS
66extern THREAD_LOCAL uint_fast8_t softfloat_detectTininess;
67#else
68# define softfloat_detectTininess (pState->detectTininess)
69#endif
70enum {
71 softfloat_tininess_beforeRounding = 0,
72 softfloat_tininess_afterRounding = 1
73};
74
75/*----------------------------------------------------------------------------
76| Software floating-point rounding mode. (Mode "odd" is supported only if
77| SoftFloat is compiled with macro 'SOFTFLOAT_ROUND_ODD' defined.)
78*----------------------------------------------------------------------------*/
79#ifndef VBOX_WITHOUT_SOFTFLOAT_GLOBALS
80extern THREAD_LOCAL uint_fast8_t softfloat_roundingMode;
81#else
82# define softfloat_roundingMode (pState->roundingMode)
83#endif
84enum {
85 softfloat_round_near_even = 0,
86 softfloat_round_minMag = 1,
87 softfloat_round_min = 2,
88 softfloat_round_max = 3,
89 softfloat_round_near_maxMag = 4,
90 softfloat_round_odd = 6
91};
92
93/*----------------------------------------------------------------------------
94| Software floating-point exception flags.
95*----------------------------------------------------------------------------*/
96#ifndef VBOX_WITHOUT_SOFTFLOAT_GLOBALS
97extern THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags;
98#else
99# define softfloat_exceptionFlags (pState->exceptionFlags)
100#endif
101enum {
102#ifndef VBOX
103 softfloat_flag_inexact = 1,
104 softfloat_flag_underflow = 2,
105 softfloat_flag_overflow = 4,
106 softfloat_flag_infinite = 8,
107 softfloat_flag_invalid = 16
108#else /* VBox: Match X86_FSW_?E */
109 softfloat_flag_invalid = 1<<0 /**< X86_FSW_IE */,
110 softfloat_flag_denormal = 1<<1 /**< X86_FSW_DE - only returned by some VBox specific functions */,
111 softfloat_flag_infinite = 1<<2 /**< X86_FSW_ZE */,
112 softfloat_flag_overflow = 1<<3 /**< X86_FSW_OE */,
113 softfloat_flag_underflow = 1<<4 /**< X86_FSW_UE */,
114 softfloat_flag_inexact = 1<<5 /**< X86_FSW_PE */,
115 softfloat_flag_c1 = 1<<7 /**< X86_FSW_C1 - round up indicator. wrong place. */
116#endif
117};
118
119/*----------------------------------------------------------------------------
120| Routine to raise any or all of the software floating-point exception flags.
121*----------------------------------------------------------------------------*/
122void softfloat_raiseFlags( uint_fast8_t SOFTFLOAT_STATE_DECL_COMMA );
123
124/*----------------------------------------------------------------------------
125| Integer-to-floating-point conversion routines.
126*----------------------------------------------------------------------------*/
127float16_t ui32_to_f16( uint32_t SOFTFLOAT_STATE_DECL_COMMA );
128float32_t ui32_to_f32( uint32_t SOFTFLOAT_STATE_DECL_COMMA );
129float64_t ui32_to_f64( uint32_t SOFTFLOAT_STATE_DECL_COMMA );
130#ifdef SOFTFLOAT_FAST_INT64
131extFloat80_t ui32_to_extF80( uint32_t SOFTFLOAT_STATE_DECL_COMMA );
132float128_t ui32_to_f128( uint32_t SOFTFLOAT_STATE_DECL_COMMA );
133#endif
134void ui32_to_extF80M( uint32_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
135void ui32_to_f128M( uint32_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
136float16_t ui64_to_f16( uint64_t SOFTFLOAT_STATE_DECL_COMMA );
137float32_t ui64_to_f32( uint64_t SOFTFLOAT_STATE_DECL_COMMA );
138float64_t ui64_to_f64( uint64_t SOFTFLOAT_STATE_DECL_COMMA );
139#ifdef SOFTFLOAT_FAST_INT64
140extFloat80_t ui64_to_extF80( uint64_t SOFTFLOAT_STATE_DECL_COMMA );
141float128_t ui64_to_f128( uint64_t SOFTFLOAT_STATE_DECL_COMMA );
142#endif
143void ui64_to_extF80M( uint64_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
144void ui64_to_f128M( uint64_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
145float16_t i32_to_f16( int32_t SOFTFLOAT_STATE_DECL_COMMA );
146float32_t i32_to_f32( int32_t SOFTFLOAT_STATE_DECL_COMMA );
147float64_t i32_to_f64( int32_t SOFTFLOAT_STATE_DECL_COMMA );
148#ifdef SOFTFLOAT_FAST_INT64
149extFloat80_t i32_to_extF80( int32_t SOFTFLOAT_STATE_DECL_COMMA );
150float128_t i32_to_f128( int32_t SOFTFLOAT_STATE_DECL_COMMA );
151#endif
152void i32_to_extF80M( int32_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
153void i32_to_f128M( int32_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
154float16_t i64_to_f16( int64_t SOFTFLOAT_STATE_DECL_COMMA );
155float32_t i64_to_f32( int64_t SOFTFLOAT_STATE_DECL_COMMA );
156float64_t i64_to_f64( int64_t SOFTFLOAT_STATE_DECL_COMMA );
157#ifdef SOFTFLOAT_FAST_INT64
158extFloat80_t i64_to_extF80( int64_t SOFTFLOAT_STATE_DECL_COMMA );
159float128_t i64_to_f128( int64_t SOFTFLOAT_STATE_DECL_COMMA );
160#endif
161void i64_to_extF80M( int64_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
162void i64_to_f128M( int64_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
163
164/*----------------------------------------------------------------------------
165| 16-bit (half-precision) floating-point operations.
166*----------------------------------------------------------------------------*/
167uint_fast32_t f16_to_ui32( float16_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
168uint_fast64_t f16_to_ui64( float16_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
169int_fast32_t f16_to_i32( float16_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
170int_fast64_t f16_to_i64( float16_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
171uint_fast32_t f16_to_ui32_r_minMag( float16_t, bool SOFTFLOAT_STATE_DECL_COMMA );
172uint_fast64_t f16_to_ui64_r_minMag( float16_t, bool SOFTFLOAT_STATE_DECL_COMMA );
173int_fast32_t f16_to_i32_r_minMag( float16_t, bool SOFTFLOAT_STATE_DECL_COMMA );
174int_fast64_t f16_to_i64_r_minMag( float16_t, bool SOFTFLOAT_STATE_DECL_COMMA );
175float32_t f16_to_f32( float16_t SOFTFLOAT_STATE_DECL_COMMA );
176float64_t f16_to_f64( float16_t SOFTFLOAT_STATE_DECL_COMMA );
177#ifdef SOFTFLOAT_FAST_INT64
178extFloat80_t f16_to_extF80( float16_t SOFTFLOAT_STATE_DECL_COMMA );
179float128_t f16_to_f128( float16_t SOFTFLOAT_STATE_DECL_COMMA );
180#endif
181void f16_to_extF80M( float16_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
182void f16_to_f128M( float16_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
183float16_t f16_roundToInt( float16_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
184float16_t f16_add( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
185float16_t f16_sub( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
186float16_t f16_mul( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
187float16_t f16_mulAdd( float16_t, float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
188float16_t f16_div( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
189float16_t f16_rem( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
190float16_t f16_sqrt( float16_t SOFTFLOAT_STATE_DECL_COMMA );
191bool f16_eq( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
192bool f16_le( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
193bool f16_lt( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
194bool f16_eq_signaling( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
195bool f16_le_quiet( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
196bool f16_lt_quiet( float16_t, float16_t SOFTFLOAT_STATE_DECL_COMMA );
197bool f16_isSignalingNaN( float16_t );
198
199/*----------------------------------------------------------------------------
200| 32-bit (single-precision) floating-point operations.
201*----------------------------------------------------------------------------*/
202uint_fast32_t f32_to_ui32( float32_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
203uint_fast64_t f32_to_ui64( float32_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
204int_fast32_t f32_to_i32( float32_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
205int_fast64_t f32_to_i64( float32_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
206uint_fast32_t f32_to_ui32_r_minMag( float32_t, bool SOFTFLOAT_STATE_DECL_COMMA );
207uint_fast64_t f32_to_ui64_r_minMag( float32_t, bool SOFTFLOAT_STATE_DECL_COMMA );
208int_fast32_t f32_to_i32_r_minMag( float32_t, bool SOFTFLOAT_STATE_DECL_COMMA );
209int_fast64_t f32_to_i64_r_minMag( float32_t, bool SOFTFLOAT_STATE_DECL_COMMA );
210float16_t f32_to_f16( float32_t SOFTFLOAT_STATE_DECL_COMMA );
211float64_t f32_to_f64( float32_t SOFTFLOAT_STATE_DECL_COMMA );
212#ifdef SOFTFLOAT_FAST_INT64
213extFloat80_t f32_to_extF80( float32_t SOFTFLOAT_STATE_DECL_COMMA );
214float128_t f32_to_f128( float32_t SOFTFLOAT_STATE_DECL_COMMA );
215#endif
216void f32_to_extF80M( float32_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
217void f32_to_f128M( float32_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
218float32_t f32_roundToInt( float32_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
219float32_t f32_add( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
220float32_t f32_sub( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
221float32_t f32_mul( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
222float32_t f32_mulAdd( float32_t, float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
223float32_t f32_div( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
224float32_t f32_rem( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
225float32_t f32_sqrt( float32_t SOFTFLOAT_STATE_DECL_COMMA );
226float32_t f32_rsqrt( float32_t SOFTFLOAT_STATE_DECL_COMMA );
227bool f32_eq( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
228bool f32_le( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
229bool f32_lt( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
230bool f32_eq_signaling( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
231bool f32_le_quiet( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
232bool f32_lt_quiet( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
233bool f32_isSignalingNaN( float32_t );
234
235/*----------------------------------------------------------------------------
236| 64-bit (double-precision) floating-point operations.
237*----------------------------------------------------------------------------*/
238uint_fast32_t f64_to_ui32( float64_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
239uint_fast64_t f64_to_ui64( float64_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
240int_fast32_t f64_to_i32( float64_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
241int_fast64_t f64_to_i64( float64_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
242uint_fast32_t f64_to_ui32_r_minMag( float64_t, bool SOFTFLOAT_STATE_DECL_COMMA );
243uint_fast64_t f64_to_ui64_r_minMag( float64_t, bool SOFTFLOAT_STATE_DECL_COMMA );
244int_fast32_t f64_to_i32_r_minMag( float64_t, bool SOFTFLOAT_STATE_DECL_COMMA );
245int_fast64_t f64_to_i64_r_minMag( float64_t, bool SOFTFLOAT_STATE_DECL_COMMA );
246float16_t f64_to_f16( float64_t SOFTFLOAT_STATE_DECL_COMMA );
247float32_t f64_to_f32( float64_t SOFTFLOAT_STATE_DECL_COMMA );
248#ifdef SOFTFLOAT_FAST_INT64
249extFloat80_t f64_to_extF80( float64_t SOFTFLOAT_STATE_DECL_COMMA );
250float128_t f64_to_f128( float64_t SOFTFLOAT_STATE_DECL_COMMA );
251#endif
252void f64_to_extF80M( float64_t, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
253void f64_to_f128M( float64_t, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
254float64_t f64_roundToInt( float64_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
255float64_t f64_add( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
256float64_t f64_sub( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
257float64_t f64_mul( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
258float64_t f64_mulAdd( float64_t, float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
259float64_t f64_div( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
260float64_t f64_rem( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
261float64_t f64_sqrt( float64_t SOFTFLOAT_STATE_DECL_COMMA );
262bool f64_eq( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
263bool f64_le( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
264bool f64_lt( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
265bool f64_eq_signaling( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
266bool f64_le_quiet( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
267bool f64_lt_quiet( float64_t, float64_t SOFTFLOAT_STATE_DECL_COMMA );
268bool f64_isSignalingNaN( float64_t );
269
270/*----------------------------------------------------------------------------
271| Rounding precision for 80-bit extended double-precision floating-point.
272| Valid values are 32, 64, and 80.
273*----------------------------------------------------------------------------*/
274#ifndef VBOX_WITHOUT_SOFTFLOAT_GLOBALS
275extern THREAD_LOCAL uint_fast8_t extF80_roundingPrecision;
276#else
277# define extF80_roundingPrecision (pState->roundingPrecision)
278#endif
279
280/*----------------------------------------------------------------------------
281| 80-bit extended double-precision floating-point operations.
282*----------------------------------------------------------------------------*/
283#ifdef SOFTFLOAT_FAST_INT64
284uint_fast32_t extF80_to_ui32( extFloat80_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
285uint_fast64_t extF80_to_ui64( extFloat80_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
286int_fast32_t extF80_to_i32( extFloat80_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
287int_fast64_t extF80_to_i64( extFloat80_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
288uint_fast32_t extF80_to_ui32_r_minMag( extFloat80_t, bool SOFTFLOAT_STATE_DECL_COMMA );
289uint_fast64_t extF80_to_ui64_r_minMag( extFloat80_t, bool SOFTFLOAT_STATE_DECL_COMMA );
290int_fast32_t extF80_to_i32_r_minMag( extFloat80_t, bool SOFTFLOAT_STATE_DECL_COMMA );
291int_fast64_t extF80_to_i64_r_minMag( extFloat80_t, bool SOFTFLOAT_STATE_DECL_COMMA );
292float16_t extF80_to_f16( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
293float32_t extF80_to_f32( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
294float64_t extF80_to_f64( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
295float128_t extF80_to_f128( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
296extFloat80_t extF80_roundToInt( extFloat80_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
297extFloat80_t extF80_add( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
298extFloat80_t extF80_sub( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
299extFloat80_t extF80_mul( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
300extFloat80_t extF80_div( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
301extFloat80_t extF80_rem( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
302extFloat80_t extF80_partialRem( extFloat80_t a, extFloat80_t b, uint8_t roundingMode, /* VBox: FPREM/FPREM1 */
303 uint16_t *pfCxFlags, softfloat_state_t *pState ); /* VBox: FPREM/FPREM1 */
304extFloat80_t extF80_sqrt( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
305extFloat80_t extF80_sin( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
306extFloat80_t extF80_cos( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
307void extF80_sincos( extFloat80_t, extFloat80_t*, extFloat80_t* SOFTFLOAT_STATE_DECL_COMMA );
308extFloat80_t extF80_atan2( extFloat80_t y, extFloat80_t x SOFTFLOAT_STATE_DECL_COMMA );
309extFloat80_t extF80_ylog2x( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
310extFloat80_t extF80_ylog2xp1( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
311extFloat80_t extF80_tan( extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
312extFloat80_t extF80_scale_extF80( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
313bool extF80_eq( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
314bool extF80_le( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
315bool extF80_lt( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
316bool extF80_eq_signaling( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
317bool extF80_le_quiet( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
318bool extF80_lt_quiet( extFloat80_t, extFloat80_t SOFTFLOAT_STATE_DECL_COMMA );
319bool extF80_isSignalingNaN( extFloat80_t );
320#endif
321uint_fast32_t extF80M_to_ui32( const extFloat80_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
322uint_fast64_t extF80M_to_ui64( const extFloat80_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
323int_fast32_t extF80M_to_i32( const extFloat80_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
324int_fast64_t extF80M_to_i64( const extFloat80_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
325uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
326uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
327int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
328int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
329float16_t extF80M_to_f16( const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
330float32_t extF80M_to_f32( const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
331float64_t extF80M_to_f64( const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
332void extF80M_to_f128M( const extFloat80_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
333void
334 extF80M_roundToInt(
335 const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
336void extF80M_add( const extFloat80_t *, const extFloat80_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
337void extF80M_sub( const extFloat80_t *, const extFloat80_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
338void extF80M_mul( const extFloat80_t *, const extFloat80_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
339void extF80M_div( const extFloat80_t *, const extFloat80_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
340void extF80M_rem( const extFloat80_t *, const extFloat80_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
341void extF80M_sqrt( const extFloat80_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
342bool extF80M_eq( const extFloat80_t *, const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
343bool extF80M_le( const extFloat80_t *, const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
344bool extF80M_lt( const extFloat80_t *, const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
345bool extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
346bool extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
347bool extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
348bool extF80M_isSignalingNaN( const extFloat80_t * );
349
350/*----------------------------------------------------------------------------
351| 128-bit (quadruple-precision) floating-point operations.
352*----------------------------------------------------------------------------*/
353#ifdef SOFTFLOAT_FAST_INT64
354uint_fast32_t f128_to_ui32( float128_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
355uint_fast64_t f128_to_ui64( float128_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
356int_fast32_t f128_to_i32( float128_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
357int_fast64_t f128_to_i64( float128_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
358uint_fast32_t f128_to_ui32_r_minMag( float128_t, bool SOFTFLOAT_STATE_DECL_COMMA );
359uint_fast64_t f128_to_ui64_r_minMag( float128_t, bool SOFTFLOAT_STATE_DECL_COMMA );
360int_fast32_t f128_to_i32_r_minMag( float128_t, bool SOFTFLOAT_STATE_DECL_COMMA );
361int_fast64_t f128_to_i64_r_minMag( float128_t, bool SOFTFLOAT_STATE_DECL_COMMA );
362float16_t f128_to_f16( float128_t SOFTFLOAT_STATE_DECL_COMMA );
363float32_t f128_to_f32( float128_t SOFTFLOAT_STATE_DECL_COMMA );
364float64_t f128_to_f64( float128_t SOFTFLOAT_STATE_DECL_COMMA );
365extFloat80_t f128_to_extF80( float128_t SOFTFLOAT_STATE_DECL_COMMA );
366float128_t f128_roundToInt( float128_t, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
367float128_t f128_add( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
368float128_t f128_sub( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
369float128_t f128_mul( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
370float128_t f128_mulAdd( float128_t, float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
371float128_t f128_div( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
372float128_t f128_rem( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
373float128_t f128_sqrt( float128_t SOFTFLOAT_STATE_DECL_COMMA );
374bool f128_eq( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
375bool f128_le( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
376bool f128_lt( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
377bool f128_eq_signaling( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
378bool f128_le_quiet( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
379bool f128_lt_quiet( float128_t, float128_t SOFTFLOAT_STATE_DECL_COMMA );
380bool f128_isSignalingNaN( float128_t );
381#endif
382uint_fast32_t f128M_to_ui32( const float128_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
383uint_fast64_t f128M_to_ui64( const float128_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
384int_fast32_t f128M_to_i32( const float128_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
385int_fast64_t f128M_to_i64( const float128_t *, uint_fast8_t, bool SOFTFLOAT_STATE_DECL_COMMA );
386uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
387uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
388int_fast32_t f128M_to_i32_r_minMag( const float128_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
389int_fast64_t f128M_to_i64_r_minMag( const float128_t *, bool SOFTFLOAT_STATE_DECL_COMMA );
390float16_t f128M_to_f16( const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
391float32_t f128M_to_f32( const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
392float64_t f128M_to_f64( const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
393void f128M_to_extF80M( const float128_t *, extFloat80_t * SOFTFLOAT_STATE_DECL_COMMA );
394void f128M_roundToInt( const float128_t *, uint_fast8_t, bool, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
395void f128M_add( const float128_t *, const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
396void f128M_sub( const float128_t *, const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
397void f128M_mul( const float128_t *, const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
398void
399 f128M_mulAdd(
400 const float128_t *, const float128_t *, const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA
401 );
402void f128M_div( const float128_t *, const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
403void f128M_rem( const float128_t *, const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
404void f128M_sqrt( const float128_t *, float128_t * SOFTFLOAT_STATE_DECL_COMMA );
405bool f128M_eq( const float128_t *, const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
406bool f128M_le( const float128_t *, const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
407bool f128M_lt( const float128_t *, const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
408bool f128M_eq_signaling( const float128_t *, const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
409bool f128M_le_quiet( const float128_t *, const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
410bool f128M_lt_quiet( const float128_t *, const float128_t * SOFTFLOAT_STATE_DECL_COMMA );
411bool f128M_isSignalingNaN( const float128_t * );
412
413RT_C_DECLS_END
414
415#endif
416
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette