softfloat_rs/
lib.rs

1// SPDX-License-Identifier: BSD-3-Clause
2// See Notices.txt for copyright information
3#![cfg_attr(not(test), no_std)]
4#![allow(non_snake_case, non_camel_case_types, non_upper_case_globals)]
5pub type uint_fast64_t = u64;
6pub type uint_fast32_t = u32;
7pub type uint_fast8_t = u8;
8pub type int_fast64_t = i64;
9pub type int_fast32_t = i32;
10pub type int_fast8_t = i8;
11
12extern "C" {
13    pub fn softfloat_detectTininess_read_helper() -> uint_fast8_t;
14    pub fn softfloat_detectTininess_write_helper(v: uint_fast8_t);
15    pub fn softfloat_roundingMode_read_helper() -> uint_fast8_t;
16    pub fn softfloat_roundingMode_write_helper(v: uint_fast8_t);
17    pub fn softfloat_exceptionFlags_read_helper() -> uint_fast8_t;
18    pub fn softfloat_exceptionFlags_write_helper(v: uint_fast8_t);
19    pub fn extF80_roundingPrecision_read_helper() -> uint_fast8_t;
20    pub fn extF80_roundingPrecision_write_helper(v: uint_fast8_t);
21}
22
23#[derive(Copy, Clone, Debug)]
24#[repr(C)]
25pub struct float16_t {
26    pub v: u16,
27}
28
29#[derive(Copy, Clone, Debug)]
30#[repr(C)]
31pub struct float32_t {
32    pub v: u32,
33}
34
35#[derive(Copy, Clone, Debug)]
36#[repr(C)]
37pub struct float64_t {
38    pub v: u64,
39}
40
41#[derive(Copy, Clone, Debug)]
42#[repr(C)]
43pub struct float128_t {
44    pub v: [u64; 2],
45}
46
47#[cfg(target_endian = "little")]
48#[derive(Copy, Clone, Debug)]
49#[repr(C)]
50pub struct extFloat80M {
51    pub signif: u64,
52    pub signExp: u16,
53}
54
55#[cfg(target_endian = "big")]
56#[derive(Copy, Clone, Debug)]
57#[repr(C)]
58pub struct extFloat80M {
59    pub signExp: u16,
60    pub signif: u64,
61}
62
63pub type extFloat80_t = extFloat80M;
64
65pub const softfloat_tininess_beforeRounding: u8 = 0;
66pub const softfloat_tininess_afterRounding: u8 = 1;
67
68pub const softfloat_round_near_even: u8 = 0;
69pub const softfloat_round_minMag: u8 = 1;
70pub const softfloat_round_min: u8 = 2;
71pub const softfloat_round_max: u8 = 3;
72pub const softfloat_round_near_maxMag: u8 = 4;
73pub const softfloat_round_odd: u8 = 6;
74
75pub const softfloat_flag_inexact: u8 = 1;
76pub const softfloat_flag_underflow: u8 = 2;
77pub const softfloat_flag_overflow: u8 = 4;
78pub const softfloat_flag_infinite: u8 = 8;
79pub const softfloat_flag_invalid: u8 = 16;
80
81extern "C" {
82    pub fn softfloat_raiseFlags(_: uint_fast8_t);
83
84    pub fn ui32_to_f16(_: u32) -> float16_t;
85    pub fn ui32_to_f32(_: u32) -> float32_t;
86    pub fn ui32_to_f64(_: u32) -> float64_t;
87    pub fn ui32_to_extF80(_: u32) -> extFloat80_t;
88    pub fn ui32_to_f128(_: u32) -> float128_t;
89    pub fn ui32_to_extF80M(_: u32, _: *mut extFloat80_t);
90    pub fn ui32_to_f128M(_: u32, _: *mut float128_t);
91    pub fn ui64_to_f16(_: u64) -> float16_t;
92    pub fn ui64_to_f32(_: u64) -> float32_t;
93    pub fn ui64_to_f64(_: u64) -> float64_t;
94    pub fn ui64_to_extF80(_: u64) -> extFloat80_t;
95    pub fn ui64_to_f128(_: u64) -> float128_t;
96
97    pub fn ui64_to_extF80M(_: u64, _: *mut extFloat80_t);
98    pub fn ui64_to_f128M(_: u64, _: *mut float128_t);
99    pub fn i32_to_f16(_: i32) -> float16_t;
100    pub fn i32_to_f32(_: i32) -> float32_t;
101    pub fn i32_to_f64(_: i32) -> float64_t;
102    pub fn i32_to_extF80(_: i32) -> extFloat80_t;
103    pub fn i32_to_f128(_: i32) -> float128_t;
104
105    pub fn i32_to_extF80M(_: i32, _: *mut extFloat80_t);
106    pub fn i32_to_f128M(_: i32, _: *mut float128_t);
107    pub fn i64_to_f16(_: i64) -> float16_t;
108    pub fn i64_to_f32(_: i64) -> float32_t;
109    pub fn i64_to_f64(_: i64) -> float64_t;
110    pub fn i64_to_extF80(_: i64) -> extFloat80_t;
111    pub fn i64_to_f128(_: i64) -> float128_t;
112
113    pub fn i64_to_extF80M(_: i64, _: *mut extFloat80_t);
114    pub fn i64_to_f128M(_: i64, _: *mut float128_t);
115
116    pub fn f16_to_ui32(_: float16_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
117    pub fn f16_to_ui64(_: float16_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
118    pub fn f16_to_i32(_: float16_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
119    pub fn f16_to_i64(_: float16_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
120    pub fn f16_to_ui32_r_minMag(_: float16_t, _: bool) -> uint_fast32_t;
121    pub fn f16_to_ui64_r_minMag(_: float16_t, _: bool) -> uint_fast64_t;
122    pub fn f16_to_i32_r_minMag(_: float16_t, _: bool) -> int_fast32_t;
123    pub fn f16_to_i64_r_minMag(_: float16_t, _: bool) -> int_fast64_t;
124    pub fn f16_to_f32(_: float16_t) -> float32_t;
125    pub fn f16_to_f64(_: float16_t) -> float64_t;
126    pub fn f16_to_extF80(_: float16_t) -> extFloat80_t;
127    pub fn f16_to_f128(_: float16_t) -> float128_t;
128
129    pub fn f16_to_extF80M(_: float16_t, _: *mut extFloat80_t);
130    pub fn f16_to_f128M(_: float16_t, _: *mut float128_t);
131    pub fn f16_roundToInt(_: float16_t, _: uint_fast8_t, _: bool) -> float16_t;
132    pub fn f16_add(_: float16_t, _: float16_t) -> float16_t;
133    pub fn f16_sub(_: float16_t, _: float16_t) -> float16_t;
134    pub fn f16_mul(_: float16_t, _: float16_t) -> float16_t;
135    pub fn f16_mulAdd(_: float16_t, _: float16_t, _: float16_t) -> float16_t;
136    pub fn f16_div(_: float16_t, _: float16_t) -> float16_t;
137    pub fn f16_rem(_: float16_t, _: float16_t) -> float16_t;
138    pub fn f16_sqrt(_: float16_t) -> float16_t;
139    pub fn f16_eq(_: float16_t, _: float16_t) -> bool;
140    pub fn f16_le(_: float16_t, _: float16_t) -> bool;
141    pub fn f16_lt(_: float16_t, _: float16_t) -> bool;
142    pub fn f16_eq_signaling(_: float16_t, _: float16_t) -> bool;
143    pub fn f16_le_quiet(_: float16_t, _: float16_t) -> bool;
144    pub fn f16_lt_quiet(_: float16_t, _: float16_t) -> bool;
145    pub fn f16_isSignalingNaN(_: float16_t) -> bool;
146
147    pub fn f32_to_ui32(_: float32_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
148    pub fn f32_to_ui64(_: float32_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
149    pub fn f32_to_i32(_: float32_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
150    pub fn f32_to_i64(_: float32_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
151    pub fn f32_to_ui32_r_minMag(_: float32_t, _: bool) -> uint_fast32_t;
152    pub fn f32_to_ui64_r_minMag(_: float32_t, _: bool) -> uint_fast64_t;
153    pub fn f32_to_i32_r_minMag(_: float32_t, _: bool) -> int_fast32_t;
154    pub fn f32_to_i64_r_minMag(_: float32_t, _: bool) -> int_fast64_t;
155    pub fn f32_to_f16(_: float32_t) -> float16_t;
156    pub fn f32_to_f64(_: float32_t) -> float64_t;
157    pub fn f32_to_extF80(_: float32_t) -> extFloat80_t;
158    pub fn f32_to_f128(_: float32_t) -> float128_t;
159
160    pub fn f32_to_extF80M(_: float32_t, _: *mut extFloat80_t);
161    pub fn f32_to_f128M(_: float32_t, _: *mut float128_t);
162    pub fn f32_roundToInt(_: float32_t, _: uint_fast8_t, _: bool) -> float32_t;
163    pub fn f32_add(_: float32_t, _: float32_t) -> float32_t;
164    pub fn f32_sub(_: float32_t, _: float32_t) -> float32_t;
165    pub fn f32_mul(_: float32_t, _: float32_t) -> float32_t;
166    pub fn f32_mulAdd(_: float32_t, _: float32_t, _: float32_t) -> float32_t;
167    pub fn f32_div(_: float32_t, _: float32_t) -> float32_t;
168    pub fn f32_rem(_: float32_t, _: float32_t) -> float32_t;
169    pub fn f32_sqrt(_: float32_t) -> float32_t;
170    pub fn f32_eq(_: float32_t, _: float32_t) -> bool;
171    pub fn f32_le(_: float32_t, _: float32_t) -> bool;
172    pub fn f32_lt(_: float32_t, _: float32_t) -> bool;
173    pub fn f32_eq_signaling(_: float32_t, _: float32_t) -> bool;
174    pub fn f32_le_quiet(_: float32_t, _: float32_t) -> bool;
175    pub fn f32_lt_quiet(_: float32_t, _: float32_t) -> bool;
176    pub fn f32_isSignalingNaN(_: float32_t) -> bool;
177
178    pub fn f64_to_ui32(_: float64_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
179    pub fn f64_to_ui64(_: float64_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
180    pub fn f64_to_i32(_: float64_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
181    pub fn f64_to_i64(_: float64_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
182    pub fn f64_to_ui32_r_minMag(_: float64_t, _: bool) -> uint_fast32_t;
183    pub fn f64_to_ui64_r_minMag(_: float64_t, _: bool) -> uint_fast64_t;
184    pub fn f64_to_i32_r_minMag(_: float64_t, _: bool) -> int_fast32_t;
185    pub fn f64_to_i64_r_minMag(_: float64_t, _: bool) -> int_fast64_t;
186    pub fn f64_to_f16(_: float64_t) -> float16_t;
187    pub fn f64_to_f32(_: float64_t) -> float32_t;
188    pub fn f64_to_extF80(_: float64_t) -> extFloat80_t;
189    pub fn f64_to_f128(_: float64_t) -> float128_t;
190
191    pub fn f64_to_extF80M(_: float64_t, _: *mut extFloat80_t);
192    pub fn f64_to_f128M(_: float64_t, _: *mut float128_t);
193    pub fn f64_roundToInt(_: float64_t, _: uint_fast8_t, _: bool) -> float64_t;
194    pub fn f64_add(_: float64_t, _: float64_t) -> float64_t;
195    pub fn f64_sub(_: float64_t, _: float64_t) -> float64_t;
196    pub fn f64_mul(_: float64_t, _: float64_t) -> float64_t;
197    pub fn f64_mulAdd(_: float64_t, _: float64_t, _: float64_t) -> float64_t;
198    pub fn f64_div(_: float64_t, _: float64_t) -> float64_t;
199    pub fn f64_rem(_: float64_t, _: float64_t) -> float64_t;
200    pub fn f64_sqrt(_: float64_t) -> float64_t;
201    pub fn f64_eq(_: float64_t, _: float64_t) -> bool;
202    pub fn f64_le(_: float64_t, _: float64_t) -> bool;
203    pub fn f64_lt(_: float64_t, _: float64_t) -> bool;
204    pub fn f64_eq_signaling(_: float64_t, _: float64_t) -> bool;
205    pub fn f64_le_quiet(_: float64_t, _: float64_t) -> bool;
206    pub fn f64_lt_quiet(_: float64_t, _: float64_t) -> bool;
207    pub fn f64_isSignalingNaN(_: float64_t) -> bool;
208
209    pub fn extF80_to_ui32(_: extFloat80_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
210    pub fn extF80_to_ui64(_: extFloat80_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
211    pub fn extF80_to_i32(_: extFloat80_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
212    pub fn extF80_to_i64(_: extFloat80_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
213    pub fn extF80_to_ui32_r_minMag(_: extFloat80_t, _: bool) -> uint_fast32_t;
214    pub fn extF80_to_ui64_r_minMag(_: extFloat80_t, _: bool) -> uint_fast64_t;
215    pub fn extF80_to_i32_r_minMag(_: extFloat80_t, _: bool) -> int_fast32_t;
216    pub fn extF80_to_i64_r_minMag(_: extFloat80_t, _: bool) -> int_fast64_t;
217    pub fn extF80_to_f16(_: extFloat80_t) -> float16_t;
218    pub fn extF80_to_f32(_: extFloat80_t) -> float32_t;
219    pub fn extF80_to_f64(_: extFloat80_t) -> float64_t;
220    pub fn extF80_to_f128(_: extFloat80_t) -> float128_t;
221    pub fn extF80_roundToInt(_: extFloat80_t, _: uint_fast8_t, _: bool) -> extFloat80_t;
222    pub fn extF80_add(_: extFloat80_t, _: extFloat80_t) -> extFloat80_t;
223    pub fn extF80_sub(_: extFloat80_t, _: extFloat80_t) -> extFloat80_t;
224    pub fn extF80_mul(_: extFloat80_t, _: extFloat80_t) -> extFloat80_t;
225    pub fn extF80_div(_: extFloat80_t, _: extFloat80_t) -> extFloat80_t;
226    pub fn extF80_rem(_: extFloat80_t, _: extFloat80_t) -> extFloat80_t;
227    pub fn extF80_sqrt(_: extFloat80_t) -> extFloat80_t;
228    pub fn extF80_eq(_: extFloat80_t, _: extFloat80_t) -> bool;
229    pub fn extF80_le(_: extFloat80_t, _: extFloat80_t) -> bool;
230    pub fn extF80_lt(_: extFloat80_t, _: extFloat80_t) -> bool;
231    pub fn extF80_eq_signaling(_: extFloat80_t, _: extFloat80_t) -> bool;
232    pub fn extF80_le_quiet(_: extFloat80_t, _: extFloat80_t) -> bool;
233    pub fn extF80_lt_quiet(_: extFloat80_t, _: extFloat80_t) -> bool;
234    pub fn extF80_isSignalingNaN(_: extFloat80_t) -> bool;
235
236    pub fn extF80M_to_ui32(_: *const extFloat80_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
237    pub fn extF80M_to_ui64(_: *const extFloat80_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
238    pub fn extF80M_to_i32(_: *const extFloat80_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
239    pub fn extF80M_to_i64(_: *const extFloat80_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
240    pub fn extF80M_to_ui32_r_minMag(_: *const extFloat80_t, _: bool) -> uint_fast32_t;
241    pub fn extF80M_to_ui64_r_minMag(_: *const extFloat80_t, _: bool) -> uint_fast64_t;
242    pub fn extF80M_to_i32_r_minMag(_: *const extFloat80_t, _: bool) -> int_fast32_t;
243    pub fn extF80M_to_i64_r_minMag(_: *const extFloat80_t, _: bool) -> int_fast64_t;
244    pub fn extF80M_to_f16(_: *const extFloat80_t) -> float16_t;
245    pub fn extF80M_to_f32(_: *const extFloat80_t) -> float32_t;
246    pub fn extF80M_to_f64(_: *const extFloat80_t) -> float64_t;
247    pub fn extF80M_to_f128M(_: *const extFloat80_t, _: *mut float128_t);
248    pub fn extF80M_roundToInt(
249        _: *const extFloat80_t,
250        _: uint_fast8_t,
251        _: bool,
252        _: *mut extFloat80_t,
253    );
254    pub fn extF80M_add(_: *const extFloat80_t, _: *const extFloat80_t, _: *mut extFloat80_t);
255    pub fn extF80M_sub(_: *const extFloat80_t, _: *const extFloat80_t, _: *mut extFloat80_t);
256    pub fn extF80M_mul(_: *const extFloat80_t, _: *const extFloat80_t, _: *mut extFloat80_t);
257    pub fn extF80M_div(_: *const extFloat80_t, _: *const extFloat80_t, _: *mut extFloat80_t);
258    pub fn extF80M_rem(_: *const extFloat80_t, _: *const extFloat80_t, _: *mut extFloat80_t);
259    pub fn extF80M_sqrt(_: *const extFloat80_t, _: *mut extFloat80_t);
260    pub fn extF80M_eq(_: *const extFloat80_t, _: *const extFloat80_t) -> bool;
261    pub fn extF80M_le(_: *const extFloat80_t, _: *const extFloat80_t) -> bool;
262    pub fn extF80M_lt(_: *const extFloat80_t, _: *const extFloat80_t) -> bool;
263    pub fn extF80M_eq_signaling(_: *const extFloat80_t, _: *const extFloat80_t) -> bool;
264    pub fn extF80M_le_quiet(_: *const extFloat80_t, _: *const extFloat80_t) -> bool;
265    pub fn extF80M_lt_quiet(_: *const extFloat80_t, _: *const extFloat80_t) -> bool;
266    pub fn extF80M_isSignalingNaN(_: *const extFloat80_t) -> bool;
267
268    pub fn f128_to_ui32(_: float128_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
269    pub fn f128_to_ui64(_: float128_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
270    pub fn f128_to_i32(_: float128_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
271    pub fn f128_to_i64(_: float128_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
272    pub fn f128_to_ui32_r_minMag(_: float128_t, _: bool) -> uint_fast32_t;
273    pub fn f128_to_ui64_r_minMag(_: float128_t, _: bool) -> uint_fast64_t;
274    pub fn f128_to_i32_r_minMag(_: float128_t, _: bool) -> int_fast32_t;
275    pub fn f128_to_i64_r_minMag(_: float128_t, _: bool) -> int_fast64_t;
276    pub fn f128_to_f16(_: float128_t) -> float16_t;
277    pub fn f128_to_f32(_: float128_t) -> float32_t;
278    pub fn f128_to_f64(_: float128_t) -> float64_t;
279    pub fn f128_to_extF80(_: float128_t) -> extFloat80_t;
280    pub fn f128_roundToInt(_: float128_t, _: uint_fast8_t, _: bool) -> float128_t;
281    pub fn f128_add(_: float128_t, _: float128_t) -> float128_t;
282    pub fn f128_sub(_: float128_t, _: float128_t) -> float128_t;
283    pub fn f128_mul(_: float128_t, _: float128_t) -> float128_t;
284    pub fn f128_mulAdd(_: float128_t, _: float128_t, _: float128_t) -> float128_t;
285    pub fn f128_div(_: float128_t, _: float128_t) -> float128_t;
286    pub fn f128_rem(_: float128_t, _: float128_t) -> float128_t;
287    pub fn f128_sqrt(_: float128_t) -> float128_t;
288    pub fn f128_eq(_: float128_t, _: float128_t) -> bool;
289    pub fn f128_le(_: float128_t, _: float128_t) -> bool;
290    pub fn f128_lt(_: float128_t, _: float128_t) -> bool;
291    pub fn f128_eq_signaling(_: float128_t, _: float128_t) -> bool;
292    pub fn f128_le_quiet(_: float128_t, _: float128_t) -> bool;
293    pub fn f128_lt_quiet(_: float128_t, _: float128_t) -> bool;
294    pub fn f128_isSignalingNaN(_: float128_t) -> bool;
295
296    pub fn f128M_to_ui32(_: *const float128_t, _: uint_fast8_t, _: bool) -> uint_fast32_t;
297    pub fn f128M_to_ui64(_: *const float128_t, _: uint_fast8_t, _: bool) -> uint_fast64_t;
298    pub fn f128M_to_i32(_: *const float128_t, _: uint_fast8_t, _: bool) -> int_fast32_t;
299    pub fn f128M_to_i64(_: *const float128_t, _: uint_fast8_t, _: bool) -> int_fast64_t;
300    pub fn f128M_to_ui32_r_minMag(_: *const float128_t, _: bool) -> uint_fast32_t;
301    pub fn f128M_to_ui64_r_minMag(_: *const float128_t, _: bool) -> uint_fast64_t;
302    pub fn f128M_to_i32_r_minMag(_: *const float128_t, _: bool) -> int_fast32_t;
303    pub fn f128M_to_i64_r_minMag(_: *const float128_t, _: bool) -> int_fast64_t;
304    pub fn f128M_to_f16(_: *const float128_t) -> float16_t;
305    pub fn f128M_to_f32(_: *const float128_t) -> float32_t;
306    pub fn f128M_to_f64(_: *const float128_t) -> float64_t;
307    pub fn f128M_to_extF80M(_: *const float128_t, _: *mut extFloat80_t);
308    pub fn f128M_roundToInt(_: *const float128_t, _: uint_fast8_t, _: bool, _: *mut float128_t);
309    pub fn f128M_add(_: *const float128_t, _: *const float128_t, _: *mut float128_t);
310    pub fn f128M_sub(_: *const float128_t, _: *const float128_t, _: *mut float128_t);
311    pub fn f128M_mul(_: *const float128_t, _: *const float128_t, _: *mut float128_t);
312    pub fn f128M_mulAdd(
313        _: *const float128_t,
314        _: *const float128_t,
315        _: *const float128_t,
316        _: *mut float128_t,
317    );
318    pub fn f128M_div(_: *const float128_t, _: *const float128_t, _: *mut float128_t);
319    pub fn f128M_rem(_: *const float128_t, _: *const float128_t, _: *mut float128_t);
320    pub fn f128M_sqrt(_: *const float128_t, _: *mut float128_t);
321    pub fn f128M_eq(_: *const float128_t, _: *const float128_t) -> bool;
322    pub fn f128M_le(_: *const float128_t, _: *const float128_t) -> bool;
323    pub fn f128M_lt(_: *const float128_t, _: *const float128_t) -> bool;
324    pub fn f128M_eq_signaling(_: *const float128_t, _: *const float128_t) -> bool;
325    pub fn f128M_le_quiet(_: *const float128_t, _: *const float128_t) -> bool;
326    pub fn f128M_lt_quiet(_: *const float128_t, _: *const float128_t) -> bool;
327    pub fn f128M_isSignalingNaN(_: *const float128_t) -> bool;
328}
329
330#[cfg(test)]
331mod tests {
332    use super::*;
333
334    #[test]
335    fn test_linking() {
336        macro_rules! link_functions {
337            ($($name:ident,)*) => {
338                $(println!(concat!(stringify!($name), ": {:#X}"), $name as usize);)*
339            };
340        }
341        link_functions!(
342            softfloat_detectTininess_read_helper,
343            softfloat_detectTininess_write_helper,
344            softfloat_roundingMode_read_helper,
345            softfloat_roundingMode_write_helper,
346            softfloat_exceptionFlags_read_helper,
347            softfloat_exceptionFlags_write_helper,
348            extF80_roundingPrecision_read_helper,
349            extF80_roundingPrecision_write_helper,
350            softfloat_raiseFlags,
351            ui32_to_f16,
352            ui32_to_f32,
353            ui32_to_f64,
354            ui32_to_extF80,
355            ui32_to_f128,
356            ui32_to_extF80M,
357            ui32_to_f128M,
358            ui64_to_f16,
359            ui64_to_f32,
360            ui64_to_f64,
361            ui64_to_extF80,
362            ui64_to_f128,
363            ui64_to_extF80M,
364            ui64_to_f128M,
365            i32_to_f16,
366            i32_to_f32,
367            i32_to_f64,
368            i32_to_extF80,
369            i32_to_f128,
370            i32_to_extF80M,
371            i32_to_f128M,
372            i64_to_f16,
373            i64_to_f32,
374            i64_to_f64,
375            i64_to_extF80,
376            i64_to_f128,
377            i64_to_extF80M,
378            i64_to_f128M,
379            f16_to_ui32,
380            f16_to_ui64,
381            f16_to_i32,
382            f16_to_i64,
383            f16_to_ui32_r_minMag,
384            f16_to_ui64_r_minMag,
385            f16_to_i32_r_minMag,
386            f16_to_i64_r_minMag,
387            f16_to_f32,
388            f16_to_f64,
389            f16_to_extF80,
390            f16_to_f128,
391            f16_to_extF80M,
392            f16_to_f128M,
393            f16_roundToInt,
394            f16_add,
395            f16_sub,
396            f16_mul,
397            f16_mulAdd,
398            f16_div,
399            f16_rem,
400            f16_sqrt,
401            f16_eq,
402            f16_le,
403            f16_lt,
404            f16_eq_signaling,
405            f16_le_quiet,
406            f16_lt_quiet,
407            f16_isSignalingNaN,
408            f32_to_ui32,
409            f32_to_ui64,
410            f32_to_i32,
411            f32_to_i64,
412            f32_to_ui32_r_minMag,
413            f32_to_ui64_r_minMag,
414            f32_to_i32_r_minMag,
415            f32_to_i64_r_minMag,
416            f32_to_f16,
417            f32_to_f64,
418            f32_to_extF80,
419            f32_to_f128,
420            f32_to_extF80M,
421            f32_to_f128M,
422            f32_roundToInt,
423            f32_add,
424            f32_sub,
425            f32_mul,
426            f32_mulAdd,
427            f32_div,
428            f32_rem,
429            f32_sqrt,
430            f32_eq,
431            f32_le,
432            f32_lt,
433            f32_eq_signaling,
434            f32_le_quiet,
435            f32_lt_quiet,
436            f32_isSignalingNaN,
437            f64_to_ui32,
438            f64_to_ui64,
439            f64_to_i32,
440            f64_to_i64,
441            f64_to_ui32_r_minMag,
442            f64_to_ui64_r_minMag,
443            f64_to_i32_r_minMag,
444            f64_to_i64_r_minMag,
445            f64_to_f16,
446            f64_to_f32,
447            f64_to_extF80,
448            f64_to_f128,
449            f64_to_extF80M,
450            f64_to_f128M,
451            f64_roundToInt,
452            f64_add,
453            f64_sub,
454            f64_mul,
455            f64_mulAdd,
456            f64_div,
457            f64_rem,
458            f64_sqrt,
459            f64_eq,
460            f64_le,
461            f64_lt,
462            f64_eq_signaling,
463            f64_le_quiet,
464            f64_lt_quiet,
465            f64_isSignalingNaN,
466            extF80_to_ui32,
467            extF80_to_ui64,
468            extF80_to_i32,
469            extF80_to_i64,
470            extF80_to_ui32_r_minMag,
471            extF80_to_ui64_r_minMag,
472            extF80_to_i32_r_minMag,
473            extF80_to_i64_r_minMag,
474            extF80_to_f16,
475            extF80_to_f32,
476            extF80_to_f64,
477            extF80_to_f128,
478            extF80_roundToInt,
479            extF80_add,
480            extF80_sub,
481            extF80_mul,
482            extF80_div,
483            extF80_rem,
484            extF80_sqrt,
485            extF80_eq,
486            extF80_le,
487            extF80_lt,
488            extF80_eq_signaling,
489            extF80_le_quiet,
490            extF80_lt_quiet,
491            extF80_isSignalingNaN,
492            extF80M_to_ui32,
493            extF80M_to_ui64,
494            extF80M_to_i32,
495            extF80M_to_i64,
496            extF80M_to_ui32_r_minMag,
497            extF80M_to_ui64_r_minMag,
498            extF80M_to_i32_r_minMag,
499            extF80M_to_i64_r_minMag,
500            extF80M_to_f16,
501            extF80M_to_f32,
502            extF80M_to_f64,
503            extF80M_to_f128M,
504            extF80M_roundToInt,
505            extF80M_add,
506            extF80M_sub,
507            extF80M_mul,
508            extF80M_div,
509            extF80M_rem,
510            extF80M_sqrt,
511            extF80M_eq,
512            extF80M_le,
513            extF80M_lt,
514            extF80M_eq_signaling,
515            extF80M_le_quiet,
516            extF80M_lt_quiet,
517            extF80M_isSignalingNaN,
518            f128_to_ui32,
519            f128_to_ui64,
520            f128_to_i32,
521            f128_to_i64,
522            f128_to_ui32_r_minMag,
523            f128_to_ui64_r_minMag,
524            f128_to_i32_r_minMag,
525            f128_to_i64_r_minMag,
526            f128_to_f16,
527            f128_to_f32,
528            f128_to_f64,
529            f128_to_extF80,
530            f128_roundToInt,
531            f128_add,
532            f128_sub,
533            f128_mul,
534            f128_mulAdd,
535            f128_div,
536            f128_rem,
537            f128_sqrt,
538            f128_eq,
539            f128_le,
540            f128_lt,
541            f128_eq_signaling,
542            f128_le_quiet,
543            f128_lt_quiet,
544            f128_isSignalingNaN,
545            f128M_to_ui32,
546            f128M_to_ui64,
547            f128M_to_i32,
548            f128M_to_i64,
549            f128M_to_ui32_r_minMag,
550            f128M_to_ui64_r_minMag,
551            f128M_to_i32_r_minMag,
552            f128M_to_i64_r_minMag,
553            f128M_to_f16,
554            f128M_to_f32,
555            f128M_to_f64,
556            f128M_to_extF80M,
557            f128M_roundToInt,
558            f128M_add,
559            f128M_sub,
560            f128M_mul,
561            f128M_mulAdd,
562            f128M_div,
563            f128M_rem,
564            f128M_sqrt,
565            f128M_eq,
566            f128M_le,
567            f128M_lt,
568            f128M_eq_signaling,
569            f128M_le_quiet,
570            f128M_lt_quiet,
571            f128M_isSignalingNaN,
572        );
573    }
574}