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